diff --git a/Android.mk b/Android.mk index 15afe90f2364126d1aa8b075e49ea2a65e9bd0ce..2a94f3a5ae320c94cde89c978ccea0cc5a60ed39 100644 --- a/Android.mk +++ b/Android.mk @@ -69,6 +69,7 @@ LOCAL_SRC_FILES += \ core/java/android/app/IActivityPendingResult.aidl \ core/java/android/app/IAlarmManager.aidl \ core/java/android/app/IAppTask.aidl \ + core/java/android/app/ITaskStackListener.aidl \ core/java/android/app/IBackupAgent.aidl \ core/java/android/app/IInstrumentationWatcher.aidl \ core/java/android/app/INotificationManager.aidl \ @@ -99,6 +100,7 @@ LOCAL_SRC_FILES += \ core/java/android/bluetooth/IBluetoothA2dpSink.aidl \ core/java/android/bluetooth/IBluetoothAvrcpController.aidl \ core/java/android/bluetooth/IBluetoothCallback.aidl \ + core/java/android/bluetooth/IBluetoothProfileServiceConnection.aidl \ core/java/android/bluetooth/IBluetoothHeadset.aidl \ core/java/android/bluetooth/IBluetoothHeadsetPhone.aidl \ core/java/android/bluetooth/IBluetoothHealth.aidl \ @@ -174,6 +176,7 @@ LOCAL_SRC_FILES += \ core/java/android/hardware/usb/IUsbManager.aidl \ core/java/android/net/IConnectivityManager.aidl \ core/java/android/net/IEthernetManager.aidl \ + core/java/android/net/IEthernetServiceListener.aidl \ core/java/android/net/INetworkManagementEventObserver.aidl \ core/java/android/net/INetworkPolicyListener.aidl \ core/java/android/net/INetworkPolicyManager.aidl \ @@ -203,6 +206,8 @@ LOCAL_SRC_FILES += \ core/java/android/os/IUserManager.aidl \ core/java/android/os/IVibratorService.aidl \ core/java/android/security/IKeystoreService.aidl \ + core/java/android/service/carrier/ICarrierMessagingCallback.aidl \ + core/java/android/service/carrier/ICarrierMessagingService.aidl \ core/java/android/service/notification/INotificationListener.aidl \ core/java/android/service/notification/IStatusBarNotificationHolder.aidl \ core/java/android/service/notification/IConditionListener.aidl \ @@ -271,6 +276,7 @@ LOCAL_SRC_FILES += \ core/java/com/android/internal/policy/IKeyguardShowCallback.aidl \ core/java/com/android/internal/policy/IKeyguardExitCallback.aidl \ core/java/com/android/internal/policy/IKeyguardService.aidl \ + core/java/com/android/internal/policy/IKeyguardStateCallback.aidl \ core/java/com/android/internal/os/IDropBoxManagerService.aidl \ core/java/com/android/internal/os/IParcelFileDescriptorFactory.aidl \ core/java/com/android/internal/os/IResultReceiver.aidl \ @@ -289,7 +295,6 @@ LOCAL_SRC_FILES += \ core/java/com/android/internal/view/IInputMethodSession.aidl \ core/java/com/android/internal/view/IInputSessionCallback.aidl \ core/java/com/android/internal/widget/ILockSettings.aidl \ - core/java/com/android/internal/widget/ILockSettingsObserver.aidl \ core/java/com/android/internal/widget/IRemoteViewsFactory.aidl \ core/java/com/android/internal/widget/IRemoteViewsAdapterConnection.aidl \ keystore/java/android/security/IKeyChainAliasCallback.aidl \ @@ -326,6 +331,7 @@ LOCAL_SRC_FILES += \ media/java/android/media/IRemoteVolumeObserver.aidl \ media/java/android/media/IRingtonePlayer.aidl \ media/java/android/media/IVolumeController.aidl \ + media/java/android/media/audiopolicy/IAudioPolicyCallback.aidl \ media/java/android/media/projection/IMediaProjection.aidl \ media/java/android/media/projection/IMediaProjectionCallback.aidl \ media/java/android/media/projection/IMediaProjectionManager.aidl \ @@ -372,6 +378,7 @@ LOCAL_SRC_FILES += \ telephony/java/com/android/internal/telephony/IPhoneSubInfo.aidl \ telephony/java/com/android/internal/telephony/ITelephony.aidl \ telephony/java/com/android/internal/telephony/ITelephonyRegistry.aidl \ + telephony/java/com/android/internal/telephony/IOnSubscriptionsChangedListener.aidl \ telephony/java/com/android/internal/telephony/ISms.aidl \ telephony/java/com/android/internal/telephony/IWapPushManager.aidl \ telephony/java/com/android/internal/telephony/ISub.aidl \ @@ -432,6 +439,7 @@ aidl_files := \ frameworks/base/media/java/android/media/MediaDescription.aidl \ frameworks/base/media/java/android/media/Rating.aidl \ frameworks/base/media/java/android/media/AudioAttributes.aidl \ + frameworks/base/media/java/android/media/AudioFocusInfo.aidl \ frameworks/base/media/java/android/media/session/PlaybackState.aidl \ frameworks/base/media/java/android/media/session/MediaSession.aidl \ frameworks/base/media/java/android/media/tv/TvInputInfo.aidl \ @@ -520,6 +528,7 @@ aidl_files := \ frameworks/base/core/java/android/view/textservice/SpellCheckerInfo.aidl \ frameworks/base/core/java/android/view/textservice/SentenceSuggestionsInfo.aidl \ frameworks/base/core/java/android/view/textservice/SuggestionsInfo.aidl \ + frameworks/base/core/java/android/service/carrier/MessagePdu.aidl \ frameworks/base/core/java/android/service/notification/StatusBarNotification.aidl \ frameworks/base/core/java/android/speech/tts/Voice.aidl \ frameworks/base/core/java/android/app/usage/UsageEvents.aidl \ @@ -557,6 +566,7 @@ aidl_files := \ frameworks/base/core/java/android/content/pm/ProviderInfo.aidl \ frameworks/base/core/java/android/content/pm/PackageStats.aidl \ frameworks/base/core/java/android/content/pm/PermissionGroupInfo.aidl \ + frameworks/base/core/java/android/content/pm/LabeledIntent.aidl \ frameworks/base/core/java/android/content/ComponentName.aidl \ frameworks/base/core/java/android/content/SyncStats.aidl \ frameworks/base/core/java/android/content/ContentValues.aidl \ @@ -725,17 +735,20 @@ samples_dir := development/samples/browseable # Whitelist of valid groups, used for default TOC grouping. Each sample must # belong to one (and only one) group. Assign samples to groups by setting # a sample.group var to one of these groups in the sample's _index.jd. -sample_groups := -samplegroup Background \ +sample_groups := -samplegroup Admin \ + -samplegroup Background \ -samplegroup Connectivity \ -samplegroup Content \ -samplegroup Input \ -samplegroup Media \ + -samplegroup Notification \ -samplegroup RenderScript \ -samplegroup Security \ -samplegroup Sensors \ -samplegroup Testing \ -samplegroup UI \ - -samplegroup Views + -samplegroup Views \ + -samplegroup Wearable ## SDK version identifiers used in the published docs # major[.minor] version for current SDK. (full releases only) @@ -808,6 +821,11 @@ LOCAL_UNINSTALLABLE_MODULE := true include $(BUILD_DROIDDOC) +# $(gen), i.e. framework.aidl, is also needed while building against the current stub. +$(full_target): $(framework_built) $(gen) +$(INTERNAL_PLATFORM_SYSTEM_API_FILE): $(full_target) +$(call dist-for-goals,sdk,$(INTERNAL_PLATFORM_SYSTEM_API_FILE)) + # ==== check javadoc comments but don't generate docs ======== include $(CLEAR_VARS) diff --git a/CleanSpec.mk b/CleanSpec.mk index 28c2172294bad575e217f9794cdda26e40de43a1..d66022428a85738a081b1d5264a86e33421b4054 100644 --- a/CleanSpec.mk +++ b/CleanSpec.mk @@ -224,6 +224,7 @@ $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/servic $(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/bin/inputflinger $(PRODUCT_OUT)/symbols/system/bin/inputflinger) $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/RsFountainFbo_intermediates) $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework-base_intermediates/src/telecomm/java/com/android/internal/telecomm) +$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/core/java/com/android/internal/widget/ILockSettingsObserver.java) # ****************************************************************** # NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST ABOVE THIS BANNER diff --git a/api/current.txt b/api/current.txt index a6a9e278d1a676e919a4f844f93a38969ce8247f..144f2923b757ef4c6fcf629e6c79a49a7b8e5810 100644 --- a/api/current.txt +++ b/api/current.txt @@ -20,6 +20,7 @@ package android { field public static final java.lang.String BATTERY_STATS = "android.permission.BATTERY_STATS"; field public static final java.lang.String BIND_ACCESSIBILITY_SERVICE = "android.permission.BIND_ACCESSIBILITY_SERVICE"; field public static final java.lang.String BIND_APPWIDGET = "android.permission.BIND_APPWIDGET"; + field public static final java.lang.String BIND_CARRIER_MESSAGING_SERVICE = "android.permission.BIND_CARRIER_MESSAGING_SERVICE"; field public static final java.lang.String BIND_DEVICE_ADMIN = "android.permission.BIND_DEVICE_ADMIN"; field public static final java.lang.String BIND_DREAM_SERVICE = "android.permission.BIND_DREAM_SERVICE"; field public static final java.lang.String BIND_INPUT_METHOD = "android.permission.BIND_INPUT_METHOD"; @@ -237,6 +238,8 @@ package android { field public static final int accessibilityFeedbackType = 16843650; // 0x1010382 field public static final int accessibilityFlags = 16843652; // 0x1010384 field public static final int accessibilityLiveRegion = 16843758; // 0x10103ee + field public static final int accessibilityTraversalAfter = 16843986; // 0x10104d2 + field public static final int accessibilityTraversalBefore = 16843985; // 0x10104d1 field public static final int accountPreferences = 16843423; // 0x101029f field public static final int accountType = 16843407; // 0x101028f field public static final int action = 16842797; // 0x101002d @@ -400,6 +403,7 @@ package android { field public static final int closeIcon = 16843905; // 0x1010481 field public static final int codes = 16843330; // 0x1010242 field public static final int collapseColumns = 16843083; // 0x101014b + field public static final int collapseContentDescription = 16843984; // 0x10104d0 field public static final int color = 16843173; // 0x10101a5 field public static final int colorAccent = 16843829; // 0x1010435 field public static final int colorActivatedHighlight = 16843664; // 0x1010390 @@ -472,6 +476,7 @@ package android { field public static final int dialogLayout = 16843255; // 0x10101f7 field public static final int dialogMessage = 16843251; // 0x10101f3 field public static final int dialogPreferenceStyle = 16842897; // 0x1010091 + field public static final int dialogPreferredPadding = 16843987; // 0x10104d3 field public static final int dialogTheme = 16843528; // 0x1010308 field public static final int dialogTitle = 16843250; // 0x10101f2 field public static final int digits = 16843110; // 0x1010166 @@ -1002,6 +1007,7 @@ package android { field public static final int requiredForAllUsers = 16843728; // 0x10103d0 field public static final int requiresFadingEdge = 16843685; // 0x10103a5 field public static final int requiresSmallestWidthDp = 16843620; // 0x1010364 + field public static final int resizeClip = 16843983; // 0x10104cf field public static final int resizeMode = 16843619; // 0x1010363 field public static final int resizeable = 16843405; // 0x101028d field public static final int resource = 16842789; // 0x1010025 @@ -1011,6 +1017,7 @@ package android { field public static final int restrictionType = 16843923; // 0x1010493 field public static final int resumeWhilePausing = 16843954; // 0x10104b2 field public static final int reversible = 16843851; // 0x101044b + field public static final int revisionCode = 16843989; // 0x10104d5 field public static final int right = 16843183; // 0x10101af field public static final int ringtonePreferenceStyle = 16842899; // 0x1010093 field public static final int ringtoneType = 16843257; // 0x10101f9 @@ -1050,6 +1057,7 @@ package android { field public static final int scrollbars = 16842974; // 0x10100de field public static final int scrollingCache = 16843006; // 0x10100fe field public static final deprecated int searchButtonText = 16843269; // 0x1010205 + field public static final int searchHintIcon = 16843988; // 0x10104d4 field public static final int searchIcon = 16843907; // 0x1010483 field public static final int searchMode = 16843221; // 0x10101d5 field public static final int searchSettingsDescription = 16843402; // 0x101028a @@ -2005,6 +2013,7 @@ package android { field public static final int Theme_DeviceDefault_Dialog = 16974126; // 0x103012e field public static final int Theme_DeviceDefault_DialogWhenLarge = 16974134; // 0x1030136 field public static final int Theme_DeviceDefault_DialogWhenLarge_NoActionBar = 16974135; // 0x1030137 + field public static final int Theme_DeviceDefault_Dialog_Alert = 16974545; // 0x10302d1 field public static final int Theme_DeviceDefault_Dialog_MinWidth = 16974127; // 0x103012f field public static final int Theme_DeviceDefault_Dialog_NoActionBar = 16974128; // 0x1030130 field public static final int Theme_DeviceDefault_Dialog_NoActionBar_MinWidth = 16974129; // 0x1030131 @@ -2014,6 +2023,7 @@ package android { field public static final int Theme_DeviceDefault_Light_Dialog = 16974130; // 0x1030132 field public static final int Theme_DeviceDefault_Light_DialogWhenLarge = 16974136; // 0x1030138 field public static final int Theme_DeviceDefault_Light_DialogWhenLarge_NoActionBar = 16974137; // 0x1030139 + field public static final int Theme_DeviceDefault_Light_Dialog_Alert = 16974546; // 0x10302d2 field public static final int Theme_DeviceDefault_Light_Dialog_MinWidth = 16974131; // 0x1030133 field public static final int Theme_DeviceDefault_Light_Dialog_NoActionBar = 16974132; // 0x1030134 field public static final int Theme_DeviceDefault_Light_Dialog_NoActionBar_MinWidth = 16974133; // 0x1030135 @@ -2612,7 +2622,7 @@ package android.accessibilityservice { field public static final int CAPABILITY_CAN_REQUEST_FILTER_KEY_EVENTS = 8; // 0x8 field public static final int CAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION = 2; // 0x2 field public static final int CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT = 1; // 0x1 - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int DEFAULT = 1; // 0x1 field public static final int FEEDBACK_ALL_MASK = -1; // 0xffffffff field public static final int FEEDBACK_AUDIBLE = 4; // 0x4 @@ -2658,7 +2668,7 @@ package android.accounts { ctor public Account(android.os.Parcel); method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public final java.lang.String name; field public final java.lang.String type; } @@ -2675,7 +2685,7 @@ package android.accounts { method public void onRequestContinued(); method public void onResult(android.os.Bundle); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public class AccountManager { @@ -2703,7 +2713,9 @@ package android.accounts { method public void invalidateAuthToken(java.lang.String, java.lang.String); method public static android.content.Intent newChooseAccountIntent(android.accounts.Account, java.util.ArrayList, java.lang.String[], boolean, java.lang.String, java.lang.String, java.lang.String[], android.os.Bundle); method public java.lang.String peekAuthToken(android.accounts.Account, java.lang.String); - method public android.accounts.AccountManagerFuture removeAccount(android.accounts.Account, android.accounts.AccountManagerCallback, android.os.Handler); + method public deprecated android.accounts.AccountManagerFuture removeAccount(android.accounts.Account, android.accounts.AccountManagerCallback, android.os.Handler); + method public android.accounts.AccountManagerFuture removeAccount(android.accounts.Account, android.app.Activity, android.accounts.AccountManagerCallback, android.os.Handler); + method public boolean removeAccountExplicitly(android.accounts.Account); method public void removeOnAccountsUpdatedListener(android.accounts.OnAccountsUpdateListener); method public android.accounts.AccountManagerFuture renameAccount(android.accounts.Account, java.lang.String, android.accounts.AccountManagerCallback, android.os.Handler); method public void setAuthToken(android.accounts.Account, java.lang.String, java.lang.String); @@ -2767,7 +2779,7 @@ package android.accounts { method public int describeContents(); method public static android.accounts.AuthenticatorDescription newKey(java.lang.String); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public final int accountPreferencesId; field public final boolean customTokens; field public final int iconId; @@ -3052,9 +3064,10 @@ package android.animation { method public android.graphics.Rect evaluate(float, android.graphics.Rect, android.graphics.Rect); } - public class StateListAnimator { + public class StateListAnimator implements java.lang.Cloneable { ctor public StateListAnimator(); method public void addState(int[], android.animation.Animator); + method public android.animation.StateListAnimator clone(); method public void jumpToCurrentState(); } @@ -3102,6 +3115,7 @@ package android.animation { method public void removeAllUpdateListeners(); method public void removeUpdateListener(android.animation.ValueAnimator.AnimatorUpdateListener); method public void reverse(); + method public void setCurrentFraction(float); method public void setCurrentPlayTime(long); method public android.animation.ValueAnimator setDuration(long); method public void setEvaluator(android.animation.TypeEvaluator); @@ -3298,6 +3312,7 @@ package android.app { method public final android.app.Activity getParent(); method public android.content.Intent getParentActivityIntent(); method public android.content.SharedPreferences getPreferences(int); + method public android.net.Uri getReferrer(); method public int getRequestedOrientation(); method public int getTaskId(); method public final java.lang.CharSequence getTitle(); @@ -3525,7 +3540,7 @@ package android.app { method public int describeContents(); method public void readFromParcel(android.os.Parcel); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public long availMem; field public boolean lowMemory; field public long threshold; @@ -3538,7 +3553,7 @@ package android.app { method public void readFromParcel(android.os.Parcel); method public void writeToParcel(android.os.Parcel, int); field public static final int CRASHED = 1; // 0x1 - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int NOT_RESPONDING = 2; // 0x2 field public static final int NO_ERROR = 0; // 0x0 field public int condition; @@ -3557,7 +3572,7 @@ package android.app { method public int describeContents(); method public void readFromParcel(android.os.Parcel); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public int affiliatedTaskId; field public android.content.Intent baseIntent; field public java.lang.CharSequence description; @@ -3573,7 +3588,7 @@ package android.app { method public int describeContents(); method public void readFromParcel(android.os.Parcel); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int IMPORTANCE_BACKGROUND = 400; // 0x190 field public static final int IMPORTANCE_EMPTY = 500; // 0x1f4 field public static final int IMPORTANCE_FOREGROUND = 100; // 0x64 @@ -3601,7 +3616,7 @@ package android.app { method public int describeContents(); method public void readFromParcel(android.os.Parcel); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int FLAG_FOREGROUND = 2; // 0x2 field public static final int FLAG_PERSISTENT_PROCESS = 8; // 0x8 field public static final int FLAG_STARTED = 1; // 0x1 @@ -3627,7 +3642,7 @@ package android.app { method public int describeContents(); method public void readFromParcel(android.os.Parcel); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public android.content.ComponentName baseActivity; field public java.lang.CharSequence description; field public int id; @@ -3649,7 +3664,7 @@ package android.app { method public int getPrimaryColor(); method public void readFromParcel(android.os.Parcel); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public class ActivityOptions { @@ -3692,7 +3707,7 @@ package android.app { method public android.app.PendingIntent getShowIntent(); method public long getTriggerTime(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public class AlertDialog extends android.app.Dialog implements android.content.DialogInterface { @@ -3829,7 +3844,7 @@ package android.app { method public static android.content.ComponentName getErrorReportReceiver(android.content.Context, java.lang.String, int); method public void readFromParcel(android.os.Parcel); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int TYPE_ANR = 2; // 0x2 field public static final int TYPE_BATTERY = 3; // 0x3 field public static final int TYPE_CRASH = 1; // 0x1 @@ -4210,7 +4225,7 @@ package android.app { public static class Fragment.SavedState implements android.os.Parcelable { method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.ClassLoaderCreator CREATOR; + field public static final android.os.Parcelable.ClassLoaderCreator CREATOR; } public deprecated class FragmentBreadCrumbs extends android.view.ViewGroup implements android.app.FragmentManager.OnBackStackChangedListener { @@ -4402,6 +4417,7 @@ package android.app { method public android.content.Intent createConfirmDeviceCredentialIntent(java.lang.CharSequence, java.lang.CharSequence); method public deprecated void exitKeyguardSecurely(android.app.KeyguardManager.OnKeyguardExitResult); method public boolean inKeyguardRestrictedInputMode(); + method public boolean isDeviceLocked(); method public boolean isKeyguardLocked(); method public boolean isKeyguardSecure(); method public deprecated android.app.KeyguardManager.KeyguardLock newKeyguardLock(java.lang.String); @@ -4557,7 +4573,7 @@ package android.app { field public static final java.lang.String CATEGORY_SYSTEM = "sys"; field public static final java.lang.String CATEGORY_TRANSPORT = "transport"; field public static final int COLOR_DEFAULT = 0; // 0x0 - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int DEFAULT_ALL = -1; // 0xffffffff field public static final int DEFAULT_LIGHTS = 4; // 0x4 field public static final int DEFAULT_SOUND = 1; // 0x1 @@ -4642,7 +4658,7 @@ package android.app { method public android.os.Bundle getExtras(); method public android.app.RemoteInput[] getRemoteInputs(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public android.app.PendingIntent actionIntent; field public int icon; field public java.lang.CharSequence title; @@ -4667,8 +4683,14 @@ package android.app { ctor public Notification.Action.WearableExtender(android.app.Notification.Action); method public android.app.Notification.Action.WearableExtender clone(); method public android.app.Notification.Action.Builder extend(android.app.Notification.Action.Builder); + method public java.lang.CharSequence getCancelLabel(); + method public java.lang.CharSequence getConfirmLabel(); + method public java.lang.CharSequence getInProgressLabel(); method public boolean isAvailableOffline(); method public android.app.Notification.Action.WearableExtender setAvailableOffline(boolean); + method public android.app.Notification.Action.WearableExtender setCancelLabel(java.lang.CharSequence); + method public android.app.Notification.Action.WearableExtender setConfirmLabel(java.lang.CharSequence); + method public android.app.Notification.Action.WearableExtender setInProgressLabel(java.lang.CharSequence); } public static class Notification.BigPictureStyle extends android.app.Notification.Style { @@ -4789,7 +4811,9 @@ package android.app { method public int getCustomSizePreset(); method public android.app.PendingIntent getDisplayIntent(); method public int getGravity(); + method public boolean getHintAvoidBackgroundClipping(); method public boolean getHintHideIcon(); + method public int getHintScreenTimeout(); method public boolean getHintShowBackgroundOnly(); method public java.util.List getPages(); method public boolean getStartScrollBottom(); @@ -4802,9 +4826,13 @@ package android.app { method public android.app.Notification.WearableExtender setCustomSizePreset(int); method public android.app.Notification.WearableExtender setDisplayIntent(android.app.PendingIntent); method public android.app.Notification.WearableExtender setGravity(int); + method public android.app.Notification.WearableExtender setHintAvoidBackgroundClipping(boolean); method public android.app.Notification.WearableExtender setHintHideIcon(boolean); + method public android.app.Notification.WearableExtender setHintScreenTimeout(int); method public android.app.Notification.WearableExtender setHintShowBackgroundOnly(boolean); method public android.app.Notification.WearableExtender setStartScrollBottom(boolean); + field public static final int SCREEN_TIMEOUT_LONG = -1; // 0xffffffff + field public static final int SCREEN_TIMEOUT_SHORT = 0; // 0x0 field public static final int SIZE_DEFAULT = 0; // 0x0 field public static final int SIZE_FULL_SCREEN = 5; // 0x5 field public static final int SIZE_LARGE = 4; // 0x4 @@ -4845,7 +4873,7 @@ package android.app { method public void send(android.content.Context, int, android.content.Intent, android.app.PendingIntent.OnFinished, android.os.Handler, java.lang.String) throws android.app.PendingIntent.CanceledException; method public static void writePendingIntentOrNullToParcel(android.app.PendingIntent, android.os.Parcel); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int FLAG_CANCEL_CURRENT = 268435456; // 0x10000000 field public static final int FLAG_NO_CREATE = 536870912; // 0x20000000 field public static final int FLAG_ONE_SHOT = 1073741824; // 0x40000000 @@ -4908,7 +4936,7 @@ package android.app { method public java.lang.String getResultKey(); method public static android.os.Bundle getResultsFromIntent(android.content.Intent); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final java.lang.String EXTRA_RESULTS_DATA = "android.remoteinput.resultsData"; field public static final java.lang.String RESULTS_CLIP_LABEL = "android.remoteinput.results"; } @@ -5023,7 +5051,7 @@ package android.app { method public boolean shouldRewriteQueryFromData(); method public boolean shouldRewriteQueryFromText(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public abstract class Service extends android.content.ContextWrapper implements android.content.ComponentCallbacks2 { @@ -5169,7 +5197,7 @@ package android.app { method public java.lang.CharSequence loadLabel(android.content.pm.PackageManager); method public android.graphics.drawable.Drawable loadThumbnail(android.content.pm.PackageManager); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public class WallpaperManager { @@ -5224,7 +5252,7 @@ package android.app.admin { method public java.lang.CharSequence loadLabel(android.content.pm.PackageManager); method public boolean usesPolicy(int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int USES_ENCRYPTED_STORAGE = 7; // 0x7 field public static final int USES_POLICY_DISABLE_CAMERA = 8; // 0x8 field public static final int USES_POLICY_DISABLE_KEYGUARD_FEATURES = 9; // 0x9 @@ -5308,6 +5336,7 @@ package android.app.admin { method public boolean getScreenCaptureDisabled(android.content.ComponentName); method public boolean getStorageEncryption(android.content.ComponentName); method public int getStorageEncryptionStatus(); + method public java.util.List getTrustAgentConfiguration(android.content.ComponentName, android.content.ComponentName); method public boolean hasCaCertInstalled(android.content.ComponentName, byte[]); method public boolean hasGrantedPolicy(android.content.ComponentName, int); method public boolean installCaCert(android.content.ComponentName, byte[]); @@ -5356,6 +5385,7 @@ package android.app.admin { method public void setScreenCaptureDisabled(android.content.ComponentName, boolean); method public void setSecureSetting(android.content.ComponentName, java.lang.String, java.lang.String); method public int setStorageEncryption(android.content.ComponentName, boolean); + method public void setTrustAgentConfiguration(android.content.ComponentName, android.content.ComponentName, android.os.PersistableBundle); method public void setUninstallBlocked(android.content.ComponentName, java.lang.String, boolean); method public boolean switchUser(android.content.ComponentName, android.os.UserHandle); method public void uninstallAllUserCaCerts(android.content.ComponentName); @@ -5371,12 +5401,14 @@ package android.app.admin { field public static final int ENCRYPTION_STATUS_UNSUPPORTED = 0; // 0x0 field public static final java.lang.String EXTRA_ADD_EXPLANATION = "android.app.extra.ADD_EXPLANATION"; field public static final java.lang.String EXTRA_DEVICE_ADMIN = "android.app.extra.DEVICE_ADMIN"; + field public static final java.lang.String EXTRA_PROVISIONING_ACCOUNT_TO_MIGRATE = "android.app.extra.PROVISIONING_ACCOUNT_TO_MIGRATE"; field public static final java.lang.String EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE = "android.app.extra.PROVISIONING_ADMIN_EXTRAS_BUNDLE"; field public static final java.lang.String EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM = "android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM"; field public static final java.lang.String EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_COOKIE_HEADER = "android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_COOKIE_HEADER"; field public static final java.lang.String EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION = "android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION"; field public static final java.lang.String EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME = "android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME"; field public static final java.lang.String EXTRA_PROVISIONING_EMAIL_ADDRESS = "android.app.extra.PROVISIONING_EMAIL_ADDRESS"; + field public static final java.lang.String EXTRA_PROVISIONING_LEAVE_ALL_SYSTEM_APPS_ENABLED = "android.app.extra.PROVISIONING_LEAVE_ALL_SYSTEM_APPS_ENABLED"; field public static final java.lang.String EXTRA_PROVISIONING_LOCALE = "android.app.extra.PROVISIONING_LOCALE"; field public static final java.lang.String EXTRA_PROVISIONING_LOCAL_TIME = "android.app.extra.PROVISIONING_LOCAL_TIME"; field public static final java.lang.String EXTRA_PROVISIONING_TIME_ZONE = "android.app.extra.PROVISIONING_TIME_ZONE"; @@ -5409,6 +5441,7 @@ package android.app.admin { field public static final int PASSWORD_QUALITY_UNSPECIFIED = 0; // 0x0 field public static final int RESET_PASSWORD_REQUIRE_ENTRY = 1; // 0x1 field public static final int WIPE_EXTERNAL_STORAGE = 1; // 0x1 + field public static final int WIPE_RESET_PROTECTION_DATA = 2; // 0x2 } } @@ -5516,7 +5549,7 @@ package android.app.job { method public void writeToParcel(android.os.Parcel, int); field public static final int BACKOFF_POLICY_EXPONENTIAL = 1; // 0x1 field public static final int BACKOFF_POLICY_LINEAR = 0; // 0x0 - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final long DEFAULT_INITIAL_BACKOFF_MILLIS = 30000L; // 0x7530L field public static final long MAX_BACKOFF_DELAY_MILLIS = 18000000L; // 0x112a880L field public static final int NETWORK_TYPE_ANY = 1; // 0x1 @@ -5544,7 +5577,7 @@ package android.app.job { method public int getJobId(); method public boolean isOverrideDeadlineExpired(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public abstract class JobScheduler { @@ -5580,7 +5613,7 @@ package android.app.usage { method public long getLastTimeStamp(); method public long getTotalTimeActive(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public final class UsageEvents implements android.os.Parcelable { @@ -5588,7 +5621,7 @@ package android.app.usage { method public boolean getNextEvent(android.app.usage.UsageEvents.Event); method public boolean hasNextEvent(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public static final class UsageEvents.Event { @@ -5614,7 +5647,7 @@ package android.app.usage { method public java.lang.String getPackageName(); method public long getTotalTimeInForeground(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public final class UsageStatsManager { @@ -5731,7 +5764,7 @@ package android.appwidget { method public final java.lang.String loadLabel(android.content.pm.PackageManager); method public final android.graphics.drawable.Drawable loadPreviewImage(android.content.Context, int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int RESIZE_BOTH = 3; // 0x3 field public static final int RESIZE_HORIZONTAL = 1; // 0x1 field public static final int RESIZE_NONE = 0; // 0x0 @@ -6072,7 +6105,7 @@ package android.bluetooth { method public int getMajorDeviceClass(); method public boolean hasService(int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public static class BluetoothClass.Device { @@ -6185,7 +6218,7 @@ package android.bluetooth { field public static final int BOND_BONDED = 12; // 0xc field public static final int BOND_BONDING = 11; // 0xb field public static final int BOND_NONE = 10; // 0xa - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int DEVICE_TYPE_CLASSIC = 1; // 0x1 field public static final int DEVICE_TYPE_DUAL = 3; // 0x3 field public static final int DEVICE_TYPE_LE = 2; // 0x2 @@ -6303,7 +6336,7 @@ package android.bluetooth { field public static final int WRITE_TYPE_DEFAULT = 2; // 0x2 field public static final int WRITE_TYPE_NO_RESPONSE = 1; // 0x1 field public static final int WRITE_TYPE_SIGNED = 4; // 0x4 - field protected java.util.List mDescriptors; + field protected java.util.List mDescriptors; } public class BluetoothGattDescriptor { @@ -6350,6 +6383,7 @@ package android.bluetooth { method public void onDescriptorReadRequest(android.bluetooth.BluetoothDevice, int, int, android.bluetooth.BluetoothGattDescriptor); method public void onDescriptorWriteRequest(android.bluetooth.BluetoothDevice, int, android.bluetooth.BluetoothGattDescriptor, boolean, boolean, int, byte[]); method public void onExecuteWrite(android.bluetooth.BluetoothDevice, int, boolean); + method public void onMtuChanged(android.bluetooth.BluetoothDevice, int); method public void onNotificationSent(android.bluetooth.BluetoothDevice, int); method public void onServiceAdded(int, android.bluetooth.BluetoothGattService); } @@ -6366,8 +6400,8 @@ package android.bluetooth { method public java.util.UUID getUuid(); field public static final int SERVICE_TYPE_PRIMARY = 0; // 0x0 field public static final int SERVICE_TYPE_SECONDARY = 1; // 0x1 - field protected java.util.List mCharacteristics; - field protected java.util.List mIncludedServices; + field protected java.util.List mCharacteristics; + field protected java.util.List mIncludedServices; } public final class BluetoothHeadset implements android.bluetooth.BluetoothProfile { @@ -6425,7 +6459,7 @@ package android.bluetooth { method public java.lang.String getName(); method public int getRole(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public abstract class BluetoothHealthCallback { @@ -6502,7 +6536,7 @@ package android.bluetooth.le { method public java.util.Map getServiceData(); method public java.util.List getServiceUuids(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public static final class AdvertiseData.Builder { @@ -6529,7 +6563,7 @@ package android.bluetooth.le { field public static final int ADVERTISE_TX_POWER_LOW = 1; // 0x1 field public static final int ADVERTISE_TX_POWER_MEDIUM = 2; // 0x2 field public static final int ADVERTISE_TX_POWER_ULTRA_LOW = 0; // 0x0 - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public static final class AdvertiseSettings.Builder { @@ -6579,7 +6613,7 @@ package android.bluetooth.le { method public android.os.ParcelUuid getServiceUuidMask(); method public boolean matches(android.bluetooth.le.ScanResult); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public static final class ScanFilter.Builder { @@ -6615,7 +6649,7 @@ package android.bluetooth.le { method public android.bluetooth.le.ScanRecord getScanRecord(); method public long getTimestampNanos(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public final class ScanSettings implements android.os.Parcelable { @@ -6626,7 +6660,7 @@ package android.bluetooth.le { method public int getScanResultType(); method public void writeToParcel(android.os.Parcel, int); field public static final int CALLBACK_TYPE_ALL_MATCHES = 1; // 0x1 - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int SCAN_MODE_BALANCED = 1; // 0x1 field public static final int SCAN_MODE_LOW_LATENCY = 2; // 0x2 field public static final int SCAN_MODE_LOW_POWER = 0; // 0x0 @@ -6751,7 +6785,7 @@ package android.content { method public static android.content.ClipData newRawUri(java.lang.CharSequence, android.net.Uri); method public static android.content.ClipData newUri(android.content.ContentResolver, java.lang.CharSequence, android.net.Uri); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public static class ClipData.Item { @@ -6781,7 +6815,7 @@ package android.content { method public int getMimeTypeCount(); method public boolean hasMimeType(java.lang.String); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final java.lang.String MIMETYPE_TEXT_HTML = "text/html"; field public static final java.lang.String MIMETYPE_TEXT_INTENT = "text/vnd.android.intent"; field public static final java.lang.String MIMETYPE_TEXT_PLAIN = "text/plain"; @@ -6838,7 +6872,7 @@ package android.content { method public static android.content.ComponentName unflattenFromString(java.lang.String); method public void writeToParcel(android.os.Parcel, int); method public static void writeToParcel(android.content.ComponentName, android.os.Parcel); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public abstract class ContentProvider implements android.content.ComponentCallbacks2 { @@ -6922,7 +6956,7 @@ package android.content { method public java.lang.String[] resolveSelectionArgsBackReferences(android.content.ContentProviderResult[], int); method public android.content.ContentValues resolveValueBackReferences(android.content.ContentProviderResult[], int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public static class ContentProviderOperation.Builder { @@ -6943,7 +6977,7 @@ package android.content { ctor public ContentProviderResult(android.os.Parcel); method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public final java.lang.Integer count; field public final android.net.Uri uri; } @@ -7078,7 +7112,7 @@ package android.content { method public int size(); method public java.util.Set> valueSet(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final java.lang.String TAG = "ContentValues"; } @@ -7241,9 +7275,11 @@ package android.content { field public static final java.lang.String STORAGE_SERVICE = "storage"; field public static final java.lang.String TELECOM_SERVICE = "telecom"; field public static final java.lang.String TELEPHONY_SERVICE = "phone"; + field public static final java.lang.String TELEPHONY_SUBSCRIPTION_SERVICE = "telephony_subscription_service"; field public static final java.lang.String TEXT_SERVICES_MANAGER_SERVICE = "textservices"; field public static final java.lang.String TV_INPUT_SERVICE = "tv_input"; field public static final java.lang.String UI_MODE_SERVICE = "uimode"; + field public static final java.lang.String USAGE_STATS_SERVICE = "usagestats"; field public static final java.lang.String USB_SERVICE = "usb"; field public static final java.lang.String USER_SERVICE = "user"; field public static final java.lang.String VIBRATOR_SERVICE = "vibrator"; @@ -7432,6 +7468,7 @@ package android.content { method public java.lang.Object clone(); method public android.content.Intent cloneFilter(); method public static android.content.Intent createChooser(android.content.Intent, java.lang.CharSequence); + method public static android.content.Intent createChooser(android.content.Intent, java.lang.CharSequence, android.content.IntentSender); method public int describeContents(); method public int fillIn(android.content.Intent, int); method public boolean filterEquals(android.content.Intent); @@ -7693,7 +7730,7 @@ package android.content { field public static final java.lang.String CATEGORY_TAB = "android.intent.category.TAB"; field public static final java.lang.String CATEGORY_TEST = "android.intent.category.TEST"; field public static final java.lang.String CATEGORY_UNIT_TEST = "android.intent.category.UNIT_TEST"; - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final java.lang.String EXTRA_ALARM_COUNT = "android.intent.extra.ALARM_COUNT"; field public static final java.lang.String EXTRA_ALLOW_MULTIPLE = "android.intent.extra.ALLOW_MULTIPLE"; field public static final deprecated java.lang.String EXTRA_ALLOW_REPLACE = "android.intent.extra.ALLOW_REPLACE"; @@ -7707,6 +7744,8 @@ package android.content { field public static final java.lang.String EXTRA_CHANGED_COMPONENT_NAME_LIST = "android.intent.extra.changed_component_name_list"; field public static final java.lang.String EXTRA_CHANGED_PACKAGE_LIST = "android.intent.extra.changed_package_list"; field public static final java.lang.String EXTRA_CHANGED_UID_LIST = "android.intent.extra.changed_uid_list"; + field public static final java.lang.String EXTRA_CHOSEN_COMPONENT = "android.intent.extra.CHOSEN_COMPONENT"; + field public static final java.lang.String EXTRA_CHOSEN_COMPONENT_INTENT_SENDER = "android.intent.extra.CHOSEN_COMPONENT_INTENT_SENDER"; field public static final java.lang.String EXTRA_DATA_REMOVED = "android.intent.extra.DATA_REMOVED"; field public static final java.lang.String EXTRA_DOCK_STATE = "android.intent.extra.DOCK_STATE"; field public static final int EXTRA_DOCK_STATE_CAR = 2; // 0x2 @@ -7727,6 +7766,7 @@ package android.content { field public static final java.lang.String EXTRA_ORIGINATING_URI = "android.intent.extra.ORIGINATING_URI"; field public static final java.lang.String EXTRA_PHONE_NUMBER = "android.intent.extra.PHONE_NUMBER"; field public static final java.lang.String EXTRA_REFERRER = "android.intent.extra.REFERRER"; + field public static final java.lang.String EXTRA_REFERRER_NAME = "android.intent.extra.REFERRER_NAME"; field public static final java.lang.String EXTRA_REMOTE_INTENT_TOKEN = "android.intent.extra.remote_intent_token"; field public static final java.lang.String EXTRA_REPLACEMENT_EXTRAS = "android.intent.extra.REPLACEMENT_EXTRAS"; field public static final java.lang.String EXTRA_REPLACING = "android.intent.extra.REPLACING"; @@ -7786,6 +7826,8 @@ package android.content { field public static final int FLAG_RECEIVER_REGISTERED_ONLY = 1073741824; // 0x40000000 field public static final int FLAG_RECEIVER_REPLACE_PENDING = 536870912; // 0x20000000 field public static final java.lang.String METADATA_DOCK_HOME = "android.dock_home"; + field public static final int URI_ALLOW_UNSAFE = 4; // 0x4 + field public static final int URI_ANDROID_APP_SCHEME = 2; // 0x2 field public static final int URI_INTENT_SCHEME = 1; // 0x1 } @@ -7799,7 +7841,7 @@ package android.content { method public int describeContents(); method public static android.content.Intent.ShortcutIconResource fromContext(android.content.Context, int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public java.lang.String packageName; field public java.lang.String resourceName; } @@ -7858,7 +7900,7 @@ package android.content { method public final java.util.Iterator typesIterator(); method public final void writeToParcel(android.os.Parcel, int); method public void writeToXml(org.xmlpull.v1.XmlSerializer) throws java.io.IOException; - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int MATCH_ADJUSTMENT_MASK = 65535; // 0xffff field public static final int MATCH_ADJUSTMENT_NORMAL = 32768; // 0x8000 field public static final int MATCH_CATEGORY_EMPTY = 1048576; // 0x100000 @@ -7900,7 +7942,7 @@ package android.content { method public void sendIntent(android.content.Context, int, android.content.Intent, android.content.IntentSender.OnFinished, android.os.Handler, java.lang.String) throws android.content.IntentSender.SendIntentException; method public static void writeIntentSenderOrNullToParcel(android.content.IntentSender, android.os.Parcel); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public static abstract interface IntentSender.OnFinished { @@ -7977,7 +8019,7 @@ package android.content { ctor public PeriodicSync(android.accounts.Account, java.lang.String, android.os.Bundle, long); method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public final android.accounts.Account account; field public final java.lang.String authority; field public final android.os.Bundle extras; @@ -8018,7 +8060,7 @@ package android.content { method public void setTitle(java.lang.String); method public void setType(int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int TYPE_BOOLEAN = 1; // 0x1 field public static final int TYPE_CHOICE = 2; // 0x2 field public static final int TYPE_INTEGER = 5; // 0x5 @@ -8126,7 +8168,7 @@ package android.content { method public static android.content.SyncAdapterType newKey(java.lang.String, java.lang.String); method public boolean supportsUploading(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public final java.lang.String accountType; field public final java.lang.String authority; field public final boolean isKey; @@ -8148,7 +8190,7 @@ package android.content { public class SyncRequest implements android.os.Parcelable { method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public static class SyncRequest.Builder { @@ -8177,7 +8219,7 @@ package android.content { method public java.lang.String toDebugString(); method public void writeToParcel(android.os.Parcel, int); field public static final android.content.SyncResult ALREADY_IN_PROGRESS; - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public boolean databaseError; field public long delayUntil; field public boolean fullSyncRequested; @@ -8195,7 +8237,7 @@ package android.content { method public void clear(); method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public long numAuthExceptions; field public long numConflictDetectedExceptions; field public long numDeletes; @@ -8225,7 +8267,7 @@ package android.content { method public boolean isReadPermission(); method public boolean isWritePermission(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final long INVALID_TIME = -9223372036854775808L; // 0x8000000000000000L } @@ -8254,7 +8296,7 @@ package android.content.pm { field public static final int CONFIG_SMALLEST_SCREEN_SIZE = 2048; // 0x800 field public static final int CONFIG_TOUCHSCREEN = 8; // 0x8 field public static final int CONFIG_UI_MODE = 512; // 0x200 - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int DOCUMENT_LAUNCH_ALWAYS = 2; // 0x2 field public static final int DOCUMENT_LAUNCH_INTO_EXISTING = 1; // 0x1 field public static final int DOCUMENT_LAUNCH_NEVER = 3; // 0x3 @@ -8320,7 +8362,7 @@ package android.content.pm { method public int describeContents(); method public void dump(android.util.Printer, java.lang.String); method public java.lang.CharSequence loadDescription(android.content.pm.PackageManager); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int FLAG_ALLOW_BACKUP = 32768; // 0x8000 field public static final int FLAG_ALLOW_CLEAR_USER_DATA = 64; // 0x40 field public static final int FLAG_ALLOW_TASK_REPARENTING = 32; // 0x20 @@ -8400,7 +8442,7 @@ package android.content.pm { method public int describeContents(); method public java.lang.String getGlEsVersion(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int GL_ES_VERSION_UNDEFINED = 0; // 0x0 field public static final int INPUT_FEATURE_FIVE_WAY_NAV = 2; // 0x2 field public static final int INPUT_FEATURE_HARD_KEYBOARD = 1; // 0x1 @@ -8416,7 +8458,7 @@ package android.content.pm { ctor public FeatureGroupInfo(android.content.pm.FeatureGroupInfo); method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public android.content.pm.FeatureInfo[] features; } @@ -8426,7 +8468,7 @@ package android.content.pm { method public int describeContents(); method public java.lang.String getGlEsVersion(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int FLAG_REQUIRED = 1; // 0x1 field public static final int GL_ES_VERSION_UNDEFINED = 0; // 0x0 field public int flags; @@ -8438,7 +8480,7 @@ package android.content.pm { ctor public InstrumentationInfo(); ctor public InstrumentationInfo(android.content.pm.InstrumentationInfo); method public int describeContents(); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public java.lang.String dataDir; field public boolean functionalTest; field public boolean handleProfiling; @@ -8460,7 +8502,7 @@ package android.content.pm { method public java.lang.String getSourcePackage(); method public android.graphics.drawable.Drawable loadIcon(android.content.pm.PackageManager); method public java.lang.CharSequence loadLabel(android.content.pm.PackageManager); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public class LauncherActivityInfo { @@ -8499,7 +8541,7 @@ package android.content.pm { ctor public PackageInfo(); method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int INSTALL_LOCATION_AUTO = 0; // 0x0 field public static final int INSTALL_LOCATION_INTERNAL_ONLY = 1; // 0x1 field public static final int INSTALL_LOCATION_PREFER_EXTERNAL = 2; // 0x2 @@ -8507,6 +8549,7 @@ package android.content.pm { field public static final int REQUESTED_PERMISSION_REQUIRED = 1; // 0x1 field public android.content.pm.ActivityInfo[] activities; field public android.content.pm.ApplicationInfo applicationInfo; + field public int baseRevisionCode; field public android.content.pm.ConfigurationInfo[] configPreferences; field public android.content.pm.FeatureGroupInfo[] featureGroups; field public long firstInstallTime; @@ -8526,6 +8569,7 @@ package android.content.pm { field public int sharedUserLabel; field public android.content.pm.Signature[] signatures; field public java.lang.String[] splitNames; + field public int[] splitRevisionCodes; field public int versionCode; field public java.lang.String versionName; } @@ -8592,7 +8636,7 @@ package android.content.pm { method public int getSessionId(); method public boolean isActive(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public static class PackageInstaller.SessionParams implements android.os.Parcelable { @@ -8606,7 +8650,7 @@ package android.content.pm { method public void setReferrerUri(android.net.Uri); method public void setSize(long); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int MODE_FULL_INSTALL = 1; // 0x1 field public static final int MODE_INHERIT_EXISTING = 2; // 0x2 } @@ -8621,6 +8665,7 @@ package android.content.pm { method public android.graphics.drawable.Drawable loadIcon(android.content.pm.PackageManager); method public java.lang.CharSequence loadLabel(android.content.pm.PackageManager); method public android.graphics.drawable.Drawable loadLogo(android.content.pm.PackageManager); + method public android.graphics.drawable.Drawable loadUnbadgedIcon(android.content.pm.PackageManager); method public android.content.res.XmlResourceParser loadXmlMetaData(android.content.pm.PackageManager, java.lang.String); method public void writeToParcel(android.os.Parcel, int); field public int banner; @@ -8839,7 +8884,7 @@ package android.content.pm { ctor public PackageStats(android.content.pm.PackageStats); method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public long cacheSize; field public long codeSize; field public long dataSize; @@ -8856,7 +8901,7 @@ package android.content.pm { ctor public PathPermission(android.os.Parcel); method public java.lang.String getReadPermission(); method public java.lang.String getWritePermission(); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public class PermissionGroupInfo extends android.content.pm.PackageItemInfo implements android.os.Parcelable { @@ -8864,7 +8909,7 @@ package android.content.pm { ctor public PermissionGroupInfo(android.content.pm.PermissionGroupInfo); method public int describeContents(); method public java.lang.CharSequence loadDescription(android.content.pm.PackageManager); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int FLAG_PERSONAL_INFO = 1; // 0x1 field public int descriptionRes; field public int flags; @@ -8877,7 +8922,7 @@ package android.content.pm { ctor public PermissionInfo(android.content.pm.PermissionInfo); method public int describeContents(); method public java.lang.CharSequence loadDescription(android.content.pm.PackageManager); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int FLAG_COSTS_MONEY = 1; // 0x1 field public static final int PROTECTION_DANGEROUS = 1; // 0x1 field public static final int PROTECTION_FLAG_APPOP = 64; // 0x40 @@ -8900,7 +8945,7 @@ package android.content.pm { ctor public ProviderInfo(android.content.pm.ProviderInfo); method public int describeContents(); method public void dump(android.util.Printer, java.lang.String); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int FLAG_SINGLE_USER = 1073741824; // 0x40000000 field public java.lang.String authority; field public int flags; @@ -8923,7 +8968,7 @@ package android.content.pm { method public android.graphics.drawable.Drawable loadIcon(android.content.pm.PackageManager); method public java.lang.CharSequence loadLabel(android.content.pm.PackageManager); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public android.content.pm.ActivityInfo activityInfo; field public android.content.IntentFilter filter; field public int icon; @@ -8949,7 +8994,7 @@ package android.content.pm { ctor public ServiceInfo(android.content.pm.ServiceInfo); method public int describeContents(); method public void dump(android.util.Printer, java.lang.String); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int FLAG_ISOLATED_PROCESS = 2; // 0x2 field public static final int FLAG_SINGLE_USER = 1073741824; // 0x40000000 field public static final int FLAG_STOP_WITH_TASK = 1; // 0x1 @@ -8966,7 +9011,7 @@ package android.content.pm { method public char[] toChars(char[], int[]); method public java.lang.String toCharsString(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } } @@ -8987,7 +9032,7 @@ package android.content.res { method public android.os.ParcelFileDescriptor getParcelFileDescriptor(); method public long getStartOffset(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final long UNKNOWN_LENGTH = -1L; // 0xffffffffffffffffL } @@ -9039,7 +9084,7 @@ package android.content.res { method public static android.content.res.ColorStateList valueOf(int); method public android.content.res.ColorStateList withAlpha(int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public final class Configuration implements java.lang.Comparable android.os.Parcelable { @@ -9059,7 +9104,7 @@ package android.content.res { method public void setToDefaults(); method public int updateFrom(android.content.res.Configuration); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int DENSITY_DPI_UNDEFINED = 0; // 0x0 field public static final int HARDKEYBOARDHIDDEN_NO = 1; // 0x1 field public static final int HARDKEYBOARDHIDDEN_UNDEFINED = 0; // 0x0 @@ -9141,7 +9186,7 @@ package android.content.res { public class ObbInfo implements android.os.Parcelable { method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int OBB_OVERLAY = 1; // 0x1 field public java.lang.String filename; field public int flags; @@ -9167,9 +9212,9 @@ package android.content.res { method public int getDimensionPixelOffset(int) throws android.content.res.Resources.NotFoundException; method public int getDimensionPixelSize(int) throws android.content.res.Resources.NotFoundException; method public android.util.DisplayMetrics getDisplayMetrics(); - method public android.graphics.drawable.Drawable getDrawable(int) throws android.content.res.Resources.NotFoundException; + method public deprecated android.graphics.drawable.Drawable getDrawable(int) throws android.content.res.Resources.NotFoundException; method public android.graphics.drawable.Drawable getDrawable(int, android.content.res.Resources.Theme) throws android.content.res.Resources.NotFoundException; - method public android.graphics.drawable.Drawable getDrawableForDensity(int, int) throws android.content.res.Resources.NotFoundException; + method public deprecated android.graphics.drawable.Drawable getDrawableForDensity(int, int) throws android.content.res.Resources.NotFoundException; method public android.graphics.drawable.Drawable getDrawableForDensity(int, int, android.content.res.Resources.Theme); method public float getFraction(int, int, int); method public int getIdentifier(java.lang.String, java.lang.String, java.lang.String); @@ -9250,6 +9295,7 @@ package android.content.res { method public int getType(int); method public boolean getValue(int, android.util.TypedValue); method public boolean hasValue(int); + method public boolean hasValueOrEmpty(int); method public int length(); method public android.util.TypedValue peekValue(int); method public void recycle(); @@ -9317,7 +9363,7 @@ package android.database { field protected deprecated java.lang.Long mCurrentRowID; field protected int mPos; field protected deprecated int mRowIdColumnIndex; - field protected deprecated java.util.HashMap mUpdatedRows; + field protected deprecated java.util.HashMap> mUpdatedRows; } protected static class AbstractCursor.SelfContentObserver extends android.database.ContentObserver { @@ -9481,7 +9527,7 @@ package android.database { method public boolean setNumColumns(int); method public void setStartPosition(int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public class CursorWrapper implements android.database.Cursor { @@ -9670,7 +9716,7 @@ package android.database { method public void registerObserver(T); method public void unregisterAll(); method public void unregisterObserver(T); - field protected final java.util.ArrayList mObservers; + field protected final java.util.ArrayList mObservers; } public class SQLException extends java.lang.RuntimeException { @@ -10199,7 +10245,7 @@ package android.gesture { method public android.graphics.Path toPath(int, int, int, int); method public android.graphics.Path toPath(android.graphics.Path, int, int, int, int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public final class GestureLibraries { @@ -10431,7 +10477,7 @@ package android.graphics { method public final void setPremultiplied(boolean); method public void setWidth(int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int DENSITY_NONE = 0; // 0x0 } @@ -10900,6 +10946,7 @@ package android.graphics { method public boolean canClip(); method public float getAlpha(); method public boolean isEmpty(); + method public void offset(int, int); method public void set(android.graphics.Outline); method public void setAlpha(float); method public void setConvexPath(android.graphics.Path); @@ -11235,7 +11282,7 @@ package android.graphics { method public void readFromParcel(android.os.Parcel); method public void set(int, int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public int x; field public int y; } @@ -11254,7 +11301,7 @@ package android.graphics { method public final void set(float, float); method public final void set(android.graphics.PointF); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public float x; field public float y; } @@ -11338,7 +11385,7 @@ package android.graphics { method public void union(int, int); method public final int width(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public int bottom; field public int left; field public int right; @@ -11380,7 +11427,7 @@ package android.graphics { method public void union(float, float); method public final float width(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public float bottom; field public float left; field public float right; @@ -11420,7 +11467,7 @@ package android.graphics { method public void translate(int, int, android.graphics.Region); method public final boolean union(android.graphics.Rect); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public static final class Region.Op extends java.lang.Enum { @@ -12550,70 +12597,70 @@ package android.hardware.camera2 { method public T get(android.hardware.camera2.CameraCharacteristics.Key); method public java.util.List> getAvailableCaptureRequestKeys(); method public java.util.List> getAvailableCaptureResultKeys(); - field public static final android.hardware.camera2.CameraCharacteristics.Key COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES; - field public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AE_AVAILABLE_ANTIBANDING_MODES; - field public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AE_AVAILABLE_MODES; - field public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES; - field public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AE_COMPENSATION_RANGE; - field public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AE_COMPENSATION_STEP; - field public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AF_AVAILABLE_MODES; - field public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AVAILABLE_EFFECTS; - field public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AVAILABLE_SCENE_MODES; - field public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES; - field public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AWB_AVAILABLE_MODES; - field public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_MAX_REGIONS_AE; - field public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_MAX_REGIONS_AF; - field public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_MAX_REGIONS_AWB; - field public static final android.hardware.camera2.CameraCharacteristics.Key EDGE_AVAILABLE_EDGE_MODES; - field public static final android.hardware.camera2.CameraCharacteristics.Key FLASH_INFO_AVAILABLE; - field public static final android.hardware.camera2.CameraCharacteristics.Key HOT_PIXEL_AVAILABLE_HOT_PIXEL_MODES; - field public static final android.hardware.camera2.CameraCharacteristics.Key INFO_SUPPORTED_HARDWARE_LEVEL; - field public static final android.hardware.camera2.CameraCharacteristics.Key JPEG_AVAILABLE_THUMBNAIL_SIZES; - field public static final android.hardware.camera2.CameraCharacteristics.Key LENS_FACING; - field public static final android.hardware.camera2.CameraCharacteristics.Key LENS_INFO_AVAILABLE_APERTURES; - field public static final android.hardware.camera2.CameraCharacteristics.Key LENS_INFO_AVAILABLE_FILTER_DENSITIES; - field public static final android.hardware.camera2.CameraCharacteristics.Key LENS_INFO_AVAILABLE_FOCAL_LENGTHS; - field public static final android.hardware.camera2.CameraCharacteristics.Key LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION; - field public static final android.hardware.camera2.CameraCharacteristics.Key LENS_INFO_FOCUS_DISTANCE_CALIBRATION; - field public static final android.hardware.camera2.CameraCharacteristics.Key LENS_INFO_HYPERFOCAL_DISTANCE; - field public static final android.hardware.camera2.CameraCharacteristics.Key LENS_INFO_MINIMUM_FOCUS_DISTANCE; - field public static final android.hardware.camera2.CameraCharacteristics.Key NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES; - field public static final android.hardware.camera2.CameraCharacteristics.Key REQUEST_AVAILABLE_CAPABILITIES; - field public static final android.hardware.camera2.CameraCharacteristics.Key REQUEST_MAX_NUM_OUTPUT_PROC; - field public static final android.hardware.camera2.CameraCharacteristics.Key REQUEST_MAX_NUM_OUTPUT_PROC_STALLING; - field public static final android.hardware.camera2.CameraCharacteristics.Key REQUEST_MAX_NUM_OUTPUT_RAW; - field public static final android.hardware.camera2.CameraCharacteristics.Key REQUEST_PARTIAL_RESULT_COUNT; - field public static final android.hardware.camera2.CameraCharacteristics.Key REQUEST_PIPELINE_MAX_DEPTH; - field public static final android.hardware.camera2.CameraCharacteristics.Key SCALER_AVAILABLE_MAX_DIGITAL_ZOOM; - field public static final android.hardware.camera2.CameraCharacteristics.Key SCALER_CROPPING_TYPE; - field public static final android.hardware.camera2.CameraCharacteristics.Key SCALER_STREAM_CONFIGURATION_MAP; - field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_AVAILABLE_TEST_PATTERN_MODES; - field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_BLACK_LEVEL_PATTERN; - field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_CALIBRATION_TRANSFORM1; - field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_CALIBRATION_TRANSFORM2; - field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_COLOR_TRANSFORM1; - field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_COLOR_TRANSFORM2; - field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_FORWARD_MATRIX1; - field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_FORWARD_MATRIX2; - field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_INFO_ACTIVE_ARRAY_SIZE; - field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_INFO_COLOR_FILTER_ARRANGEMENT; - field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_INFO_EXPOSURE_TIME_RANGE; - field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_INFO_MAX_FRAME_DURATION; - field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_INFO_PHYSICAL_SIZE; - field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_INFO_PIXEL_ARRAY_SIZE; - field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_INFO_SENSITIVITY_RANGE; - field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_INFO_TIMESTAMP_SOURCE; - field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_INFO_WHITE_LEVEL; - field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_MAX_ANALOG_SENSITIVITY; - field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_ORIENTATION; - field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_REFERENCE_ILLUMINANT1; - field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_REFERENCE_ILLUMINANT2; - field public static final android.hardware.camera2.CameraCharacteristics.Key STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES; - field public static final android.hardware.camera2.CameraCharacteristics.Key STATISTICS_INFO_AVAILABLE_HOT_PIXEL_MAP_MODES; - field public static final android.hardware.camera2.CameraCharacteristics.Key STATISTICS_INFO_MAX_FACE_COUNT; - field public static final android.hardware.camera2.CameraCharacteristics.Key SYNC_MAX_LATENCY; - field public static final android.hardware.camera2.CameraCharacteristics.Key TONEMAP_AVAILABLE_TONE_MAP_MODES; - field public static final android.hardware.camera2.CameraCharacteristics.Key TONEMAP_MAX_CURVE_POINTS; + field public static final android.hardware.camera2.CameraCharacteristics.Key COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES; + field public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AE_AVAILABLE_ANTIBANDING_MODES; + field public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AE_AVAILABLE_MODES; + field public static final android.hardware.camera2.CameraCharacteristics.Key[]> CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES; + field public static final android.hardware.camera2.CameraCharacteristics.Key> CONTROL_AE_COMPENSATION_RANGE; + field public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AE_COMPENSATION_STEP; + field public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AF_AVAILABLE_MODES; + field public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AVAILABLE_EFFECTS; + field public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AVAILABLE_SCENE_MODES; + field public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES; + field public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AWB_AVAILABLE_MODES; + field public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_MAX_REGIONS_AE; + field public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_MAX_REGIONS_AF; + field public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_MAX_REGIONS_AWB; + field public static final android.hardware.camera2.CameraCharacteristics.Key EDGE_AVAILABLE_EDGE_MODES; + field public static final android.hardware.camera2.CameraCharacteristics.Key FLASH_INFO_AVAILABLE; + field public static final android.hardware.camera2.CameraCharacteristics.Key HOT_PIXEL_AVAILABLE_HOT_PIXEL_MODES; + field public static final android.hardware.camera2.CameraCharacteristics.Key INFO_SUPPORTED_HARDWARE_LEVEL; + field public static final android.hardware.camera2.CameraCharacteristics.Key JPEG_AVAILABLE_THUMBNAIL_SIZES; + field public static final android.hardware.camera2.CameraCharacteristics.Key LENS_FACING; + field public static final android.hardware.camera2.CameraCharacteristics.Key LENS_INFO_AVAILABLE_APERTURES; + field public static final android.hardware.camera2.CameraCharacteristics.Key LENS_INFO_AVAILABLE_FILTER_DENSITIES; + field public static final android.hardware.camera2.CameraCharacteristics.Key LENS_INFO_AVAILABLE_FOCAL_LENGTHS; + field public static final android.hardware.camera2.CameraCharacteristics.Key LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION; + field public static final android.hardware.camera2.CameraCharacteristics.Key LENS_INFO_FOCUS_DISTANCE_CALIBRATION; + field public static final android.hardware.camera2.CameraCharacteristics.Key LENS_INFO_HYPERFOCAL_DISTANCE; + field public static final android.hardware.camera2.CameraCharacteristics.Key LENS_INFO_MINIMUM_FOCUS_DISTANCE; + field public static final android.hardware.camera2.CameraCharacteristics.Key NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES; + field public static final android.hardware.camera2.CameraCharacteristics.Key REQUEST_AVAILABLE_CAPABILITIES; + field public static final android.hardware.camera2.CameraCharacteristics.Key REQUEST_MAX_NUM_OUTPUT_PROC; + field public static final android.hardware.camera2.CameraCharacteristics.Key REQUEST_MAX_NUM_OUTPUT_PROC_STALLING; + field public static final android.hardware.camera2.CameraCharacteristics.Key REQUEST_MAX_NUM_OUTPUT_RAW; + field public static final android.hardware.camera2.CameraCharacteristics.Key REQUEST_PARTIAL_RESULT_COUNT; + field public static final android.hardware.camera2.CameraCharacteristics.Key REQUEST_PIPELINE_MAX_DEPTH; + field public static final android.hardware.camera2.CameraCharacteristics.Key SCALER_AVAILABLE_MAX_DIGITAL_ZOOM; + field public static final android.hardware.camera2.CameraCharacteristics.Key SCALER_CROPPING_TYPE; + field public static final android.hardware.camera2.CameraCharacteristics.Key SCALER_STREAM_CONFIGURATION_MAP; + field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_AVAILABLE_TEST_PATTERN_MODES; + field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_BLACK_LEVEL_PATTERN; + field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_CALIBRATION_TRANSFORM1; + field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_CALIBRATION_TRANSFORM2; + field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_COLOR_TRANSFORM1; + field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_COLOR_TRANSFORM2; + field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_FORWARD_MATRIX1; + field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_FORWARD_MATRIX2; + field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_INFO_ACTIVE_ARRAY_SIZE; + field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_INFO_COLOR_FILTER_ARRANGEMENT; + field public static final android.hardware.camera2.CameraCharacteristics.Key> SENSOR_INFO_EXPOSURE_TIME_RANGE; + field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_INFO_MAX_FRAME_DURATION; + field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_INFO_PHYSICAL_SIZE; + field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_INFO_PIXEL_ARRAY_SIZE; + field public static final android.hardware.camera2.CameraCharacteristics.Key> SENSOR_INFO_SENSITIVITY_RANGE; + field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_INFO_TIMESTAMP_SOURCE; + field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_INFO_WHITE_LEVEL; + field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_MAX_ANALOG_SENSITIVITY; + field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_ORIENTATION; + field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_REFERENCE_ILLUMINANT1; + field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_REFERENCE_ILLUMINANT2; + field public static final android.hardware.camera2.CameraCharacteristics.Key STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES; + field public static final android.hardware.camera2.CameraCharacteristics.Key STATISTICS_INFO_AVAILABLE_HOT_PIXEL_MAP_MODES; + field public static final android.hardware.camera2.CameraCharacteristics.Key STATISTICS_INFO_MAX_FACE_COUNT; + field public static final android.hardware.camera2.CameraCharacteristics.Key SYNC_MAX_LATENCY; + field public static final android.hardware.camera2.CameraCharacteristics.Key TONEMAP_AVAILABLE_TONE_MAP_MODES; + field public static final android.hardware.camera2.CameraCharacteristics.Key TONEMAP_MAX_CURVE_POINTS; } public static final class CameraCharacteristics.Key { @@ -12743,6 +12790,7 @@ package android.hardware.camera2 { field public static final int CONTROL_SCENE_MODE_DISABLED = 0; // 0x0 field public static final int CONTROL_SCENE_MODE_FACE_PRIORITY = 1; // 0x1 field public static final int CONTROL_SCENE_MODE_FIREWORKS = 12; // 0xc + field public static final int CONTROL_SCENE_MODE_HDR = 18; // 0x12 field public static final int CONTROL_SCENE_MODE_HIGH_SPEED_VIDEO = 17; // 0x11 field public static final int CONTROL_SCENE_MODE_LANDSCAPE = 4; // 0x4 field public static final int CONTROL_SCENE_MODE_NIGHT = 5; // 0x5 @@ -12786,9 +12834,11 @@ package android.hardware.camera2 { field public static final int NOISE_REDUCTION_MODE_HIGH_QUALITY = 2; // 0x2 field public static final int NOISE_REDUCTION_MODE_OFF = 0; // 0x0 field public static final int REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE = 0; // 0x0 + field public static final int REQUEST_AVAILABLE_CAPABILITIES_BURST_CAPTURE = 6; // 0x6 field public static final int REQUEST_AVAILABLE_CAPABILITIES_MANUAL_POST_PROCESSING = 2; // 0x2 field public static final int REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR = 1; // 0x1 field public static final int REQUEST_AVAILABLE_CAPABILITIES_RAW = 3; // 0x3 + field public static final int REQUEST_AVAILABLE_CAPABILITIES_READ_SENSOR_SETTINGS = 5; // 0x5 field public static final int SCALER_CROPPING_TYPE_CENTER_ONLY = 0; // 0x0 field public static final int SCALER_CROPPING_TYPE_FREEFORM = 1; // 0x1 field public static final int SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_BGGR = 3; // 0x3 @@ -12856,56 +12906,56 @@ package android.hardware.camera2 { method public T get(android.hardware.camera2.CaptureRequest.Key); method public java.lang.Object getTag(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.hardware.camera2.CaptureRequest.Key BLACK_LEVEL_LOCK; - field public static final android.hardware.camera2.CaptureRequest.Key COLOR_CORRECTION_ABERRATION_MODE; - field public static final android.hardware.camera2.CaptureRequest.Key COLOR_CORRECTION_GAINS; - field public static final android.hardware.camera2.CaptureRequest.Key COLOR_CORRECTION_MODE; - field public static final android.hardware.camera2.CaptureRequest.Key COLOR_CORRECTION_TRANSFORM; - field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AE_ANTIBANDING_MODE; - field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AE_EXPOSURE_COMPENSATION; - field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AE_LOCK; - field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AE_MODE; - field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AE_PRECAPTURE_TRIGGER; - field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AE_REGIONS; - field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AE_TARGET_FPS_RANGE; - field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AF_MODE; - field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AF_REGIONS; - field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AF_TRIGGER; - field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AWB_LOCK; - field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AWB_MODE; - field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AWB_REGIONS; - field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_CAPTURE_INTENT; - field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_EFFECT_MODE; - field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_MODE; - field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_SCENE_MODE; - field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_VIDEO_STABILIZATION_MODE; - field public static final android.os.Parcelable.Creator CREATOR; - field public static final android.hardware.camera2.CaptureRequest.Key EDGE_MODE; - field public static final android.hardware.camera2.CaptureRequest.Key FLASH_MODE; - field public static final android.hardware.camera2.CaptureRequest.Key HOT_PIXEL_MODE; - field public static final android.hardware.camera2.CaptureRequest.Key JPEG_GPS_LOCATION; - field public static final android.hardware.camera2.CaptureRequest.Key JPEG_ORIENTATION; - field public static final android.hardware.camera2.CaptureRequest.Key JPEG_QUALITY; - field public static final android.hardware.camera2.CaptureRequest.Key JPEG_THUMBNAIL_QUALITY; - field public static final android.hardware.camera2.CaptureRequest.Key JPEG_THUMBNAIL_SIZE; - field public static final android.hardware.camera2.CaptureRequest.Key LENS_APERTURE; - field public static final android.hardware.camera2.CaptureRequest.Key LENS_FILTER_DENSITY; - field public static final android.hardware.camera2.CaptureRequest.Key LENS_FOCAL_LENGTH; - field public static final android.hardware.camera2.CaptureRequest.Key LENS_FOCUS_DISTANCE; - field public static final android.hardware.camera2.CaptureRequest.Key LENS_OPTICAL_STABILIZATION_MODE; - field public static final android.hardware.camera2.CaptureRequest.Key NOISE_REDUCTION_MODE; - field public static final android.hardware.camera2.CaptureRequest.Key SCALER_CROP_REGION; - field public static final android.hardware.camera2.CaptureRequest.Key SENSOR_EXPOSURE_TIME; - field public static final android.hardware.camera2.CaptureRequest.Key SENSOR_FRAME_DURATION; - field public static final android.hardware.camera2.CaptureRequest.Key SENSOR_SENSITIVITY; - field public static final android.hardware.camera2.CaptureRequest.Key SENSOR_TEST_PATTERN_DATA; - field public static final android.hardware.camera2.CaptureRequest.Key SENSOR_TEST_PATTERN_MODE; - field public static final android.hardware.camera2.CaptureRequest.Key SHADING_MODE; - field public static final android.hardware.camera2.CaptureRequest.Key STATISTICS_FACE_DETECT_MODE; - field public static final android.hardware.camera2.CaptureRequest.Key STATISTICS_HOT_PIXEL_MAP_MODE; - field public static final android.hardware.camera2.CaptureRequest.Key STATISTICS_LENS_SHADING_MAP_MODE; - field public static final android.hardware.camera2.CaptureRequest.Key TONEMAP_CURVE; - field public static final android.hardware.camera2.CaptureRequest.Key TONEMAP_MODE; + field public static final android.hardware.camera2.CaptureRequest.Key BLACK_LEVEL_LOCK; + field public static final android.hardware.camera2.CaptureRequest.Key COLOR_CORRECTION_ABERRATION_MODE; + field public static final android.hardware.camera2.CaptureRequest.Key COLOR_CORRECTION_GAINS; + field public static final android.hardware.camera2.CaptureRequest.Key COLOR_CORRECTION_MODE; + field public static final android.hardware.camera2.CaptureRequest.Key COLOR_CORRECTION_TRANSFORM; + field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AE_ANTIBANDING_MODE; + field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AE_EXPOSURE_COMPENSATION; + field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AE_LOCK; + field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AE_MODE; + field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AE_PRECAPTURE_TRIGGER; + field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AE_REGIONS; + field public static final android.hardware.camera2.CaptureRequest.Key> CONTROL_AE_TARGET_FPS_RANGE; + field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AF_MODE; + field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AF_REGIONS; + field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AF_TRIGGER; + field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AWB_LOCK; + field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AWB_MODE; + field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AWB_REGIONS; + field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_CAPTURE_INTENT; + field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_EFFECT_MODE; + field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_MODE; + field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_SCENE_MODE; + field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_VIDEO_STABILIZATION_MODE; + field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.hardware.camera2.CaptureRequest.Key EDGE_MODE; + field public static final android.hardware.camera2.CaptureRequest.Key FLASH_MODE; + field public static final android.hardware.camera2.CaptureRequest.Key HOT_PIXEL_MODE; + field public static final android.hardware.camera2.CaptureRequest.Key JPEG_GPS_LOCATION; + field public static final android.hardware.camera2.CaptureRequest.Key JPEG_ORIENTATION; + field public static final android.hardware.camera2.CaptureRequest.Key JPEG_QUALITY; + field public static final android.hardware.camera2.CaptureRequest.Key JPEG_THUMBNAIL_QUALITY; + field public static final android.hardware.camera2.CaptureRequest.Key JPEG_THUMBNAIL_SIZE; + field public static final android.hardware.camera2.CaptureRequest.Key LENS_APERTURE; + field public static final android.hardware.camera2.CaptureRequest.Key LENS_FILTER_DENSITY; + field public static final android.hardware.camera2.CaptureRequest.Key LENS_FOCAL_LENGTH; + field public static final android.hardware.camera2.CaptureRequest.Key LENS_FOCUS_DISTANCE; + field public static final android.hardware.camera2.CaptureRequest.Key LENS_OPTICAL_STABILIZATION_MODE; + field public static final android.hardware.camera2.CaptureRequest.Key NOISE_REDUCTION_MODE; + field public static final android.hardware.camera2.CaptureRequest.Key SCALER_CROP_REGION; + field public static final android.hardware.camera2.CaptureRequest.Key SENSOR_EXPOSURE_TIME; + field public static final android.hardware.camera2.CaptureRequest.Key SENSOR_FRAME_DURATION; + field public static final android.hardware.camera2.CaptureRequest.Key SENSOR_SENSITIVITY; + field public static final android.hardware.camera2.CaptureRequest.Key SENSOR_TEST_PATTERN_DATA; + field public static final android.hardware.camera2.CaptureRequest.Key SENSOR_TEST_PATTERN_MODE; + field public static final android.hardware.camera2.CaptureRequest.Key SHADING_MODE; + field public static final android.hardware.camera2.CaptureRequest.Key STATISTICS_FACE_DETECT_MODE; + field public static final android.hardware.camera2.CaptureRequest.Key STATISTICS_HOT_PIXEL_MAP_MODE; + field public static final android.hardware.camera2.CaptureRequest.Key STATISTICS_LENS_SHADING_MAP_MODE; + field public static final android.hardware.camera2.CaptureRequest.Key TONEMAP_CURVE; + field public static final android.hardware.camera2.CaptureRequest.Key TONEMAP_MODE; } public static final class CaptureRequest.Builder { @@ -12928,71 +12978,71 @@ package android.hardware.camera2 { method public long getFrameNumber(); method public android.hardware.camera2.CaptureRequest getRequest(); method public int getSequenceId(); - field public static final android.hardware.camera2.CaptureResult.Key BLACK_LEVEL_LOCK; - field public static final android.hardware.camera2.CaptureResult.Key COLOR_CORRECTION_ABERRATION_MODE; - field public static final android.hardware.camera2.CaptureResult.Key COLOR_CORRECTION_GAINS; - field public static final android.hardware.camera2.CaptureResult.Key COLOR_CORRECTION_MODE; - field public static final android.hardware.camera2.CaptureResult.Key COLOR_CORRECTION_TRANSFORM; - field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AE_ANTIBANDING_MODE; - field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AE_EXPOSURE_COMPENSATION; - field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AE_LOCK; - field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AE_MODE; - field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AE_PRECAPTURE_TRIGGER; - field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AE_REGIONS; - field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AE_STATE; - field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AE_TARGET_FPS_RANGE; - field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AF_MODE; - field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AF_REGIONS; - field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AF_STATE; - field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AF_TRIGGER; - field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AWB_LOCK; - field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AWB_MODE; - field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AWB_REGIONS; - field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AWB_STATE; - field public static final android.hardware.camera2.CaptureResult.Key CONTROL_CAPTURE_INTENT; - field public static final android.hardware.camera2.CaptureResult.Key CONTROL_EFFECT_MODE; - field public static final android.hardware.camera2.CaptureResult.Key CONTROL_MODE; - field public static final android.hardware.camera2.CaptureResult.Key CONTROL_SCENE_MODE; - field public static final android.hardware.camera2.CaptureResult.Key CONTROL_VIDEO_STABILIZATION_MODE; - field public static final android.hardware.camera2.CaptureResult.Key EDGE_MODE; - field public static final android.hardware.camera2.CaptureResult.Key FLASH_MODE; - field public static final android.hardware.camera2.CaptureResult.Key FLASH_STATE; - field public static final android.hardware.camera2.CaptureResult.Key HOT_PIXEL_MODE; - field public static final android.hardware.camera2.CaptureResult.Key JPEG_GPS_LOCATION; - field public static final android.hardware.camera2.CaptureResult.Key JPEG_ORIENTATION; - field public static final android.hardware.camera2.CaptureResult.Key JPEG_QUALITY; - field public static final android.hardware.camera2.CaptureResult.Key JPEG_THUMBNAIL_QUALITY; - field public static final android.hardware.camera2.CaptureResult.Key JPEG_THUMBNAIL_SIZE; - field public static final android.hardware.camera2.CaptureResult.Key LENS_APERTURE; - field public static final android.hardware.camera2.CaptureResult.Key LENS_FILTER_DENSITY; - field public static final android.hardware.camera2.CaptureResult.Key LENS_FOCAL_LENGTH; - field public static final android.hardware.camera2.CaptureResult.Key LENS_FOCUS_DISTANCE; - field public static final android.hardware.camera2.CaptureResult.Key LENS_FOCUS_RANGE; - field public static final android.hardware.camera2.CaptureResult.Key LENS_OPTICAL_STABILIZATION_MODE; - field public static final android.hardware.camera2.CaptureResult.Key LENS_STATE; - field public static final android.hardware.camera2.CaptureResult.Key NOISE_REDUCTION_MODE; - field public static final android.hardware.camera2.CaptureResult.Key REQUEST_PIPELINE_DEPTH; - field public static final android.hardware.camera2.CaptureResult.Key SCALER_CROP_REGION; - field public static final android.hardware.camera2.CaptureResult.Key SENSOR_EXPOSURE_TIME; - field public static final android.hardware.camera2.CaptureResult.Key SENSOR_FRAME_DURATION; - field public static final android.hardware.camera2.CaptureResult.Key SENSOR_GREEN_SPLIT; - field public static final android.hardware.camera2.CaptureResult.Key SENSOR_NEUTRAL_COLOR_POINT; - field public static final android.hardware.camera2.CaptureResult.Key SENSOR_NOISE_PROFILE; - field public static final android.hardware.camera2.CaptureResult.Key SENSOR_ROLLING_SHUTTER_SKEW; - field public static final android.hardware.camera2.CaptureResult.Key SENSOR_SENSITIVITY; - field public static final android.hardware.camera2.CaptureResult.Key SENSOR_TEST_PATTERN_DATA; - field public static final android.hardware.camera2.CaptureResult.Key SENSOR_TEST_PATTERN_MODE; - field public static final android.hardware.camera2.CaptureResult.Key SENSOR_TIMESTAMP; - field public static final android.hardware.camera2.CaptureResult.Key SHADING_MODE; - field public static final android.hardware.camera2.CaptureResult.Key STATISTICS_FACES; - field public static final android.hardware.camera2.CaptureResult.Key STATISTICS_FACE_DETECT_MODE; - field public static final android.hardware.camera2.CaptureResult.Key STATISTICS_HOT_PIXEL_MAP; - field public static final android.hardware.camera2.CaptureResult.Key STATISTICS_HOT_PIXEL_MAP_MODE; - field public static final android.hardware.camera2.CaptureResult.Key STATISTICS_LENS_SHADING_CORRECTION_MAP; - field public static final android.hardware.camera2.CaptureResult.Key STATISTICS_LENS_SHADING_MAP_MODE; - field public static final android.hardware.camera2.CaptureResult.Key STATISTICS_SCENE_FLICKER; - field public static final android.hardware.camera2.CaptureResult.Key TONEMAP_CURVE; - field public static final android.hardware.camera2.CaptureResult.Key TONEMAP_MODE; + field public static final android.hardware.camera2.CaptureResult.Key BLACK_LEVEL_LOCK; + field public static final android.hardware.camera2.CaptureResult.Key COLOR_CORRECTION_ABERRATION_MODE; + field public static final android.hardware.camera2.CaptureResult.Key COLOR_CORRECTION_GAINS; + field public static final android.hardware.camera2.CaptureResult.Key COLOR_CORRECTION_MODE; + field public static final android.hardware.camera2.CaptureResult.Key COLOR_CORRECTION_TRANSFORM; + field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AE_ANTIBANDING_MODE; + field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AE_EXPOSURE_COMPENSATION; + field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AE_LOCK; + field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AE_MODE; + field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AE_PRECAPTURE_TRIGGER; + field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AE_REGIONS; + field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AE_STATE; + field public static final android.hardware.camera2.CaptureResult.Key> CONTROL_AE_TARGET_FPS_RANGE; + field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AF_MODE; + field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AF_REGIONS; + field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AF_STATE; + field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AF_TRIGGER; + field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AWB_LOCK; + field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AWB_MODE; + field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AWB_REGIONS; + field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AWB_STATE; + field public static final android.hardware.camera2.CaptureResult.Key CONTROL_CAPTURE_INTENT; + field public static final android.hardware.camera2.CaptureResult.Key CONTROL_EFFECT_MODE; + field public static final android.hardware.camera2.CaptureResult.Key CONTROL_MODE; + field public static final android.hardware.camera2.CaptureResult.Key CONTROL_SCENE_MODE; + field public static final android.hardware.camera2.CaptureResult.Key CONTROL_VIDEO_STABILIZATION_MODE; + field public static final android.hardware.camera2.CaptureResult.Key EDGE_MODE; + field public static final android.hardware.camera2.CaptureResult.Key FLASH_MODE; + field public static final android.hardware.camera2.CaptureResult.Key FLASH_STATE; + field public static final android.hardware.camera2.CaptureResult.Key HOT_PIXEL_MODE; + field public static final android.hardware.camera2.CaptureResult.Key JPEG_GPS_LOCATION; + field public static final android.hardware.camera2.CaptureResult.Key JPEG_ORIENTATION; + field public static final android.hardware.camera2.CaptureResult.Key JPEG_QUALITY; + field public static final android.hardware.camera2.CaptureResult.Key JPEG_THUMBNAIL_QUALITY; + field public static final android.hardware.camera2.CaptureResult.Key JPEG_THUMBNAIL_SIZE; + field public static final android.hardware.camera2.CaptureResult.Key LENS_APERTURE; + field public static final android.hardware.camera2.CaptureResult.Key LENS_FILTER_DENSITY; + field public static final android.hardware.camera2.CaptureResult.Key LENS_FOCAL_LENGTH; + field public static final android.hardware.camera2.CaptureResult.Key LENS_FOCUS_DISTANCE; + field public static final android.hardware.camera2.CaptureResult.Key> LENS_FOCUS_RANGE; + field public static final android.hardware.camera2.CaptureResult.Key LENS_OPTICAL_STABILIZATION_MODE; + field public static final android.hardware.camera2.CaptureResult.Key LENS_STATE; + field public static final android.hardware.camera2.CaptureResult.Key NOISE_REDUCTION_MODE; + field public static final android.hardware.camera2.CaptureResult.Key REQUEST_PIPELINE_DEPTH; + field public static final android.hardware.camera2.CaptureResult.Key SCALER_CROP_REGION; + field public static final android.hardware.camera2.CaptureResult.Key SENSOR_EXPOSURE_TIME; + field public static final android.hardware.camera2.CaptureResult.Key SENSOR_FRAME_DURATION; + field public static final android.hardware.camera2.CaptureResult.Key SENSOR_GREEN_SPLIT; + field public static final android.hardware.camera2.CaptureResult.Key SENSOR_NEUTRAL_COLOR_POINT; + field public static final android.hardware.camera2.CaptureResult.Key[]> SENSOR_NOISE_PROFILE; + field public static final android.hardware.camera2.CaptureResult.Key SENSOR_ROLLING_SHUTTER_SKEW; + field public static final android.hardware.camera2.CaptureResult.Key SENSOR_SENSITIVITY; + field public static final android.hardware.camera2.CaptureResult.Key SENSOR_TEST_PATTERN_DATA; + field public static final android.hardware.camera2.CaptureResult.Key SENSOR_TEST_PATTERN_MODE; + field public static final android.hardware.camera2.CaptureResult.Key SENSOR_TIMESTAMP; + field public static final android.hardware.camera2.CaptureResult.Key SHADING_MODE; + field public static final android.hardware.camera2.CaptureResult.Key STATISTICS_FACES; + field public static final android.hardware.camera2.CaptureResult.Key STATISTICS_FACE_DETECT_MODE; + field public static final android.hardware.camera2.CaptureResult.Key STATISTICS_HOT_PIXEL_MAP; + field public static final android.hardware.camera2.CaptureResult.Key STATISTICS_HOT_PIXEL_MAP_MODE; + field public static final android.hardware.camera2.CaptureResult.Key STATISTICS_LENS_SHADING_CORRECTION_MAP; + field public static final android.hardware.camera2.CaptureResult.Key STATISTICS_LENS_SHADING_MAP_MODE; + field public static final android.hardware.camera2.CaptureResult.Key STATISTICS_SCENE_FLICKER; + field public static final android.hardware.camera2.CaptureResult.Key TONEMAP_CURVE; + field public static final android.hardware.camera2.CaptureResult.Key TONEMAP_MODE; } public static final class CaptureResult.Key { @@ -13195,7 +13245,7 @@ package android.hardware.usb { method public java.lang.String getUri(); method public java.lang.String getVersion(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public class UsbConfiguration implements android.os.Parcelable { @@ -13208,7 +13258,7 @@ package android.hardware.usb { method public boolean isRemoteWakeup(); method public boolean isSelfPowered(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public final class UsbConstants { @@ -13267,7 +13317,7 @@ package android.hardware.usb { method public java.lang.String getSerialNumber(); method public int getVendorId(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public class UsbDeviceConnection { @@ -13296,7 +13346,7 @@ package android.hardware.usb { method public int getMaxPacketSize(); method public int getType(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public class UsbInterface implements android.os.Parcelable { @@ -13310,7 +13360,7 @@ package android.hardware.usb { method public int getInterfaceSubclass(); method public java.lang.String getName(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public class UsbManager { @@ -13667,7 +13717,7 @@ package android.location { method public void setThoroughfare(java.lang.String); method public void setUrl(java.lang.String); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public class Criteria implements android.os.Parcelable { @@ -13700,7 +13750,7 @@ package android.location { field public static final int ACCURACY_HIGH = 3; // 0x3 field public static final int ACCURACY_LOW = 1; // 0x1 field public static final int ACCURACY_MEDIUM = 2; // 0x2 - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int NO_REQUIREMENT = 0; // 0x0 field public static final int POWER_HIGH = 3; // 0x3 field public static final int POWER_LOW = 1; // 0x1 @@ -13786,7 +13836,7 @@ package android.location { method public void setSpeed(float); method public void setTime(long); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int FORMAT_DEGREES = 0; // 0x0 field public static final int FORMAT_MINUTES = 1; // 0x1 field public static final int FORMAT_SECONDS = 2; // 0x2 @@ -13896,7 +13946,7 @@ package android.media { field public static final int CONTENT_TYPE_SONIFICATION = 4; // 0x4 field public static final int CONTENT_TYPE_SPEECH = 1; // 0x1 field public static final int CONTENT_TYPE_UNKNOWN = 0; // 0x0 - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int FLAG_AUDIBILITY_ENFORCED = 1; // 0x1 field public static final int FLAG_HW_AV_SYNC = 16; // 0x10 field public static final int USAGE_ALARM = 4; // 0x4 @@ -14767,7 +14817,7 @@ package android.media { method public java.lang.CharSequence getSubtitle(); method public java.lang.CharSequence getTitle(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public static class MediaDescription.Builder { @@ -14790,6 +14840,7 @@ package android.media { method public byte[] getPropertyByteArray(java.lang.String); method public java.lang.String getPropertyString(java.lang.String); method public android.media.MediaDrm.ProvisionRequest getProvisionRequest(); + method public byte[] getSecureStop(byte[]); method public java.util.List getSecureStops(); method public static final boolean isCryptoSchemeSupported(java.util.UUID); method public static final boolean isCryptoSchemeSupported(java.util.UUID, java.lang.String); @@ -14798,6 +14849,7 @@ package android.media { method public void provideProvisionResponse(byte[]) throws android.media.DeniedByServerException; method public java.util.HashMap queryKeyStatus(byte[]); method public final void release(); + method public void releaseAllSecureStops(); method public void releaseSecureStops(byte[]); method public void removeKeys(byte[]); method public void restoreKeys(byte[], byte[]); @@ -14967,7 +15019,7 @@ package android.media { method public java.util.Set keySet(); method public int size(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final java.lang.String METADATA_KEY_ALBUM = "android.media.metadata.ALBUM"; field public static final java.lang.String METADATA_KEY_ALBUM_ART = "android.media.metadata.ALBUM_ART"; field public static final java.lang.String METADATA_KEY_ALBUM_ARTIST = "android.media.metadata.ALBUM_ARTIST"; @@ -15468,7 +15520,7 @@ package android.media { method public static android.media.Rating newThumbRating(boolean); method public static android.media.Rating newUnratedRating(int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int RATING_3_STARS = 3; // 0x3 field public static final int RATING_4_STARS = 4; // 0x4 field public static final int RATING_5_STARS = 5; // 0x5 @@ -16118,7 +16170,7 @@ package android.media.browse { method public boolean isBrowsable(); method public boolean isPlayable(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int FLAG_BROWSABLE = 1; // 0x1 field public static final int FLAG_PLAYABLE = 2; // 0x2 } @@ -16290,6 +16342,7 @@ package android.media.session { method public void setPlaybackToRemote(android.media.VolumeProvider); method public void setQueue(java.util.List); method public void setQueueTitle(java.lang.CharSequence); + method public void setRatingType(int); method public void setSessionActivity(android.app.PendingIntent); field public static final int FLAG_HANDLES_MEDIA_BUTTONS = 1; // 0x1 field public static final int FLAG_HANDLES_TRANSPORT_CONTROLS = 2; // 0x2 @@ -16320,14 +16373,14 @@ package android.media.session { method public android.media.MediaDescription getDescription(); method public long getQueueId(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int UNKNOWN_ID = -1; // 0xffffffff } public static final class MediaSession.Token implements android.os.Parcelable { method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public final class MediaSessionManager { @@ -16348,6 +16401,7 @@ package android.media.session { method public long getBufferedPosition(); method public java.util.List getCustomActions(); method public java.lang.CharSequence getErrorMessage(); + method public android.os.Bundle getExtras(); method public long getLastPositionUpdateTime(); method public float getPlaybackSpeed(); method public long getPosition(); @@ -16366,7 +16420,7 @@ package android.media.session { field public static final long ACTION_SKIP_TO_PREVIOUS = 16L; // 0x10L field public static final long ACTION_SKIP_TO_QUEUE_ITEM = 4096L; // 0x1000L field public static final long ACTION_STOP = 1L; // 0x1L - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final long PLAYBACK_POSITION_UNKNOWN = -1L; // 0xffffffffffffffffL field public static final int STATE_BUFFERING = 6; // 0x6 field public static final int STATE_CONNECTING = 8; // 0x8 @@ -16392,6 +16446,7 @@ package android.media.session { method public android.media.session.PlaybackState.Builder setActiveQueueItemId(long); method public android.media.session.PlaybackState.Builder setBufferedPosition(long); method public android.media.session.PlaybackState.Builder setErrorMessage(java.lang.CharSequence); + method public android.media.session.PlaybackState.Builder setExtras(android.os.Bundle); method public android.media.session.PlaybackState.Builder setState(int, long, float, long); method public android.media.session.PlaybackState.Builder setState(int, long, float); } @@ -16403,7 +16458,7 @@ package android.media.session { method public int getIcon(); method public java.lang.CharSequence getName(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public static final class PlaybackState.CustomAction.Builder { @@ -16542,15 +16597,21 @@ package android.media.tv { method public static java.lang.String[] decode(java.lang.String); method public static java.lang.String encode(java.lang.String...); field public static final java.lang.String ANIMAL_WILDLIFE = "ANIMAL_WILDLIFE"; + field public static final java.lang.String ARTS = "ARTS"; field public static final java.lang.String COMEDY = "COMEDY"; field public static final java.lang.String DRAMA = "DRAMA"; field public static final java.lang.String EDUCATION = "EDUCATION"; + field public static final java.lang.String ENTERTAINMENT = "ENTERTAINMENT"; field public static final java.lang.String FAMILY_KIDS = "FAMILY_KIDS"; field public static final java.lang.String GAMING = "GAMING"; + field public static final java.lang.String LIFE_STYLE = "LIFE_STYLE"; field public static final java.lang.String MOVIES = "MOVIES"; + field public static final java.lang.String MUSIC = "MUSIC"; field public static final java.lang.String NEWS = "NEWS"; + field public static final java.lang.String PREMIER = "PREMIER"; field public static final java.lang.String SHOPPING = "SHOPPING"; field public static final java.lang.String SPORTS = "SPORTS"; + field public static final java.lang.String TECH_SCIENCE = "TECH_SCIENCE"; field public static final java.lang.String TRAVEL = "TRAVEL"; } @@ -16566,7 +16627,7 @@ package android.media.tv { method public android.graphics.drawable.Drawable loadIcon(android.content.Context); method public java.lang.CharSequence loadLabel(android.content.Context); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final java.lang.String EXTRA_INPUT_ID = "android.media.tv.extra.INPUT_ID"; field public static final int TYPE_COMPONENT = 1004; // 0x3ec field public static final int TYPE_COMPOSITE = 1001; // 0x3e9 @@ -16664,7 +16725,7 @@ package android.media.tv { method public final int getVideoHeight(); method public final int getVideoWidth(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int TYPE_AUDIO = 0; // 0x0 field public static final int TYPE_SUBTITLE = 2; // 0x2 field public static final int TYPE_VIDEO = 1; // 0x1 @@ -16865,9 +16926,11 @@ package android.net { method public boolean isDefaultNetworkActive(); method public static boolean isNetworkTypeValid(int); method public void registerNetworkCallback(android.net.NetworkRequest, android.net.ConnectivityManager.NetworkCallback); + method public void releaseNetworkRequest(android.app.PendingIntent); method public void removeDefaultNetworkActiveListener(android.net.ConnectivityManager.OnNetworkActiveListener); method public void reportBadNetwork(android.net.Network); method public void requestNetwork(android.net.NetworkRequest, android.net.ConnectivityManager.NetworkCallback); + method public void requestNetwork(android.net.NetworkRequest, android.app.PendingIntent); method public deprecated boolean requestRouteToHost(int, int); method public deprecated void setNetworkPreference(int); method public static boolean setProcessDefaultNetwork(android.net.Network); @@ -16879,7 +16942,9 @@ package android.net { field public static final deprecated int DEFAULT_NETWORK_PREFERENCE = 1; // 0x1 field public static final java.lang.String EXTRA_EXTRA_INFO = "extraInfo"; field public static final java.lang.String EXTRA_IS_FAILOVER = "isFailover"; + field public static final java.lang.String EXTRA_NETWORK = "android.net.extra.NETWORK"; field public static final deprecated java.lang.String EXTRA_NETWORK_INFO = "networkInfo"; + field public static final java.lang.String EXTRA_NETWORK_REQUEST = "android.net.extra.NETWORK_REQUEST"; field public static final java.lang.String EXTRA_NETWORK_TYPE = "networkType"; field public static final java.lang.String EXTRA_NO_CONNECTIVITY = "noConnectivity"; field public static final java.lang.String EXTRA_OTHER_NETWORK_INFO = "otherNetwork"; @@ -16936,7 +17001,7 @@ package android.net { method public int getPrefixLength(); method public byte[] getRawAddress(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public class LinkAddress implements android.os.Parcelable { @@ -16946,7 +17011,7 @@ package android.net { method public int getPrefixLength(); method public int getScope(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public final class LinkProperties implements android.os.Parcelable { @@ -16958,7 +17023,7 @@ package android.net { method public java.util.List getLinkAddresses(); method public java.util.List getRoutes(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public class LocalServerSocket { @@ -17030,6 +17095,7 @@ package android.net { } public class Network implements android.os.Parcelable { + method public void bindSocket(java.net.DatagramSocket) throws java.io.IOException; method public void bindSocket(java.net.Socket) throws java.io.IOException; method public int describeContents(); method public java.net.InetAddress[] getAllByName(java.lang.String) throws java.net.UnknownHostException; @@ -17037,7 +17103,7 @@ package android.net { method public javax.net.SocketFactory getSocketFactory(); method public java.net.URLConnection openConnection(java.net.URL) throws java.io.IOException; method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public final class NetworkCapabilities implements android.os.Parcelable { @@ -17048,7 +17114,7 @@ package android.net { method public boolean hasCapability(int); method public boolean hasTransport(int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int NET_CAPABILITY_CBS = 5; // 0x5 field public static final int NET_CAPABILITY_DUN = 2; // 0x2 field public static final int NET_CAPABILITY_EIMS = 10; // 0xa @@ -17122,7 +17188,7 @@ package android.net { public class NetworkRequest implements android.os.Parcelable { method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public static class NetworkRequest.Builder { @@ -17149,7 +17215,7 @@ package android.net { field public static final java.lang.String PROXY_CHANGE_ACTION = "android.intent.action.PROXY_CHANGE"; } - public class ProxyInfo implements android.os.Parcelable { + public deprecated class ProxyInfo implements android.os.Parcelable { method public static android.net.ProxyInfo buildDirectProxy(java.lang.String, int); method public static android.net.ProxyInfo buildDirectProxy(java.lang.String, int, java.util.List); method public static android.net.ProxyInfo buildPacProxy(android.net.Uri); @@ -17159,7 +17225,7 @@ package android.net { method public android.net.Uri getPacFileUrl(); method public int getPort(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public abstract class PskKeyManager { @@ -17183,7 +17249,7 @@ package android.net { method public boolean isDefaultRoute(); method public boolean matches(java.net.InetAddress); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public class SSLCertificateSocketFactory extends javax.net.ssl.SSLSocketFactory { @@ -17196,7 +17262,7 @@ package android.net { method public static javax.net.SocketFactory getDefault(int); method public static javax.net.ssl.SSLSocketFactory getDefault(int, android.net.SSLSessionCache); method public java.lang.String[] getDefaultCipherSuites(); - method public static org.apache.http.conn.ssl.SSLSocketFactory getHttpSocketFactory(int, android.net.SSLSessionCache); + method public static deprecated org.apache.http.conn.ssl.SSLSocketFactory getHttpSocketFactory(int, android.net.SSLSessionCache); method public static javax.net.ssl.SSLSocketFactory getInsecure(int, android.net.SSLSessionCache); method public byte[] getNpnSelectedProtocol(java.net.Socket); method public java.lang.String[] getSupportedCipherSuites(); @@ -17282,7 +17348,7 @@ package android.net { method public abstract java.lang.String toString(); method public static android.net.Uri withAppendedPath(android.net.Uri, java.lang.String); method public static void writeToParcel(android.os.Parcel, android.net.Uri); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final android.net.Uri EMPTY; } @@ -17387,6 +17453,7 @@ package android.net { method public boolean protect(int); method public boolean protect(java.net.Socket); method public boolean protect(java.net.DatagramSocket); + method public boolean setUnderlyingNetworks(android.net.Network[]); field public static final java.lang.String SERVICE_INTERFACE = "android.net.VpnService"; } @@ -17408,13 +17475,14 @@ package android.net { method public android.net.VpnService.Builder setConfigureIntent(android.app.PendingIntent); method public android.net.VpnService.Builder setMtu(int); method public android.net.VpnService.Builder setSession(java.lang.String); + method public android.net.VpnService.Builder setUnderlyingNetworks(android.net.Network[]); } } package android.net.http { - public final class AndroidHttpClient implements org.apache.http.client.HttpClient { + public final deprecated class AndroidHttpClient implements org.apache.http.client.HttpClient { method public void close(); method public void disableCurlLogging(); method public void enableCurlLogging(java.lang.String, int); @@ -17432,8 +17500,8 @@ package android.net.http { method public org.apache.http.params.HttpParams getParams(); method public static java.io.InputStream getUngzippedContent(org.apache.http.HttpEntity) throws java.io.IOException; method public static void modifyRequestToAcceptGzipResponse(org.apache.http.HttpRequest); - method public static android.net.http.AndroidHttpClient newInstance(java.lang.String, android.content.Context); - method public static android.net.http.AndroidHttpClient newInstance(java.lang.String); + method public static deprecated android.net.http.AndroidHttpClient newInstance(java.lang.String, android.content.Context); + method public static deprecated android.net.http.AndroidHttpClient newInstance(java.lang.String); method public static long parseDate(java.lang.String); field public static long DEFAULT_SYNC_MIN_GZIP_BYTES; } @@ -17556,7 +17624,7 @@ package android.net.nsd { method public void setServiceName(java.lang.String); method public void setServiceType(java.lang.String); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } } @@ -17721,7 +17789,7 @@ package android.net.sip { method public java.lang.String getUriString(); method public java.lang.String getUserName(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public static class SipProfile.Builder { @@ -17920,7 +17988,7 @@ package android.net.wifi { method public void setPhase2Method(int); method public void setSubjectMatch(java.lang.String); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public static final class WifiEnterpriseConfig.Eap { @@ -18056,7 +18124,7 @@ package android.net.wifi { method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); field public java.lang.String BSSID; - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int DISPLAY = 1; // 0x1 field public static final int INVALID = 4; // 0x4 field public static final int KEYPAD = 2; // 0x2 @@ -18075,7 +18143,7 @@ package android.net.wifi.p2p { ctor public WifiP2pConfig(android.net.wifi.p2p.WifiP2pConfig); method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public java.lang.String deviceAddress; field public int groupOwnerIntent; field public android.net.wifi.WpsInfo wps; @@ -18093,7 +18161,7 @@ package android.net.wifi.p2p { method public void writeToParcel(android.os.Parcel, int); field public static final int AVAILABLE = 3; // 0x3 field public static final int CONNECTED = 0; // 0x0 - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int FAILED = 2; // 0x2 field public static final int INVITED = 1; // 0x1 field public static final int UNAVAILABLE = 4; // 0x4 @@ -18111,7 +18179,7 @@ package android.net.wifi.p2p { method public android.net.wifi.p2p.WifiP2pDevice get(java.lang.String); method public java.util.Collection getDeviceList(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public class WifiP2pGroup implements android.os.Parcelable { @@ -18125,7 +18193,7 @@ package android.net.wifi.p2p { method public java.lang.String getPassphrase(); method public boolean isGroupOwner(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public class WifiP2pInfo implements android.os.Parcelable { @@ -18133,7 +18201,7 @@ package android.net.wifi.p2p { ctor public WifiP2pInfo(android.net.wifi.p2p.WifiP2pInfo); method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public boolean groupFormed; field public java.net.InetAddress groupOwnerAddress; field public boolean isGroupOwner; @@ -18280,7 +18348,7 @@ package android.nfc { method public android.nfc.NdefRecord[] getRecords(); method public byte[] toByteArray(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public final class NdefRecord implements android.os.Parcelable { @@ -18301,7 +18369,7 @@ package android.nfc { method public java.lang.String toMimeType(); method public android.net.Uri toUri(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final byte[] RTD_ALTERNATIVE_CARRIER; field public static final byte[] RTD_HANDOVER_CARRIER; field public static final byte[] RTD_HANDOVER_REQUEST; @@ -18385,7 +18453,7 @@ package android.nfc { method public byte[] getId(); method public java.lang.String[] getTechList(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public class TagLostException extends java.io.IOException { @@ -21251,6 +21319,9 @@ package android.os { method public void clear(); method public boolean containsKey(java.lang.String); method public java.lang.Object get(java.lang.String); + method public boolean getBoolean(java.lang.String); + method public boolean getBoolean(java.lang.String, boolean); + method public boolean[] getBooleanArray(java.lang.String); method public double getDouble(java.lang.String); method public double getDouble(java.lang.String, double); method public double[] getDoubleArray(java.lang.String); @@ -21266,6 +21337,8 @@ package android.os { method public boolean isEmpty(); method public java.util.Set keySet(); method public void putAll(android.os.PersistableBundle); + method public void putBoolean(java.lang.String, boolean); + method public void putBooleanArray(java.lang.String, boolean[]); method public void putDouble(java.lang.String, double); method public void putDoubleArray(java.lang.String, double[]); method public void putInt(java.lang.String, int); @@ -21399,6 +21472,7 @@ package android.os { field public static final int KITKAT = 19; // 0x13 field public static final int KITKAT_WATCH = 20; // 0x14 field public static final int LOLLIPOP = 21; // 0x15 + field public static final int LOLLIPOP_MR1 = 22; // 0x16 } public final class Bundle extends android.os.BaseBundle implements java.lang.Cloneable android.os.Parcelable { @@ -21410,9 +21484,6 @@ package android.os { method public java.lang.Object clone(); method public int describeContents(); method public android.os.IBinder getBinder(java.lang.String); - method public boolean getBoolean(java.lang.String); - method public boolean getBoolean(java.lang.String, boolean); - method public boolean[] getBooleanArray(java.lang.String); method public android.os.Bundle getBundle(java.lang.String); method public byte getByte(java.lang.String); method public java.lang.Byte getByte(java.lang.String, byte); @@ -21443,8 +21514,6 @@ package android.os { method public boolean hasFileDescriptors(); method public void putAll(android.os.Bundle); method public void putBinder(java.lang.String, android.os.IBinder); - method public void putBoolean(java.lang.String, boolean); - method public void putBooleanArray(java.lang.String, boolean[]); method public void putBundle(java.lang.String, android.os.Bundle); method public void putByte(java.lang.String, byte); method public void putByteArray(java.lang.String, byte[]); @@ -21469,7 +21538,7 @@ package android.os { method public void readFromParcel(android.os.Parcel); method public void setClassLoader(java.lang.ClassLoader); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final android.os.Bundle EMPTY; } @@ -21597,7 +21666,7 @@ package android.os { method public int getTotalSwappablePss(); method public void readFromParcel(android.os.Parcel); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public int dalvikPrivateDirty; field public int dalvikPss; field public int dalvikSharedDirty; @@ -21638,7 +21707,7 @@ package android.os { method public java.lang.String getText(int); method public long getTimeMillis(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public class Environment { @@ -21810,6 +21879,7 @@ package android.os { method public android.os.Bundle getData(); method public android.os.Handler getTarget(); method public long getWhen(); + method public boolean isAsynchronous(); method public static android.os.Message obtain(); method public static android.os.Message obtain(android.os.Message); method public static android.os.Message obtain(android.os.Handler); @@ -21821,10 +21891,11 @@ package android.os { method public android.os.Bundle peekData(); method public void recycle(); method public void sendToTarget(); + method public void setAsynchronous(boolean); method public void setData(android.os.Bundle); method public void setTarget(android.os.Handler); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public int arg1; field public int arg2; field public java.lang.Object obj; @@ -21851,7 +21922,7 @@ package android.os { method public void send(android.os.Message) throws android.os.RemoteException; method public static void writeMessengerOrNullToParcel(android.os.Messenger, android.os.Parcel); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public class NetworkOnMainThreadException extends java.lang.RuntimeException { @@ -21970,7 +22041,7 @@ package android.os { method public final void writeTypedArray(T[], int); method public final void writeTypedList(java.util.List); method public final void writeValue(java.lang.Object); - field public static final android.os.Parcelable.Creator STRING_CREATOR; + field public static final android.os.Parcelable.Creator STRING_CREATOR; } public class ParcelFileDescriptor implements java.io.Closeable android.os.Parcelable { @@ -21998,7 +22069,7 @@ package android.os { method public static android.os.ParcelFileDescriptor open(java.io.File, int, android.os.Handler, android.os.ParcelFileDescriptor.OnCloseListener) throws java.io.IOException; method public static int parseMode(java.lang.String); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int MODE_APPEND = 33554432; // 0x2000000 field public static final int MODE_CREATE = 134217728; // 0x8000000 field public static final int MODE_READ_ONLY = 268435456; // 0x10000000 @@ -22036,7 +22107,7 @@ package android.os { method public static android.os.ParcelUuid fromString(java.lang.String); method public java.util.UUID getUuid(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public abstract interface Parcelable { @@ -22063,7 +22134,7 @@ package android.os { method public final int getType(); method public boolean match(java.lang.String); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int PATTERN_LITERAL = 0; // 0x0 field public static final int PATTERN_PREFIX = 1; // 0x1 field public static final int PATTERN_SIMPLE_GLOB = 2; // 0x2 @@ -22078,7 +22149,7 @@ package android.os { method public android.os.PersistableBundle getPersistableBundle(java.lang.String); method public void putPersistableBundle(java.lang.String, android.os.PersistableBundle); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final android.os.PersistableBundle EMPTY; } @@ -22182,7 +22253,7 @@ package android.os { method protected void onReceiveResult(int, android.os.Bundle); method public void send(int, android.os.Bundle); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public class StatFs { @@ -22294,7 +22365,7 @@ package android.os { method public static android.os.UserHandle readFromParcel(android.os.Parcel); method public void writeToParcel(android.os.Parcel, int); method public static void writeToParcel(android.os.UserHandle, android.os.Parcel); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public class UserManager { @@ -22332,6 +22403,7 @@ package android.os { field public static final java.lang.String DISALLOW_INSTALL_UNKNOWN_SOURCES = "no_install_unknown_sources"; field public static final java.lang.String DISALLOW_MODIFY_ACCOUNTS = "no_modify_accounts"; field public static final java.lang.String DISALLOW_MOUNT_PHYSICAL_MEDIA = "no_physical_media"; + field public static final java.lang.String DISALLOW_OUTGOING_BEAM = "no_outgoing_beam"; field public static final java.lang.String DISALLOW_OUTGOING_CALLS = "no_outgoing_calls"; field public static final java.lang.String DISALLOW_REMOVE_USER = "no_remove_user"; field public static final java.lang.String DISALLOW_SHARE_LOCATION = "no_share_location"; @@ -22340,6 +22412,7 @@ package android.os { field public static final java.lang.String DISALLOW_UNMUTE_MICROPHONE = "no_unmute_microphone"; field public static final java.lang.String DISALLOW_USB_FILE_TRANSFER = "no_usb_file_transfer"; field public static final java.lang.String ENSURE_VERIFY_APPS = "ensure_verify_apps"; + field public static final java.lang.String KEY_RESTRICTIONS_PENDING = "restrictions_pending"; } public abstract class Vibrator { @@ -22361,7 +22434,7 @@ package android.os { method public boolean remove(android.os.WorkSource); method public void set(android.os.WorkSource); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } } @@ -22566,7 +22639,7 @@ package android.preference { public static class Preference.BaseSavedState extends android.view.AbsSavedState { ctor public Preference.BaseSavedState(android.os.Parcel); ctor public Preference.BaseSavedState(android.os.Parcelable); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public static abstract interface Preference.OnPreferenceChangeListener { @@ -22626,7 +22699,7 @@ package android.preference { method public java.lang.CharSequence getTitle(android.content.res.Resources); method public void readFromParcel(android.os.Parcel); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public java.lang.CharSequence breadCrumbShortTitle; field public int breadCrumbShortTitleRes; field public java.lang.CharSequence breadCrumbTitle; @@ -22778,7 +22851,7 @@ package android.print { method public int getStart(); method public void writeToParcel(android.os.Parcel, int); field public static final android.print.PageRange ALL_PAGES; - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public final class PrintAttributes implements android.os.Parcelable { @@ -22790,7 +22863,7 @@ package android.print { method public void writeToParcel(android.os.Parcel, int); field public static final int COLOR_MODE_COLOR = 2; // 0x2 field public static final int COLOR_MODE_MONOCHROME = 1; // 0x1 - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public static final class PrintAttributes.Builder { @@ -22944,7 +23017,7 @@ package android.print { field public static final int CONTENT_TYPE_DOCUMENT = 0; // 0x0 field public static final int CONTENT_TYPE_PHOTO = 1; // 0x1 field public static final int CONTENT_TYPE_UNKNOWN = -1; // 0xffffffff - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int PAGE_COUNT_UNKNOWN = -1; // 0xffffffff } @@ -22971,7 +23044,7 @@ package android.print { public final class PrintJobId implements android.os.Parcelable { method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public final class PrintJobInfo implements android.os.Parcelable { @@ -22985,7 +23058,7 @@ package android.print { method public android.print.PrinterId getPrinterId(); method public int getState(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int STATE_BLOCKED = 4; // 0x4 field public static final int STATE_CANCELED = 7; // 0x7 field public static final int STATE_COMPLETED = 5; // 0x5 @@ -23018,7 +23091,7 @@ package android.print { method public android.print.PrintAttributes.Margins getMinMargins(); method public java.util.List getResolutions(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public static final class PrinterCapabilitiesInfo.Builder { @@ -23034,7 +23107,7 @@ package android.print { method public int describeContents(); method public java.lang.String getLocalId(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public final class PrinterInfo implements android.os.Parcelable { @@ -23045,7 +23118,7 @@ package android.print { method public java.lang.String getName(); method public int getStatus(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int STATUS_BUSY = 2; // 0x2 field public static final int STATUS_IDLE = 1; // 0x1 field public static final int STATUS_UNAVAILABLE = 3; // 0x3 @@ -25127,6 +25200,7 @@ package android.provider { field public static final java.lang.String ACTION_APPLICATION_DETAILS_SETTINGS = "android.settings.APPLICATION_DETAILS_SETTINGS"; field public static final java.lang.String ACTION_APPLICATION_DEVELOPMENT_SETTINGS = "android.settings.APPLICATION_DEVELOPMENT_SETTINGS"; field public static final java.lang.String ACTION_APPLICATION_SETTINGS = "android.settings.APPLICATION_SETTINGS"; + field public static final java.lang.String ACTION_BATTERY_SAVER_SETTINGS = "android.settings.BATTERY_SAVER_SETTINGS"; field public static final java.lang.String ACTION_BLUETOOTH_SETTINGS = "android.settings.BLUETOOTH_SETTINGS"; field public static final java.lang.String ACTION_CAPTIONING_SETTINGS = "android.settings.CAPTIONING_SETTINGS"; field public static final java.lang.String ACTION_CAST_SETTINGS = "android.settings.CAST_SETTINGS"; @@ -25148,6 +25222,7 @@ package android.provider { field public static final java.lang.String ACTION_NFCSHARING_SETTINGS = "android.settings.NFCSHARING_SETTINGS"; field public static final java.lang.String ACTION_NFC_PAYMENT_SETTINGS = "android.settings.NFC_PAYMENT_SETTINGS"; field public static final java.lang.String ACTION_NFC_SETTINGS = "android.settings.NFC_SETTINGS"; + field public static final java.lang.String ACTION_NOTIFICATION_LISTENER_SETTINGS = "android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS"; field public static final java.lang.String ACTION_PRINT_SETTINGS = "android.settings.ACTION_PRINT_SETTINGS"; field public static final java.lang.String ACTION_PRIVACY_SETTINGS = "android.settings.PRIVACY_SETTINGS"; field public static final java.lang.String ACTION_QUICK_LAUNCH_SETTINGS = "android.settings.QUICK_LAUNCH_SETTINGS"; @@ -25516,6 +25591,7 @@ package android.provider { field public static final java.lang.String STATUS = "st"; field public static final java.lang.String SUBJECT = "sub"; field public static final java.lang.String SUBJECT_CHARSET = "sub_cs"; + field public static final java.lang.String SUBSCRIPTION_ID = "sub_id"; field public static final java.lang.String TEXT_ONLY = "text_only"; field public static final java.lang.String THREAD_ID = "thread_id"; field public static final java.lang.String TRANSACTION_ID = "tr_id"; @@ -25548,6 +25624,7 @@ package android.provider { field public static final java.lang.String PROXY = "proxy"; field public static final java.lang.String ROAMING_PROTOCOL = "roaming_protocol"; field public static final java.lang.String SERVER = "server"; + field public static final java.lang.String SUBSCRIPTION_ID = "sub_id"; field public static final java.lang.String TYPE = "type"; field public static final java.lang.String USER = "user"; } @@ -25644,6 +25721,7 @@ package android.provider { field public static final java.lang.String MSG_TYPE = "msg_type"; field public static final java.lang.String PROTO_TYPE = "proto_type"; field public static final java.lang.String RETRY_INDEX = "retry_index"; + field public static final java.lang.String SUBSCRIPTION_ID = "pending_sub_id"; } public static final class Telephony.Sms implements android.provider.BaseColumns android.provider.Telephony.TextBasedSmsColumns { @@ -25727,6 +25805,7 @@ package android.provider { field public static final int STATUS_NONE = -1; // 0xffffffff field public static final int STATUS_PENDING = 32; // 0x20 field public static final java.lang.String SUBJECT = "subject"; + field public static final java.lang.String SUBSCRIPTION_ID = "sub_id"; field public static final java.lang.String THREAD_ID = "thread_id"; field public static final java.lang.String TYPE = "type"; } @@ -26830,6 +26909,58 @@ package android.security { } +package android.service.carrier { + + public abstract class CarrierMessagingService extends android.app.Service { + ctor public CarrierMessagingService(); + method public android.os.IBinder onBind(android.content.Intent); + method public void onDownloadMms(android.net.Uri, int, android.net.Uri, android.service.carrier.CarrierMessagingService.ResultCallback); + method public void onFilterSms(android.service.carrier.MessagePdu, java.lang.String, int, int, android.service.carrier.CarrierMessagingService.ResultCallback); + method public void onSendDataSms(byte[], int, java.lang.String, int, android.service.carrier.CarrierMessagingService.ResultCallback); + method public void onSendMms(android.net.Uri, int, android.net.Uri, android.service.carrier.CarrierMessagingService.ResultCallback); + method public void onSendMultipartTextSms(java.util.List, int, java.lang.String, android.service.carrier.CarrierMessagingService.ResultCallback); + method public void onSendTextSms(java.lang.String, int, java.lang.String, android.service.carrier.CarrierMessagingService.ResultCallback); + field public static final int DOWNLOAD_STATUS_ERROR = 2; // 0x2 + field public static final int DOWNLOAD_STATUS_OK = 0; // 0x0 + field public static final int DOWNLOAD_STATUS_RETRY_ON_CARRIER_NETWORK = 1; // 0x1 + field public static final int SEND_STATUS_ERROR = 2; // 0x2 + field public static final int SEND_STATUS_OK = 0; // 0x0 + field public static final int SEND_STATUS_RETRY_ON_CARRIER_NETWORK = 1; // 0x1 + field public static final java.lang.String SERVICE_INTERFACE = "android.service.carrier.CarrierMessagingService"; + } + + public static abstract interface CarrierMessagingService.ResultCallback { + method public abstract void onReceiveResult(T) throws android.os.RemoteException; + } + + public static final class CarrierMessagingService.SendMmsResult { + ctor public CarrierMessagingService.SendMmsResult(int, byte[]); + method public byte[] getSendConfPdu(); + method public int getSendStatus(); + } + + public static final class CarrierMessagingService.SendMultipartSmsResult { + ctor public CarrierMessagingService.SendMultipartSmsResult(int, int[]); + method public int[] getMessageRefs(); + method public int getSendStatus(); + } + + public static final class CarrierMessagingService.SendSmsResult { + ctor public CarrierMessagingService.SendSmsResult(int, int); + method public int getMessageRef(); + method public int getSendStatus(); + } + + public final class MessagePdu implements android.os.Parcelable { + ctor public MessagePdu(java.util.List); + method public int describeContents(); + method public java.util.List getPdus(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + +} + package android.service.dreams { public class DreamService extends android.app.Service implements android.view.Window.Callback { @@ -26951,7 +27082,7 @@ package android.service.notification { method public java.lang.String[] getOrderedKeys(); method public boolean getRanking(java.lang.String, android.service.notification.NotificationListenerService.Ranking); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public class StatusBarNotification implements android.os.Parcelable { @@ -26971,7 +27102,7 @@ package android.service.notification { method public boolean isClearable(); method public boolean isOngoing(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } } @@ -27387,7 +27518,7 @@ package android.speech.tts { method public int getQuality(); method public boolean isNetworkConnectionRequired(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int LATENCY_HIGH = 400; // 0x190 field public static final int LATENCY_LOW = 200; // 0xc8 field public static final int LATENCY_NORMAL = 300; // 0x12c @@ -28068,7 +28199,7 @@ package android.telephony { method public int getNetworkId(); method public int getSystemId(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public final class CellIdentityGsm implements android.os.Parcelable { @@ -28079,7 +28210,7 @@ package android.telephony { method public int getMnc(); method public deprecated int getPsc(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public final class CellIdentityLte implements android.os.Parcelable { @@ -28090,7 +28221,7 @@ package android.telephony { method public int getPci(); method public int getTac(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public final class CellIdentityWcdma implements android.os.Parcelable { @@ -28101,7 +28232,7 @@ package android.telephony { method public int getMnc(); method public int getPsc(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public abstract class CellInfo implements android.os.Parcelable { @@ -28109,35 +28240,35 @@ package android.telephony { method public long getTimeStamp(); method public boolean isRegistered(); method public abstract void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public final class CellInfoCdma extends android.telephony.CellInfo implements android.os.Parcelable { method public android.telephony.CellIdentityCdma getCellIdentity(); method public android.telephony.CellSignalStrengthCdma getCellSignalStrength(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public final class CellInfoGsm extends android.telephony.CellInfo implements android.os.Parcelable { method public android.telephony.CellIdentityGsm getCellIdentity(); method public android.telephony.CellSignalStrengthGsm getCellSignalStrength(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public final class CellInfoLte extends android.telephony.CellInfo implements android.os.Parcelable { method public android.telephony.CellIdentityLte getCellIdentity(); method public android.telephony.CellSignalStrengthLte getCellSignalStrength(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public final class CellInfoWcdma extends android.telephony.CellInfo implements android.os.Parcelable { method public android.telephony.CellIdentityWcdma getCellIdentity(); method public android.telephony.CellSignalStrengthWcdma getCellSignalStrength(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public abstract class CellLocation { @@ -28169,7 +28300,7 @@ package android.telephony { method public int getLevel(); method public int hashCode(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public final class CellSignalStrengthGsm extends android.telephony.CellSignalStrength implements android.os.Parcelable { @@ -28180,7 +28311,7 @@ package android.telephony { method public int getLevel(); method public int hashCode(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public final class CellSignalStrengthLte extends android.telephony.CellSignalStrength implements android.os.Parcelable { @@ -28192,7 +28323,7 @@ package android.telephony { method public int getTimingAdvance(); method public int hashCode(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public final class CellSignalStrengthWcdma extends android.telephony.CellSignalStrength implements android.os.Parcelable { @@ -28203,7 +28334,7 @@ package android.telephony { method public int getLevel(); method public int hashCode(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public class IccOpenLogicalChannelResponse implements android.os.Parcelable { @@ -28212,7 +28343,7 @@ package android.telephony { method public byte[] getSelectResponse(); method public int getStatus(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int INVALID_CHANNEL = -1; // 0xffffffff field public static final int STATUS_MISSING_RESOURCE = 2; // 0x2 field public static final int STATUS_NO_ERROR = 1; // 0x1 @@ -28234,7 +28365,7 @@ package android.telephony { method public deprecated void setCid(int); method public deprecated void setRssi(int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int UNKNOWN_CID = -1; // 0xffffffff field public static final int UNKNOWN_RSSI = 99; // 0x63 } @@ -28341,7 +28472,7 @@ package android.telephony { method public void setStateOff(); method public void setStateOutOfService(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int STATE_EMERGENCY_ONLY = 2; // 0x2 field public static final int STATE_IN_SERVICE = 0; // 0x0 field public static final int STATE_OUT_OF_SERVICE = 1; // 0x1 @@ -28366,11 +28497,16 @@ package android.telephony { method public void downloadMultimediaMessage(android.content.Context, java.lang.String, android.net.Uri, android.os.Bundle, android.app.PendingIntent); method public android.os.Bundle getCarrierConfigValues(); method public static android.telephony.SmsManager getDefault(); + method public static int getDefaultSmsSubscriptionId(); + method public static android.telephony.SmsManager getSmsManagerForSubscriptionId(int); + method public int getSubscriptionId(); + method public void injectSmsPdu(byte[], java.lang.String, android.app.PendingIntent); method public void sendDataMessage(java.lang.String, java.lang.String, short, byte[], android.app.PendingIntent, android.app.PendingIntent); method public void sendMultimediaMessage(android.content.Context, android.net.Uri, java.lang.String, android.os.Bundle, android.app.PendingIntent); method public void sendMultipartTextMessage(java.lang.String, java.lang.String, java.util.ArrayList, java.util.ArrayList, java.util.ArrayList); method public void sendTextMessage(java.lang.String, java.lang.String, java.lang.String, android.app.PendingIntent, android.app.PendingIntent); field public static final java.lang.String EXTRA_MMS_DATA = "android.telephony.extra.MMS_DATA"; + field public static final java.lang.String EXTRA_MMS_HTTP_STATUS = "android.telephony.extra.MMS_HTTP_STATUS"; field public static final java.lang.String MMS_CONFIG_ALIAS_ENABLED = "aliasEnabled"; field public static final java.lang.String MMS_CONFIG_ALIAS_MAX_CHARS = "aliasMaxChars"; field public static final java.lang.String MMS_CONFIG_ALIAS_MIN_CHARS = "aliasMinChars"; @@ -28392,6 +28528,7 @@ package android.telephony { field public static final java.lang.String MMS_CONFIG_NOTIFY_WAP_MMSC_ENABLED = "enabledNotifyWapMMSC"; field public static final java.lang.String MMS_CONFIG_RECIPIENT_LIMIT = "recipientLimit"; field public static final java.lang.String MMS_CONFIG_SEND_MULTIPART_SMS_AS_SEPARATE_MESSAGES = "sendMultipartSmsAsSeparateMessages"; + field public static final java.lang.String MMS_CONFIG_SHOW_CELL_BROADCAST_APP_LINKS = "config_cellBroadcastAppLinks"; field public static final java.lang.String MMS_CONFIG_SMS_DELIVERY_REPORT_ENABLED = "enableSMSDeliveryReports"; field public static final java.lang.String MMS_CONFIG_SMS_TO_MMS_TEXT_LENGTH_THRESHOLD = "smsToMmsTextLengthThreshold"; field public static final java.lang.String MMS_CONFIG_SMS_TO_MMS_TEXT_THRESHOLD = "smsToMmsTextThreshold"; @@ -28404,6 +28541,7 @@ package android.telephony { field public static final int MMS_ERROR_HTTP_FAILURE = 4; // 0x4 field public static final int MMS_ERROR_INVALID_APN = 2; // 0x2 field public static final int MMS_ERROR_IO_ERROR = 5; // 0x5 + field public static final int MMS_ERROR_NO_DATA_NETWORK = 8; // 0x8 field public static final int MMS_ERROR_RETRY = 6; // 0x6 field public static final int MMS_ERROR_UNABLE_CONNECT_MMS = 3; // 0x3 field public static final int MMS_ERROR_UNSPECIFIED = 1; // 0x1 @@ -28476,6 +28614,43 @@ package android.telephony { field public byte[] encodedScAddress; } + public class SubscriptionInfo implements android.os.Parcelable { + method public android.graphics.Bitmap createIconBitmap(android.content.Context); + method public int describeContents(); + method public java.lang.CharSequence getCarrierName(); + method public java.lang.String getCountryIso(); + method public int getDataRoaming(); + method public java.lang.CharSequence getDisplayName(); + method public java.lang.String getIccId(); + method public int getIconTint(); + method public int getMcc(); + method public int getMnc(); + method public java.lang.String getNumber(); + method public int getSimSlotIndex(); + method public int getSubscriptionId(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public class SubscriptionManager { + method public void addOnSubscriptionsChangedListener(android.telephony.SubscriptionManager.OnSubscriptionsChangedListener); + method public static android.telephony.SubscriptionManager from(android.content.Context); + method public android.telephony.SubscriptionInfo getActiveSubscriptionInfo(int); + method public int getActiveSubscriptionInfoCount(); + method public int getActiveSubscriptionInfoCountMax(); + method public android.telephony.SubscriptionInfo getActiveSubscriptionInfoForSimSlotIndex(int); + method public java.util.List getActiveSubscriptionInfoList(); + method public boolean isNetworkRoaming(int); + method public void removeOnSubscriptionsChangedListener(android.telephony.SubscriptionManager.OnSubscriptionsChangedListener); + field public static final int DATA_ROAMING_DISABLE = 0; // 0x0 + field public static final int DATA_ROAMING_ENABLE = 1; // 0x1 + } + + public static class SubscriptionManager.OnSubscriptionsChangedListener { + ctor public SubscriptionManager.OnSubscriptionsChangedListener(); + method public void onSubscriptionsChanged(); + } + public class TelephonyManager { method public java.util.List getAllCellInfo(); method public int getCallState(); @@ -28502,6 +28677,7 @@ package android.telephony { method public java.lang.String getSubscriberId(); method public java.lang.String getVoiceMailAlphaTag(); method public java.lang.String getVoiceMailNumber(); + method public boolean hasCarrierPrivileges(); method public boolean hasIccCard(); method public boolean iccCloseLogicalChannel(int); method public byte[] iccExchangeSimIO(int, int, int, int, int, java.lang.String); @@ -28510,8 +28686,13 @@ package android.telephony { method public java.lang.String iccTransmitApduLogicalChannel(int, int, int, int, int, int, java.lang.String); method public boolean isNetworkRoaming(); method public boolean isSmsCapable(); + method public boolean isVoiceCapable(); method public void listen(android.telephony.PhoneStateListener, int); method public java.lang.String sendEnvelopeWithStatus(java.lang.String); + method public boolean setLine1NumberForDisplay(java.lang.String, java.lang.String); + method public boolean setOperatorBrandOverride(java.lang.String); + method public boolean setPreferredNetworkTypeToGlobal(); + method public boolean setVoiceMailNumber(java.lang.String, java.lang.String); field public static final java.lang.String ACTION_PHONE_STATE_CHANGED = "android.intent.action.PHONE_STATE"; field public static final java.lang.String ACTION_RESPOND_VIA_MESSAGE = "android.intent.action.RESPOND_VIA_MESSAGE"; field public static final int CALL_STATE_IDLE = 0; // 0x0 @@ -29806,7 +29987,7 @@ package android.text { field public static final int CAP_MODE_CHARACTERS = 4096; // 0x1000 field public static final int CAP_MODE_SENTENCES = 16384; // 0x4000 field public static final int CAP_MODE_WORDS = 8192; // 0x2000 - field public static final android.os.Parcelable.Creator CHAR_SEQUENCE_CREATOR; + field public static final android.os.Parcelable.Creator CHAR_SEQUENCE_CREATOR; } public static abstract interface TextUtils.EllipsizeCallback { @@ -29857,19 +30038,6 @@ package android.text.format { method public static java.text.DateFormat getMediumDateFormat(android.content.Context); method public static java.text.DateFormat getTimeFormat(android.content.Context); method public static boolean is24HourFormat(android.content.Context); - field public static final deprecated char AM_PM = 97; // 0x0061 'a' - field public static final deprecated char CAPITAL_AM_PM = 65; // 0x0041 'A' - field public static final deprecated char DATE = 100; // 0x0064 'd' - field public static final deprecated char DAY = 69; // 0x0045 'E' - field public static final deprecated char HOUR = 104; // 0x0068 'h' - field public static final deprecated char HOUR_OF_DAY = 107; // 0x006b 'k' - field public static final deprecated char MINUTE = 109; // 0x006d 'm' - field public static final deprecated char MONTH = 77; // 0x004d 'M' - field public static final deprecated char QUOTE = 39; // 0x0027 '\'' - field public static final deprecated char SECONDS = 115; // 0x0073 's' - field public static final deprecated char STANDALONE_MONTH = 76; // 0x004c 'L' - field public static final deprecated char TIME_ZONE = 122; // 0x007a 'z' - field public static final deprecated char YEAR = 121; // 0x0079 'y' } public class DateUtils { @@ -29944,7 +30112,7 @@ package android.text.format { method public static java.lang.String formatShortFileSize(android.content.Context, long); } - public class Time { + public deprecated class Time { ctor public Time(java.lang.String); ctor public Time(); ctor public Time(android.text.format.Time); @@ -30530,7 +30698,7 @@ package android.text.style { method public void updateDrawState(android.text.TextPaint); method public void writeToParcel(android.os.Parcel, int); field public static final java.lang.String ACTION_SUGGESTION_PICKED = "android.text.style.SUGGESTION_PICKED"; - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int FLAG_AUTO_CORRECTION = 4; // 0x4 field public static final int FLAG_EASY_CORRECT = 1; // 0x1 field public static final int FLAG_MISSPELLED = 2; // 0x2 @@ -30914,6 +31082,7 @@ package android.transition { ctor public ChangeBounds(android.content.Context, android.util.AttributeSet); method public void captureEndValues(android.transition.TransitionValues); method public void captureStartValues(android.transition.TransitionValues); + method public boolean getResizeClip(); method public deprecated void setReparent(boolean); method public void setResizeClip(boolean); } @@ -31110,7 +31279,7 @@ package android.transition { public class TransitionValues { ctor public TransitionValues(); - field public final java.util.Map values; + field public final java.util.Map values; field public android.view.View view; } @@ -31266,6 +31435,7 @@ package android.util { method public boolean equals(android.util.DisplayMetrics); method public void setTo(android.util.DisplayMetrics); method public void setToDefaults(); + field public static final int DENSITY_280 = 280; // 0x118 field public static final int DENSITY_400 = 400; // 0x190 field public static final int DENSITY_560 = 560; // 0x230 field public static final int DENSITY_DEFAULT = 160; // 0xa0 @@ -31315,7 +31485,7 @@ package android.util { field public final int mTag; } - public class FloatMath { + public deprecated class FloatMath { method public static float ceil(float); method public static float cos(float); method public static float exp(float); @@ -31737,6 +31907,7 @@ package android.util { method public static int complexToDimensionPixelSize(int, android.util.DisplayMetrics); method public static float complexToFloat(int); method public static float complexToFraction(int, float, float); + method public int getComplexUnit(); method public float getDimension(android.util.DisplayMetrics); method public final float getFloat(); method public float getFraction(float, float); @@ -31759,6 +31930,8 @@ package android.util { field public static final int COMPLEX_UNIT_PX = 0; // 0x0 field public static final int COMPLEX_UNIT_SHIFT = 0; // 0x0 field public static final int COMPLEX_UNIT_SP = 2; // 0x2 + field public static final int DATA_NULL_EMPTY = 1; // 0x1 + field public static final int DATA_NULL_UNDEFINED = 0; // 0x0 field public static final int DENSITY_DEFAULT = 0; // 0x0 field public static final int DENSITY_NONE = 65535; // 0xffff field public static final int TYPE_ATTRIBUTE = 2; // 0x2 @@ -31818,7 +31991,7 @@ package android.view { method public int describeContents(); method public final android.os.Parcelable getSuperState(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final android.view.AbsSavedState EMPTY_STATE; } @@ -31951,7 +32124,7 @@ package android.view { field public static final int ACTION_DRAG_LOCATION = 2; // 0x2 field public static final int ACTION_DRAG_STARTED = 1; // 0x1 field public static final int ACTION_DROP = 3; // 0x3 - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public class FocusFinder { @@ -32088,7 +32261,7 @@ package android.view { method public boolean isVirtual(); method public boolean supportsSource(int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int KEYBOARD_TYPE_ALPHABETIC = 2; // 0x2 field public static final int KEYBOARD_TYPE_NONE = 0; // 0x0 field public static final int KEYBOARD_TYPE_NON_ALPHABETIC = 1; // 0x1 @@ -32142,7 +32315,7 @@ package android.view { method public abstract long getEventTime(); method public abstract int getSource(); method public boolean isFromSource(int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public final class InputQueue { @@ -32174,7 +32347,7 @@ package android.view { field public static final deprecated int BUILT_IN_KEYBOARD = 0; // 0x0 field public static final int COMBINING_ACCENT = -2147483648; // 0x80000000 field public static final int COMBINING_ACCENT_MASK = 2147483647; // 0x7fffffff - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int FULL = 4; // 0x4 field public static final char HEX_INPUT = 61184; // 0xef00 '\uef00' field public static final int MODIFIER_BEHAVIOR_CHORDED = 0; // 0x0 @@ -32266,7 +32439,7 @@ package android.view { field public static final int ACTION_DOWN = 0; // 0x0 field public static final int ACTION_MULTIPLE = 2; // 0x2 field public static final int ACTION_UP = 1; // 0x1 - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int FLAG_CANCELED = 32; // 0x20 field public static final int FLAG_CANCELED_LONG_PRESS = 256; // 0x100 field public static final int FLAG_EDITOR_ACTION = 16; // 0x10 @@ -32866,7 +33039,7 @@ package android.view { field public static final int BUTTON_PRIMARY = 1; // 0x1 field public static final int BUTTON_SECONDARY = 2; // 0x2 field public static final int BUTTON_TERTIARY = 4; // 0x4 - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int EDGE_BOTTOM = 2; // 0x2 field public static final int EDGE_LEFT = 4; // 0x4 field public static final int EDGE_RIGHT = 8; // 0x8 @@ -32992,7 +33165,7 @@ package android.view { method public deprecated void unlockCanvas(android.graphics.Canvas); method public void unlockCanvasAndPost(android.graphics.Canvas); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int ROTATION_0 = 0; // 0x0 field public static final int ROTATION_180 = 2; // 0x2 field public static final int ROTATION_270 = 3; // 0x3 @@ -33151,6 +33324,7 @@ package android.view { method public void dispatchDisplayHint(int); method public boolean dispatchDragEvent(android.view.DragEvent); method protected void dispatchDraw(android.graphics.Canvas); + method public void dispatchDrawableHotspotChanged(float, float); method protected boolean dispatchGenericFocusedEvent(android.view.MotionEvent); method public boolean dispatchGenericMotionEvent(android.view.MotionEvent); method protected boolean dispatchGenericPointerEvent(android.view.MotionEvent); @@ -33160,6 +33334,7 @@ package android.view { method public boolean dispatchKeyShortcutEvent(android.view.KeyEvent); method public boolean dispatchNestedFling(float, float, boolean); method public boolean dispatchNestedPreFling(float, float); + method public boolean dispatchNestedPrePerformAccessibilityAction(int, android.os.Bundle); method public boolean dispatchNestedPreScroll(int, int, int[], int[]); method public boolean dispatchNestedScroll(int, int, int, int, int[]); method public boolean dispatchPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent); @@ -33189,6 +33364,8 @@ package android.view { method public static int generateViewId(); method public int getAccessibilityLiveRegion(); method public android.view.accessibility.AccessibilityNodeProvider getAccessibilityNodeProvider(); + method public int getAccessibilityTraversalAfter(); + method public int getAccessibilityTraversalBefore(); method public float getAlpha(); method public android.view.animation.Animation getAnimation(); method public android.os.IBinder getApplicationWindowToken(); @@ -33465,6 +33642,8 @@ package android.view { method public void sendAccessibilityEventUnchecked(android.view.accessibility.AccessibilityEvent); method public void setAccessibilityDelegate(android.view.View.AccessibilityDelegate); method public void setAccessibilityLiveRegion(int); + method public void setAccessibilityTraversalAfter(int); + method public void setAccessibilityTraversalBefore(int); method public void setActivated(boolean); method public void setAlpha(float); method public void setAnimation(android.view.animation.Animation); @@ -33586,7 +33765,7 @@ package android.view { field public static final int ACCESSIBILITY_LIVE_REGION_ASSERTIVE = 2; // 0x2 field public static final int ACCESSIBILITY_LIVE_REGION_NONE = 0; // 0x0 field public static final int ACCESSIBILITY_LIVE_REGION_POLITE = 1; // 0x1 - field public static final android.util.Property ALPHA; + field public static final android.util.Property ALPHA; field public static final int DRAWING_CACHE_QUALITY_AUTO = 0; // 0x0 field public static final int DRAWING_CACHE_QUALITY_HIGH = 1048576; // 0x100000 field public static final int DRAWING_CACHE_QUALITY_LOW = 524288; // 0x80000 @@ -33652,11 +33831,11 @@ package android.view { field protected static final int[] PRESSED_SELECTED_WINDOW_FOCUSED_STATE_SET; field protected static final int[] PRESSED_STATE_SET; field protected static final int[] PRESSED_WINDOW_FOCUSED_STATE_SET; - field public static final android.util.Property ROTATION; - field public static final android.util.Property ROTATION_X; - field public static final android.util.Property ROTATION_Y; - field public static final android.util.Property SCALE_X; - field public static final android.util.Property SCALE_Y; + field public static final android.util.Property ROTATION; + field public static final android.util.Property ROTATION_X; + field public static final android.util.Property ROTATION_Y; + field public static final android.util.Property SCALE_X; + field public static final android.util.Property SCALE_Y; field public static final int SCREEN_STATE_OFF = 0; // 0x0 field public static final int SCREEN_STATE_ON = 1; // 0x1 field public static final int SCROLLBARS_INSIDE_INSET = 16777216; // 0x1000000 @@ -33697,15 +33876,15 @@ package android.view { field public static final int TEXT_DIRECTION_LOCALE = 5; // 0x5 field public static final int TEXT_DIRECTION_LTR = 3; // 0x3 field public static final int TEXT_DIRECTION_RTL = 4; // 0x4 - field public static final android.util.Property TRANSLATION_X; - field public static final android.util.Property TRANSLATION_Y; - field public static final android.util.Property TRANSLATION_Z; + field public static final android.util.Property TRANSLATION_X; + field public static final android.util.Property TRANSLATION_Y; + field public static final android.util.Property TRANSLATION_Z; field protected static final java.lang.String VIEW_LOG_TAG = "View"; field public static final int VISIBLE = 0; // 0x0 field protected static final int[] WINDOW_FOCUSED_STATE_SET; - field public static final android.util.Property X; - field public static final android.util.Property Y; - field public static final android.util.Property Z; + field public static final android.util.Property X; + field public static final android.util.Property Y; + field public static final android.util.Property Z; } public static class View.AccessibilityDelegate { @@ -33724,7 +33903,7 @@ package android.view { public static class View.BaseSavedState extends android.view.AbsSavedState { ctor public View.BaseSavedState(android.os.Parcel); ctor public View.BaseSavedState(android.os.Parcelable); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public static class View.DragShadowBuilder { @@ -33968,6 +34147,7 @@ package android.view { method protected abstract void onLayout(boolean, int, int, int, int); method public boolean onNestedFling(android.view.View, float, float, boolean); method public boolean onNestedPreFling(android.view.View, float, float); + method public boolean onNestedPrePerformAccessibilityAction(android.view.View, int, android.os.Bundle); method public void onNestedPreScroll(android.view.View, int, int, int[]); method public void onNestedScroll(android.view.View, int, int, int, int); method public void onNestedScrollAccepted(android.view.View, android.view.View, int); @@ -34116,6 +34296,7 @@ package android.view { method public abstract void notifySubtreeAccessibilityStateChanged(android.view.View, android.view.View, int); method public abstract boolean onNestedFling(android.view.View, float, float, boolean); method public abstract boolean onNestedPreFling(android.view.View, float, float); + method public abstract boolean onNestedPrePerformAccessibilityAction(android.view.View, int, android.os.Bundle); method public abstract void onNestedPreScroll(android.view.View, int, int, int[]); method public abstract void onNestedScroll(android.view.View, int, int, int, int); method public abstract void onNestedScrollAccepted(android.view.View, android.view.View, int); @@ -34267,6 +34448,7 @@ package android.view { method public final android.content.Context getContext(); method public abstract android.view.View getCurrentFocus(); method public abstract android.view.View getDecorView(); + method public static int getDefaultFeatures(android.content.Context); method public android.transition.Transition getEnterTransition(); method public android.transition.Transition getExitTransition(); method protected final int getFeatures(); @@ -34315,12 +34497,14 @@ package android.view { method public void setCallback(android.view.Window.Callback); method public abstract void setChildDrawable(int, android.graphics.drawable.Drawable); method public abstract void setChildInt(int, int); + method public void setClipToOutline(boolean); method public void setContainer(android.view.Window); method public abstract void setContentView(int); method public abstract void setContentView(android.view.View); method public abstract void setContentView(android.view.View, android.view.ViewGroup.LayoutParams); method protected void setDefaultWindowFormat(int); method public void setDimAmount(float); + method public void setElevation(float); method public void setEnterTransition(android.transition.Transition); method public void setExitTransition(android.transition.Transition); method public abstract void setFeatureDrawable(int, android.graphics.drawable.Drawable); @@ -34366,7 +34550,7 @@ package android.view { method public abstract void takeKeyEvents(boolean); method public abstract void takeSurface(android.view.SurfaceHolder.Callback2); method public abstract void togglePanel(int, android.view.KeyEvent); - field protected static final int DEFAULT_FEATURES = 65; // 0x41 + field protected static final deprecated int DEFAULT_FEATURES = 65; // 0x41 field public static final int FEATURE_ACTION_BAR = 8; // 0x8 field public static final int FEATURE_ACTION_BAR_OVERLAY = 9; // 0x9 field public static final int FEATURE_ACTION_MODE_OVERLAY = 10; // 0xa @@ -34421,7 +34605,7 @@ package android.view { public final class WindowAnimationFrameStats extends android.view.FrameStats implements android.os.Parcelable { method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public final class WindowContentFrameStats extends android.view.FrameStats implements android.os.Parcelable { @@ -34429,7 +34613,7 @@ package android.view { method public long getFramePostedTimeNano(int); method public long getFrameReadyTimeNano(int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public class WindowId implements android.os.Parcelable { @@ -34438,7 +34622,7 @@ package android.view { method public void registerFocusObserver(android.view.WindowId.FocusObserver); method public void unregisterFocusObserver(android.view.WindowId.FocusObserver); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public static abstract class WindowId.FocusObserver { @@ -34503,7 +34687,7 @@ package android.view { field public static final float BRIGHTNESS_OVERRIDE_FULL = 1.0f; field public static final float BRIGHTNESS_OVERRIDE_NONE = -1.0f; field public static final float BRIGHTNESS_OVERRIDE_OFF = 0.0f; - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int DIM_AMOUNT_CHANGED = 32; // 0x20 field public static final int FIRST_APPLICATION_WINDOW = 1; // 0x1 field public static final int FIRST_SUB_WINDOW = 1000; // 0x3e8 @@ -34521,6 +34705,7 @@ package android.view { field public static final int FLAG_HARDWARE_ACCELERATED = 16777216; // 0x1000000 field public static final int FLAG_IGNORE_CHEEK_PRESSES = 32768; // 0x8000 field public static final int FLAG_KEEP_SCREEN_ON = 128; // 0x80 + field public static final int FLAG_LAYOUT_ATTACHED_IN_DECOR = 1073741824; // 0x40000000 field public static final int FLAG_LAYOUT_INSET_DECOR = 65536; // 0x10000 field public static final int FLAG_LAYOUT_IN_OVERSCAN = 33554432; // 0x2000000 field public static final int FLAG_LAYOUT_IN_SCREEN = 256; // 0x100 @@ -34570,6 +34755,7 @@ package android.view { field public static final int SOFT_INPUT_STATE_UNSPECIFIED = 0; // 0x0 field public static final int SOFT_INPUT_STATE_VISIBLE = 4; // 0x4 field public static final int TITLE_CHANGED = 64; // 0x40 + field public static final int TYPE_ACCESSIBILITY_OVERLAY = 2032; // 0x7f0 field public static final int TYPE_APPLICATION = 2; // 0x2 field public static final int TYPE_APPLICATION_ATTACHED_DIALOG = 1003; // 0x3eb field public static final int TYPE_APPLICATION_MEDIA = 1001; // 0x3e9 @@ -34649,7 +34835,7 @@ package android.view.accessibility { field public static final int CONTENT_CHANGE_TYPE_SUBTREE = 1; // 0x1 field public static final int CONTENT_CHANGE_TYPE_TEXT = 2; // 0x2 field public static final int CONTENT_CHANGE_TYPE_UNDEFINED = 0; // 0x0 - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int INVALID_POSITION = -1; // 0xffffffff field public static final deprecated int MAX_TEXT_LENGTH = 500; // 0x1f4 field public static final int TYPES_ALL_MASK = -1; // 0xffffffff @@ -34740,6 +34926,8 @@ package android.view.accessibility { method public java.lang.CharSequence getText(); method public int getTextSelectionEnd(); method public int getTextSelectionStart(); + method public android.view.accessibility.AccessibilityNodeInfo getTraversalAfter(); + method public android.view.accessibility.AccessibilityNodeInfo getTraversalBefore(); method public java.lang.String getViewIdResourceName(); method public android.view.accessibility.AccessibilityWindowInfo getWindow(); method public int getWindowId(); @@ -34810,6 +34998,10 @@ package android.view.accessibility { method public void setSource(android.view.View, int); method public void setText(java.lang.CharSequence); method public void setTextSelection(int, int); + method public void setTraversalAfter(android.view.View); + method public void setTraversalAfter(android.view.View, int); + method public void setTraversalBefore(android.view.View); + method public void setTraversalBefore(android.view.View, int); method public void setViewIdResourceName(java.lang.String); method public void setVisibleToUser(boolean); method public void writeToParcel(android.os.Parcel, int); @@ -34841,7 +35033,7 @@ package android.view.accessibility { field public static final int ACTION_SELECT = 4; // 0x4 field public static final int ACTION_SET_SELECTION = 131072; // 0x20000 field public static final int ACTION_SET_TEXT = 2097152; // 0x200000 - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int FOCUS_ACCESSIBILITY = 2; // 0x2 field public static final int FOCUS_INPUT = 1; // 0x1 field public static final int MOVEMENT_GRANULARITY_CHARACTER = 1; // 0x1 @@ -34988,7 +35180,8 @@ package android.view.accessibility { method public static android.view.accessibility.AccessibilityWindowInfo obtain(android.view.accessibility.AccessibilityWindowInfo); method public void recycle(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int TYPE_ACCESSIBILITY_OVERLAY = 4; // 0x4 field public static final int TYPE_APPLICATION = 1; // 0x1 field public static final int TYPE_INPUT_METHOD = 2; // 0x2 field public static final int TYPE_SYSTEM = 3; // 0x3 @@ -35035,13 +35228,13 @@ package android.view.accessibility { package android.view.animation { - public class AccelerateDecelerateInterpolator implements android.view.animation.Interpolator { + public class AccelerateDecelerateInterpolator extends android.view.animation.BaseInterpolator { ctor public AccelerateDecelerateInterpolator(); ctor public AccelerateDecelerateInterpolator(android.content.Context, android.util.AttributeSet); method public float getInterpolation(float); } - public class AccelerateInterpolator implements android.view.animation.Interpolator { + public class AccelerateInterpolator extends android.view.animation.BaseInterpolator { ctor public AccelerateInterpolator(); ctor public AccelerateInterpolator(float); ctor public AccelerateInterpolator(android.content.Context, android.util.AttributeSet); @@ -35143,14 +35336,14 @@ package android.view.animation { method public static android.view.animation.Animation makeOutAnimation(android.content.Context, boolean); } - public class AnticipateInterpolator implements android.view.animation.Interpolator { + public class AnticipateInterpolator extends android.view.animation.BaseInterpolator { ctor public AnticipateInterpolator(); ctor public AnticipateInterpolator(float); ctor public AnticipateInterpolator(android.content.Context, android.util.AttributeSet); method public float getInterpolation(float); } - public class AnticipateOvershootInterpolator implements android.view.animation.Interpolator { + public class AnticipateOvershootInterpolator extends android.view.animation.BaseInterpolator { ctor public AnticipateOvershootInterpolator(); ctor public AnticipateOvershootInterpolator(float); ctor public AnticipateOvershootInterpolator(float, float); @@ -35158,19 +35351,23 @@ package android.view.animation { method public float getInterpolation(float); } - public class BounceInterpolator implements android.view.animation.Interpolator { + public abstract class BaseInterpolator implements android.view.animation.Interpolator { + ctor public BaseInterpolator(); + } + + public class BounceInterpolator extends android.view.animation.BaseInterpolator { ctor public BounceInterpolator(); ctor public BounceInterpolator(android.content.Context, android.util.AttributeSet); method public float getInterpolation(float); } - public class CycleInterpolator implements android.view.animation.Interpolator { + public class CycleInterpolator extends android.view.animation.BaseInterpolator { ctor public CycleInterpolator(float); ctor public CycleInterpolator(android.content.Context, android.util.AttributeSet); method public float getInterpolation(float); } - public class DecelerateInterpolator implements android.view.animation.Interpolator { + public class DecelerateInterpolator extends android.view.animation.BaseInterpolator { ctor public DecelerateInterpolator(); ctor public DecelerateInterpolator(float); ctor public DecelerateInterpolator(android.content.Context, android.util.AttributeSet); @@ -35245,20 +35442,20 @@ package android.view.animation { field public int index; } - public class LinearInterpolator implements android.view.animation.Interpolator { + public class LinearInterpolator extends android.view.animation.BaseInterpolator { ctor public LinearInterpolator(); ctor public LinearInterpolator(android.content.Context, android.util.AttributeSet); method public float getInterpolation(float); } - public class OvershootInterpolator implements android.view.animation.Interpolator { + public class OvershootInterpolator extends android.view.animation.BaseInterpolator { ctor public OvershootInterpolator(); ctor public OvershootInterpolator(float); ctor public OvershootInterpolator(android.content.Context, android.util.AttributeSet); method public float getInterpolation(float); } - public class PathInterpolator implements android.view.animation.Interpolator { + public class PathInterpolator extends android.view.animation.BaseInterpolator { ctor public PathInterpolator(android.graphics.Path); ctor public PathInterpolator(float, float); ctor public PathInterpolator(float, float, float, float); @@ -35350,7 +35547,7 @@ package android.view.inputmethod { method public int getPosition(); method public java.lang.CharSequence getText(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public final class CorrectionInfo implements android.os.Parcelable { @@ -35360,7 +35557,7 @@ package android.view.inputmethod { method public int getOffset(); method public java.lang.CharSequence getOldText(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public final class CursorAnchorInfo implements android.os.Parcelable { @@ -35379,7 +35576,7 @@ package android.view.inputmethod { method public int getSelectionEnd(); method public int getSelectionStart(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int FLAG_HAS_INVISIBLE_REGION = 2; // 0x2 field public static final int FLAG_HAS_VISIBLE_REGION = 1; // 0x1 field public static final int FLAG_IS_RTL = 4; // 0x4 @@ -35402,7 +35599,7 @@ package android.view.inputmethod { method public void dump(android.util.Printer, java.lang.String); method public final void makeCompatible(int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int IME_ACTION_DONE = 6; // 0x6 field public static final int IME_ACTION_GO = 2; // 0x2 field public static final int IME_ACTION_NEXT = 5; // 0x5 @@ -35440,7 +35637,7 @@ package android.view.inputmethod { ctor public ExtractedText(); method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int FLAG_SELECTING = 2; // 0x2 field public static final int FLAG_SINGLE_LINE = 1; // 0x1 field public int flags; @@ -35456,7 +35653,7 @@ package android.view.inputmethod { ctor public ExtractedTextRequest(); method public int describeContents(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public int flags; field public int hintMaxChars; field public int hintMaxLines; @@ -35472,7 +35669,7 @@ package android.view.inputmethod { method public int getPid(); method public int getUid(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public abstract interface InputConnection { @@ -35570,7 +35767,7 @@ package android.view.inputmethod { method public android.graphics.drawable.Drawable loadIcon(android.content.pm.PackageManager); method public java.lang.CharSequence loadLabel(android.content.pm.PackageManager); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public final class InputMethodManager { @@ -35657,7 +35854,7 @@ package android.view.inputmethod { method public boolean isAuxiliary(); method public boolean overridesImplicitlyEnabledSubtype(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public static class InputMethodSubtype.InputMethodSubtypeBuilder { @@ -35687,7 +35884,7 @@ package android.view.textservice { method public int getSuggestionsCount(); method public android.view.textservice.SuggestionsInfo getSuggestionsInfoAt(int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public final class SpellCheckerInfo implements android.os.Parcelable { @@ -35702,7 +35899,7 @@ package android.view.textservice { method public android.graphics.drawable.Drawable loadIcon(android.content.pm.PackageManager); method public java.lang.CharSequence loadLabel(android.content.pm.PackageManager); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public class SpellCheckerSession { @@ -35731,7 +35928,7 @@ package android.view.textservice { method public java.lang.String getLocale(); method public int getNameResId(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public final class SuggestionsInfo implements android.os.Parcelable { @@ -35746,7 +35943,7 @@ package android.view.textservice { method public int getSuggestionsCount(); method public void setCookieAndSequence(int, int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; field public static final int RESULT_ATTR_HAS_RECOMMENDED_SUGGESTIONS = 4; // 0x4 field public static final int RESULT_ATTR_IN_THE_DICTIONARY = 1; // 0x1 field public static final int RESULT_ATTR_LOOKS_LIKE_TYPO = 2; // 0x2 @@ -35763,7 +35960,7 @@ package android.view.textservice { method public int getSequence(); method public java.lang.String getText(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public final class TextServicesManager { @@ -37751,6 +37948,7 @@ package android.widget { public class PopupMenu { ctor public PopupMenu(android.content.Context, android.view.View); ctor public PopupMenu(android.content.Context, android.view.View, int); + ctor public PopupMenu(android.content.Context, android.view.View, int, int, int); method public void dismiss(); method public android.view.View.OnTouchListener getDragToOpenListener(); method public android.view.Menu getMenu(); @@ -37791,6 +37989,7 @@ package android.widget { method public int getSoftInputMode(); method public int getWidth(); method public boolean isAboveAnchor(); + method public boolean isAttachedInDecor(); method public boolean isClippingEnabled(); method public boolean isFocusable(); method public boolean isOutsideTouchable(); @@ -37798,6 +37997,7 @@ package android.widget { method public boolean isSplitTouchEnabled(); method public boolean isTouchable(); method public void setAnimationStyle(int); + method public void setAttachedInDecor(boolean); method public void setBackgroundDrawable(android.graphics.drawable.Drawable); method public void setClippingEnabled(boolean); method public void setContentView(android.view.View); @@ -38007,6 +38207,8 @@ package android.widget { method public boolean onLoadClass(java.lang.Class); method public void reapply(android.content.Context, android.view.View); method public void removeAllViews(int); + method public void setAccessibilityTraversalAfter(int, int); + method public void setAccessibilityTraversalBefore(int, int); method public void setBitmap(int, java.lang.String, android.graphics.Bitmap); method public void setBoolean(int, java.lang.String, boolean); method public void setBundle(int, java.lang.String, android.os.Bundle); @@ -38047,7 +38249,7 @@ package android.widget { method public void showNext(int); method public void showPrevious(int); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public static class RemoteViews.ActionException extends java.lang.RuntimeException { @@ -38745,7 +38947,7 @@ package android.widget { } public static class TextView.SavedState extends android.view.View.BaseSavedState { - field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Parcelable.Creator CREATOR; } public class TimePicker extends android.widget.FrameLayout { @@ -40471,7 +40673,7 @@ package java.lang { method public static java.lang.Boolean valueOf(boolean); field public static final java.lang.Boolean FALSE; field public static final java.lang.Boolean TRUE; - field public static final java.lang.Class TYPE; + field public static final java.lang.Class TYPE; } public final class Byte extends java.lang.Number implements java.lang.Comparable { @@ -40493,7 +40695,7 @@ package java.lang { field public static final byte MAX_VALUE = 127; // 0x7f field public static final byte MIN_VALUE = -128; // 0xffffff80 field public static final int SIZE = 8; // 0x8 - field public static final java.lang.Class TYPE; + field public static final java.lang.Class TYPE; } public abstract interface CharSequence { @@ -40649,7 +40851,7 @@ package java.lang { field public static final byte START_PUNCTUATION = 21; // 0x15 field public static final byte SURROGATE = 19; // 0x13 field public static final byte TITLECASE_LETTER = 3; // 0x3 - field public static final java.lang.Class TYPE; + field public static final java.lang.Class TYPE; field public static final byte UNASSIGNED = 0; // 0x0 field public static final byte UPPERCASE_LETTER = 1; // 0x1 } @@ -41045,7 +41247,7 @@ package java.lang { field public static final double NaN = (0.0/0.0); field public static final double POSITIVE_INFINITY = (1.0/0.0); field public static final int SIZE = 64; // 0x40 - field public static final java.lang.Class TYPE; + field public static final java.lang.Class TYPE; } public abstract class Enum implements java.lang.Comparable java.io.Serializable { @@ -41119,7 +41321,7 @@ package java.lang { field public static final float NaN = (0.0f/0.0f); field public static final float POSITIVE_INFINITY = (1.0f/0.0f); field public static final int SIZE = 32; // 0x20 - field public static final java.lang.Class TYPE; + field public static final java.lang.Class TYPE; } public class IllegalAccessError extends java.lang.IncompatibleClassChangeError { @@ -41217,7 +41419,7 @@ package java.lang { field public static final int MAX_VALUE = 2147483647; // 0x7fffffff field public static final int MIN_VALUE = -2147483648; // 0x80000000 field public static final int SIZE = 32; // 0x20 - field public static final java.lang.Class TYPE; + field public static final java.lang.Class TYPE; } public class InternalError extends java.lang.VirtualMachineError { @@ -41276,7 +41478,7 @@ package java.lang { field public static final long MAX_VALUE = 9223372036854775807L; // 0x7fffffffffffffffL field public static final long MIN_VALUE = -9223372036854775808L; // 0x8000000000000000L field public static final int SIZE = 64; // 0x40 - field public static final java.lang.Class TYPE; + field public static final java.lang.Class TYPE; } public final class Math { @@ -41584,7 +41786,7 @@ package java.lang { field public static final short MAX_VALUE = 32767; // 0x7fff field public static final short MIN_VALUE = -32768; // 0xffff8000 field public static final int SIZE = 16; // 0x10 - field public static final java.lang.Class TYPE; + field public static final java.lang.Class TYPE; } public class StackOverflowError extends java.lang.VirtualMachineError { @@ -41738,7 +41940,7 @@ package java.lang { method public static java.lang.String valueOf(long); method public static java.lang.String valueOf(java.lang.Object); method public static java.lang.String valueOf(boolean); - field public static final java.util.Comparator CASE_INSENSITIVE_ORDER; + field public static final java.util.Comparator CASE_INSENSITIVE_ORDER; } public final class StringBuffer extends java.lang.AbstractStringBuilder implements java.lang.Appendable java.lang.CharSequence java.io.Serializable { @@ -42025,7 +42227,7 @@ package java.lang { } public final class Void { - field public static final java.lang.Class TYPE; + field public static final java.lang.Class TYPE; } } @@ -48510,9 +48712,9 @@ package java.util { method public java.util.ResourceBundle newBundle(java.lang.String, java.util.Locale, java.lang.String, java.lang.ClassLoader, boolean) throws java.io.IOException, java.lang.IllegalAccessException, java.lang.InstantiationException; method public java.lang.String toBundleName(java.lang.String, java.util.Locale); method public final java.lang.String toResourceName(java.lang.String, java.lang.String); - field public static final java.util.List FORMAT_CLASS; - field public static final java.util.List FORMAT_DEFAULT; - field public static final java.util.List FORMAT_PROPERTIES; + field public static final java.util.List FORMAT_CLASS; + field public static final java.util.List FORMAT_DEFAULT; + field public static final java.util.List FORMAT_PROPERTIES; field public static final long TTL_DONT_CACHE = -1L; // 0xffffffffffffffffL field public static final long TTL_NO_EXPIRATION_CONTROL = -2L; // 0xfffffffffffffffeL } @@ -50102,7 +50304,7 @@ package java.util.jar { method public java.lang.Object remove(java.lang.Object); method public int size(); method public java.util.Collection values(); - field protected java.util.Map map; + field protected java.util.Map map; } public static class Attributes.Name { @@ -53923,9 +54125,9 @@ package junit.framework { method public void startTest(junit.framework.Test); method public synchronized void stop(); method public synchronized boolean wasSuccessful(); - field protected java.util.Vector fErrors; - field protected java.util.Vector fFailures; - field protected java.util.Vector fListeners; + field protected java.util.Vector fErrors; + field protected java.util.Vector fFailures; + field protected java.util.Vector fListeners; field protected int fRunTests; } @@ -54001,7 +54203,7 @@ package junit.runner { package org.apache.commons.logging { - public abstract interface Log { + public abstract deprecated interface Log { method public abstract void debug(java.lang.Object); method public abstract void debug(java.lang.Object, java.lang.Throwable); method public abstract void error(java.lang.Object); @@ -54026,26 +54228,26 @@ package org.apache.commons.logging { package org.apache.http { - public class ConnectionClosedException extends java.io.IOException { + public deprecated class ConnectionClosedException extends java.io.IOException { ctor public ConnectionClosedException(java.lang.String); } - public abstract interface ConnectionReuseStrategy { + public abstract deprecated interface ConnectionReuseStrategy { method public abstract boolean keepAlive(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext); } - public abstract interface FormattedHeader implements org.apache.http.Header { + public abstract deprecated interface FormattedHeader implements org.apache.http.Header { method public abstract org.apache.http.util.CharArrayBuffer getBuffer(); method public abstract int getValuePos(); } - public abstract interface Header { + public abstract deprecated interface Header { method public abstract org.apache.http.HeaderElement[] getElements() throws org.apache.http.ParseException; method public abstract java.lang.String getName(); method public abstract java.lang.String getValue(); } - public abstract interface HeaderElement { + public abstract deprecated interface HeaderElement { method public abstract java.lang.String getName(); method public abstract org.apache.http.NameValuePair getParameter(int); method public abstract org.apache.http.NameValuePair getParameterByName(java.lang.String); @@ -54054,17 +54256,17 @@ package org.apache.http { method public abstract java.lang.String getValue(); } - public abstract interface HeaderElementIterator implements java.util.Iterator { + public abstract deprecated interface HeaderElementIterator implements java.util.Iterator { method public abstract boolean hasNext(); method public abstract org.apache.http.HeaderElement nextElement(); } - public abstract interface HeaderIterator implements java.util.Iterator { + public abstract deprecated interface HeaderIterator implements java.util.Iterator { method public abstract boolean hasNext(); method public abstract org.apache.http.Header nextHeader(); } - public abstract interface HttpClientConnection implements org.apache.http.HttpConnection { + public abstract deprecated interface HttpClientConnection implements org.apache.http.HttpConnection { method public abstract void flush() throws java.io.IOException; method public abstract boolean isResponseAvailable(int) throws java.io.IOException; method public abstract void receiveResponseEntity(org.apache.http.HttpResponse) throws org.apache.http.HttpException, java.io.IOException; @@ -54073,7 +54275,7 @@ package org.apache.http { method public abstract void sendRequestHeader(org.apache.http.HttpRequest) throws org.apache.http.HttpException, java.io.IOException; } - public abstract interface HttpConnection { + public abstract deprecated interface HttpConnection { method public abstract void close() throws java.io.IOException; method public abstract org.apache.http.HttpConnectionMetrics getMetrics(); method public abstract int getSocketTimeout(); @@ -54083,7 +54285,7 @@ package org.apache.http { method public abstract void shutdown() throws java.io.IOException; } - public abstract interface HttpConnectionMetrics { + public abstract deprecated interface HttpConnectionMetrics { method public abstract java.lang.Object getMetric(java.lang.String); method public abstract long getReceivedBytesCount(); method public abstract long getRequestCount(); @@ -54092,7 +54294,7 @@ package org.apache.http { method public abstract void reset(); } - public abstract interface HttpEntity { + public abstract deprecated interface HttpEntity { method public abstract void consumeContent() throws java.io.IOException; method public abstract java.io.InputStream getContent() throws java.io.IOException, java.lang.IllegalStateException; method public abstract org.apache.http.Header getContentEncoding(); @@ -54104,19 +54306,19 @@ package org.apache.http { method public abstract void writeTo(java.io.OutputStream) throws java.io.IOException; } - public abstract interface HttpEntityEnclosingRequest implements org.apache.http.HttpRequest { + public abstract deprecated interface HttpEntityEnclosingRequest implements org.apache.http.HttpRequest { method public abstract boolean expectContinue(); method public abstract org.apache.http.HttpEntity getEntity(); method public abstract void setEntity(org.apache.http.HttpEntity); } - public class HttpException extends java.lang.Exception { + public deprecated class HttpException extends java.lang.Exception { ctor public HttpException(); ctor public HttpException(java.lang.String); ctor public HttpException(java.lang.String, java.lang.Throwable); } - public final class HttpHost implements java.lang.Cloneable { + public final deprecated class HttpHost implements java.lang.Cloneable { ctor public HttpHost(java.lang.String, int, java.lang.String); ctor public HttpHost(java.lang.String, int); ctor public HttpHost(java.lang.String); @@ -54134,14 +54336,14 @@ package org.apache.http { field protected final java.lang.String schemeName; } - public abstract interface HttpInetConnection implements org.apache.http.HttpConnection { + public abstract deprecated interface HttpInetConnection implements org.apache.http.HttpConnection { method public abstract java.net.InetAddress getLocalAddress(); method public abstract int getLocalPort(); method public abstract java.net.InetAddress getRemoteAddress(); method public abstract int getRemotePort(); } - public abstract interface HttpMessage { + public abstract deprecated interface HttpMessage { method public abstract void addHeader(org.apache.http.Header); method public abstract void addHeader(java.lang.String, java.lang.String); method public abstract boolean containsHeader(java.lang.String); @@ -54161,20 +54363,20 @@ package org.apache.http { method public abstract void setParams(org.apache.http.params.HttpParams); } - public abstract interface HttpRequest implements org.apache.http.HttpMessage { + public abstract deprecated interface HttpRequest implements org.apache.http.HttpMessage { method public abstract org.apache.http.RequestLine getRequestLine(); } - public abstract interface HttpRequestFactory { + public abstract deprecated interface HttpRequestFactory { method public abstract org.apache.http.HttpRequest newHttpRequest(org.apache.http.RequestLine) throws org.apache.http.MethodNotSupportedException; method public abstract org.apache.http.HttpRequest newHttpRequest(java.lang.String, java.lang.String) throws org.apache.http.MethodNotSupportedException; } - public abstract interface HttpRequestInterceptor { + public abstract deprecated interface HttpRequestInterceptor { method public abstract void process(org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; } - public abstract interface HttpResponse implements org.apache.http.HttpMessage { + public abstract deprecated interface HttpResponse implements org.apache.http.HttpMessage { method public abstract org.apache.http.HttpEntity getEntity(); method public abstract java.util.Locale getLocale(); method public abstract org.apache.http.StatusLine getStatusLine(); @@ -54187,16 +54389,16 @@ package org.apache.http { method public abstract void setStatusLine(org.apache.http.ProtocolVersion, int, java.lang.String); } - public abstract interface HttpResponseFactory { + public abstract deprecated interface HttpResponseFactory { method public abstract org.apache.http.HttpResponse newHttpResponse(org.apache.http.ProtocolVersion, int, org.apache.http.protocol.HttpContext); method public abstract org.apache.http.HttpResponse newHttpResponse(org.apache.http.StatusLine, org.apache.http.protocol.HttpContext); } - public abstract interface HttpResponseInterceptor { + public abstract deprecated interface HttpResponseInterceptor { method public abstract void process(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; } - public abstract interface HttpServerConnection implements org.apache.http.HttpConnection { + public abstract deprecated interface HttpServerConnection implements org.apache.http.HttpConnection { method public abstract void flush() throws java.io.IOException; method public abstract void receiveRequestEntity(org.apache.http.HttpEntityEnclosingRequest) throws org.apache.http.HttpException, java.io.IOException; method public abstract org.apache.http.HttpRequest receiveRequestHeader() throws org.apache.http.HttpException, java.io.IOException; @@ -54204,7 +54406,7 @@ package org.apache.http { method public abstract void sendResponseHeader(org.apache.http.HttpResponse) throws org.apache.http.HttpException, java.io.IOException; } - public abstract interface HttpStatus { + public abstract deprecated interface HttpStatus { field public static final int SC_ACCEPTED = 202; // 0xca field public static final int SC_BAD_GATEWAY = 502; // 0x1f6 field public static final int SC_BAD_REQUEST = 400; // 0x190 @@ -54255,7 +54457,7 @@ package org.apache.http { field public static final int SC_USE_PROXY = 305; // 0x131 } - public final class HttpVersion extends org.apache.http.ProtocolVersion implements java.io.Serializable { + public final deprecated class HttpVersion extends org.apache.http.ProtocolVersion implements java.io.Serializable { ctor public HttpVersion(int, int); field public static final java.lang.String HTTP = "HTTP"; field public static final org.apache.http.HttpVersion HTTP_0_9; @@ -54263,37 +54465,37 @@ package org.apache.http { field public static final org.apache.http.HttpVersion HTTP_1_1; } - public class MalformedChunkCodingException extends java.io.IOException { + public deprecated class MalformedChunkCodingException extends java.io.IOException { ctor public MalformedChunkCodingException(); ctor public MalformedChunkCodingException(java.lang.String); } - public class MethodNotSupportedException extends org.apache.http.HttpException { + public deprecated class MethodNotSupportedException extends org.apache.http.HttpException { ctor public MethodNotSupportedException(java.lang.String); ctor public MethodNotSupportedException(java.lang.String, java.lang.Throwable); } - public abstract interface NameValuePair { + public abstract deprecated interface NameValuePair { method public abstract java.lang.String getName(); method public abstract java.lang.String getValue(); } - public class NoHttpResponseException extends java.io.IOException { + public deprecated class NoHttpResponseException extends java.io.IOException { ctor public NoHttpResponseException(java.lang.String); } - public class ParseException extends java.lang.RuntimeException { + public deprecated class ParseException extends java.lang.RuntimeException { ctor public ParseException(); ctor public ParseException(java.lang.String); } - public class ProtocolException extends org.apache.http.HttpException { + public deprecated class ProtocolException extends org.apache.http.HttpException { ctor public ProtocolException(); ctor public ProtocolException(java.lang.String); ctor public ProtocolException(java.lang.String, java.lang.Throwable); } - public class ProtocolVersion implements java.lang.Cloneable java.io.Serializable { + public deprecated class ProtocolVersion implements java.lang.Cloneable java.io.Serializable { ctor public ProtocolVersion(java.lang.String, int, int); method public java.lang.Object clone() throws java.lang.CloneNotSupportedException; method public int compareToVersion(org.apache.http.ProtocolVersion); @@ -54311,28 +54513,28 @@ package org.apache.http { field protected final java.lang.String protocol; } - public abstract interface ReasonPhraseCatalog { + public abstract deprecated interface ReasonPhraseCatalog { method public abstract java.lang.String getReason(int, java.util.Locale); } - public abstract interface RequestLine { + public abstract deprecated interface RequestLine { method public abstract java.lang.String getMethod(); method public abstract org.apache.http.ProtocolVersion getProtocolVersion(); method public abstract java.lang.String getUri(); } - public abstract interface StatusLine { + public abstract deprecated interface StatusLine { method public abstract org.apache.http.ProtocolVersion getProtocolVersion(); method public abstract java.lang.String getReasonPhrase(); method public abstract int getStatusCode(); } - public abstract interface TokenIterator implements java.util.Iterator { + public abstract deprecated interface TokenIterator implements java.util.Iterator { method public abstract boolean hasNext(); method public abstract java.lang.String nextToken(); } - public class UnsupportedHttpVersionException extends org.apache.http.ProtocolException { + public deprecated class UnsupportedHttpVersionException extends org.apache.http.ProtocolException { ctor public UnsupportedHttpVersionException(); ctor public UnsupportedHttpVersionException(java.lang.String); } @@ -54341,14 +54543,14 @@ package org.apache.http { package org.apache.http.auth { - public final class AUTH { + public final deprecated class AUTH { field public static final java.lang.String PROXY_AUTH = "Proxy-Authenticate"; field public static final java.lang.String PROXY_AUTH_RESP = "Proxy-Authorization"; field public static final java.lang.String WWW_AUTH = "WWW-Authenticate"; field public static final java.lang.String WWW_AUTH_RESP = "Authorization"; } - public abstract interface AuthScheme { + public abstract deprecated interface AuthScheme { method public abstract org.apache.http.Header authenticate(org.apache.http.auth.Credentials, org.apache.http.HttpRequest) throws org.apache.http.auth.AuthenticationException; method public abstract java.lang.String getParameter(java.lang.String); method public abstract java.lang.String getRealm(); @@ -54358,11 +54560,11 @@ package org.apache.http.auth { method public abstract void processChallenge(org.apache.http.Header) throws org.apache.http.auth.MalformedChallengeException; } - public abstract interface AuthSchemeFactory { + public abstract deprecated interface AuthSchemeFactory { method public abstract org.apache.http.auth.AuthScheme newInstance(org.apache.http.params.HttpParams); } - public final class AuthSchemeRegistry { + public final deprecated class AuthSchemeRegistry { ctor public AuthSchemeRegistry(); method public synchronized org.apache.http.auth.AuthScheme getAuthScheme(java.lang.String, org.apache.http.params.HttpParams) throws java.lang.IllegalStateException; method public synchronized java.util.List getSchemeNames(); @@ -54371,7 +54573,7 @@ package org.apache.http.auth { method public synchronized void unregister(java.lang.String); } - public class AuthScope { + public deprecated class AuthScope { ctor public AuthScope(java.lang.String, int, java.lang.String, java.lang.String); ctor public AuthScope(java.lang.String, int, java.lang.String); ctor public AuthScope(java.lang.String, int); @@ -54388,7 +54590,7 @@ package org.apache.http.auth { field public static final java.lang.String ANY_SCHEME; } - public class AuthState { + public deprecated class AuthState { ctor public AuthState(); method public org.apache.http.auth.AuthScheme getAuthScheme(); method public org.apache.http.auth.AuthScope getAuthScope(); @@ -54400,35 +54602,35 @@ package org.apache.http.auth { method public void setCredentials(org.apache.http.auth.Credentials); } - public class AuthenticationException extends org.apache.http.ProtocolException { + public deprecated class AuthenticationException extends org.apache.http.ProtocolException { ctor public AuthenticationException(); ctor public AuthenticationException(java.lang.String); ctor public AuthenticationException(java.lang.String, java.lang.Throwable); } - public final class BasicUserPrincipal implements java.security.Principal { + public final deprecated class BasicUserPrincipal implements java.security.Principal { ctor public BasicUserPrincipal(java.lang.String); method public java.lang.String getName(); } - public abstract interface Credentials { + public abstract deprecated interface Credentials { method public abstract java.lang.String getPassword(); method public abstract java.security.Principal getUserPrincipal(); } - public class InvalidCredentialsException extends org.apache.http.auth.AuthenticationException { + public deprecated class InvalidCredentialsException extends org.apache.http.auth.AuthenticationException { ctor public InvalidCredentialsException(); ctor public InvalidCredentialsException(java.lang.String); ctor public InvalidCredentialsException(java.lang.String, java.lang.Throwable); } - public class MalformedChallengeException extends org.apache.http.ProtocolException { + public deprecated class MalformedChallengeException extends org.apache.http.ProtocolException { ctor public MalformedChallengeException(); ctor public MalformedChallengeException(java.lang.String); ctor public MalformedChallengeException(java.lang.String, java.lang.Throwable); } - public class NTCredentials implements org.apache.http.auth.Credentials { + public deprecated class NTCredentials implements org.apache.http.auth.Credentials { ctor public NTCredentials(java.lang.String); ctor public NTCredentials(java.lang.String, java.lang.String, java.lang.String, java.lang.String); method public java.lang.String getDomain(); @@ -54438,14 +54640,14 @@ package org.apache.http.auth { method public java.lang.String getWorkstation(); } - public class NTUserPrincipal implements java.security.Principal { + public deprecated class NTUserPrincipal implements java.security.Principal { ctor public NTUserPrincipal(java.lang.String, java.lang.String); method public java.lang.String getDomain(); method public java.lang.String getName(); method public java.lang.String getUsername(); } - public class UsernamePasswordCredentials implements org.apache.http.auth.Credentials { + public deprecated class UsernamePasswordCredentials implements org.apache.http.auth.Credentials { ctor public UsernamePasswordCredentials(java.lang.String); ctor public UsernamePasswordCredentials(java.lang.String, java.lang.String); method public java.lang.String getPassword(); @@ -54457,16 +54659,16 @@ package org.apache.http.auth { package org.apache.http.auth.params { - public abstract interface AuthPNames { + public abstract deprecated interface AuthPNames { field public static final java.lang.String CREDENTIAL_CHARSET = "http.auth.credential-charset"; } - public class AuthParamBean extends org.apache.http.params.HttpAbstractParamBean { + public deprecated class AuthParamBean extends org.apache.http.params.HttpAbstractParamBean { ctor public AuthParamBean(org.apache.http.params.HttpParams); method public void setCredentialCharset(java.lang.String); } - public final class AuthParams { + public final deprecated class AuthParams { method public static java.lang.String getCredentialCharset(org.apache.http.params.HttpParams); method public static void setCredentialCharset(org.apache.http.params.HttpParams, java.lang.String); } @@ -54475,39 +54677,39 @@ package org.apache.http.auth.params { package org.apache.http.client { - public abstract interface AuthenticationHandler { + public abstract deprecated interface AuthenticationHandler { method public abstract java.util.Map getChallenges(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.auth.MalformedChallengeException; method public abstract boolean isAuthenticationRequested(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext); method public abstract org.apache.http.auth.AuthScheme selectScheme(java.util.Map, org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.auth.AuthenticationException; } - public class CircularRedirectException extends org.apache.http.client.RedirectException { + public deprecated class CircularRedirectException extends org.apache.http.client.RedirectException { ctor public CircularRedirectException(); ctor public CircularRedirectException(java.lang.String); ctor public CircularRedirectException(java.lang.String, java.lang.Throwable); } - public class ClientProtocolException extends java.io.IOException { + public deprecated class ClientProtocolException extends java.io.IOException { ctor public ClientProtocolException(); ctor public ClientProtocolException(java.lang.String); ctor public ClientProtocolException(java.lang.Throwable); ctor public ClientProtocolException(java.lang.String, java.lang.Throwable); } - public abstract interface CookieStore { + public abstract deprecated interface CookieStore { method public abstract void addCookie(org.apache.http.cookie.Cookie); method public abstract void clear(); method public abstract boolean clearExpired(java.util.Date); method public abstract java.util.List getCookies(); } - public abstract interface CredentialsProvider { + public abstract deprecated interface CredentialsProvider { method public abstract void clear(); method public abstract org.apache.http.auth.Credentials getCredentials(org.apache.http.auth.AuthScope); method public abstract void setCredentials(org.apache.http.auth.AuthScope, org.apache.http.auth.Credentials); } - public abstract interface HttpClient { + public abstract deprecated interface HttpClient { method public abstract org.apache.http.HttpResponse execute(org.apache.http.client.methods.HttpUriRequest) throws org.apache.http.client.ClientProtocolException, java.io.IOException; method public abstract org.apache.http.HttpResponse execute(org.apache.http.client.methods.HttpUriRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.client.ClientProtocolException, java.io.IOException; method public abstract org.apache.http.HttpResponse execute(org.apache.http.HttpHost, org.apache.http.HttpRequest) throws org.apache.http.client.ClientProtocolException, java.io.IOException; @@ -54520,40 +54722,40 @@ package org.apache.http.client { method public abstract org.apache.http.params.HttpParams getParams(); } - public abstract interface HttpRequestRetryHandler { + public abstract deprecated interface HttpRequestRetryHandler { method public abstract boolean retryRequest(java.io.IOException, int, org.apache.http.protocol.HttpContext); } - public class HttpResponseException extends org.apache.http.client.ClientProtocolException { + public deprecated class HttpResponseException extends org.apache.http.client.ClientProtocolException { ctor public HttpResponseException(int, java.lang.String); method public int getStatusCode(); } - public class NonRepeatableRequestException extends org.apache.http.ProtocolException { + public deprecated class NonRepeatableRequestException extends org.apache.http.ProtocolException { ctor public NonRepeatableRequestException(); ctor public NonRepeatableRequestException(java.lang.String); } - public class RedirectException extends org.apache.http.ProtocolException { + public deprecated class RedirectException extends org.apache.http.ProtocolException { ctor public RedirectException(); ctor public RedirectException(java.lang.String); ctor public RedirectException(java.lang.String, java.lang.Throwable); } - public abstract interface RedirectHandler { + public abstract deprecated interface RedirectHandler { method public abstract java.net.URI getLocationURI(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.ProtocolException; method public abstract boolean isRedirectRequested(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext); } - public abstract interface RequestDirector { + public abstract deprecated interface RequestDirector { method public abstract org.apache.http.HttpResponse execute(org.apache.http.HttpHost, org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; } - public abstract interface ResponseHandler { + public abstract deprecated interface ResponseHandler { method public abstract T handleResponse(org.apache.http.HttpResponse) throws org.apache.http.client.ClientProtocolException, java.io.IOException; } - public abstract interface UserTokenHandler { + public abstract deprecated interface UserTokenHandler { method public abstract java.lang.Object getUserToken(org.apache.http.protocol.HttpContext); } @@ -54561,7 +54763,7 @@ package org.apache.http.client { package org.apache.http.client.entity { - public class UrlEncodedFormEntity extends org.apache.http.entity.StringEntity { + public deprecated class UrlEncodedFormEntity extends org.apache.http.entity.StringEntity { ctor public UrlEncodedFormEntity(java.util.List, java.lang.String) throws java.io.UnsupportedEncodingException; ctor public UrlEncodedFormEntity(java.util.List) throws java.io.UnsupportedEncodingException; } @@ -54570,13 +54772,13 @@ package org.apache.http.client.entity { package org.apache.http.client.methods { - public abstract interface AbortableHttpRequest { + public abstract deprecated interface AbortableHttpRequest { method public abstract void abort(); method public abstract void setConnectionRequest(org.apache.http.conn.ClientConnectionRequest) throws java.io.IOException; method public abstract void setReleaseTrigger(org.apache.http.conn.ConnectionReleaseTrigger) throws java.io.IOException; } - public class HttpDelete extends org.apache.http.client.methods.HttpRequestBase { + public deprecated class HttpDelete extends org.apache.http.client.methods.HttpRequestBase { ctor public HttpDelete(); ctor public HttpDelete(java.net.URI); ctor public HttpDelete(java.lang.String); @@ -54584,14 +54786,14 @@ package org.apache.http.client.methods { field public static final java.lang.String METHOD_NAME = "DELETE"; } - public abstract class HttpEntityEnclosingRequestBase extends org.apache.http.client.methods.HttpRequestBase implements org.apache.http.HttpEntityEnclosingRequest { + public abstract deprecated class HttpEntityEnclosingRequestBase extends org.apache.http.client.methods.HttpRequestBase implements org.apache.http.HttpEntityEnclosingRequest { ctor public HttpEntityEnclosingRequestBase(); method public boolean expectContinue(); method public org.apache.http.HttpEntity getEntity(); method public void setEntity(org.apache.http.HttpEntity); } - public class HttpGet extends org.apache.http.client.methods.HttpRequestBase { + public deprecated class HttpGet extends org.apache.http.client.methods.HttpRequestBase { ctor public HttpGet(); ctor public HttpGet(java.net.URI); ctor public HttpGet(java.lang.String); @@ -54599,7 +54801,7 @@ package org.apache.http.client.methods { field public static final java.lang.String METHOD_NAME = "GET"; } - public class HttpHead extends org.apache.http.client.methods.HttpRequestBase { + public deprecated class HttpHead extends org.apache.http.client.methods.HttpRequestBase { ctor public HttpHead(); ctor public HttpHead(java.net.URI); ctor public HttpHead(java.lang.String); @@ -54607,7 +54809,7 @@ package org.apache.http.client.methods { field public static final java.lang.String METHOD_NAME = "HEAD"; } - public class HttpOptions extends org.apache.http.client.methods.HttpRequestBase { + public deprecated class HttpOptions extends org.apache.http.client.methods.HttpRequestBase { ctor public HttpOptions(); ctor public HttpOptions(java.net.URI); ctor public HttpOptions(java.lang.String); @@ -54616,7 +54818,7 @@ package org.apache.http.client.methods { field public static final java.lang.String METHOD_NAME = "OPTIONS"; } - public class HttpPost extends org.apache.http.client.methods.HttpEntityEnclosingRequestBase { + public deprecated class HttpPost extends org.apache.http.client.methods.HttpEntityEnclosingRequestBase { ctor public HttpPost(); ctor public HttpPost(java.net.URI); ctor public HttpPost(java.lang.String); @@ -54624,7 +54826,7 @@ package org.apache.http.client.methods { field public static final java.lang.String METHOD_NAME = "POST"; } - public class HttpPut extends org.apache.http.client.methods.HttpEntityEnclosingRequestBase { + public deprecated class HttpPut extends org.apache.http.client.methods.HttpEntityEnclosingRequestBase { ctor public HttpPut(); ctor public HttpPut(java.net.URI); ctor public HttpPut(java.lang.String); @@ -54632,7 +54834,7 @@ package org.apache.http.client.methods { field public static final java.lang.String METHOD_NAME = "PUT"; } - public abstract class HttpRequestBase extends org.apache.http.message.AbstractHttpMessage implements org.apache.http.client.methods.AbortableHttpRequest java.lang.Cloneable org.apache.http.client.methods.HttpUriRequest { + public abstract deprecated class HttpRequestBase extends org.apache.http.message.AbstractHttpMessage implements org.apache.http.client.methods.AbortableHttpRequest java.lang.Cloneable org.apache.http.client.methods.HttpUriRequest { ctor public HttpRequestBase(); method public void abort(); method public java.lang.Object clone() throws java.lang.CloneNotSupportedException; @@ -54646,7 +54848,7 @@ package org.apache.http.client.methods { method public void setURI(java.net.URI); } - public class HttpTrace extends org.apache.http.client.methods.HttpRequestBase { + public deprecated class HttpTrace extends org.apache.http.client.methods.HttpRequestBase { ctor public HttpTrace(); ctor public HttpTrace(java.net.URI); ctor public HttpTrace(java.lang.String); @@ -54654,7 +54856,7 @@ package org.apache.http.client.methods { field public static final java.lang.String METHOD_NAME = "TRACE"; } - public abstract interface HttpUriRequest implements org.apache.http.HttpRequest { + public abstract deprecated interface HttpUriRequest implements org.apache.http.HttpRequest { method public abstract void abort() throws java.lang.UnsupportedOperationException; method public abstract java.lang.String getMethod(); method public abstract java.net.URI getURI(); @@ -54665,16 +54867,16 @@ package org.apache.http.client.methods { package org.apache.http.client.params { - public abstract interface AllClientPNames implements org.apache.http.auth.params.AuthPNames org.apache.http.client.params.ClientPNames org.apache.http.conn.params.ConnConnectionPNames org.apache.http.conn.params.ConnManagerPNames org.apache.http.conn.params.ConnRoutePNames org.apache.http.cookie.params.CookieSpecPNames org.apache.http.params.CoreConnectionPNames org.apache.http.params.CoreProtocolPNames { + public abstract deprecated interface AllClientPNames implements org.apache.http.auth.params.AuthPNames org.apache.http.client.params.ClientPNames org.apache.http.conn.params.ConnConnectionPNames org.apache.http.conn.params.ConnManagerPNames org.apache.http.conn.params.ConnRoutePNames org.apache.http.cookie.params.CookieSpecPNames org.apache.http.params.CoreConnectionPNames org.apache.http.params.CoreProtocolPNames { } - public final class AuthPolicy { + public final deprecated class AuthPolicy { field public static final java.lang.String BASIC = "Basic"; field public static final java.lang.String DIGEST = "Digest"; field public static final java.lang.String NTLM = "NTLM"; } - public abstract interface ClientPNames { + public abstract deprecated interface ClientPNames { field public static final java.lang.String ALLOW_CIRCULAR_REDIRECTS = "http.protocol.allow-circular-redirects"; field public static final java.lang.String CONNECTION_MANAGER_FACTORY = "http.connection-manager.factory-object"; field public static final java.lang.String CONNECTION_MANAGER_FACTORY_CLASS_NAME = "http.connection-manager.factory-class-name"; @@ -54688,7 +54890,7 @@ package org.apache.http.client.params { field public static final java.lang.String VIRTUAL_HOST = "http.virtual-host"; } - public class ClientParamBean extends org.apache.http.params.HttpAbstractParamBean { + public deprecated class ClientParamBean extends org.apache.http.params.HttpAbstractParamBean { ctor public ClientParamBean(org.apache.http.params.HttpParams); method public void setAllowCircularRedirects(boolean); method public void setConnectionManagerFactory(org.apache.http.conn.ClientConnectionManagerFactory); @@ -54703,7 +54905,7 @@ package org.apache.http.client.params { method public void setVirtualHost(org.apache.http.HttpHost); } - public final class CookiePolicy { + public final deprecated class CookiePolicy { field public static final java.lang.String BEST_MATCH = "best-match"; field public static final java.lang.String BROWSER_COMPATIBILITY = "compatibility"; field public static final java.lang.String NETSCAPE = "netscape"; @@ -54711,7 +54913,7 @@ package org.apache.http.client.params { field public static final java.lang.String RFC_2965 = "rfc2965"; } - public class HttpClientParams { + public deprecated class HttpClientParams { method public static java.lang.String getCookiePolicy(org.apache.http.params.HttpParams); method public static boolean isAuthenticating(org.apache.http.params.HttpParams); method public static boolean isRedirecting(org.apache.http.params.HttpParams); @@ -54724,7 +54926,7 @@ package org.apache.http.client.params { package org.apache.http.client.protocol { - public abstract interface ClientContext { + public abstract deprecated interface ClientContext { field public static final java.lang.String AUTHSCHEME_REGISTRY = "http.authscheme-registry"; field public static final java.lang.String AUTH_SCHEME_PREF = "http.auth.scheme-pref"; field public static final java.lang.String COOKIESPEC_REGISTRY = "http.cookiespec-registry"; @@ -54737,7 +54939,7 @@ package org.apache.http.client.protocol { field public static final java.lang.String USER_TOKEN = "http.user-token"; } - public class ClientContextConfigurer implements org.apache.http.client.protocol.ClientContext { + public deprecated class ClientContextConfigurer implements org.apache.http.client.protocol.ClientContext { ctor public ClientContextConfigurer(org.apache.http.protocol.HttpContext); method public void setAuthSchemePref(java.util.List); method public void setAuthSchemeRegistry(org.apache.http.auth.AuthSchemeRegistry); @@ -54746,27 +54948,27 @@ package org.apache.http.client.protocol { method public void setCredentialsProvider(org.apache.http.client.CredentialsProvider); } - public class RequestAddCookies implements org.apache.http.HttpRequestInterceptor { + public deprecated class RequestAddCookies implements org.apache.http.HttpRequestInterceptor { ctor public RequestAddCookies(); method public void process(org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; } - public class RequestDefaultHeaders implements org.apache.http.HttpRequestInterceptor { + public deprecated class RequestDefaultHeaders implements org.apache.http.HttpRequestInterceptor { ctor public RequestDefaultHeaders(); method public void process(org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; } - public class RequestProxyAuthentication implements org.apache.http.HttpRequestInterceptor { + public deprecated class RequestProxyAuthentication implements org.apache.http.HttpRequestInterceptor { ctor public RequestProxyAuthentication(); method public void process(org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; } - public class RequestTargetAuthentication implements org.apache.http.HttpRequestInterceptor { + public deprecated class RequestTargetAuthentication implements org.apache.http.HttpRequestInterceptor { ctor public RequestTargetAuthentication(); method public void process(org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; } - public class ResponseProcessCookies implements org.apache.http.HttpResponseInterceptor { + public deprecated class ResponseProcessCookies implements org.apache.http.HttpResponseInterceptor { ctor public ResponseProcessCookies(); method public void process(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; } @@ -54775,11 +54977,11 @@ package org.apache.http.client.protocol { package org.apache.http.client.utils { - public class CloneUtils { + public deprecated class CloneUtils { method public static java.lang.Object clone(java.lang.Object) throws java.lang.CloneNotSupportedException; } - public class URIUtils { + public deprecated class URIUtils { method public static java.net.URI createURI(java.lang.String, java.lang.String, int, java.lang.String, java.lang.String, java.lang.String) throws java.net.URISyntaxException; method public static java.net.URI resolve(java.net.URI, java.lang.String); method public static java.net.URI resolve(java.net.URI, java.net.URI); @@ -54787,7 +54989,7 @@ package org.apache.http.client.utils { method public static java.net.URI rewriteURI(java.net.URI, org.apache.http.HttpHost) throws java.net.URISyntaxException; } - public class URLEncodedUtils { + public deprecated class URLEncodedUtils { ctor public URLEncodedUtils(); method public static java.lang.String format(java.util.List, java.lang.String); method public static boolean isEncoded(org.apache.http.HttpEntity); @@ -54801,7 +55003,7 @@ package org.apache.http.client.utils { package org.apache.http.conn { - public class BasicEofSensorWatcher implements org.apache.http.conn.EofSensorWatcher { + public deprecated class BasicEofSensorWatcher implements org.apache.http.conn.EofSensorWatcher { ctor public BasicEofSensorWatcher(org.apache.http.conn.ManagedClientConnection, boolean); method public boolean eofDetected(java.io.InputStream) throws java.io.IOException; method public boolean streamAbort(java.io.InputStream) throws java.io.IOException; @@ -54810,7 +55012,7 @@ package org.apache.http.conn { field protected org.apache.http.conn.ManagedClientConnection managedConn; } - public class BasicManagedEntity extends org.apache.http.entity.HttpEntityWrapper implements org.apache.http.conn.ConnectionReleaseTrigger org.apache.http.conn.EofSensorWatcher { + public deprecated class BasicManagedEntity extends org.apache.http.entity.HttpEntityWrapper implements org.apache.http.conn.ConnectionReleaseTrigger org.apache.http.conn.EofSensorWatcher { ctor public BasicManagedEntity(org.apache.http.HttpEntity, org.apache.http.conn.ManagedClientConnection, boolean); method public void abortConnection() throws java.io.IOException; method public boolean eofDetected(java.io.InputStream) throws java.io.IOException; @@ -54822,7 +55024,7 @@ package org.apache.http.conn { field protected org.apache.http.conn.ManagedClientConnection managedConn; } - public abstract interface ClientConnectionManager { + public abstract deprecated interface ClientConnectionManager { method public abstract void closeExpiredConnections(); method public abstract void closeIdleConnections(long, java.util.concurrent.TimeUnit); method public abstract org.apache.http.conn.scheme.SchemeRegistry getSchemeRegistry(); @@ -54831,41 +55033,41 @@ package org.apache.http.conn { method public abstract void shutdown(); } - public abstract interface ClientConnectionManagerFactory { + public abstract deprecated interface ClientConnectionManagerFactory { method public abstract org.apache.http.conn.ClientConnectionManager newInstance(org.apache.http.params.HttpParams, org.apache.http.conn.scheme.SchemeRegistry); } - public abstract interface ClientConnectionOperator { + public abstract deprecated interface ClientConnectionOperator { method public abstract org.apache.http.conn.OperatedClientConnection createConnection(); method public abstract void openConnection(org.apache.http.conn.OperatedClientConnection, org.apache.http.HttpHost, java.net.InetAddress, org.apache.http.protocol.HttpContext, org.apache.http.params.HttpParams) throws java.io.IOException; method public abstract void updateSecureConnection(org.apache.http.conn.OperatedClientConnection, org.apache.http.HttpHost, org.apache.http.protocol.HttpContext, org.apache.http.params.HttpParams) throws java.io.IOException; } - public abstract interface ClientConnectionRequest { + public abstract deprecated interface ClientConnectionRequest { method public abstract void abortRequest(); method public abstract org.apache.http.conn.ManagedClientConnection getConnection(long, java.util.concurrent.TimeUnit) throws org.apache.http.conn.ConnectionPoolTimeoutException, java.lang.InterruptedException; } - public class ConnectTimeoutException extends java.io.InterruptedIOException { + public deprecated class ConnectTimeoutException extends java.io.InterruptedIOException { ctor public ConnectTimeoutException(); ctor public ConnectTimeoutException(java.lang.String); } - public abstract interface ConnectionKeepAliveStrategy { + public abstract deprecated interface ConnectionKeepAliveStrategy { method public abstract long getKeepAliveDuration(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext); } - public class ConnectionPoolTimeoutException extends org.apache.http.conn.ConnectTimeoutException { + public deprecated class ConnectionPoolTimeoutException extends org.apache.http.conn.ConnectTimeoutException { ctor public ConnectionPoolTimeoutException(); ctor public ConnectionPoolTimeoutException(java.lang.String); } - public abstract interface ConnectionReleaseTrigger { + public abstract deprecated interface ConnectionReleaseTrigger { method public abstract void abortConnection() throws java.io.IOException; method public abstract void releaseConnection() throws java.io.IOException; } - public class EofSensorInputStream extends java.io.InputStream implements org.apache.http.conn.ConnectionReleaseTrigger { + public deprecated class EofSensorInputStream extends java.io.InputStream implements org.apache.http.conn.ConnectionReleaseTrigger { ctor public EofSensorInputStream(java.io.InputStream, org.apache.http.conn.EofSensorWatcher); method public void abortConnection() throws java.io.IOException; method protected void checkAbort() throws java.io.IOException; @@ -54877,18 +55079,18 @@ package org.apache.http.conn { field protected java.io.InputStream wrappedStream; } - public abstract interface EofSensorWatcher { + public abstract deprecated interface EofSensorWatcher { method public abstract boolean eofDetected(java.io.InputStream) throws java.io.IOException; method public abstract boolean streamAbort(java.io.InputStream) throws java.io.IOException; method public abstract boolean streamClosed(java.io.InputStream) throws java.io.IOException; } - public class HttpHostConnectException extends java.net.ConnectException { + public deprecated class HttpHostConnectException extends java.net.ConnectException { ctor public HttpHostConnectException(org.apache.http.HttpHost, java.net.ConnectException); method public org.apache.http.HttpHost getHost(); } - public abstract interface ManagedClientConnection implements org.apache.http.conn.ConnectionReleaseTrigger org.apache.http.HttpClientConnection org.apache.http.HttpInetConnection { + public abstract deprecated interface ManagedClientConnection implements org.apache.http.conn.ConnectionReleaseTrigger org.apache.http.HttpClientConnection org.apache.http.HttpInetConnection { method public abstract org.apache.http.conn.routing.HttpRoute getRoute(); method public abstract javax.net.ssl.SSLSession getSSLSession(); method public abstract java.lang.Object getState(); @@ -54904,14 +55106,14 @@ package org.apache.http.conn { method public abstract void unmarkReusable(); } - public final class MultihomePlainSocketFactory implements org.apache.http.conn.scheme.SocketFactory { + public final deprecated class MultihomePlainSocketFactory implements org.apache.http.conn.scheme.SocketFactory { method public java.net.Socket connectSocket(java.net.Socket, java.lang.String, int, java.net.InetAddress, int, org.apache.http.params.HttpParams) throws java.io.IOException; method public java.net.Socket createSocket(); method public static org.apache.http.conn.MultihomePlainSocketFactory getSocketFactory(); method public final boolean isSecure(java.net.Socket) throws java.lang.IllegalArgumentException; } - public abstract interface OperatedClientConnection implements org.apache.http.HttpClientConnection org.apache.http.HttpInetConnection { + public abstract deprecated interface OperatedClientConnection implements org.apache.http.HttpClientConnection org.apache.http.HttpInetConnection { method public abstract java.net.Socket getSocket(); method public abstract org.apache.http.HttpHost getTargetHost(); method public abstract boolean isSecure(); @@ -54924,29 +55126,29 @@ package org.apache.http.conn { package org.apache.http.conn.params { - public abstract interface ConnConnectionPNames { + public abstract deprecated interface ConnConnectionPNames { field public static final java.lang.String MAX_STATUS_LINE_GARBAGE = "http.connection.max-status-line-garbage"; } - public class ConnConnectionParamBean extends org.apache.http.params.HttpAbstractParamBean { + public deprecated class ConnConnectionParamBean extends org.apache.http.params.HttpAbstractParamBean { ctor public ConnConnectionParamBean(org.apache.http.params.HttpParams); method public void setMaxStatusLineGarbage(int); } - public abstract interface ConnManagerPNames { + public abstract deprecated interface ConnManagerPNames { field public static final java.lang.String MAX_CONNECTIONS_PER_ROUTE = "http.conn-manager.max-per-route"; field public static final java.lang.String MAX_TOTAL_CONNECTIONS = "http.conn-manager.max-total"; field public static final java.lang.String TIMEOUT = "http.conn-manager.timeout"; } - public class ConnManagerParamBean extends org.apache.http.params.HttpAbstractParamBean { + public deprecated class ConnManagerParamBean extends org.apache.http.params.HttpAbstractParamBean { ctor public ConnManagerParamBean(org.apache.http.params.HttpParams); method public void setConnectionsPerRoute(org.apache.http.conn.params.ConnPerRouteBean); method public void setMaxTotalConnections(int); method public void setTimeout(long); } - public final class ConnManagerParams implements org.apache.http.conn.params.ConnManagerPNames { + public final deprecated class ConnManagerParams implements org.apache.http.conn.params.ConnManagerPNames { ctor public ConnManagerParams(); method public static org.apache.http.conn.params.ConnPerRoute getMaxConnectionsPerRoute(org.apache.http.params.HttpParams); method public static int getMaxTotalConnections(org.apache.http.params.HttpParams); @@ -54957,11 +55159,11 @@ package org.apache.http.conn.params { field public static final int DEFAULT_MAX_TOTAL_CONNECTIONS = 20; // 0x14 } - public abstract interface ConnPerRoute { + public abstract deprecated interface ConnPerRoute { method public abstract int getMaxForRoute(org.apache.http.conn.routing.HttpRoute); } - public final class ConnPerRouteBean implements org.apache.http.conn.params.ConnPerRoute { + public final deprecated class ConnPerRouteBean implements org.apache.http.conn.params.ConnPerRoute { ctor public ConnPerRouteBean(int); ctor public ConnPerRouteBean(); method public int getDefaultMax(); @@ -54972,20 +55174,20 @@ package org.apache.http.conn.params { field public static final int DEFAULT_MAX_CONNECTIONS_PER_ROUTE = 2; // 0x2 } - public abstract interface ConnRoutePNames { + public abstract deprecated interface ConnRoutePNames { field public static final java.lang.String DEFAULT_PROXY = "http.route.default-proxy"; field public static final java.lang.String FORCED_ROUTE = "http.route.forced-route"; field public static final java.lang.String LOCAL_ADDRESS = "http.route.local-address"; } - public class ConnRouteParamBean extends org.apache.http.params.HttpAbstractParamBean { + public deprecated class ConnRouteParamBean extends org.apache.http.params.HttpAbstractParamBean { ctor public ConnRouteParamBean(org.apache.http.params.HttpParams); method public void setDefaultProxy(org.apache.http.HttpHost); method public void setForcedRoute(org.apache.http.conn.routing.HttpRoute); method public void setLocalAddress(java.net.InetAddress); } - public class ConnRouteParams implements org.apache.http.conn.params.ConnRoutePNames { + public deprecated class ConnRouteParams implements org.apache.http.conn.params.ConnRoutePNames { method public static org.apache.http.HttpHost getDefaultProxy(org.apache.http.params.HttpParams); method public static org.apache.http.conn.routing.HttpRoute getForcedRoute(org.apache.http.params.HttpParams); method public static java.net.InetAddress getLocalAddress(org.apache.http.params.HttpParams); @@ -55000,7 +55202,7 @@ package org.apache.http.conn.params { package org.apache.http.conn.routing { - public class BasicRouteDirector implements org.apache.http.conn.routing.HttpRouteDirector { + public deprecated class BasicRouteDirector implements org.apache.http.conn.routing.HttpRouteDirector { ctor public BasicRouteDirector(); method protected int directStep(org.apache.http.conn.routing.RouteInfo, org.apache.http.conn.routing.RouteInfo); method protected int firstStep(org.apache.http.conn.routing.RouteInfo); @@ -55008,7 +55210,7 @@ package org.apache.http.conn.routing { method protected int proxiedStep(org.apache.http.conn.routing.RouteInfo, org.apache.http.conn.routing.RouteInfo); } - public final class HttpRoute implements java.lang.Cloneable org.apache.http.conn.routing.RouteInfo { + public final deprecated class HttpRoute implements java.lang.Cloneable org.apache.http.conn.routing.RouteInfo { ctor public HttpRoute(org.apache.http.HttpHost, java.net.InetAddress, org.apache.http.HttpHost[], boolean, org.apache.http.conn.routing.RouteInfo.TunnelType, org.apache.http.conn.routing.RouteInfo.LayerType); ctor public HttpRoute(org.apache.http.HttpHost, java.net.InetAddress, org.apache.http.HttpHost, boolean, org.apache.http.conn.routing.RouteInfo.TunnelType, org.apache.http.conn.routing.RouteInfo.LayerType); ctor public HttpRoute(org.apache.http.HttpHost, java.net.InetAddress, boolean); @@ -55030,7 +55232,7 @@ package org.apache.http.conn.routing { method public final java.lang.String toString(); } - public abstract interface HttpRouteDirector { + public abstract deprecated interface HttpRouteDirector { method public abstract int nextStep(org.apache.http.conn.routing.RouteInfo, org.apache.http.conn.routing.RouteInfo); field public static final int COMPLETE = 0; // 0x0 field public static final int CONNECT_PROXY = 2; // 0x2 @@ -55041,11 +55243,11 @@ package org.apache.http.conn.routing { field public static final int UNREACHABLE = -1; // 0xffffffff } - public abstract interface HttpRoutePlanner { + public abstract deprecated interface HttpRoutePlanner { method public abstract org.apache.http.conn.routing.HttpRoute determineRoute(org.apache.http.HttpHost, org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException; } - public abstract interface RouteInfo { + public abstract deprecated interface RouteInfo { method public abstract int getHopCount(); method public abstract org.apache.http.HttpHost getHopTarget(int); method public abstract org.apache.http.conn.routing.RouteInfo.LayerType getLayerType(); @@ -55072,7 +55274,7 @@ package org.apache.http.conn.routing { enum_constant public static final org.apache.http.conn.routing.RouteInfo.TunnelType TUNNELLED; } - public final class RouteTracker implements java.lang.Cloneable org.apache.http.conn.routing.RouteInfo { + public final deprecated class RouteTracker implements java.lang.Cloneable org.apache.http.conn.routing.RouteInfo { ctor public RouteTracker(org.apache.http.HttpHost, java.net.InetAddress); ctor public RouteTracker(org.apache.http.conn.routing.HttpRoute); method public java.lang.Object clone() throws java.lang.CloneNotSupportedException; @@ -55102,15 +55304,15 @@ package org.apache.http.conn.routing { package org.apache.http.conn.scheme { - public abstract interface HostNameResolver { + public abstract deprecated interface HostNameResolver { method public abstract java.net.InetAddress resolve(java.lang.String) throws java.io.IOException; } - public abstract interface LayeredSocketFactory implements org.apache.http.conn.scheme.SocketFactory { + public abstract deprecated interface LayeredSocketFactory implements org.apache.http.conn.scheme.SocketFactory { method public abstract java.net.Socket createSocket(java.net.Socket, java.lang.String, int, boolean) throws java.io.IOException, java.net.UnknownHostException; } - public final class PlainSocketFactory implements org.apache.http.conn.scheme.SocketFactory { + public final deprecated class PlainSocketFactory implements org.apache.http.conn.scheme.SocketFactory { ctor public PlainSocketFactory(org.apache.http.conn.scheme.HostNameResolver); ctor public PlainSocketFactory(); method public java.net.Socket connectSocket(java.net.Socket, java.lang.String, int, java.net.InetAddress, int, org.apache.http.params.HttpParams) throws java.io.IOException; @@ -55119,7 +55321,7 @@ package org.apache.http.conn.scheme { method public final boolean isSecure(java.net.Socket) throws java.lang.IllegalArgumentException; } - public final class Scheme { + public final deprecated class Scheme { ctor public Scheme(java.lang.String, org.apache.http.conn.scheme.SocketFactory, int); method public final boolean equals(java.lang.Object); method public final int getDefaultPort(); @@ -55130,7 +55332,7 @@ package org.apache.http.conn.scheme { method public final java.lang.String toString(); } - public final class SchemeRegistry { + public final deprecated class SchemeRegistry { ctor public SchemeRegistry(); method public final synchronized org.apache.http.conn.scheme.Scheme get(java.lang.String); method public final synchronized org.apache.http.conn.scheme.Scheme getScheme(java.lang.String); @@ -55141,7 +55343,7 @@ package org.apache.http.conn.scheme { method public final synchronized org.apache.http.conn.scheme.Scheme unregister(java.lang.String); } - public abstract interface SocketFactory { + public abstract deprecated interface SocketFactory { method public abstract java.net.Socket connectSocket(java.net.Socket, java.lang.String, int, java.net.InetAddress, int, org.apache.http.params.HttpParams) throws org.apache.http.conn.ConnectTimeoutException, java.io.IOException, java.net.UnknownHostException; method public abstract java.net.Socket createSocket() throws java.io.IOException; method public abstract boolean isSecure(java.net.Socket) throws java.lang.IllegalArgumentException; @@ -55151,7 +55353,7 @@ package org.apache.http.conn.scheme { package org.apache.http.conn.ssl { - public abstract class AbstractVerifier implements org.apache.http.conn.ssl.X509HostnameVerifier { + public abstract deprecated class AbstractVerifier implements org.apache.http.conn.ssl.X509HostnameVerifier { ctor public AbstractVerifier(); method public static boolean acceptableCountryWildcard(java.lang.String); method public static int countDots(java.lang.String); @@ -55163,19 +55365,19 @@ package org.apache.http.conn.ssl { method public final void verify(java.lang.String, java.lang.String[], java.lang.String[], boolean) throws javax.net.ssl.SSLException; } - public class AllowAllHostnameVerifier extends org.apache.http.conn.ssl.AbstractVerifier { + public deprecated class AllowAllHostnameVerifier extends org.apache.http.conn.ssl.AbstractVerifier { ctor public AllowAllHostnameVerifier(); method public final java.lang.String toString(); method public final void verify(java.lang.String, java.lang.String[], java.lang.String[]); } - public class BrowserCompatHostnameVerifier extends org.apache.http.conn.ssl.AbstractVerifier { + public deprecated class BrowserCompatHostnameVerifier extends org.apache.http.conn.ssl.AbstractVerifier { ctor public BrowserCompatHostnameVerifier(); method public final java.lang.String toString(); method public final void verify(java.lang.String, java.lang.String[], java.lang.String[]) throws javax.net.ssl.SSLException; } - public class SSLSocketFactory implements org.apache.http.conn.scheme.LayeredSocketFactory { + public deprecated class SSLSocketFactory implements org.apache.http.conn.scheme.LayeredSocketFactory { ctor public SSLSocketFactory(java.lang.String, java.security.KeyStore, java.lang.String, java.security.KeyStore, java.security.SecureRandom, org.apache.http.conn.scheme.HostNameResolver) throws java.security.KeyManagementException, java.security.KeyStoreException, java.security.NoSuchAlgorithmException, java.security.UnrecoverableKeyException; ctor public SSLSocketFactory(java.security.KeyStore, java.lang.String, java.security.KeyStore) throws java.security.KeyManagementException, java.security.KeyStoreException, java.security.NoSuchAlgorithmException, java.security.UnrecoverableKeyException; ctor public SSLSocketFactory(java.security.KeyStore, java.lang.String) throws java.security.KeyManagementException, java.security.KeyStoreException, java.security.NoSuchAlgorithmException, java.security.UnrecoverableKeyException; @@ -55195,13 +55397,13 @@ package org.apache.http.conn.ssl { field public static final java.lang.String TLS = "TLS"; } - public class StrictHostnameVerifier extends org.apache.http.conn.ssl.AbstractVerifier { + public deprecated class StrictHostnameVerifier extends org.apache.http.conn.ssl.AbstractVerifier { ctor public StrictHostnameVerifier(); method public final java.lang.String toString(); method public final void verify(java.lang.String, java.lang.String[], java.lang.String[]) throws javax.net.ssl.SSLException; } - public abstract interface X509HostnameVerifier implements javax.net.ssl.HostnameVerifier { + public abstract deprecated interface X509HostnameVerifier implements javax.net.ssl.HostnameVerifier { method public abstract boolean verify(java.lang.String, javax.net.ssl.SSLSession); method public abstract void verify(java.lang.String, javax.net.ssl.SSLSocket) throws java.io.IOException; method public abstract void verify(java.lang.String, java.security.cert.X509Certificate) throws javax.net.ssl.SSLException; @@ -55212,7 +55414,7 @@ package org.apache.http.conn.ssl { package org.apache.http.conn.util { - public class InetAddressUtils { + public deprecated class InetAddressUtils { method public static boolean isIPv4Address(java.lang.String); method public static boolean isIPv6Address(java.lang.String); method public static boolean isIPv6HexCompressedAddress(java.lang.String); @@ -55223,7 +55425,7 @@ package org.apache.http.conn.util { package org.apache.http.cookie { - public abstract interface ClientCookie implements org.apache.http.cookie.Cookie { + public abstract deprecated interface ClientCookie implements org.apache.http.cookie.Cookie { method public abstract boolean containsAttribute(java.lang.String); method public abstract java.lang.String getAttribute(java.lang.String); field public static final java.lang.String COMMENTURL_ATTR = "commenturl"; @@ -55238,7 +55440,7 @@ package org.apache.http.cookie { field public static final java.lang.String VERSION_ATTR = "version"; } - public abstract interface Cookie { + public abstract deprecated interface Cookie { method public abstract java.lang.String getComment(); method public abstract java.lang.String getCommentURL(); method public abstract java.lang.String getDomain(); @@ -55253,18 +55455,18 @@ package org.apache.http.cookie { method public abstract boolean isSecure(); } - public abstract interface CookieAttributeHandler { + public abstract deprecated interface CookieAttributeHandler { method public abstract boolean match(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin); method public abstract void parse(org.apache.http.cookie.SetCookie, java.lang.String) throws org.apache.http.cookie.MalformedCookieException; method public abstract void validate(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin) throws org.apache.http.cookie.MalformedCookieException; } - public class CookieIdentityComparator implements java.util.Comparator java.io.Serializable { + public deprecated class CookieIdentityComparator implements java.util.Comparator java.io.Serializable { ctor public CookieIdentityComparator(); method public int compare(org.apache.http.cookie.Cookie, org.apache.http.cookie.Cookie); } - public final class CookieOrigin { + public final deprecated class CookieOrigin { ctor public CookieOrigin(java.lang.String, int, java.lang.String, boolean); method public java.lang.String getHost(); method public java.lang.String getPath(); @@ -55272,12 +55474,12 @@ package org.apache.http.cookie { method public boolean isSecure(); } - public class CookiePathComparator implements java.util.Comparator java.io.Serializable { + public deprecated class CookiePathComparator implements java.util.Comparator java.io.Serializable { ctor public CookiePathComparator(); method public int compare(org.apache.http.cookie.Cookie, org.apache.http.cookie.Cookie); } - public abstract interface CookieSpec { + public abstract deprecated interface CookieSpec { method public abstract java.util.List formatCookies(java.util.List); method public abstract int getVersion(); method public abstract org.apache.http.Header getVersionHeader(); @@ -55286,11 +55488,11 @@ package org.apache.http.cookie { method public abstract void validate(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin) throws org.apache.http.cookie.MalformedCookieException; } - public abstract interface CookieSpecFactory { + public abstract deprecated interface CookieSpecFactory { method public abstract org.apache.http.cookie.CookieSpec newInstance(org.apache.http.params.HttpParams); } - public final class CookieSpecRegistry { + public final deprecated class CookieSpecRegistry { ctor public CookieSpecRegistry(); method public synchronized org.apache.http.cookie.CookieSpec getCookieSpec(java.lang.String, org.apache.http.params.HttpParams) throws java.lang.IllegalStateException; method public synchronized org.apache.http.cookie.CookieSpec getCookieSpec(java.lang.String) throws java.lang.IllegalStateException; @@ -55300,20 +55502,20 @@ package org.apache.http.cookie { method public synchronized void unregister(java.lang.String); } - public class MalformedCookieException extends org.apache.http.ProtocolException { + public deprecated class MalformedCookieException extends org.apache.http.ProtocolException { ctor public MalformedCookieException(); ctor public MalformedCookieException(java.lang.String); ctor public MalformedCookieException(java.lang.String, java.lang.Throwable); } - public abstract interface SM { + public abstract deprecated interface SM { field public static final java.lang.String COOKIE = "Cookie"; field public static final java.lang.String COOKIE2 = "Cookie2"; field public static final java.lang.String SET_COOKIE = "Set-Cookie"; field public static final java.lang.String SET_COOKIE2 = "Set-Cookie2"; } - public abstract interface SetCookie implements org.apache.http.cookie.Cookie { + public abstract deprecated interface SetCookie implements org.apache.http.cookie.Cookie { method public abstract void setComment(java.lang.String); method public abstract void setDomain(java.lang.String); method public abstract void setExpiryDate(java.util.Date); @@ -55323,7 +55525,7 @@ package org.apache.http.cookie { method public abstract void setVersion(int); } - public abstract interface SetCookie2 implements org.apache.http.cookie.SetCookie { + public abstract deprecated interface SetCookie2 implements org.apache.http.cookie.SetCookie { method public abstract void setCommentURL(java.lang.String); method public abstract void setDiscard(boolean); method public abstract void setPorts(int[]); @@ -55333,12 +55535,12 @@ package org.apache.http.cookie { package org.apache.http.cookie.params { - public abstract interface CookieSpecPNames { + public abstract deprecated interface CookieSpecPNames { field public static final java.lang.String DATE_PATTERNS = "http.protocol.cookie-datepatterns"; field public static final java.lang.String SINGLE_COOKIE_HEADER = "http.protocol.single-cookie-header"; } - public class CookieSpecParamBean extends org.apache.http.params.HttpAbstractParamBean { + public deprecated class CookieSpecParamBean extends org.apache.http.params.HttpAbstractParamBean { ctor public CookieSpecParamBean(org.apache.http.params.HttpParams); method public void setDatePatterns(java.util.Collection); method public void setSingleHeader(boolean); @@ -55348,7 +55550,7 @@ package org.apache.http.cookie.params { package org.apache.http.entity { - public abstract class AbstractHttpEntity implements org.apache.http.HttpEntity { + public abstract deprecated class AbstractHttpEntity implements org.apache.http.HttpEntity { ctor protected AbstractHttpEntity(); method public void consumeContent() throws java.io.IOException, java.lang.UnsupportedOperationException; method public org.apache.http.Header getContentEncoding(); @@ -55364,7 +55566,7 @@ package org.apache.http.entity { field protected org.apache.http.Header contentType; } - public class BasicHttpEntity extends org.apache.http.entity.AbstractHttpEntity { + public deprecated class BasicHttpEntity extends org.apache.http.entity.AbstractHttpEntity { ctor public BasicHttpEntity(); method public java.io.InputStream getContent() throws java.lang.IllegalStateException; method public long getContentLength(); @@ -55375,11 +55577,11 @@ package org.apache.http.entity { method public void writeTo(java.io.OutputStream) throws java.io.IOException; } - public class BufferedHttpEntity extends org.apache.http.entity.HttpEntityWrapper { + public deprecated class BufferedHttpEntity extends org.apache.http.entity.HttpEntityWrapper { ctor public BufferedHttpEntity(org.apache.http.HttpEntity) throws java.io.IOException; } - public class ByteArrayEntity extends org.apache.http.entity.AbstractHttpEntity implements java.lang.Cloneable { + public deprecated class ByteArrayEntity extends org.apache.http.entity.AbstractHttpEntity implements java.lang.Cloneable { ctor public ByteArrayEntity(byte[]); method public java.lang.Object clone() throws java.lang.CloneNotSupportedException; method public java.io.InputStream getContent(); @@ -55390,17 +55592,17 @@ package org.apache.http.entity { field protected final byte[] content; } - public abstract interface ContentLengthStrategy { + public abstract deprecated interface ContentLengthStrategy { method public abstract long determineLength(org.apache.http.HttpMessage) throws org.apache.http.HttpException; field public static final int CHUNKED = -2; // 0xfffffffe field public static final int IDENTITY = -1; // 0xffffffff } - public abstract interface ContentProducer { + public abstract deprecated interface ContentProducer { method public abstract void writeTo(java.io.OutputStream) throws java.io.IOException; } - public class EntityTemplate extends org.apache.http.entity.AbstractHttpEntity { + public deprecated class EntityTemplate extends org.apache.http.entity.AbstractHttpEntity { ctor public EntityTemplate(org.apache.http.entity.ContentProducer); method public java.io.InputStream getContent(); method public long getContentLength(); @@ -55409,7 +55611,7 @@ package org.apache.http.entity { method public void writeTo(java.io.OutputStream) throws java.io.IOException; } - public class FileEntity extends org.apache.http.entity.AbstractHttpEntity implements java.lang.Cloneable { + public deprecated class FileEntity extends org.apache.http.entity.AbstractHttpEntity implements java.lang.Cloneable { ctor public FileEntity(java.io.File, java.lang.String); method public java.lang.Object clone() throws java.lang.CloneNotSupportedException; method public java.io.InputStream getContent() throws java.io.IOException; @@ -55420,7 +55622,7 @@ package org.apache.http.entity { field protected final java.io.File file; } - public class HttpEntityWrapper implements org.apache.http.HttpEntity { + public deprecated class HttpEntityWrapper implements org.apache.http.HttpEntity { ctor public HttpEntityWrapper(org.apache.http.HttpEntity); method public void consumeContent() throws java.io.IOException; method public java.io.InputStream getContent() throws java.io.IOException; @@ -55434,7 +55636,7 @@ package org.apache.http.entity { field protected org.apache.http.HttpEntity wrappedEntity; } - public class InputStreamEntity extends org.apache.http.entity.AbstractHttpEntity { + public deprecated class InputStreamEntity extends org.apache.http.entity.AbstractHttpEntity { ctor public InputStreamEntity(java.io.InputStream, long); method public java.io.InputStream getContent() throws java.io.IOException; method public long getContentLength(); @@ -55443,7 +55645,7 @@ package org.apache.http.entity { method public void writeTo(java.io.OutputStream) throws java.io.IOException; } - public class SerializableEntity extends org.apache.http.entity.AbstractHttpEntity { + public deprecated class SerializableEntity extends org.apache.http.entity.AbstractHttpEntity { ctor public SerializableEntity(java.io.Serializable, boolean) throws java.io.IOException; method public java.io.InputStream getContent() throws java.io.IOException, java.lang.IllegalStateException; method public long getContentLength(); @@ -55452,7 +55654,7 @@ package org.apache.http.entity { method public void writeTo(java.io.OutputStream) throws java.io.IOException; } - public class StringEntity extends org.apache.http.entity.AbstractHttpEntity implements java.lang.Cloneable { + public deprecated class StringEntity extends org.apache.http.entity.AbstractHttpEntity implements java.lang.Cloneable { ctor public StringEntity(java.lang.String, java.lang.String) throws java.io.UnsupportedEncodingException; ctor public StringEntity(java.lang.String) throws java.io.UnsupportedEncodingException; method public java.lang.Object clone() throws java.lang.CloneNotSupportedException; @@ -55468,7 +55670,7 @@ package org.apache.http.entity { package org.apache.http.impl { - public abstract class AbstractHttpClientConnection implements org.apache.http.HttpClientConnection { + public abstract deprecated class AbstractHttpClientConnection implements org.apache.http.HttpClientConnection { ctor public AbstractHttpClientConnection(); method protected abstract void assertOpen() throws java.lang.IllegalStateException; method protected org.apache.http.impl.entity.EntityDeserializer createEntityDeserializer(); @@ -55488,7 +55690,7 @@ package org.apache.http.impl { method public void sendRequestHeader(org.apache.http.HttpRequest) throws org.apache.http.HttpException, java.io.IOException; } - public abstract class AbstractHttpServerConnection implements org.apache.http.HttpServerConnection { + public abstract deprecated class AbstractHttpServerConnection implements org.apache.http.HttpServerConnection { ctor public AbstractHttpServerConnection(); method protected abstract void assertOpen() throws java.lang.IllegalStateException; method protected org.apache.http.impl.entity.EntityDeserializer createEntityDeserializer(); @@ -55507,24 +55709,24 @@ package org.apache.http.impl { method public void sendResponseHeader(org.apache.http.HttpResponse) throws org.apache.http.HttpException, java.io.IOException; } - public class DefaultConnectionReuseStrategy implements org.apache.http.ConnectionReuseStrategy { + public deprecated class DefaultConnectionReuseStrategy implements org.apache.http.ConnectionReuseStrategy { ctor public DefaultConnectionReuseStrategy(); method protected org.apache.http.TokenIterator createTokenIterator(org.apache.http.HeaderIterator); method public boolean keepAlive(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext); } - public class DefaultHttpClientConnection extends org.apache.http.impl.SocketHttpClientConnection { + public deprecated class DefaultHttpClientConnection extends org.apache.http.impl.SocketHttpClientConnection { ctor public DefaultHttpClientConnection(); method public void bind(java.net.Socket, org.apache.http.params.HttpParams) throws java.io.IOException; } - public class DefaultHttpRequestFactory implements org.apache.http.HttpRequestFactory { + public deprecated class DefaultHttpRequestFactory implements org.apache.http.HttpRequestFactory { ctor public DefaultHttpRequestFactory(); method public org.apache.http.HttpRequest newHttpRequest(org.apache.http.RequestLine) throws org.apache.http.MethodNotSupportedException; method public org.apache.http.HttpRequest newHttpRequest(java.lang.String, java.lang.String) throws org.apache.http.MethodNotSupportedException; } - public class DefaultHttpResponseFactory implements org.apache.http.HttpResponseFactory { + public deprecated class DefaultHttpResponseFactory implements org.apache.http.HttpResponseFactory { ctor public DefaultHttpResponseFactory(org.apache.http.ReasonPhraseCatalog); ctor public DefaultHttpResponseFactory(); method protected java.util.Locale determineLocale(org.apache.http.protocol.HttpContext); @@ -55533,18 +55735,18 @@ package org.apache.http.impl { field protected final org.apache.http.ReasonPhraseCatalog reasonCatalog; } - public class DefaultHttpServerConnection extends org.apache.http.impl.SocketHttpServerConnection { + public deprecated class DefaultHttpServerConnection extends org.apache.http.impl.SocketHttpServerConnection { ctor public DefaultHttpServerConnection(); method public void bind(java.net.Socket, org.apache.http.params.HttpParams) throws java.io.IOException; } - public class EnglishReasonPhraseCatalog implements org.apache.http.ReasonPhraseCatalog { + public deprecated class EnglishReasonPhraseCatalog implements org.apache.http.ReasonPhraseCatalog { ctor protected EnglishReasonPhraseCatalog(); method public java.lang.String getReason(int, java.util.Locale); field public static final org.apache.http.impl.EnglishReasonPhraseCatalog INSTANCE; } - public class HttpConnectionMetricsImpl implements org.apache.http.HttpConnectionMetrics { + public deprecated class HttpConnectionMetricsImpl implements org.apache.http.HttpConnectionMetrics { ctor public HttpConnectionMetricsImpl(org.apache.http.io.HttpTransportMetrics, org.apache.http.io.HttpTransportMetrics); method public java.lang.Object getMetric(java.lang.String); method public long getReceivedBytesCount(); @@ -55561,12 +55763,12 @@ package org.apache.http.impl { field public static final java.lang.String SENT_BYTES_COUNT = "http.sent-bytes-count"; } - public class NoConnectionReuseStrategy implements org.apache.http.ConnectionReuseStrategy { + public deprecated class NoConnectionReuseStrategy implements org.apache.http.ConnectionReuseStrategy { ctor public NoConnectionReuseStrategy(); method public boolean keepAlive(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext); } - public class SocketHttpClientConnection extends org.apache.http.impl.AbstractHttpClientConnection implements org.apache.http.HttpInetConnection { + public deprecated class SocketHttpClientConnection extends org.apache.http.impl.AbstractHttpClientConnection implements org.apache.http.HttpInetConnection { ctor public SocketHttpClientConnection(); method protected void assertNotOpen(); method protected void assertOpen(); @@ -55585,7 +55787,7 @@ package org.apache.http.impl { method public void shutdown() throws java.io.IOException; } - public class SocketHttpServerConnection extends org.apache.http.impl.AbstractHttpServerConnection implements org.apache.http.HttpInetConnection { + public deprecated class SocketHttpServerConnection extends org.apache.http.impl.AbstractHttpServerConnection implements org.apache.http.HttpInetConnection { ctor public SocketHttpServerConnection(); method protected void assertNotOpen(); method protected void assertOpen(); @@ -55608,14 +55810,14 @@ package org.apache.http.impl { package org.apache.http.impl.auth { - public abstract class AuthSchemeBase implements org.apache.http.auth.AuthScheme { + public abstract deprecated class AuthSchemeBase implements org.apache.http.auth.AuthScheme { ctor public AuthSchemeBase(); method public boolean isProxy(); method protected abstract void parseChallenge(org.apache.http.util.CharArrayBuffer, int, int) throws org.apache.http.auth.MalformedChallengeException; method public void processChallenge(org.apache.http.Header) throws org.apache.http.auth.MalformedChallengeException; } - public class BasicScheme extends org.apache.http.impl.auth.RFC2617Scheme { + public deprecated class BasicScheme extends org.apache.http.impl.auth.RFC2617Scheme { ctor public BasicScheme(); method public org.apache.http.Header authenticate(org.apache.http.auth.Credentials, org.apache.http.HttpRequest) throws org.apache.http.auth.AuthenticationException; method public static org.apache.http.Header authenticate(org.apache.http.auth.Credentials, java.lang.String, boolean); @@ -55624,12 +55826,12 @@ package org.apache.http.impl.auth { method public boolean isConnectionBased(); } - public class BasicSchemeFactory implements org.apache.http.auth.AuthSchemeFactory { + public deprecated class BasicSchemeFactory implements org.apache.http.auth.AuthSchemeFactory { ctor public BasicSchemeFactory(); method public org.apache.http.auth.AuthScheme newInstance(org.apache.http.params.HttpParams); } - public class DigestScheme extends org.apache.http.impl.auth.RFC2617Scheme { + public deprecated class DigestScheme extends org.apache.http.impl.auth.RFC2617Scheme { ctor public DigestScheme(); method public org.apache.http.Header authenticate(org.apache.http.auth.Credentials, org.apache.http.HttpRequest) throws org.apache.http.auth.AuthenticationException; method public static java.lang.String createCnonce(); @@ -55639,23 +55841,23 @@ package org.apache.http.impl.auth { method public void overrideParamter(java.lang.String, java.lang.String); } - public class DigestSchemeFactory implements org.apache.http.auth.AuthSchemeFactory { + public deprecated class DigestSchemeFactory implements org.apache.http.auth.AuthSchemeFactory { ctor public DigestSchemeFactory(); method public org.apache.http.auth.AuthScheme newInstance(org.apache.http.params.HttpParams); } - public abstract interface NTLMEngine { + public abstract deprecated interface NTLMEngine { method public abstract java.lang.String generateType1Msg(java.lang.String, java.lang.String) throws org.apache.http.impl.auth.NTLMEngineException; method public abstract java.lang.String generateType3Msg(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws org.apache.http.impl.auth.NTLMEngineException; } - public class NTLMEngineException extends org.apache.http.auth.AuthenticationException { + public deprecated class NTLMEngineException extends org.apache.http.auth.AuthenticationException { ctor public NTLMEngineException(); ctor public NTLMEngineException(java.lang.String); ctor public NTLMEngineException(java.lang.String, java.lang.Throwable); } - public class NTLMScheme extends org.apache.http.impl.auth.AuthSchemeBase { + public deprecated class NTLMScheme extends org.apache.http.impl.auth.AuthSchemeBase { ctor public NTLMScheme(org.apache.http.impl.auth.NTLMEngine); method public org.apache.http.Header authenticate(org.apache.http.auth.Credentials, org.apache.http.HttpRequest) throws org.apache.http.auth.AuthenticationException; method public java.lang.String getParameter(java.lang.String); @@ -55666,7 +55868,7 @@ package org.apache.http.impl.auth { method protected void parseChallenge(org.apache.http.util.CharArrayBuffer, int, int) throws org.apache.http.auth.MalformedChallengeException; } - public abstract class RFC2617Scheme extends org.apache.http.impl.auth.AuthSchemeBase { + public abstract deprecated class RFC2617Scheme extends org.apache.http.impl.auth.AuthSchemeBase { ctor public RFC2617Scheme(); method public java.lang.String getParameter(java.lang.String); method protected java.util.Map getParameters(); @@ -55674,7 +55876,7 @@ package org.apache.http.impl.auth { method protected void parseChallenge(org.apache.http.util.CharArrayBuffer, int, int) throws org.apache.http.auth.MalformedChallengeException; } - public class UnsupportedDigestAlgorithmException extends java.lang.RuntimeException { + public deprecated class UnsupportedDigestAlgorithmException extends java.lang.RuntimeException { ctor public UnsupportedDigestAlgorithmException(); ctor public UnsupportedDigestAlgorithmException(java.lang.String); ctor public UnsupportedDigestAlgorithmException(java.lang.String, java.lang.Throwable); @@ -55684,14 +55886,14 @@ package org.apache.http.impl.auth { package org.apache.http.impl.client { - public abstract class AbstractAuthenticationHandler implements org.apache.http.client.AuthenticationHandler { + public abstract deprecated class AbstractAuthenticationHandler implements org.apache.http.client.AuthenticationHandler { ctor public AbstractAuthenticationHandler(); method protected java.util.List getAuthPreferences(); method protected java.util.Map parseChallenges(org.apache.http.Header[]) throws org.apache.http.auth.MalformedChallengeException; method public org.apache.http.auth.AuthScheme selectScheme(java.util.Map, org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.auth.AuthenticationException; } - public abstract class AbstractHttpClient implements org.apache.http.client.HttpClient { + public abstract deprecated class AbstractHttpClient implements org.apache.http.client.HttpClient { ctor protected AbstractHttpClient(org.apache.http.conn.ClientConnectionManager, org.apache.http.params.HttpParams); method public synchronized void addRequestInterceptor(org.apache.http.HttpRequestInterceptor); method public synchronized void addRequestInterceptor(org.apache.http.HttpRequestInterceptor, int); @@ -55763,7 +55965,7 @@ package org.apache.http.impl.client { method public synchronized void setUserTokenHandler(org.apache.http.client.UserTokenHandler); } - public class BasicCookieStore implements org.apache.http.client.CookieStore { + public deprecated class BasicCookieStore implements org.apache.http.client.CookieStore { ctor public BasicCookieStore(); method public synchronized void addCookie(org.apache.http.cookie.Cookie); method public synchronized void addCookies(org.apache.http.cookie.Cookie[]); @@ -55772,19 +55974,19 @@ package org.apache.http.impl.client { method public synchronized java.util.List getCookies(); } - public class BasicCredentialsProvider implements org.apache.http.client.CredentialsProvider { + public deprecated class BasicCredentialsProvider implements org.apache.http.client.CredentialsProvider { ctor public BasicCredentialsProvider(); method public synchronized void clear(); method public synchronized org.apache.http.auth.Credentials getCredentials(org.apache.http.auth.AuthScope); method public synchronized void setCredentials(org.apache.http.auth.AuthScope, org.apache.http.auth.Credentials); } - public class BasicResponseHandler implements org.apache.http.client.ResponseHandler { + public deprecated class BasicResponseHandler implements org.apache.http.client.ResponseHandler { ctor public BasicResponseHandler(); method public java.lang.String handleResponse(org.apache.http.HttpResponse) throws org.apache.http.client.HttpResponseException, java.io.IOException; } - public class ClientParamsStack extends org.apache.http.params.AbstractHttpParams { + public deprecated class ClientParamsStack extends org.apache.http.params.AbstractHttpParams { ctor public ClientParamsStack(org.apache.http.params.HttpParams, org.apache.http.params.HttpParams, org.apache.http.params.HttpParams, org.apache.http.params.HttpParams); ctor public ClientParamsStack(org.apache.http.impl.client.ClientParamsStack); ctor public ClientParamsStack(org.apache.http.impl.client.ClientParamsStack, org.apache.http.params.HttpParams, org.apache.http.params.HttpParams, org.apache.http.params.HttpParams, org.apache.http.params.HttpParams); @@ -55802,12 +56004,12 @@ package org.apache.http.impl.client { field protected final org.apache.http.params.HttpParams requestParams; } - public class DefaultConnectionKeepAliveStrategy implements org.apache.http.conn.ConnectionKeepAliveStrategy { + public deprecated class DefaultConnectionKeepAliveStrategy implements org.apache.http.conn.ConnectionKeepAliveStrategy { ctor public DefaultConnectionKeepAliveStrategy(); method public long getKeepAliveDuration(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext); } - public class DefaultHttpClient extends org.apache.http.impl.client.AbstractHttpClient { + public deprecated class DefaultHttpClient extends org.apache.http.impl.client.AbstractHttpClient { ctor public DefaultHttpClient(org.apache.http.conn.ClientConnectionManager, org.apache.http.params.HttpParams); ctor public DefaultHttpClient(org.apache.http.params.HttpParams); ctor public DefaultHttpClient(); @@ -55830,7 +56032,7 @@ package org.apache.http.impl.client { method protected org.apache.http.client.UserTokenHandler createUserTokenHandler(); } - public class DefaultHttpRequestRetryHandler implements org.apache.http.client.HttpRequestRetryHandler { + public deprecated class DefaultHttpRequestRetryHandler implements org.apache.http.client.HttpRequestRetryHandler { ctor public DefaultHttpRequestRetryHandler(int, boolean); ctor public DefaultHttpRequestRetryHandler(); method public int getRetryCount(); @@ -55838,19 +56040,19 @@ package org.apache.http.impl.client { method public boolean retryRequest(java.io.IOException, int, org.apache.http.protocol.HttpContext); } - public class DefaultProxyAuthenticationHandler extends org.apache.http.impl.client.AbstractAuthenticationHandler { + public deprecated class DefaultProxyAuthenticationHandler extends org.apache.http.impl.client.AbstractAuthenticationHandler { ctor public DefaultProxyAuthenticationHandler(); method public java.util.Map getChallenges(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.auth.MalformedChallengeException; method public boolean isAuthenticationRequested(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext); } - public class DefaultRedirectHandler implements org.apache.http.client.RedirectHandler { + public deprecated class DefaultRedirectHandler implements org.apache.http.client.RedirectHandler { ctor public DefaultRedirectHandler(); method public java.net.URI getLocationURI(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.ProtocolException; method public boolean isRedirectRequested(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext); } - public class DefaultRequestDirector implements org.apache.http.client.RequestDirector { + public deprecated class DefaultRequestDirector implements org.apache.http.client.RequestDirector { ctor public DefaultRequestDirector(org.apache.http.protocol.HttpRequestExecutor, org.apache.http.conn.ClientConnectionManager, org.apache.http.ConnectionReuseStrategy, org.apache.http.conn.ConnectionKeepAliveStrategy, org.apache.http.conn.routing.HttpRoutePlanner, org.apache.http.protocol.HttpProcessor, org.apache.http.client.HttpRequestRetryHandler, org.apache.http.client.RedirectHandler, org.apache.http.client.AuthenticationHandler, org.apache.http.client.AuthenticationHandler, org.apache.http.client.UserTokenHandler, org.apache.http.params.HttpParams); method protected org.apache.http.HttpRequest createConnectRequest(org.apache.http.conn.routing.HttpRoute, org.apache.http.protocol.HttpContext); method protected boolean createTunnelToProxy(org.apache.http.conn.routing.HttpRoute, int, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; @@ -55873,32 +56075,32 @@ package org.apache.http.impl.client { field protected final org.apache.http.conn.routing.HttpRoutePlanner routePlanner; } - public class DefaultTargetAuthenticationHandler extends org.apache.http.impl.client.AbstractAuthenticationHandler { + public deprecated class DefaultTargetAuthenticationHandler extends org.apache.http.impl.client.AbstractAuthenticationHandler { ctor public DefaultTargetAuthenticationHandler(); method public java.util.Map getChallenges(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.auth.MalformedChallengeException; method public boolean isAuthenticationRequested(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext); } - public class DefaultUserTokenHandler implements org.apache.http.client.UserTokenHandler { + public deprecated class DefaultUserTokenHandler implements org.apache.http.client.UserTokenHandler { ctor public DefaultUserTokenHandler(); method public java.lang.Object getUserToken(org.apache.http.protocol.HttpContext); } - public class EntityEnclosingRequestWrapper extends org.apache.http.impl.client.RequestWrapper implements org.apache.http.HttpEntityEnclosingRequest { + public deprecated class EntityEnclosingRequestWrapper extends org.apache.http.impl.client.RequestWrapper implements org.apache.http.HttpEntityEnclosingRequest { ctor public EntityEnclosingRequestWrapper(org.apache.http.HttpEntityEnclosingRequest) throws org.apache.http.ProtocolException; method public boolean expectContinue(); method public org.apache.http.HttpEntity getEntity(); method public void setEntity(org.apache.http.HttpEntity); } - public class RedirectLocations { + public deprecated class RedirectLocations { ctor public RedirectLocations(); method public void add(java.net.URI); method public boolean contains(java.net.URI); method public boolean remove(java.net.URI); } - public class RequestWrapper extends org.apache.http.message.AbstractHttpMessage implements org.apache.http.client.methods.HttpUriRequest { + public deprecated class RequestWrapper extends org.apache.http.message.AbstractHttpMessage implements org.apache.http.client.methods.HttpUriRequest { ctor public RequestWrapper(org.apache.http.HttpRequest) throws org.apache.http.ProtocolException; method public void abort() throws java.lang.UnsupportedOperationException; method public int getExecCount(); @@ -55916,7 +56118,7 @@ package org.apache.http.impl.client { method public void setURI(java.net.URI); } - public class RoutedRequest { + public deprecated class RoutedRequest { ctor public RoutedRequest(org.apache.http.impl.client.RequestWrapper, org.apache.http.conn.routing.HttpRoute); method public final org.apache.http.impl.client.RequestWrapper getRequest(); method public final org.apache.http.conn.routing.HttpRoute getRoute(); @@ -55924,7 +56126,7 @@ package org.apache.http.impl.client { field protected final org.apache.http.conn.routing.HttpRoute route; } - public class TunnelRefusedException extends org.apache.http.HttpException { + public deprecated class TunnelRefusedException extends org.apache.http.HttpException { ctor public TunnelRefusedException(java.lang.String, org.apache.http.HttpResponse); method public org.apache.http.HttpResponse getResponse(); } @@ -55933,7 +56135,7 @@ package org.apache.http.impl.client { package org.apache.http.impl.conn { - public abstract class AbstractClientConnAdapter implements org.apache.http.conn.ManagedClientConnection { + public abstract deprecated class AbstractClientConnAdapter implements org.apache.http.conn.ManagedClientConnection { ctor protected AbstractClientConnAdapter(org.apache.http.conn.ClientConnectionManager, org.apache.http.conn.OperatedClientConnection); method public void abortConnection(); method protected final void assertNotAborted() throws java.io.InterruptedIOException; @@ -55965,7 +56167,7 @@ package org.apache.http.impl.conn { method public void unmarkReusable(); } - public abstract class AbstractPoolEntry { + public abstract deprecated class AbstractPoolEntry { ctor protected AbstractPoolEntry(org.apache.http.conn.ClientConnectionOperator, org.apache.http.conn.routing.HttpRoute); method public java.lang.Object getState(); method public void layerProtocol(org.apache.http.protocol.HttpContext, org.apache.http.params.HttpParams) throws java.io.IOException; @@ -55981,7 +56183,7 @@ package org.apache.http.impl.conn { field protected volatile org.apache.http.conn.routing.RouteTracker tracker; } - public abstract class AbstractPooledConnAdapter extends org.apache.http.impl.conn.AbstractClientConnAdapter { + public abstract deprecated class AbstractPooledConnAdapter extends org.apache.http.impl.conn.AbstractClientConnAdapter { ctor protected AbstractPooledConnAdapter(org.apache.http.conn.ClientConnectionManager, org.apache.http.impl.conn.AbstractPoolEntry); method protected final void assertAttached(); method public void close() throws java.io.IOException; @@ -55996,7 +56198,7 @@ package org.apache.http.impl.conn { field protected volatile org.apache.http.impl.conn.AbstractPoolEntry poolEntry; } - public class DefaultClientConnection extends org.apache.http.impl.SocketHttpClientConnection implements org.apache.http.conn.OperatedClientConnection { + public deprecated class DefaultClientConnection extends org.apache.http.impl.SocketHttpClientConnection implements org.apache.http.conn.OperatedClientConnection { ctor public DefaultClientConnection(); method public final java.net.Socket getSocket(); method public final org.apache.http.HttpHost getTargetHost(); @@ -56006,7 +56208,7 @@ package org.apache.http.impl.conn { method public void update(java.net.Socket, org.apache.http.HttpHost, boolean, org.apache.http.params.HttpParams) throws java.io.IOException; } - public class DefaultClientConnectionOperator implements org.apache.http.conn.ClientConnectionOperator { + public deprecated class DefaultClientConnectionOperator implements org.apache.http.conn.ClientConnectionOperator { ctor public DefaultClientConnectionOperator(org.apache.http.conn.scheme.SchemeRegistry); method public org.apache.http.conn.OperatedClientConnection createConnection(); method public void openConnection(org.apache.http.conn.OperatedClientConnection, org.apache.http.HttpHost, java.net.InetAddress, org.apache.http.protocol.HttpContext, org.apache.http.params.HttpParams) throws java.io.IOException; @@ -56015,18 +56217,18 @@ package org.apache.http.impl.conn { field protected org.apache.http.conn.scheme.SchemeRegistry schemeRegistry; } - public class DefaultHttpRoutePlanner implements org.apache.http.conn.routing.HttpRoutePlanner { + public deprecated class DefaultHttpRoutePlanner implements org.apache.http.conn.routing.HttpRoutePlanner { ctor public DefaultHttpRoutePlanner(org.apache.http.conn.scheme.SchemeRegistry); method public org.apache.http.conn.routing.HttpRoute determineRoute(org.apache.http.HttpHost, org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException; field protected org.apache.http.conn.scheme.SchemeRegistry schemeRegistry; } - public class DefaultResponseParser extends org.apache.http.impl.io.AbstractMessageParser { + public deprecated class DefaultResponseParser extends org.apache.http.impl.io.AbstractMessageParser { ctor public DefaultResponseParser(org.apache.http.io.SessionInputBuffer, org.apache.http.message.LineParser, org.apache.http.HttpResponseFactory, org.apache.http.params.HttpParams); method protected org.apache.http.HttpMessage parseHead(org.apache.http.io.SessionInputBuffer) throws org.apache.http.HttpException, java.io.IOException; } - public class IdleConnectionHandler { + public deprecated class IdleConnectionHandler { ctor public IdleConnectionHandler(); method public void add(org.apache.http.HttpConnection, long, java.util.concurrent.TimeUnit); method public void closeExpiredConnections(); @@ -56035,7 +56237,7 @@ package org.apache.http.impl.conn { method public void removeAll(); } - public class LoggingSessionInputBuffer implements org.apache.http.io.SessionInputBuffer { + public deprecated class LoggingSessionInputBuffer implements org.apache.http.io.SessionInputBuffer { ctor public LoggingSessionInputBuffer(org.apache.http.io.SessionInputBuffer, org.apache.http.impl.conn.Wire); method public org.apache.http.io.HttpTransportMetrics getMetrics(); method public boolean isDataAvailable(int) throws java.io.IOException; @@ -56046,7 +56248,7 @@ package org.apache.http.impl.conn { method public int readLine(org.apache.http.util.CharArrayBuffer) throws java.io.IOException; } - public class LoggingSessionOutputBuffer implements org.apache.http.io.SessionOutputBuffer { + public deprecated class LoggingSessionOutputBuffer implements org.apache.http.io.SessionOutputBuffer { ctor public LoggingSessionOutputBuffer(org.apache.http.io.SessionOutputBuffer, org.apache.http.impl.conn.Wire); method public void flush() throws java.io.IOException; method public org.apache.http.io.HttpTransportMetrics getMetrics(); @@ -56057,7 +56259,7 @@ package org.apache.http.impl.conn { method public void writeLine(java.lang.String) throws java.io.IOException; } - public class ProxySelectorRoutePlanner implements org.apache.http.conn.routing.HttpRoutePlanner { + public deprecated class ProxySelectorRoutePlanner implements org.apache.http.conn.routing.HttpRoutePlanner { ctor public ProxySelectorRoutePlanner(org.apache.http.conn.scheme.SchemeRegistry, java.net.ProxySelector); method protected java.net.Proxy chooseProxy(java.util.List, org.apache.http.HttpHost, org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext); method protected org.apache.http.HttpHost determineProxy(org.apache.http.HttpHost, org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException; @@ -56069,7 +56271,7 @@ package org.apache.http.impl.conn { field protected org.apache.http.conn.scheme.SchemeRegistry schemeRegistry; } - public class SingleClientConnManager implements org.apache.http.conn.ClientConnectionManager { + public deprecated class SingleClientConnManager implements org.apache.http.conn.ClientConnectionManager { ctor public SingleClientConnManager(org.apache.http.params.HttpParams, org.apache.http.conn.scheme.SchemeRegistry); method protected final void assertStillUp() throws java.lang.IllegalStateException; method public void closeExpiredConnections(); @@ -56102,7 +56304,7 @@ package org.apache.http.impl.conn { method protected void shutdown() throws java.io.IOException; } - public class Wire { + public deprecated class Wire { ctor public Wire(org.apache.commons.logging.Log); method public boolean enabled(); method public void input(java.io.InputStream) throws java.io.IOException; @@ -56121,7 +56323,7 @@ package org.apache.http.impl.conn { package org.apache.http.impl.conn.tsccm { - public abstract class AbstractConnPool implements org.apache.http.impl.conn.tsccm.RefQueueHandler { + public abstract deprecated class AbstractConnPool implements org.apache.http.impl.conn.tsccm.RefQueueHandler { ctor protected AbstractConnPool(); method protected void closeConnection(org.apache.http.conn.OperatedClientConnection); method public void closeExpiredConnections(); @@ -56136,30 +56338,30 @@ package org.apache.http.impl.conn.tsccm { method public void shutdown(); field protected org.apache.http.impl.conn.IdleConnectionHandler idleConnHandler; field protected volatile boolean isShutDown; - field protected java.util.Set issuedConnections; + field protected java.util.Set issuedConnections; field protected int numConnections; field protected final java.util.concurrent.locks.Lock poolLock; - field protected java.lang.ref.ReferenceQueue refQueue; + field protected java.lang.ref.ReferenceQueue refQueue; } - public class BasicPoolEntry extends org.apache.http.impl.conn.AbstractPoolEntry { + public deprecated class BasicPoolEntry extends org.apache.http.impl.conn.AbstractPoolEntry { ctor public BasicPoolEntry(org.apache.http.conn.ClientConnectionOperator, org.apache.http.conn.routing.HttpRoute, java.lang.ref.ReferenceQueue); method protected final org.apache.http.conn.OperatedClientConnection getConnection(); method protected final org.apache.http.conn.routing.HttpRoute getPlannedRoute(); method protected final org.apache.http.impl.conn.tsccm.BasicPoolEntryRef getWeakRef(); } - public class BasicPoolEntryRef extends java.lang.ref.WeakReference { + public deprecated class BasicPoolEntryRef extends java.lang.ref.WeakReference { ctor public BasicPoolEntryRef(org.apache.http.impl.conn.tsccm.BasicPoolEntry, java.lang.ref.ReferenceQueue); method public final org.apache.http.conn.routing.HttpRoute getRoute(); } - public class BasicPooledConnAdapter extends org.apache.http.impl.conn.AbstractPooledConnAdapter { + public deprecated class BasicPooledConnAdapter extends org.apache.http.impl.conn.AbstractPooledConnAdapter { ctor protected BasicPooledConnAdapter(org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager, org.apache.http.impl.conn.AbstractPoolEntry); method protected org.apache.http.impl.conn.AbstractPoolEntry getPoolEntry(); } - public class ConnPoolByRoute extends org.apache.http.impl.conn.tsccm.AbstractConnPool { + public deprecated class ConnPoolByRoute extends org.apache.http.impl.conn.tsccm.AbstractConnPool { ctor public ConnPoolByRoute(org.apache.http.conn.ClientConnectionOperator, org.apache.http.params.HttpParams); method protected org.apache.http.impl.conn.tsccm.BasicPoolEntry createEntry(org.apache.http.impl.conn.tsccm.RouteSpecificPool, org.apache.http.conn.ClientConnectionOperator); method protected java.util.Queue createFreeConnQueue(); @@ -56178,32 +56380,32 @@ package org.apache.http.impl.conn.tsccm { method protected org.apache.http.impl.conn.tsccm.WaitingThread newWaitingThread(java.util.concurrent.locks.Condition, org.apache.http.impl.conn.tsccm.RouteSpecificPool); method protected void notifyWaitingThread(org.apache.http.impl.conn.tsccm.RouteSpecificPool); method public org.apache.http.impl.conn.tsccm.PoolEntryRequest requestPoolEntry(org.apache.http.conn.routing.HttpRoute, java.lang.Object); - field protected java.util.Queue freeConnections; + field protected java.util.Queue freeConnections; field protected final int maxTotalConnections; field protected final org.apache.http.conn.ClientConnectionOperator operator; - field protected final java.util.Map routeToPool; - field protected java.util.Queue waitingThreads; + field protected final java.util.Map routeToPool; + field protected java.util.Queue waitingThreads; } - public abstract interface PoolEntryRequest { + public abstract deprecated interface PoolEntryRequest { method public abstract void abortRequest(); method public abstract org.apache.http.impl.conn.tsccm.BasicPoolEntry getPoolEntry(long, java.util.concurrent.TimeUnit) throws org.apache.http.conn.ConnectionPoolTimeoutException, java.lang.InterruptedException; } - public abstract interface RefQueueHandler { + public abstract deprecated interface RefQueueHandler { method public abstract void handleReference(java.lang.ref.Reference); } - public class RefQueueWorker implements java.lang.Runnable { + public deprecated class RefQueueWorker implements java.lang.Runnable { ctor public RefQueueWorker(java.lang.ref.ReferenceQueue, org.apache.http.impl.conn.tsccm.RefQueueHandler); method public void run(); method public void shutdown(); field protected final org.apache.http.impl.conn.tsccm.RefQueueHandler refHandler; - field protected final java.lang.ref.ReferenceQueue refQueue; + field protected final java.lang.ref.ReferenceQueue refQueue; field protected volatile java.lang.Thread workerThread; } - public class RouteSpecificPool { + public deprecated class RouteSpecificPool { ctor public RouteSpecificPool(org.apache.http.conn.routing.HttpRoute, int); method public org.apache.http.impl.conn.tsccm.BasicPoolEntry allocEntry(java.lang.Object); method public void createdEntry(org.apache.http.impl.conn.tsccm.BasicPoolEntry); @@ -56219,14 +56421,14 @@ package org.apache.http.impl.conn.tsccm { method public org.apache.http.impl.conn.tsccm.WaitingThread nextThread(); method public void queueThread(org.apache.http.impl.conn.tsccm.WaitingThread); method public void removeThread(org.apache.http.impl.conn.tsccm.WaitingThread); - field protected final java.util.LinkedList freeEntries; + field protected final java.util.LinkedList freeEntries; field protected final int maxEntries; field protected int numEntries; field protected final org.apache.http.conn.routing.HttpRoute route; - field protected final java.util.Queue waitingThreads; + field protected final java.util.Queue waitingThreads; } - public class ThreadSafeClientConnManager implements org.apache.http.conn.ClientConnectionManager { + public deprecated class ThreadSafeClientConnManager implements org.apache.http.conn.ClientConnectionManager { ctor public ThreadSafeClientConnManager(org.apache.http.params.HttpParams, org.apache.http.conn.scheme.SchemeRegistry); method public void closeExpiredConnections(); method public void closeIdleConnections(long, java.util.concurrent.TimeUnit); @@ -56243,7 +56445,7 @@ package org.apache.http.impl.conn.tsccm { field protected org.apache.http.conn.scheme.SchemeRegistry schemeRegistry; } - public class WaitingThread { + public deprecated class WaitingThread { ctor public WaitingThread(java.util.concurrent.locks.Condition, org.apache.http.impl.conn.tsccm.RouteSpecificPool); method public boolean await(java.util.Date) throws java.lang.InterruptedException; method public final java.util.concurrent.locks.Condition getCondition(); @@ -56253,7 +56455,7 @@ package org.apache.http.impl.conn.tsccm { method public void wakeup(); } - public class WaitingThreadAborter { + public deprecated class WaitingThreadAborter { ctor public WaitingThreadAborter(); method public void abort(); method public void setWaitingThread(org.apache.http.impl.conn.tsccm.WaitingThread); @@ -56263,13 +56465,13 @@ package org.apache.http.impl.conn.tsccm { package org.apache.http.impl.cookie { - public abstract class AbstractCookieAttributeHandler implements org.apache.http.cookie.CookieAttributeHandler { + public abstract deprecated class AbstractCookieAttributeHandler implements org.apache.http.cookie.CookieAttributeHandler { ctor public AbstractCookieAttributeHandler(); method public boolean match(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin); method public void validate(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin) throws org.apache.http.cookie.MalformedCookieException; } - public abstract class AbstractCookieSpec implements org.apache.http.cookie.CookieSpec { + public abstract deprecated class AbstractCookieSpec implements org.apache.http.cookie.CookieSpec { ctor public AbstractCookieSpec(); method protected org.apache.http.cookie.CookieAttributeHandler findAttribHandler(java.lang.String); method protected org.apache.http.cookie.CookieAttributeHandler getAttribHandler(java.lang.String); @@ -56277,7 +56479,7 @@ package org.apache.http.impl.cookie { method public void registerAttribHandler(java.lang.String, org.apache.http.cookie.CookieAttributeHandler); } - public class BasicClientCookie implements org.apache.http.cookie.ClientCookie java.lang.Cloneable org.apache.http.cookie.SetCookie { + public deprecated class BasicClientCookie implements org.apache.http.cookie.ClientCookie java.lang.Cloneable org.apache.http.cookie.SetCookie { ctor public BasicClientCookie(java.lang.String, java.lang.String); method public java.lang.Object clone() throws java.lang.CloneNotSupportedException; method public boolean containsAttribute(java.lang.String); @@ -56304,48 +56506,48 @@ package org.apache.http.impl.cookie { method public void setVersion(int); } - public class BasicClientCookie2 extends org.apache.http.impl.cookie.BasicClientCookie implements org.apache.http.cookie.SetCookie2 { + public deprecated class BasicClientCookie2 extends org.apache.http.impl.cookie.BasicClientCookie implements org.apache.http.cookie.SetCookie2 { ctor public BasicClientCookie2(java.lang.String, java.lang.String); method public void setCommentURL(java.lang.String); method public void setDiscard(boolean); method public void setPorts(int[]); } - public class BasicCommentHandler extends org.apache.http.impl.cookie.AbstractCookieAttributeHandler { + public deprecated class BasicCommentHandler extends org.apache.http.impl.cookie.AbstractCookieAttributeHandler { ctor public BasicCommentHandler(); method public void parse(org.apache.http.cookie.SetCookie, java.lang.String) throws org.apache.http.cookie.MalformedCookieException; } - public class BasicDomainHandler implements org.apache.http.cookie.CookieAttributeHandler { + public deprecated class BasicDomainHandler implements org.apache.http.cookie.CookieAttributeHandler { ctor public BasicDomainHandler(); method public boolean match(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin); method public void parse(org.apache.http.cookie.SetCookie, java.lang.String) throws org.apache.http.cookie.MalformedCookieException; method public void validate(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin) throws org.apache.http.cookie.MalformedCookieException; } - public class BasicExpiresHandler extends org.apache.http.impl.cookie.AbstractCookieAttributeHandler { + public deprecated class BasicExpiresHandler extends org.apache.http.impl.cookie.AbstractCookieAttributeHandler { ctor public BasicExpiresHandler(java.lang.String[]); method public void parse(org.apache.http.cookie.SetCookie, java.lang.String) throws org.apache.http.cookie.MalformedCookieException; } - public class BasicMaxAgeHandler extends org.apache.http.impl.cookie.AbstractCookieAttributeHandler { + public deprecated class BasicMaxAgeHandler extends org.apache.http.impl.cookie.AbstractCookieAttributeHandler { ctor public BasicMaxAgeHandler(); method public void parse(org.apache.http.cookie.SetCookie, java.lang.String) throws org.apache.http.cookie.MalformedCookieException; } - public class BasicPathHandler implements org.apache.http.cookie.CookieAttributeHandler { + public deprecated class BasicPathHandler implements org.apache.http.cookie.CookieAttributeHandler { ctor public BasicPathHandler(); method public boolean match(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin); method public void parse(org.apache.http.cookie.SetCookie, java.lang.String) throws org.apache.http.cookie.MalformedCookieException; method public void validate(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin) throws org.apache.http.cookie.MalformedCookieException; } - public class BasicSecureHandler extends org.apache.http.impl.cookie.AbstractCookieAttributeHandler { + public deprecated class BasicSecureHandler extends org.apache.http.impl.cookie.AbstractCookieAttributeHandler { ctor public BasicSecureHandler(); method public void parse(org.apache.http.cookie.SetCookie, java.lang.String) throws org.apache.http.cookie.MalformedCookieException; } - public class BestMatchSpec implements org.apache.http.cookie.CookieSpec { + public deprecated class BestMatchSpec implements org.apache.http.cookie.CookieSpec { ctor public BestMatchSpec(java.lang.String[], boolean); ctor public BestMatchSpec(); method public java.util.List formatCookies(java.util.List); @@ -56356,12 +56558,12 @@ package org.apache.http.impl.cookie { method public void validate(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin) throws org.apache.http.cookie.MalformedCookieException; } - public class BestMatchSpecFactory implements org.apache.http.cookie.CookieSpecFactory { + public deprecated class BestMatchSpecFactory implements org.apache.http.cookie.CookieSpecFactory { ctor public BestMatchSpecFactory(); method public org.apache.http.cookie.CookieSpec newInstance(org.apache.http.params.HttpParams); } - public class BrowserCompatSpec extends org.apache.http.impl.cookie.CookieSpecBase { + public deprecated class BrowserCompatSpec extends org.apache.http.impl.cookie.CookieSpecBase { ctor public BrowserCompatSpec(java.lang.String[]); ctor public BrowserCompatSpec(); method public java.util.List formatCookies(java.util.List); @@ -56371,12 +56573,12 @@ package org.apache.http.impl.cookie { field protected static final java.lang.String[] DATE_PATTERNS; } - public class BrowserCompatSpecFactory implements org.apache.http.cookie.CookieSpecFactory { + public deprecated class BrowserCompatSpecFactory implements org.apache.http.cookie.CookieSpecFactory { ctor public BrowserCompatSpecFactory(); method public org.apache.http.cookie.CookieSpec newInstance(org.apache.http.params.HttpParams); } - public abstract class CookieSpecBase extends org.apache.http.impl.cookie.AbstractCookieSpec { + public abstract deprecated class CookieSpecBase extends org.apache.http.impl.cookie.AbstractCookieSpec { ctor public CookieSpecBase(); method protected static java.lang.String getDefaultDomain(org.apache.http.cookie.CookieOrigin); method protected static java.lang.String getDefaultPath(org.apache.http.cookie.CookieOrigin); @@ -56385,12 +56587,12 @@ package org.apache.http.impl.cookie { method public void validate(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin) throws org.apache.http.cookie.MalformedCookieException; } - public class DateParseException extends java.lang.Exception { + public deprecated class DateParseException extends java.lang.Exception { ctor public DateParseException(); ctor public DateParseException(java.lang.String); } - public final class DateUtils { + public final deprecated class DateUtils { method public static java.lang.String formatDate(java.util.Date); method public static java.lang.String formatDate(java.util.Date, java.lang.String); method public static java.util.Date parseDate(java.lang.String) throws org.apache.http.impl.cookie.DateParseException; @@ -56402,17 +56604,17 @@ package org.apache.http.impl.cookie { field public static final java.lang.String PATTERN_RFC1123 = "EEE, dd MMM yyyy HH:mm:ss zzz"; } - public class NetscapeDomainHandler extends org.apache.http.impl.cookie.BasicDomainHandler { + public deprecated class NetscapeDomainHandler extends org.apache.http.impl.cookie.BasicDomainHandler { ctor public NetscapeDomainHandler(); } - public class NetscapeDraftHeaderParser { + public deprecated class NetscapeDraftHeaderParser { ctor public NetscapeDraftHeaderParser(); method public org.apache.http.HeaderElement parseHeader(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor) throws org.apache.http.ParseException; field public static final org.apache.http.impl.cookie.NetscapeDraftHeaderParser DEFAULT; } - public class NetscapeDraftSpec extends org.apache.http.impl.cookie.CookieSpecBase { + public deprecated class NetscapeDraftSpec extends org.apache.http.impl.cookie.CookieSpecBase { ctor public NetscapeDraftSpec(java.lang.String[]); ctor public NetscapeDraftSpec(); method public java.util.List formatCookies(java.util.List); @@ -56422,19 +56624,19 @@ package org.apache.http.impl.cookie { field protected static final java.lang.String EXPIRES_PATTERN = "EEE, dd-MMM-yyyy HH:mm:ss z"; } - public class NetscapeDraftSpecFactory implements org.apache.http.cookie.CookieSpecFactory { + public deprecated class NetscapeDraftSpecFactory implements org.apache.http.cookie.CookieSpecFactory { ctor public NetscapeDraftSpecFactory(); method public org.apache.http.cookie.CookieSpec newInstance(org.apache.http.params.HttpParams); } - public class RFC2109DomainHandler implements org.apache.http.cookie.CookieAttributeHandler { + public deprecated class RFC2109DomainHandler implements org.apache.http.cookie.CookieAttributeHandler { ctor public RFC2109DomainHandler(); method public boolean match(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin); method public void parse(org.apache.http.cookie.SetCookie, java.lang.String) throws org.apache.http.cookie.MalformedCookieException; method public void validate(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin) throws org.apache.http.cookie.MalformedCookieException; } - public class RFC2109Spec extends org.apache.http.impl.cookie.CookieSpecBase { + public deprecated class RFC2109Spec extends org.apache.http.impl.cookie.CookieSpecBase { ctor public RFC2109Spec(java.lang.String[], boolean); ctor public RFC2109Spec(); method protected void formatCookieAsVer(org.apache.http.util.CharArrayBuffer, org.apache.http.cookie.Cookie, int); @@ -56445,31 +56647,31 @@ package org.apache.http.impl.cookie { method public java.util.List parse(org.apache.http.Header, org.apache.http.cookie.CookieOrigin) throws org.apache.http.cookie.MalformedCookieException; } - public class RFC2109SpecFactory implements org.apache.http.cookie.CookieSpecFactory { + public deprecated class RFC2109SpecFactory implements org.apache.http.cookie.CookieSpecFactory { ctor public RFC2109SpecFactory(); method public org.apache.http.cookie.CookieSpec newInstance(org.apache.http.params.HttpParams); } - public class RFC2109VersionHandler extends org.apache.http.impl.cookie.AbstractCookieAttributeHandler { + public deprecated class RFC2109VersionHandler extends org.apache.http.impl.cookie.AbstractCookieAttributeHandler { ctor public RFC2109VersionHandler(); method public void parse(org.apache.http.cookie.SetCookie, java.lang.String) throws org.apache.http.cookie.MalformedCookieException; } - public class RFC2965CommentUrlAttributeHandler implements org.apache.http.cookie.CookieAttributeHandler { + public deprecated class RFC2965CommentUrlAttributeHandler implements org.apache.http.cookie.CookieAttributeHandler { ctor public RFC2965CommentUrlAttributeHandler(); method public boolean match(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin); method public void parse(org.apache.http.cookie.SetCookie, java.lang.String) throws org.apache.http.cookie.MalformedCookieException; method public void validate(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin) throws org.apache.http.cookie.MalformedCookieException; } - public class RFC2965DiscardAttributeHandler implements org.apache.http.cookie.CookieAttributeHandler { + public deprecated class RFC2965DiscardAttributeHandler implements org.apache.http.cookie.CookieAttributeHandler { ctor public RFC2965DiscardAttributeHandler(); method public boolean match(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin); method public void parse(org.apache.http.cookie.SetCookie, java.lang.String) throws org.apache.http.cookie.MalformedCookieException; method public void validate(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin) throws org.apache.http.cookie.MalformedCookieException; } - public class RFC2965DomainAttributeHandler implements org.apache.http.cookie.CookieAttributeHandler { + public deprecated class RFC2965DomainAttributeHandler implements org.apache.http.cookie.CookieAttributeHandler { ctor public RFC2965DomainAttributeHandler(); method public boolean domainMatch(java.lang.String, java.lang.String); method public boolean match(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin); @@ -56477,24 +56679,24 @@ package org.apache.http.impl.cookie { method public void validate(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin) throws org.apache.http.cookie.MalformedCookieException; } - public class RFC2965PortAttributeHandler implements org.apache.http.cookie.CookieAttributeHandler { + public deprecated class RFC2965PortAttributeHandler implements org.apache.http.cookie.CookieAttributeHandler { ctor public RFC2965PortAttributeHandler(); method public boolean match(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin); method public void parse(org.apache.http.cookie.SetCookie, java.lang.String) throws org.apache.http.cookie.MalformedCookieException; method public void validate(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin) throws org.apache.http.cookie.MalformedCookieException; } - public class RFC2965Spec extends org.apache.http.impl.cookie.RFC2109Spec { + public deprecated class RFC2965Spec extends org.apache.http.impl.cookie.RFC2109Spec { ctor public RFC2965Spec(); ctor public RFC2965Spec(java.lang.String[], boolean); } - public class RFC2965SpecFactory implements org.apache.http.cookie.CookieSpecFactory { + public deprecated class RFC2965SpecFactory implements org.apache.http.cookie.CookieSpecFactory { ctor public RFC2965SpecFactory(); method public org.apache.http.cookie.CookieSpec newInstance(org.apache.http.params.HttpParams); } - public class RFC2965VersionAttributeHandler implements org.apache.http.cookie.CookieAttributeHandler { + public deprecated class RFC2965VersionAttributeHandler implements org.apache.http.cookie.CookieAttributeHandler { ctor public RFC2965VersionAttributeHandler(); method public boolean match(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin); method public void parse(org.apache.http.cookie.SetCookie, java.lang.String) throws org.apache.http.cookie.MalformedCookieException; @@ -56505,24 +56707,24 @@ package org.apache.http.impl.cookie { package org.apache.http.impl.entity { - public class EntityDeserializer { + public deprecated class EntityDeserializer { ctor public EntityDeserializer(org.apache.http.entity.ContentLengthStrategy); method public org.apache.http.HttpEntity deserialize(org.apache.http.io.SessionInputBuffer, org.apache.http.HttpMessage) throws org.apache.http.HttpException, java.io.IOException; method protected org.apache.http.entity.BasicHttpEntity doDeserialize(org.apache.http.io.SessionInputBuffer, org.apache.http.HttpMessage) throws org.apache.http.HttpException, java.io.IOException; } - public class EntitySerializer { + public deprecated class EntitySerializer { ctor public EntitySerializer(org.apache.http.entity.ContentLengthStrategy); method protected java.io.OutputStream doSerialize(org.apache.http.io.SessionOutputBuffer, org.apache.http.HttpMessage) throws org.apache.http.HttpException, java.io.IOException; method public void serialize(org.apache.http.io.SessionOutputBuffer, org.apache.http.HttpMessage, org.apache.http.HttpEntity) throws org.apache.http.HttpException, java.io.IOException; } - public class LaxContentLengthStrategy implements org.apache.http.entity.ContentLengthStrategy { + public deprecated class LaxContentLengthStrategy implements org.apache.http.entity.ContentLengthStrategy { ctor public LaxContentLengthStrategy(); method public long determineLength(org.apache.http.HttpMessage) throws org.apache.http.HttpException; } - public class StrictContentLengthStrategy implements org.apache.http.entity.ContentLengthStrategy { + public deprecated class StrictContentLengthStrategy implements org.apache.http.entity.ContentLengthStrategy { ctor public StrictContentLengthStrategy(); method public long determineLength(org.apache.http.HttpMessage) throws org.apache.http.HttpException; } @@ -56531,7 +56733,7 @@ package org.apache.http.impl.entity { package org.apache.http.impl.io { - public abstract class AbstractMessageParser implements org.apache.http.io.HttpMessageParser { + public abstract deprecated class AbstractMessageParser implements org.apache.http.io.HttpMessageParser { ctor public AbstractMessageParser(org.apache.http.io.SessionInputBuffer, org.apache.http.message.LineParser, org.apache.http.params.HttpParams); method public org.apache.http.HttpMessage parse() throws org.apache.http.HttpException, java.io.IOException; method protected abstract org.apache.http.HttpMessage parseHead(org.apache.http.io.SessionInputBuffer) throws org.apache.http.HttpException, java.io.IOException, org.apache.http.ParseException; @@ -56539,7 +56741,7 @@ package org.apache.http.impl.io { field protected final org.apache.http.message.LineParser lineParser; } - public abstract class AbstractMessageWriter implements org.apache.http.io.HttpMessageWriter { + public abstract deprecated class AbstractMessageWriter implements org.apache.http.io.HttpMessageWriter { ctor public AbstractMessageWriter(org.apache.http.io.SessionOutputBuffer, org.apache.http.message.LineFormatter, org.apache.http.params.HttpParams); method public void write(org.apache.http.HttpMessage) throws org.apache.http.HttpException, java.io.IOException; method protected abstract void writeHeadLine(org.apache.http.HttpMessage) throws java.io.IOException; @@ -56548,7 +56750,7 @@ package org.apache.http.impl.io { field protected final org.apache.http.io.SessionOutputBuffer sessionBuffer; } - public abstract class AbstractSessionInputBuffer implements org.apache.http.io.SessionInputBuffer { + public abstract deprecated class AbstractSessionInputBuffer implements org.apache.http.io.SessionInputBuffer { ctor public AbstractSessionInputBuffer(); method protected int fillBuffer() throws java.io.IOException; method public org.apache.http.io.HttpTransportMetrics getMetrics(); @@ -56561,7 +56763,7 @@ package org.apache.http.impl.io { method public java.lang.String readLine() throws java.io.IOException; } - public abstract class AbstractSessionOutputBuffer implements org.apache.http.io.SessionOutputBuffer { + public abstract deprecated class AbstractSessionOutputBuffer implements org.apache.http.io.SessionOutputBuffer { ctor public AbstractSessionOutputBuffer(); method public void flush() throws java.io.IOException; method protected void flushBuffer() throws java.io.IOException; @@ -56574,13 +56776,13 @@ package org.apache.http.impl.io { method public void writeLine(org.apache.http.util.CharArrayBuffer) throws java.io.IOException; } - public class ChunkedInputStream extends java.io.InputStream { + public deprecated class ChunkedInputStream extends java.io.InputStream { ctor public ChunkedInputStream(org.apache.http.io.SessionInputBuffer); method public org.apache.http.Header[] getFooters(); method public int read() throws java.io.IOException; } - public class ChunkedOutputStream extends java.io.OutputStream { + public deprecated class ChunkedOutputStream extends java.io.OutputStream { ctor public ChunkedOutputStream(org.apache.http.io.SessionOutputBuffer, int) throws java.io.IOException; ctor public ChunkedOutputStream(org.apache.http.io.SessionOutputBuffer) throws java.io.IOException; method public void finish() throws java.io.IOException; @@ -56590,37 +56792,37 @@ package org.apache.http.impl.io { method protected void writeClosingChunk() throws java.io.IOException; } - public class ContentLengthInputStream extends java.io.InputStream { + public deprecated class ContentLengthInputStream extends java.io.InputStream { ctor public ContentLengthInputStream(org.apache.http.io.SessionInputBuffer, long); method public int read() throws java.io.IOException; } - public class ContentLengthOutputStream extends java.io.OutputStream { + public deprecated class ContentLengthOutputStream extends java.io.OutputStream { ctor public ContentLengthOutputStream(org.apache.http.io.SessionOutputBuffer, long); method public void write(int) throws java.io.IOException; } - public class HttpRequestParser extends org.apache.http.impl.io.AbstractMessageParser { + public deprecated class HttpRequestParser extends org.apache.http.impl.io.AbstractMessageParser { ctor public HttpRequestParser(org.apache.http.io.SessionInputBuffer, org.apache.http.message.LineParser, org.apache.http.HttpRequestFactory, org.apache.http.params.HttpParams); method protected org.apache.http.HttpMessage parseHead(org.apache.http.io.SessionInputBuffer) throws org.apache.http.HttpException, java.io.IOException, org.apache.http.ParseException; } - public class HttpRequestWriter extends org.apache.http.impl.io.AbstractMessageWriter { + public deprecated class HttpRequestWriter extends org.apache.http.impl.io.AbstractMessageWriter { ctor public HttpRequestWriter(org.apache.http.io.SessionOutputBuffer, org.apache.http.message.LineFormatter, org.apache.http.params.HttpParams); method protected void writeHeadLine(org.apache.http.HttpMessage) throws java.io.IOException; } - public class HttpResponseParser extends org.apache.http.impl.io.AbstractMessageParser { + public deprecated class HttpResponseParser extends org.apache.http.impl.io.AbstractMessageParser { ctor public HttpResponseParser(org.apache.http.io.SessionInputBuffer, org.apache.http.message.LineParser, org.apache.http.HttpResponseFactory, org.apache.http.params.HttpParams); method protected org.apache.http.HttpMessage parseHead(org.apache.http.io.SessionInputBuffer) throws org.apache.http.HttpException, java.io.IOException, org.apache.http.ParseException; } - public class HttpResponseWriter extends org.apache.http.impl.io.AbstractMessageWriter { + public deprecated class HttpResponseWriter extends org.apache.http.impl.io.AbstractMessageWriter { ctor public HttpResponseWriter(org.apache.http.io.SessionOutputBuffer, org.apache.http.message.LineFormatter, org.apache.http.params.HttpParams); method protected void writeHeadLine(org.apache.http.HttpMessage) throws java.io.IOException; } - public class HttpTransportMetricsImpl implements org.apache.http.io.HttpTransportMetrics { + public deprecated class HttpTransportMetricsImpl implements org.apache.http.io.HttpTransportMetrics { ctor public HttpTransportMetricsImpl(); method public long getBytesTransferred(); method public void incrementBytesTransferred(long); @@ -56628,22 +56830,22 @@ package org.apache.http.impl.io { method public void setBytesTransferred(long); } - public class IdentityInputStream extends java.io.InputStream { + public deprecated class IdentityInputStream extends java.io.InputStream { ctor public IdentityInputStream(org.apache.http.io.SessionInputBuffer); method public int read() throws java.io.IOException; } - public class IdentityOutputStream extends java.io.OutputStream { + public deprecated class IdentityOutputStream extends java.io.OutputStream { ctor public IdentityOutputStream(org.apache.http.io.SessionOutputBuffer); method public void write(int) throws java.io.IOException; } - public class SocketInputBuffer extends org.apache.http.impl.io.AbstractSessionInputBuffer { + public deprecated class SocketInputBuffer extends org.apache.http.impl.io.AbstractSessionInputBuffer { ctor public SocketInputBuffer(java.net.Socket, int, org.apache.http.params.HttpParams) throws java.io.IOException; method public boolean isDataAvailable(int) throws java.io.IOException; } - public class SocketOutputBuffer extends org.apache.http.impl.io.AbstractSessionOutputBuffer { + public deprecated class SocketOutputBuffer extends org.apache.http.impl.io.AbstractSessionOutputBuffer { ctor public SocketOutputBuffer(java.net.Socket, int, org.apache.http.params.HttpParams) throws java.io.IOException; } @@ -56651,20 +56853,20 @@ package org.apache.http.impl.io { package org.apache.http.io { - public abstract interface HttpMessageParser { + public abstract deprecated interface HttpMessageParser { method public abstract org.apache.http.HttpMessage parse() throws org.apache.http.HttpException, java.io.IOException; } - public abstract interface HttpMessageWriter { + public abstract deprecated interface HttpMessageWriter { method public abstract void write(org.apache.http.HttpMessage) throws org.apache.http.HttpException, java.io.IOException; } - public abstract interface HttpTransportMetrics { + public abstract deprecated interface HttpTransportMetrics { method public abstract long getBytesTransferred(); method public abstract void reset(); } - public abstract interface SessionInputBuffer { + public abstract deprecated interface SessionInputBuffer { method public abstract org.apache.http.io.HttpTransportMetrics getMetrics(); method public abstract boolean isDataAvailable(int) throws java.io.IOException; method public abstract int read(byte[], int, int) throws java.io.IOException; @@ -56674,7 +56876,7 @@ package org.apache.http.io { method public abstract java.lang.String readLine() throws java.io.IOException; } - public abstract interface SessionOutputBuffer { + public abstract deprecated interface SessionOutputBuffer { method public abstract void flush() throws java.io.IOException; method public abstract org.apache.http.io.HttpTransportMetrics getMetrics(); method public abstract void write(byte[], int, int) throws java.io.IOException; @@ -56688,7 +56890,7 @@ package org.apache.http.io { package org.apache.http.message { - public abstract class AbstractHttpMessage implements org.apache.http.HttpMessage { + public abstract deprecated class AbstractHttpMessage implements org.apache.http.HttpMessage { ctor protected AbstractHttpMessage(org.apache.http.params.HttpParams); ctor protected AbstractHttpMessage(); method public void addHeader(org.apache.http.Header); @@ -56711,7 +56913,7 @@ package org.apache.http.message { field protected org.apache.http.params.HttpParams params; } - public class BasicHeader implements java.lang.Cloneable org.apache.http.Header { + public deprecated class BasicHeader implements java.lang.Cloneable org.apache.http.Header { ctor public BasicHeader(java.lang.String, java.lang.String); method public java.lang.Object clone() throws java.lang.CloneNotSupportedException; method public org.apache.http.HeaderElement[] getElements() throws org.apache.http.ParseException; @@ -56719,7 +56921,7 @@ package org.apache.http.message { method public java.lang.String getValue(); } - public class BasicHeaderElement implements java.lang.Cloneable org.apache.http.HeaderElement { + public deprecated class BasicHeaderElement implements java.lang.Cloneable org.apache.http.HeaderElement { ctor public BasicHeaderElement(java.lang.String, java.lang.String, org.apache.http.NameValuePair[]); ctor public BasicHeaderElement(java.lang.String, java.lang.String); method public java.lang.Object clone() throws java.lang.CloneNotSupportedException; @@ -56731,7 +56933,7 @@ package org.apache.http.message { method public java.lang.String getValue(); } - public class BasicHeaderElementIterator implements org.apache.http.HeaderElementIterator { + public deprecated class BasicHeaderElementIterator implements org.apache.http.HeaderElementIterator { ctor public BasicHeaderElementIterator(org.apache.http.HeaderIterator, org.apache.http.message.HeaderValueParser); ctor public BasicHeaderElementIterator(org.apache.http.HeaderIterator); method public boolean hasNext(); @@ -56740,7 +56942,7 @@ package org.apache.http.message { method public void remove() throws java.lang.UnsupportedOperationException; } - public class BasicHeaderIterator implements org.apache.http.HeaderIterator { + public deprecated class BasicHeaderIterator implements org.apache.http.HeaderIterator { ctor public BasicHeaderIterator(org.apache.http.Header[], java.lang.String); method protected boolean filterHeader(int); method protected int findNext(int); @@ -56753,7 +56955,7 @@ package org.apache.http.message { field protected java.lang.String headerName; } - public class BasicHeaderValueFormatter implements org.apache.http.message.HeaderValueFormatter { + public deprecated class BasicHeaderValueFormatter implements org.apache.http.message.HeaderValueFormatter { ctor public BasicHeaderValueFormatter(); method protected void doFormatValue(org.apache.http.util.CharArrayBuffer, java.lang.String, boolean); method protected int estimateElementsLen(org.apache.http.HeaderElement[]); @@ -56775,7 +56977,7 @@ package org.apache.http.message { field public static final java.lang.String UNSAFE_CHARS = "\"\\"; } - public class BasicHeaderValueParser implements org.apache.http.message.HeaderValueParser { + public deprecated class BasicHeaderValueParser implements org.apache.http.message.HeaderValueParser { ctor public BasicHeaderValueParser(); method protected org.apache.http.HeaderElement createHeaderElement(java.lang.String, java.lang.String, org.apache.http.NameValuePair[]); method protected org.apache.http.NameValuePair createNameValuePair(java.lang.String, java.lang.String); @@ -56791,7 +56993,7 @@ package org.apache.http.message { field public static final org.apache.http.message.BasicHeaderValueParser DEFAULT; } - public class BasicHttpEntityEnclosingRequest extends org.apache.http.message.BasicHttpRequest implements org.apache.http.HttpEntityEnclosingRequest { + public deprecated class BasicHttpEntityEnclosingRequest extends org.apache.http.message.BasicHttpRequest implements org.apache.http.HttpEntityEnclosingRequest { ctor public BasicHttpEntityEnclosingRequest(java.lang.String, java.lang.String); ctor public BasicHttpEntityEnclosingRequest(java.lang.String, java.lang.String, org.apache.http.ProtocolVersion); ctor public BasicHttpEntityEnclosingRequest(org.apache.http.RequestLine); @@ -56800,7 +57002,7 @@ package org.apache.http.message { method public void setEntity(org.apache.http.HttpEntity); } - public class BasicHttpRequest extends org.apache.http.message.AbstractHttpMessage implements org.apache.http.HttpRequest { + public deprecated class BasicHttpRequest extends org.apache.http.message.AbstractHttpMessage implements org.apache.http.HttpRequest { ctor public BasicHttpRequest(java.lang.String, java.lang.String); ctor public BasicHttpRequest(java.lang.String, java.lang.String, org.apache.http.ProtocolVersion); ctor public BasicHttpRequest(org.apache.http.RequestLine); @@ -56808,7 +57010,7 @@ package org.apache.http.message { method public org.apache.http.RequestLine getRequestLine(); } - public class BasicHttpResponse extends org.apache.http.message.AbstractHttpMessage implements org.apache.http.HttpResponse { + public deprecated class BasicHttpResponse extends org.apache.http.message.AbstractHttpMessage implements org.apache.http.HttpResponse { ctor public BasicHttpResponse(org.apache.http.StatusLine, org.apache.http.ReasonPhraseCatalog, java.util.Locale); ctor public BasicHttpResponse(org.apache.http.StatusLine); ctor public BasicHttpResponse(org.apache.http.ProtocolVersion, int, java.lang.String); @@ -56826,7 +57028,7 @@ package org.apache.http.message { method public void setStatusLine(org.apache.http.ProtocolVersion, int, java.lang.String); } - public class BasicLineFormatter implements org.apache.http.message.LineFormatter { + public deprecated class BasicLineFormatter implements org.apache.http.message.LineFormatter { ctor public BasicLineFormatter(); method public org.apache.http.util.CharArrayBuffer appendProtocolVersion(org.apache.http.util.CharArrayBuffer, org.apache.http.ProtocolVersion); method protected void doFormatHeader(org.apache.http.util.CharArrayBuffer, org.apache.http.Header); @@ -56844,7 +57046,7 @@ package org.apache.http.message { field public static final org.apache.http.message.BasicLineFormatter DEFAULT; } - public class BasicLineParser implements org.apache.http.message.LineParser { + public deprecated class BasicLineParser implements org.apache.http.message.LineParser { ctor public BasicLineParser(org.apache.http.ProtocolVersion); ctor public BasicLineParser(); method protected org.apache.http.ProtocolVersion createProtocolVersion(int, int); @@ -56864,7 +57066,7 @@ package org.apache.http.message { field protected final org.apache.http.ProtocolVersion protocol; } - public class BasicListHeaderIterator implements org.apache.http.HeaderIterator { + public deprecated class BasicListHeaderIterator implements org.apache.http.HeaderIterator { ctor public BasicListHeaderIterator(java.util.List, java.lang.String); method protected boolean filterHeader(int); method protected int findNext(int); @@ -56878,14 +57080,14 @@ package org.apache.http.message { field protected int lastIndex; } - public class BasicNameValuePair implements java.lang.Cloneable org.apache.http.NameValuePair { + public deprecated class BasicNameValuePair implements java.lang.Cloneable org.apache.http.NameValuePair { ctor public BasicNameValuePair(java.lang.String, java.lang.String); method public java.lang.Object clone() throws java.lang.CloneNotSupportedException; method public java.lang.String getName(); method public java.lang.String getValue(); } - public class BasicRequestLine implements java.lang.Cloneable org.apache.http.RequestLine { + public deprecated class BasicRequestLine implements java.lang.Cloneable org.apache.http.RequestLine { ctor public BasicRequestLine(java.lang.String, java.lang.String, org.apache.http.ProtocolVersion); method public java.lang.Object clone() throws java.lang.CloneNotSupportedException; method public java.lang.String getMethod(); @@ -56893,7 +57095,7 @@ package org.apache.http.message { method public java.lang.String getUri(); } - public class BasicStatusLine implements java.lang.Cloneable org.apache.http.StatusLine { + public deprecated class BasicStatusLine implements java.lang.Cloneable org.apache.http.StatusLine { ctor public BasicStatusLine(org.apache.http.ProtocolVersion, int, java.lang.String); method public java.lang.Object clone() throws java.lang.CloneNotSupportedException; method public org.apache.http.ProtocolVersion getProtocolVersion(); @@ -56901,7 +57103,7 @@ package org.apache.http.message { method public int getStatusCode(); } - public class BasicTokenIterator implements org.apache.http.TokenIterator { + public deprecated class BasicTokenIterator implements org.apache.http.TokenIterator { ctor public BasicTokenIterator(org.apache.http.HeaderIterator); method protected java.lang.String createToken(java.lang.String, int, int); method protected int findNext(int) throws org.apache.http.ParseException; @@ -56923,7 +57125,7 @@ package org.apache.http.message { field protected int searchPos; } - public class BufferedHeader implements java.lang.Cloneable org.apache.http.FormattedHeader { + public deprecated class BufferedHeader implements java.lang.Cloneable org.apache.http.FormattedHeader { ctor public BufferedHeader(org.apache.http.util.CharArrayBuffer) throws org.apache.http.ParseException; method public java.lang.Object clone() throws java.lang.CloneNotSupportedException; method public org.apache.http.util.CharArrayBuffer getBuffer(); @@ -56933,7 +57135,7 @@ package org.apache.http.message { method public int getValuePos(); } - public class HeaderGroup implements java.lang.Cloneable { + public deprecated class HeaderGroup implements java.lang.Cloneable { ctor public HeaderGroup(); method public void addHeader(org.apache.http.Header); method public void clear(); @@ -56952,28 +57154,28 @@ package org.apache.http.message { method public void updateHeader(org.apache.http.Header); } - public abstract interface HeaderValueFormatter { + public abstract deprecated interface HeaderValueFormatter { method public abstract org.apache.http.util.CharArrayBuffer formatElements(org.apache.http.util.CharArrayBuffer, org.apache.http.HeaderElement[], boolean); method public abstract org.apache.http.util.CharArrayBuffer formatHeaderElement(org.apache.http.util.CharArrayBuffer, org.apache.http.HeaderElement, boolean); method public abstract org.apache.http.util.CharArrayBuffer formatNameValuePair(org.apache.http.util.CharArrayBuffer, org.apache.http.NameValuePair, boolean); method public abstract org.apache.http.util.CharArrayBuffer formatParameters(org.apache.http.util.CharArrayBuffer, org.apache.http.NameValuePair[], boolean); } - public abstract interface HeaderValueParser { + public abstract deprecated interface HeaderValueParser { method public abstract org.apache.http.HeaderElement[] parseElements(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor) throws org.apache.http.ParseException; method public abstract org.apache.http.HeaderElement parseHeaderElement(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor) throws org.apache.http.ParseException; method public abstract org.apache.http.NameValuePair parseNameValuePair(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor) throws org.apache.http.ParseException; method public abstract org.apache.http.NameValuePair[] parseParameters(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor) throws org.apache.http.ParseException; } - public abstract interface LineFormatter { + public abstract deprecated interface LineFormatter { method public abstract org.apache.http.util.CharArrayBuffer appendProtocolVersion(org.apache.http.util.CharArrayBuffer, org.apache.http.ProtocolVersion); method public abstract org.apache.http.util.CharArrayBuffer formatHeader(org.apache.http.util.CharArrayBuffer, org.apache.http.Header); method public abstract org.apache.http.util.CharArrayBuffer formatRequestLine(org.apache.http.util.CharArrayBuffer, org.apache.http.RequestLine); method public abstract org.apache.http.util.CharArrayBuffer formatStatusLine(org.apache.http.util.CharArrayBuffer, org.apache.http.StatusLine); } - public abstract interface LineParser { + public abstract deprecated interface LineParser { method public abstract boolean hasProtocolVersion(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor); method public abstract org.apache.http.Header parseHeader(org.apache.http.util.CharArrayBuffer) throws org.apache.http.ParseException; method public abstract org.apache.http.ProtocolVersion parseProtocolVersion(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor) throws org.apache.http.ParseException; @@ -56981,7 +57183,7 @@ package org.apache.http.message { method public abstract org.apache.http.StatusLine parseStatusLine(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor) throws org.apache.http.ParseException; } - public class ParserCursor { + public deprecated class ParserCursor { ctor public ParserCursor(int, int); method public boolean atEnd(); method public int getLowerBound(); @@ -56994,7 +57196,7 @@ package org.apache.http.message { package org.apache.http.params { - public abstract class AbstractHttpParams implements org.apache.http.params.HttpParams { + public abstract deprecated class AbstractHttpParams implements org.apache.http.params.HttpParams { ctor protected AbstractHttpParams(); method public boolean getBooleanParameter(java.lang.String, boolean); method public double getDoubleParameter(java.lang.String, double); @@ -57008,7 +57210,7 @@ package org.apache.http.params { method public org.apache.http.params.HttpParams setLongParameter(java.lang.String, long); } - public final class BasicHttpParams extends org.apache.http.params.AbstractHttpParams implements java.lang.Cloneable java.io.Serializable { + public final deprecated class BasicHttpParams extends org.apache.http.params.AbstractHttpParams implements java.lang.Cloneable java.io.Serializable { ctor public BasicHttpParams(); method public void clear(); method public java.lang.Object clone() throws java.lang.CloneNotSupportedException; @@ -57022,7 +57224,7 @@ package org.apache.http.params { method public void setParameters(java.lang.String[], java.lang.Object); } - public abstract interface CoreConnectionPNames { + public abstract deprecated interface CoreConnectionPNames { field public static final java.lang.String CONNECTION_TIMEOUT = "http.connection.timeout"; field public static final java.lang.String MAX_HEADER_COUNT = "http.connection.max-header-count"; field public static final java.lang.String MAX_LINE_LENGTH = "http.connection.max-line-length"; @@ -57033,7 +57235,7 @@ package org.apache.http.params { field public static final java.lang.String TCP_NODELAY = "http.tcp.nodelay"; } - public abstract interface CoreProtocolPNames { + public abstract deprecated interface CoreProtocolPNames { field public static final java.lang.String HTTP_CONTENT_CHARSET = "http.protocol.content-charset"; field public static final java.lang.String HTTP_ELEMENT_CHARSET = "http.protocol.element-charset"; field public static final java.lang.String ORIGIN_SERVER = "http.origin-server"; @@ -57044,7 +57246,7 @@ package org.apache.http.params { field public static final java.lang.String WAIT_FOR_CONTINUE = "http.protocol.wait-for-continue"; } - public final class DefaultedHttpParams extends org.apache.http.params.AbstractHttpParams { + public final deprecated class DefaultedHttpParams extends org.apache.http.params.AbstractHttpParams { ctor public DefaultedHttpParams(org.apache.http.params.HttpParams, org.apache.http.params.HttpParams); method public org.apache.http.params.HttpParams copy(); method public org.apache.http.params.HttpParams getDefaults(); @@ -57053,12 +57255,12 @@ package org.apache.http.params { method public org.apache.http.params.HttpParams setParameter(java.lang.String, java.lang.Object); } - public abstract class HttpAbstractParamBean { + public abstract deprecated class HttpAbstractParamBean { ctor public HttpAbstractParamBean(org.apache.http.params.HttpParams); field protected final org.apache.http.params.HttpParams params; } - public class HttpConnectionParamBean extends org.apache.http.params.HttpAbstractParamBean { + public deprecated class HttpConnectionParamBean extends org.apache.http.params.HttpAbstractParamBean { ctor public HttpConnectionParamBean(org.apache.http.params.HttpParams); method public void setConnectionTimeout(int); method public void setLinger(int); @@ -57068,7 +57270,7 @@ package org.apache.http.params { method public void setTcpNoDelay(boolean); } - public final class HttpConnectionParams implements org.apache.http.params.CoreConnectionPNames { + public final deprecated class HttpConnectionParams implements org.apache.http.params.CoreConnectionPNames { method public static int getConnectionTimeout(org.apache.http.params.HttpParams); method public static int getLinger(org.apache.http.params.HttpParams); method public static int getSoTimeout(org.apache.http.params.HttpParams); @@ -57083,7 +57285,7 @@ package org.apache.http.params { method public static void setTcpNoDelay(org.apache.http.params.HttpParams, boolean); } - public abstract interface HttpParams { + public abstract deprecated interface HttpParams { method public abstract org.apache.http.params.HttpParams copy(); method public abstract boolean getBooleanParameter(java.lang.String, boolean); method public abstract double getDoubleParameter(java.lang.String, double); @@ -57100,7 +57302,7 @@ package org.apache.http.params { method public abstract org.apache.http.params.HttpParams setParameter(java.lang.String, java.lang.Object); } - public class HttpProtocolParamBean extends org.apache.http.params.HttpAbstractParamBean { + public deprecated class HttpProtocolParamBean extends org.apache.http.params.HttpAbstractParamBean { ctor public HttpProtocolParamBean(org.apache.http.params.HttpParams); method public void setContentCharset(java.lang.String); method public void setHttpElementCharset(java.lang.String); @@ -57109,7 +57311,7 @@ package org.apache.http.params { method public void setVersion(org.apache.http.HttpVersion); } - public final class HttpProtocolParams implements org.apache.http.params.CoreProtocolPNames { + public final deprecated class HttpProtocolParams implements org.apache.http.params.CoreProtocolPNames { method public static java.lang.String getContentCharset(org.apache.http.params.HttpParams); method public static java.lang.String getHttpElementCharset(org.apache.http.params.HttpParams); method public static java.lang.String getUserAgent(org.apache.http.params.HttpParams); @@ -57126,7 +57328,7 @@ package org.apache.http.params { package org.apache.http.protocol { - public class BasicHttpContext implements org.apache.http.protocol.HttpContext { + public deprecated class BasicHttpContext implements org.apache.http.protocol.HttpContext { ctor public BasicHttpContext(); ctor public BasicHttpContext(org.apache.http.protocol.HttpContext); method public java.lang.Object getAttribute(java.lang.String); @@ -57134,7 +57336,7 @@ package org.apache.http.protocol { method public void setAttribute(java.lang.String, java.lang.Object); } - public final class BasicHttpProcessor implements java.lang.Cloneable org.apache.http.protocol.HttpProcessor org.apache.http.protocol.HttpRequestInterceptorList org.apache.http.protocol.HttpResponseInterceptorList { + public final deprecated class BasicHttpProcessor implements java.lang.Cloneable org.apache.http.protocol.HttpProcessor org.apache.http.protocol.HttpRequestInterceptorList org.apache.http.protocol.HttpResponseInterceptorList { ctor public BasicHttpProcessor(); method public final void addInterceptor(org.apache.http.HttpRequestInterceptor); method public final void addInterceptor(org.apache.http.HttpRequestInterceptor, int); @@ -57163,7 +57365,7 @@ package org.apache.http.protocol { field protected java.util.List responseInterceptors; } - public final class DefaultedHttpContext implements org.apache.http.protocol.HttpContext { + public final deprecated class DefaultedHttpContext implements org.apache.http.protocol.HttpContext { ctor public DefaultedHttpContext(org.apache.http.protocol.HttpContext, org.apache.http.protocol.HttpContext); method public java.lang.Object getAttribute(java.lang.String); method public org.apache.http.protocol.HttpContext getDefaults(); @@ -57171,7 +57373,7 @@ package org.apache.http.protocol { method public void setAttribute(java.lang.String, java.lang.Object); } - public abstract interface ExecutionContext { + public abstract deprecated interface ExecutionContext { field public static final java.lang.String HTTP_CONNECTION = "http.connection"; field public static final java.lang.String HTTP_PROXY_HOST = "http.proxy_host"; field public static final java.lang.String HTTP_REQUEST = "http.request"; @@ -57180,7 +57382,7 @@ package org.apache.http.protocol { field public static final java.lang.String HTTP_TARGET_HOST = "http.target_host"; } - public final class HTTP { + public final deprecated class HTTP { method public static boolean isWhitespace(char); field public static final java.lang.String ASCII = "ASCII"; field public static final java.lang.String CHARSET_PARAM = "; charset="; @@ -57214,28 +57416,28 @@ package org.apache.http.protocol { field public static final java.lang.String UTF_8 = "UTF-8"; } - public abstract interface HttpContext { + public abstract deprecated interface HttpContext { method public abstract java.lang.Object getAttribute(java.lang.String); method public abstract java.lang.Object removeAttribute(java.lang.String); method public abstract void setAttribute(java.lang.String, java.lang.Object); field public static final java.lang.String RESERVED_PREFIX = "http."; } - public class HttpDateGenerator { + public deprecated class HttpDateGenerator { ctor public HttpDateGenerator(); method public synchronized java.lang.String getCurrentDate(); field public static final java.util.TimeZone GMT; field public static final java.lang.String PATTERN_RFC1123 = "EEE, dd MMM yyyy HH:mm:ss zzz"; } - public abstract interface HttpExpectationVerifier { + public abstract deprecated interface HttpExpectationVerifier { method public abstract void verify(org.apache.http.HttpRequest, org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException; } - public abstract interface HttpProcessor implements org.apache.http.HttpRequestInterceptor org.apache.http.HttpResponseInterceptor { + public abstract deprecated interface HttpProcessor implements org.apache.http.HttpRequestInterceptor org.apache.http.HttpResponseInterceptor { } - public class HttpRequestExecutor { + public deprecated class HttpRequestExecutor { ctor public HttpRequestExecutor(); method protected boolean canResponseHaveBody(org.apache.http.HttpRequest, org.apache.http.HttpResponse); method protected org.apache.http.HttpResponse doReceiveResponse(org.apache.http.HttpRequest, org.apache.http.HttpClientConnection, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; @@ -57245,11 +57447,11 @@ package org.apache.http.protocol { method public void preProcess(org.apache.http.HttpRequest, org.apache.http.protocol.HttpProcessor, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; } - public abstract interface HttpRequestHandler { + public abstract deprecated interface HttpRequestHandler { method public abstract void handle(org.apache.http.HttpRequest, org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; } - public class HttpRequestHandlerRegistry implements org.apache.http.protocol.HttpRequestHandlerResolver { + public deprecated class HttpRequestHandlerRegistry implements org.apache.http.protocol.HttpRequestHandlerResolver { ctor public HttpRequestHandlerRegistry(); method public org.apache.http.protocol.HttpRequestHandler lookup(java.lang.String); method protected deprecated boolean matchUriRequestPattern(java.lang.String, java.lang.String); @@ -57258,11 +57460,11 @@ package org.apache.http.protocol { method public void unregister(java.lang.String); } - public abstract interface HttpRequestHandlerResolver { + public abstract deprecated interface HttpRequestHandlerResolver { method public abstract org.apache.http.protocol.HttpRequestHandler lookup(java.lang.String); } - public abstract interface HttpRequestInterceptorList { + public abstract deprecated interface HttpRequestInterceptorList { method public abstract void addRequestInterceptor(org.apache.http.HttpRequestInterceptor); method public abstract void addRequestInterceptor(org.apache.http.HttpRequestInterceptor, int); method public abstract void clearRequestInterceptors(); @@ -57272,7 +57474,7 @@ package org.apache.http.protocol { method public abstract void setInterceptors(java.util.List); } - public abstract interface HttpResponseInterceptorList { + public abstract deprecated interface HttpResponseInterceptorList { method public abstract void addResponseInterceptor(org.apache.http.HttpResponseInterceptor); method public abstract void addResponseInterceptor(org.apache.http.HttpResponseInterceptor, int); method public abstract void clearResponseInterceptors(); @@ -57282,7 +57484,7 @@ package org.apache.http.protocol { method public abstract void setInterceptors(java.util.List); } - public class HttpService { + public deprecated class HttpService { ctor public HttpService(org.apache.http.protocol.HttpProcessor, org.apache.http.ConnectionReuseStrategy, org.apache.http.HttpResponseFactory); method protected void doService(org.apache.http.HttpRequest, org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; method public org.apache.http.params.HttpParams getParams(); @@ -57296,61 +57498,61 @@ package org.apache.http.protocol { method public void setResponseFactory(org.apache.http.HttpResponseFactory); } - public class RequestConnControl implements org.apache.http.HttpRequestInterceptor { + public deprecated class RequestConnControl implements org.apache.http.HttpRequestInterceptor { ctor public RequestConnControl(); method public void process(org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; } - public class RequestContent implements org.apache.http.HttpRequestInterceptor { + public deprecated class RequestContent implements org.apache.http.HttpRequestInterceptor { ctor public RequestContent(); method public void process(org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; } - public class RequestDate implements org.apache.http.HttpRequestInterceptor { + public deprecated class RequestDate implements org.apache.http.HttpRequestInterceptor { ctor public RequestDate(); method public void process(org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; } - public class RequestExpectContinue implements org.apache.http.HttpRequestInterceptor { + public deprecated class RequestExpectContinue implements org.apache.http.HttpRequestInterceptor { ctor public RequestExpectContinue(); method public void process(org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; } - public class RequestTargetHost implements org.apache.http.HttpRequestInterceptor { + public deprecated class RequestTargetHost implements org.apache.http.HttpRequestInterceptor { ctor public RequestTargetHost(); method public void process(org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; } - public class RequestUserAgent implements org.apache.http.HttpRequestInterceptor { + public deprecated class RequestUserAgent implements org.apache.http.HttpRequestInterceptor { ctor public RequestUserAgent(); method public void process(org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; } - public class ResponseConnControl implements org.apache.http.HttpResponseInterceptor { + public deprecated class ResponseConnControl implements org.apache.http.HttpResponseInterceptor { ctor public ResponseConnControl(); method public void process(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; } - public class ResponseContent implements org.apache.http.HttpResponseInterceptor { + public deprecated class ResponseContent implements org.apache.http.HttpResponseInterceptor { ctor public ResponseContent(); method public void process(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; } - public class ResponseDate implements org.apache.http.HttpResponseInterceptor { + public deprecated class ResponseDate implements org.apache.http.HttpResponseInterceptor { ctor public ResponseDate(); method public void process(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; } - public class ResponseServer implements org.apache.http.HttpResponseInterceptor { + public deprecated class ResponseServer implements org.apache.http.HttpResponseInterceptor { ctor public ResponseServer(); method public void process(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; } - public class SyncBasicHttpContext extends org.apache.http.protocol.BasicHttpContext { + public deprecated class SyncBasicHttpContext extends org.apache.http.protocol.BasicHttpContext { ctor public SyncBasicHttpContext(org.apache.http.protocol.HttpContext); } - public class UriPatternMatcher { + public deprecated class UriPatternMatcher { ctor public UriPatternMatcher(); method public java.lang.Object lookup(java.lang.String); method protected boolean matchUriRequestPattern(java.lang.String, java.lang.String); @@ -57363,7 +57565,7 @@ package org.apache.http.protocol { package org.apache.http.util { - public final class ByteArrayBuffer { + public final deprecated class ByteArrayBuffer { ctor public ByteArrayBuffer(int); method public void append(byte[], int, int); method public void append(int); @@ -57380,7 +57582,7 @@ package org.apache.http.util { method public byte[] toByteArray(); } - public final class CharArrayBuffer { + public final deprecated class CharArrayBuffer { ctor public CharArrayBuffer(int); method public void append(char[], int, int); method public void append(java.lang.String); @@ -57406,7 +57608,7 @@ package org.apache.http.util { method public char[] toCharArray(); } - public final class EncodingUtils { + public final deprecated class EncodingUtils { method public static byte[] getAsciiBytes(java.lang.String); method public static java.lang.String getAsciiString(byte[], int, int); method public static java.lang.String getAsciiString(byte[]); @@ -57415,18 +57617,18 @@ package org.apache.http.util { method public static java.lang.String getString(byte[], java.lang.String); } - public final class EntityUtils { + public final deprecated class EntityUtils { method public static java.lang.String getContentCharSet(org.apache.http.HttpEntity) throws org.apache.http.ParseException; method public static byte[] toByteArray(org.apache.http.HttpEntity) throws java.io.IOException; method public static java.lang.String toString(org.apache.http.HttpEntity, java.lang.String) throws java.io.IOException, org.apache.http.ParseException; method public static java.lang.String toString(org.apache.http.HttpEntity) throws java.io.IOException, org.apache.http.ParseException; } - public final class ExceptionUtils { + public final deprecated class ExceptionUtils { method public static void initCause(java.lang.Throwable, java.lang.Throwable); } - public final class LangUtils { + public final deprecated class LangUtils { method public static boolean equals(java.lang.Object, java.lang.Object); method public static boolean equals(java.lang.Object[], java.lang.Object[]); method public static int hashCode(int, int); @@ -57436,7 +57638,7 @@ package org.apache.http.util { field public static final int HASH_SEED = 17; // 0x11 } - public class VersionInfo { + public deprecated class VersionInfo { ctor protected VersionInfo(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String); method protected static final org.apache.http.util.VersionInfo fromMap(java.lang.String, java.util.Map, java.lang.ClassLoader); method public final java.lang.String getClassloader(); @@ -58515,7 +58717,7 @@ package org.xmlpull.v1 { method public void setValidating(boolean); field public static final java.lang.String PROPERTY_NAME = "org.xmlpull.v1.XmlPullParserFactory"; field protected java.lang.String classNamesLocation; - field protected java.util.HashMap features; + field protected java.util.HashMap features; field protected java.util.ArrayList parserClasses; field protected java.util.ArrayList serializerClasses; } diff --git a/api/removed.txt b/api/removed.txt index 89726793064c73b2479cf0bfe0ebec561a362714..1b69ee8229f6779ad84d469a2d0118b8c3239a06 100644 --- a/api/removed.txt +++ b/api/removed.txt @@ -22,6 +22,26 @@ package android.os { } +package android.text.format { + + public class DateFormat { + field public static final deprecated char AM_PM = 97; // 0x0061 'a' + field public static final deprecated char CAPITAL_AM_PM = 65; // 0x0041 'A' + field public static final deprecated char DATE = 100; // 0x0064 'd' + field public static final deprecated char DAY = 69; // 0x0045 'E' + field public static final deprecated char HOUR = 104; // 0x0068 'h' + field public static final deprecated char HOUR_OF_DAY = 107; // 0x006b 'k' + field public static final deprecated char MINUTE = 109; // 0x006d 'm' + field public static final deprecated char MONTH = 77; // 0x004d 'M' + field public static final deprecated char QUOTE = 39; // 0x0027 '\'' + field public static final deprecated char SECONDS = 115; // 0x0073 's' + field public static final deprecated char STANDALONE_MONTH = 76; // 0x004c 'L' + field public static final deprecated char TIME_ZONE = 122; // 0x007a 'z' + field public static final deprecated char YEAR = 121; // 0x0079 'y' + } + +} + package android.view { public class View implements android.view.accessibility.AccessibilityEventSource android.graphics.drawable.Drawable.Callback android.view.KeyEvent.Callback { diff --git a/api/system-current.txt b/api/system-current.txt new file mode 100644 index 0000000000000000000000000000000000000000..7ab0e486d0e3d135a531263032e01c86a6f0bc04 --- /dev/null +++ b/api/system-current.txt @@ -0,0 +1,61342 @@ +package android { + + public final class Manifest { + ctor public Manifest(); + } + + public static final class Manifest.permission { + ctor public Manifest.permission(); + field public static final java.lang.String ACCESS_CACHE_FILESYSTEM = "android.permission.ACCESS_CACHE_FILESYSTEM"; + field public static final java.lang.String ACCESS_CHECKIN_PROPERTIES = "android.permission.ACCESS_CHECKIN_PROPERTIES"; + field public static final java.lang.String ACCESS_COARSE_LOCATION = "android.permission.ACCESS_COARSE_LOCATION"; + field public static final java.lang.String ACCESS_DRM_CERTIFICATES = "android.permission.ACCESS_DRM_CERTIFICATES"; + field public static final java.lang.String ACCESS_FINE_LOCATION = "android.permission.ACCESS_FINE_LOCATION"; + field public static final java.lang.String ACCESS_FM_RADIO = "android.permission.ACCESS_FM_RADIO"; + field public static final java.lang.String ACCESS_LOCATION_EXTRA_COMMANDS = "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"; + field public static final java.lang.String ACCESS_MOCK_LOCATION = "android.permission.ACCESS_MOCK_LOCATION"; + field public static final java.lang.String ACCESS_MTP = "android.permission.ACCESS_MTP"; + field public static final java.lang.String ACCESS_NETWORK_CONDITIONS = "android.permission.ACCESS_NETWORK_CONDITIONS"; + field public static final java.lang.String ACCESS_NETWORK_STATE = "android.permission.ACCESS_NETWORK_STATE"; + field public static final java.lang.String ACCESS_NOTIFICATIONS = "android.permission.ACCESS_NOTIFICATIONS"; + field public static final java.lang.String ACCESS_SURFACE_FLINGER = "android.permission.ACCESS_SURFACE_FLINGER"; + field public static final java.lang.String ACCESS_WIFI_STATE = "android.permission.ACCESS_WIFI_STATE"; + field public static final java.lang.String ACCOUNT_MANAGER = "android.permission.ACCOUNT_MANAGER"; + field public static final java.lang.String ADD_VOICEMAIL = "com.android.voicemail.permission.ADD_VOICEMAIL"; + field public static final java.lang.String ALLOW_ANY_CODEC_FOR_PLAYBACK = "android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK"; + field public static final java.lang.String AUTHENTICATE_ACCOUNTS = "android.permission.AUTHENTICATE_ACCOUNTS"; + field public static final java.lang.String BACKUP = "android.permission.BACKUP"; + field public static final java.lang.String BATTERY_STATS = "android.permission.BATTERY_STATS"; + field public static final java.lang.String BIND_ACCESSIBILITY_SERVICE = "android.permission.BIND_ACCESSIBILITY_SERVICE"; + field public static final java.lang.String BIND_APPWIDGET = "android.permission.BIND_APPWIDGET"; + field public static final java.lang.String BIND_CARRIER_MESSAGING_SERVICE = "android.permission.BIND_CARRIER_MESSAGING_SERVICE"; + field public static final java.lang.String BIND_CONDITION_PROVIDER_SERVICE = "android.permission.BIND_CONDITION_PROVIDER_SERVICE"; + field public static final java.lang.String BIND_CONNECTION_SERVICE = "android.permission.BIND_CONNECTION_SERVICE"; + field public static final java.lang.String BIND_DEVICE_ADMIN = "android.permission.BIND_DEVICE_ADMIN"; + field public static final java.lang.String BIND_DIRECTORY_SEARCH = "android.permission.BIND_DIRECTORY_SEARCH"; + field public static final java.lang.String BIND_DREAM_SERVICE = "android.permission.BIND_DREAM_SERVICE"; + field public static final java.lang.String BIND_INCALL_SERVICE = "android.permission.BIND_INCALL_SERVICE"; + field public static final java.lang.String BIND_INPUT_METHOD = "android.permission.BIND_INPUT_METHOD"; + field public static final java.lang.String BIND_KEYGUARD_APPWIDGET = "android.permission.BIND_KEYGUARD_APPWIDGET"; + field public static final java.lang.String BIND_NFC_SERVICE = "android.permission.BIND_NFC_SERVICE"; + field public static final java.lang.String BIND_NOTIFICATION_LISTENER_SERVICE = "android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"; + field public static final java.lang.String BIND_PRINT_SERVICE = "android.permission.BIND_PRINT_SERVICE"; + field public static final java.lang.String BIND_REMOTEVIEWS = "android.permission.BIND_REMOTEVIEWS"; + field public static final java.lang.String BIND_TEXT_SERVICE = "android.permission.BIND_TEXT_SERVICE"; + field public static final java.lang.String BIND_TRUST_AGENT = "android.permission.BIND_TRUST_AGENT"; + field public static final java.lang.String BIND_TV_INPUT = "android.permission.BIND_TV_INPUT"; + field public static final java.lang.String BIND_VOICE_INTERACTION = "android.permission.BIND_VOICE_INTERACTION"; + field public static final java.lang.String BIND_VPN_SERVICE = "android.permission.BIND_VPN_SERVICE"; + field public static final java.lang.String BIND_WALLPAPER = "android.permission.BIND_WALLPAPER"; + field public static final java.lang.String BLUETOOTH = "android.permission.BLUETOOTH"; + field public static final java.lang.String BLUETOOTH_ADMIN = "android.permission.BLUETOOTH_ADMIN"; + field public static final java.lang.String BLUETOOTH_PRIVILEGED = "android.permission.BLUETOOTH_PRIVILEGED"; + field public static final java.lang.String BODY_SENSORS = "android.permission.BODY_SENSORS"; + field public static final java.lang.String BRICK = "android.permission.BRICK"; + field public static final java.lang.String BROADCAST_NETWORK_PRIVILEGED = "android.permission.BROADCAST_NETWORK_PRIVILEGED"; + field public static final java.lang.String BROADCAST_PACKAGE_REMOVED = "android.permission.BROADCAST_PACKAGE_REMOVED"; + field public static final java.lang.String BROADCAST_SMS = "android.permission.BROADCAST_SMS"; + field public static final java.lang.String BROADCAST_STICKY = "android.permission.BROADCAST_STICKY"; + field public static final java.lang.String BROADCAST_WAP_PUSH = "android.permission.BROADCAST_WAP_PUSH"; + field public static final java.lang.String CALL_PHONE = "android.permission.CALL_PHONE"; + field public static final java.lang.String CALL_PRIVILEGED = "android.permission.CALL_PRIVILEGED"; + field public static final java.lang.String CAMERA = "android.permission.CAMERA"; + field public static final java.lang.String CAMERA_DISABLE_TRANSMIT_LED = "android.permission.CAMERA_DISABLE_TRANSMIT_LED"; + field public static final java.lang.String CAPTURE_AUDIO_HOTWORD = "android.permission.CAPTURE_AUDIO_HOTWORD"; + field public static final java.lang.String CAPTURE_AUDIO_OUTPUT = "android.permission.CAPTURE_AUDIO_OUTPUT"; + field public static final java.lang.String CAPTURE_SECURE_VIDEO_OUTPUT = "android.permission.CAPTURE_SECURE_VIDEO_OUTPUT"; + field public static final java.lang.String CAPTURE_TV_INPUT = "android.permission.CAPTURE_TV_INPUT"; + field public static final java.lang.String CAPTURE_VIDEO_OUTPUT = "android.permission.CAPTURE_VIDEO_OUTPUT"; + field public static final java.lang.String CHANGE_COMPONENT_ENABLED_STATE = "android.permission.CHANGE_COMPONENT_ENABLED_STATE"; + field public static final java.lang.String CHANGE_CONFIGURATION = "android.permission.CHANGE_CONFIGURATION"; + field public static final java.lang.String CHANGE_NETWORK_STATE = "android.permission.CHANGE_NETWORK_STATE"; + field public static final java.lang.String CHANGE_WIFI_MULTICAST_STATE = "android.permission.CHANGE_WIFI_MULTICAST_STATE"; + field public static final java.lang.String CHANGE_WIFI_STATE = "android.permission.CHANGE_WIFI_STATE"; + field public static final java.lang.String CLEAR_APP_CACHE = "android.permission.CLEAR_APP_CACHE"; + field public static final java.lang.String CLEAR_APP_USER_DATA = "android.permission.CLEAR_APP_USER_DATA"; + field public static final java.lang.String CONNECTIVITY_INTERNAL = "android.permission.CONNECTIVITY_INTERNAL"; + field public static final java.lang.String CONTROL_INCALL_EXPERIENCE = "android.permission.CONTROL_INCALL_EXPERIENCE"; + field public static final java.lang.String CONTROL_LOCATION_UPDATES = "android.permission.CONTROL_LOCATION_UPDATES"; + field public static final java.lang.String CONTROL_VPN = "android.permission.CONTROL_VPN"; + field public static final java.lang.String CRYPT_KEEPER = "android.permission.CRYPT_KEEPER"; + field public static final java.lang.String DELETE_CACHE_FILES = "android.permission.DELETE_CACHE_FILES"; + field public static final java.lang.String DELETE_PACKAGES = "android.permission.DELETE_PACKAGES"; + field public static final java.lang.String DEVICE_POWER = "android.permission.DEVICE_POWER"; + field public static final java.lang.String DIAGNOSTIC = "android.permission.DIAGNOSTIC"; + field public static final java.lang.String DISABLE_KEYGUARD = "android.permission.DISABLE_KEYGUARD"; + field public static final java.lang.String DUMP = "android.permission.DUMP"; + field public static final java.lang.String EXPAND_STATUS_BAR = "android.permission.EXPAND_STATUS_BAR"; + field public static final java.lang.String FACTORY_TEST = "android.permission.FACTORY_TEST"; + field public static final java.lang.String FLASHLIGHT = "android.permission.FLASHLIGHT"; + field public static final java.lang.String FORCE_BACK = "android.permission.FORCE_BACK"; + field public static final java.lang.String FORCE_STOP_PACKAGES = "android.permission.FORCE_STOP_PACKAGES"; + field public static final java.lang.String GET_ACCOUNTS = "android.permission.GET_ACCOUNTS"; + field public static final java.lang.String GET_APP_OPS_STATS = "android.permission.GET_APP_OPS_STATS"; + field public static final java.lang.String GET_PACKAGE_SIZE = "android.permission.GET_PACKAGE_SIZE"; + field public static final deprecated java.lang.String GET_TASKS = "android.permission.GET_TASKS"; + field public static final java.lang.String GET_TOP_ACTIVITY_INFO = "android.permission.GET_TOP_ACTIVITY_INFO"; + field public static final java.lang.String GLOBAL_SEARCH = "android.permission.GLOBAL_SEARCH"; + field public static final java.lang.String HARDWARE_TEST = "android.permission.HARDWARE_TEST"; + field public static final java.lang.String HDMI_CEC = "android.permission.HDMI_CEC"; + field public static final java.lang.String INJECT_EVENTS = "android.permission.INJECT_EVENTS"; + field public static final java.lang.String INSTALL_LOCATION_PROVIDER = "android.permission.INSTALL_LOCATION_PROVIDER"; + field public static final java.lang.String INSTALL_PACKAGES = "android.permission.INSTALL_PACKAGES"; + field public static final java.lang.String INSTALL_SHORTCUT = "com.android.launcher.permission.INSTALL_SHORTCUT"; + field public static final java.lang.String INTERACT_ACROSS_USERS = "android.permission.INTERACT_ACROSS_USERS"; + field public static final java.lang.String INTERNAL_SYSTEM_WINDOW = "android.permission.INTERNAL_SYSTEM_WINDOW"; + field public static final java.lang.String INTERNET = "android.permission.INTERNET"; + field public static final java.lang.String INVOKE_CARRIER_SETUP = "android.permission.INVOKE_CARRIER_SETUP"; + field public static final java.lang.String KILL_BACKGROUND_PROCESSES = "android.permission.KILL_BACKGROUND_PROCESSES"; + field public static final java.lang.String LOCATION_HARDWARE = "android.permission.LOCATION_HARDWARE"; + field public static final java.lang.String LOOP_RADIO = "android.permission.LOOP_RADIO"; + field public static final java.lang.String MANAGE_ACCOUNTS = "android.permission.MANAGE_ACCOUNTS"; + field public static final java.lang.String MANAGE_ACTIVITY_STACKS = "android.permission.MANAGE_ACTIVITY_STACKS"; + field public static final java.lang.String MANAGE_APP_TOKENS = "android.permission.MANAGE_APP_TOKENS"; + field public static final java.lang.String MANAGE_CA_CERTIFICATES = "android.permission.MANAGE_CA_CERTIFICATES"; + field public static final java.lang.String MANAGE_DEVICE_ADMINS = "android.permission.MANAGE_DEVICE_ADMINS"; + field public static final java.lang.String MANAGE_DOCUMENTS = "android.permission.MANAGE_DOCUMENTS"; + field public static final java.lang.String MANAGE_USB = "android.permission.MANAGE_USB"; + field public static final java.lang.String MANAGE_USERS = "android.permission.MANAGE_USERS"; + field public static final java.lang.String MASTER_CLEAR = "android.permission.MASTER_CLEAR"; + field public static final java.lang.String MEDIA_CONTENT_CONTROL = "android.permission.MEDIA_CONTENT_CONTROL"; + field public static final java.lang.String MODIFY_APPWIDGET_BIND_PERMISSIONS = "android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS"; + field public static final java.lang.String MODIFY_AUDIO_ROUTING = "android.permission.MODIFY_AUDIO_ROUTING"; + field public static final java.lang.String MODIFY_AUDIO_SETTINGS = "android.permission.MODIFY_AUDIO_SETTINGS"; + field public static final java.lang.String MODIFY_NETWORK_ACCOUNTING = "android.permission.MODIFY_NETWORK_ACCOUNTING"; + field public static final java.lang.String MODIFY_PARENTAL_CONTROLS = "android.permission.MODIFY_PARENTAL_CONTROLS"; + field public static final java.lang.String MODIFY_PHONE_STATE = "android.permission.MODIFY_PHONE_STATE"; + field public static final java.lang.String MOUNT_FORMAT_FILESYSTEMS = "android.permission.MOUNT_FORMAT_FILESYSTEMS"; + field public static final java.lang.String MOUNT_UNMOUNT_FILESYSTEMS = "android.permission.MOUNT_UNMOUNT_FILESYSTEMS"; + field public static final java.lang.String MOVE_PACKAGE = "android.permission.MOVE_PACKAGE"; + field public static final java.lang.String NFC = "android.permission.NFC"; + field public static final java.lang.String PACKAGE_USAGE_STATS = "android.permission.PACKAGE_USAGE_STATS"; + field public static final java.lang.String PACKAGE_VERIFICATION_AGENT = "android.permission.PACKAGE_VERIFICATION_AGENT"; + field public static final java.lang.String PERFORM_CDMA_PROVISIONING = "android.permission.PERFORM_CDMA_PROVISIONING"; + field public static final deprecated java.lang.String PERSISTENT_ACTIVITY = "android.permission.PERSISTENT_ACTIVITY"; + field public static final java.lang.String PROCESS_OUTGOING_CALLS = "android.permission.PROCESS_OUTGOING_CALLS"; + field public static final java.lang.String PROVIDE_TRUST_AGENT = "android.permission.PROVIDE_TRUST_AGENT"; + field public static final java.lang.String READ_CALENDAR = "android.permission.READ_CALENDAR"; + field public static final java.lang.String READ_CALL_LOG = "android.permission.READ_CALL_LOG"; + field public static final java.lang.String READ_CONTACTS = "android.permission.READ_CONTACTS"; + field public static final java.lang.String READ_DREAM_STATE = "android.permission.READ_DREAM_STATE"; + field public static final java.lang.String READ_EXTERNAL_STORAGE = "android.permission.READ_EXTERNAL_STORAGE"; + field public static final java.lang.String READ_FRAME_BUFFER = "android.permission.READ_FRAME_BUFFER"; + field public static final java.lang.String READ_HISTORY_BOOKMARKS = "com.android.browser.permission.READ_HISTORY_BOOKMARKS"; + field public static final deprecated java.lang.String READ_INPUT_STATE = "android.permission.READ_INPUT_STATE"; + field public static final java.lang.String READ_INSTALL_SESSIONS = "android.permission.READ_INSTALL_SESSIONS"; + field public static final java.lang.String READ_LOGS = "android.permission.READ_LOGS"; + field public static final java.lang.String READ_NETWORK_USAGE_HISTORY = "android.permission.READ_NETWORK_USAGE_HISTORY"; + field public static final java.lang.String READ_PHONE_STATE = "android.permission.READ_PHONE_STATE"; + field public static final java.lang.String READ_PRIVILEGED_PHONE_STATE = "android.permission.READ_PRIVILEGED_PHONE_STATE"; + field public static final java.lang.String READ_PROFILE = "android.permission.READ_PROFILE"; + field public static final java.lang.String READ_SEARCH_INDEXABLES = "android.permission.READ_SEARCH_INDEXABLES"; + field public static final java.lang.String READ_SMS = "android.permission.READ_SMS"; + field public static final deprecated java.lang.String READ_SOCIAL_STREAM = "android.permission.READ_SOCIAL_STREAM"; + field public static final java.lang.String READ_SYNC_SETTINGS = "android.permission.READ_SYNC_SETTINGS"; + field public static final java.lang.String READ_SYNC_STATS = "android.permission.READ_SYNC_STATS"; + field public static final java.lang.String READ_USER_DICTIONARY = "android.permission.READ_USER_DICTIONARY"; + field public static final java.lang.String READ_VOICEMAIL = "com.android.voicemail.permission.READ_VOICEMAIL"; + field public static final java.lang.String READ_WIFI_CREDENTIAL = "android.permission.READ_WIFI_CREDENTIAL"; + field public static final java.lang.String REAL_GET_TASKS = "android.permission.REAL_GET_TASKS"; + field public static final java.lang.String REBOOT = "android.permission.REBOOT"; + field public static final java.lang.String RECEIVE_BOOT_COMPLETED = "android.permission.RECEIVE_BOOT_COMPLETED"; + field public static final java.lang.String RECEIVE_DATA_ACTIVITY_CHANGE = "android.permission.RECEIVE_DATA_ACTIVITY_CHANGE"; + field public static final java.lang.String RECEIVE_EMERGENCY_BROADCAST = "android.permission.RECEIVE_EMERGENCY_BROADCAST"; + field public static final java.lang.String RECEIVE_MMS = "android.permission.RECEIVE_MMS"; + field public static final java.lang.String RECEIVE_SMS = "android.permission.RECEIVE_SMS"; + field public static final java.lang.String RECEIVE_WAP_PUSH = "android.permission.RECEIVE_WAP_PUSH"; + field public static final java.lang.String RECORD_AUDIO = "android.permission.RECORD_AUDIO"; + field public static final java.lang.String RECOVERY = "android.permission.RECOVERY"; + field public static final java.lang.String REGISTER_CALL_PROVIDER = "android.permission.REGISTER_CALL_PROVIDER"; + field public static final java.lang.String REGISTER_CONNECTION_MANAGER = "android.permission.REGISTER_CONNECTION_MANAGER"; + field public static final java.lang.String REGISTER_SIM_SUBSCRIPTION = "android.permission.REGISTER_SIM_SUBSCRIPTION"; + field public static final java.lang.String REMOVE_DRM_CERTIFICATES = "android.permission.REMOVE_DRM_CERTIFICATES"; + field public static final java.lang.String REORDER_TASKS = "android.permission.REORDER_TASKS"; + field public static final deprecated java.lang.String RESTART_PACKAGES = "android.permission.RESTART_PACKAGES"; + field public static final java.lang.String RETRIEVE_WINDOW_CONTENT = "android.permission.RETRIEVE_WINDOW_CONTENT"; + field public static final java.lang.String SCORE_NETWORKS = "android.permission.SCORE_NETWORKS"; + field public static final java.lang.String SEND_RESPOND_VIA_MESSAGE = "android.permission.SEND_RESPOND_VIA_MESSAGE"; + field public static final java.lang.String SEND_SMS = "android.permission.SEND_SMS"; + field public static final java.lang.String SERIAL_PORT = "android.permission.SERIAL_PORT"; + field public static final java.lang.String SET_ACTIVITY_WATCHER = "android.permission.SET_ACTIVITY_WATCHER"; + field public static final java.lang.String SET_ALARM = "com.android.alarm.permission.SET_ALARM"; + field public static final java.lang.String SET_ALWAYS_FINISH = "android.permission.SET_ALWAYS_FINISH"; + field public static final java.lang.String SET_ANIMATION_SCALE = "android.permission.SET_ANIMATION_SCALE"; + field public static final java.lang.String SET_DEBUG_APP = "android.permission.SET_DEBUG_APP"; + field public static final java.lang.String SET_ORIENTATION = "android.permission.SET_ORIENTATION"; + field public static final java.lang.String SET_POINTER_SPEED = "android.permission.SET_POINTER_SPEED"; + field public static final deprecated java.lang.String SET_PREFERRED_APPLICATIONS = "android.permission.SET_PREFERRED_APPLICATIONS"; + field public static final java.lang.String SET_PROCESS_LIMIT = "android.permission.SET_PROCESS_LIMIT"; + field public static final java.lang.String SET_SCREEN_COMPATIBILITY = "android.permission.SET_SCREEN_COMPATIBILITY"; + field public static final java.lang.String SET_TIME = "android.permission.SET_TIME"; + field public static final java.lang.String SET_TIME_ZONE = "android.permission.SET_TIME_ZONE"; + field public static final java.lang.String SET_WALLPAPER = "android.permission.SET_WALLPAPER"; + field public static final java.lang.String SET_WALLPAPER_COMPONENT = "android.permission.SET_WALLPAPER_COMPONENT"; + field public static final java.lang.String SET_WALLPAPER_HINTS = "android.permission.SET_WALLPAPER_HINTS"; + field public static final java.lang.String SHUTDOWN = "android.permission.SHUTDOWN"; + field public static final java.lang.String SIGNAL_PERSISTENT_PROCESSES = "android.permission.SIGNAL_PERSISTENT_PROCESSES"; + field public static final java.lang.String STATUS_BAR = "android.permission.STATUS_BAR"; + field public static final java.lang.String STOP_APP_SWITCHES = "android.permission.STOP_APP_SWITCHES"; + field public static final java.lang.String SUBSCRIBED_FEEDS_READ = "android.permission.SUBSCRIBED_FEEDS_READ"; + field public static final java.lang.String SUBSCRIBED_FEEDS_WRITE = "android.permission.SUBSCRIBED_FEEDS_WRITE"; + field public static final java.lang.String SYSTEM_ALERT_WINDOW = "android.permission.SYSTEM_ALERT_WINDOW"; + field public static final java.lang.String TRANSMIT_IR = "android.permission.TRANSMIT_IR"; + field public static final java.lang.String TV_INPUT_HARDWARE = "android.permission.TV_INPUT_HARDWARE"; + field public static final java.lang.String UNINSTALL_SHORTCUT = "com.android.launcher.permission.UNINSTALL_SHORTCUT"; + field public static final java.lang.String UPDATE_APP_OPS_STATS = "android.permission.UPDATE_APP_OPS_STATS"; + field public static final java.lang.String UPDATE_DEVICE_STATS = "android.permission.UPDATE_DEVICE_STATS"; + field public static final java.lang.String UPDATE_LOCK = "android.permission.UPDATE_LOCK"; + field public static final java.lang.String USER_ACTIVITY = "android.permission.USER_ACTIVITY"; + field public static final java.lang.String USE_CREDENTIALS = "android.permission.USE_CREDENTIALS"; + field public static final java.lang.String USE_SIP = "android.permission.USE_SIP"; + field public static final java.lang.String VIBRATE = "android.permission.VIBRATE"; + field public static final java.lang.String WAKE_LOCK = "android.permission.WAKE_LOCK"; + field public static final java.lang.String WRITE_APN_SETTINGS = "android.permission.WRITE_APN_SETTINGS"; + field public static final java.lang.String WRITE_CALENDAR = "android.permission.WRITE_CALENDAR"; + field public static final java.lang.String WRITE_CALL_LOG = "android.permission.WRITE_CALL_LOG"; + field public static final java.lang.String WRITE_CONTACTS = "android.permission.WRITE_CONTACTS"; + field public static final java.lang.String WRITE_DREAM_STATE = "android.permission.WRITE_DREAM_STATE"; + field public static final java.lang.String WRITE_EXTERNAL_STORAGE = "android.permission.WRITE_EXTERNAL_STORAGE"; + field public static final java.lang.String WRITE_GSERVICES = "android.permission.WRITE_GSERVICES"; + field public static final java.lang.String WRITE_HISTORY_BOOKMARKS = "com.android.browser.permission.WRITE_HISTORY_BOOKMARKS"; + field public static final java.lang.String WRITE_MEDIA_STORAGE = "android.permission.WRITE_MEDIA_STORAGE"; + field public static final java.lang.String WRITE_PROFILE = "android.permission.WRITE_PROFILE"; + field public static final java.lang.String WRITE_SECURE_SETTINGS = "android.permission.WRITE_SECURE_SETTINGS"; + field public static final java.lang.String WRITE_SETTINGS = "android.permission.WRITE_SETTINGS"; + field public static final java.lang.String WRITE_SMS = "android.permission.WRITE_SMS"; + field public static final deprecated java.lang.String WRITE_SOCIAL_STREAM = "android.permission.WRITE_SOCIAL_STREAM"; + field public static final java.lang.String WRITE_SYNC_SETTINGS = "android.permission.WRITE_SYNC_SETTINGS"; + field public static final java.lang.String WRITE_USER_DICTIONARY = "android.permission.WRITE_USER_DICTIONARY"; + field public static final java.lang.String WRITE_VOICEMAIL = "com.android.voicemail.permission.WRITE_VOICEMAIL"; + } + + public static final class Manifest.permission_group { + ctor public Manifest.permission_group(); + field public static final java.lang.String ACCESSIBILITY_FEATURES = "android.permission-group.ACCESSIBILITY_FEATURES"; + field public static final java.lang.String ACCOUNTS = "android.permission-group.ACCOUNTS"; + field public static final java.lang.String AFFECTS_BATTERY = "android.permission-group.AFFECTS_BATTERY"; + field public static final java.lang.String APP_INFO = "android.permission-group.APP_INFO"; + field public static final java.lang.String AUDIO_SETTINGS = "android.permission-group.AUDIO_SETTINGS"; + field public static final java.lang.String BLUETOOTH_NETWORK = "android.permission-group.BLUETOOTH_NETWORK"; + field public static final java.lang.String BOOKMARKS = "android.permission-group.BOOKMARKS"; + field public static final java.lang.String CALENDAR = "android.permission-group.CALENDAR"; + field public static final java.lang.String CAMERA = "android.permission-group.CAMERA"; + field public static final java.lang.String COST_MONEY = "android.permission-group.COST_MONEY"; + field public static final java.lang.String DEVELOPMENT_TOOLS = "android.permission-group.DEVELOPMENT_TOOLS"; + field public static final java.lang.String DEVICE_ALARMS = "android.permission-group.DEVICE_ALARMS"; + field public static final java.lang.String DISPLAY = "android.permission-group.DISPLAY"; + field public static final java.lang.String HARDWARE_CONTROLS = "android.permission-group.HARDWARE_CONTROLS"; + field public static final java.lang.String LOCATION = "android.permission-group.LOCATION"; + field public static final java.lang.String MESSAGES = "android.permission-group.MESSAGES"; + field public static final java.lang.String MICROPHONE = "android.permission-group.MICROPHONE"; + field public static final java.lang.String NETWORK = "android.permission-group.NETWORK"; + field public static final java.lang.String PERSONAL_INFO = "android.permission-group.PERSONAL_INFO"; + field public static final java.lang.String PHONE_CALLS = "android.permission-group.PHONE_CALLS"; + field public static final java.lang.String SCREENLOCK = "android.permission-group.SCREENLOCK"; + field public static final java.lang.String SOCIAL_INFO = "android.permission-group.SOCIAL_INFO"; + field public static final java.lang.String STATUS_BAR = "android.permission-group.STATUS_BAR"; + field public static final java.lang.String STORAGE = "android.permission-group.STORAGE"; + field public static final java.lang.String SYNC_SETTINGS = "android.permission-group.SYNC_SETTINGS"; + field public static final java.lang.String SYSTEM_CLOCK = "android.permission-group.SYSTEM_CLOCK"; + field public static final java.lang.String SYSTEM_TOOLS = "android.permission-group.SYSTEM_TOOLS"; + field public static final java.lang.String USER_DICTIONARY = "android.permission-group.USER_DICTIONARY"; + field public static final java.lang.String VOICEMAIL = "android.permission-group.VOICEMAIL"; + field public static final java.lang.String WALLPAPER = "android.permission-group.WALLPAPER"; + field public static final java.lang.String WRITE_USER_DICTIONARY = "android.permission-group.WRITE_USER_DICTIONARY"; + } + + public final class R { + ctor public R(); + } + + public static final class R.anim { + ctor public R.anim(); + field public static final int accelerate_decelerate_interpolator = 17432580; // 0x10a0004 + field public static final int accelerate_interpolator = 17432581; // 0x10a0005 + field public static final int anticipate_interpolator = 17432583; // 0x10a0007 + field public static final int anticipate_overshoot_interpolator = 17432585; // 0x10a0009 + field public static final int bounce_interpolator = 17432586; // 0x10a000a + field public static final int cycle_interpolator = 17432588; // 0x10a000c + field public static final int decelerate_interpolator = 17432582; // 0x10a0006 + field public static final int fade_in = 17432576; // 0x10a0000 + field public static final int fade_out = 17432577; // 0x10a0001 + field public static final int linear_interpolator = 17432587; // 0x10a000b + field public static final int overshoot_interpolator = 17432584; // 0x10a0008 + field public static final int slide_in_left = 17432578; // 0x10a0002 + field public static final int slide_out_right = 17432579; // 0x10a0003 + } + + public static final class R.animator { + ctor public R.animator(); + field public static final int fade_in = 17498112; // 0x10b0000 + field public static final int fade_out = 17498113; // 0x10b0001 + } + + public static final class R.array { + ctor public R.array(); + field public static final int config_keySystemUuidMapping = 17235973; // 0x1070005 + field public static final int emailAddressTypes = 17235968; // 0x1070000 + field public static final int imProtocols = 17235969; // 0x1070001 + field public static final int organizationTypes = 17235970; // 0x1070002 + field public static final int phoneTypes = 17235971; // 0x1070003 + field public static final int postalAddressTypes = 17235972; // 0x1070004 + } + + public static final class R.attr { + ctor public R.attr(); + field public static final int absListViewStyle = 16842858; // 0x101006a + field public static final int accessibilityEventTypes = 16843648; // 0x1010380 + field public static final int accessibilityFeedbackType = 16843650; // 0x1010382 + field public static final int accessibilityFlags = 16843652; // 0x1010384 + field public static final int accessibilityLiveRegion = 16843758; // 0x10103ee + field public static final int accessibilityTraversalAfter = 16843986; // 0x10104d2 + field public static final int accessibilityTraversalBefore = 16843985; // 0x10104d1 + field public static final int accountPreferences = 16843423; // 0x101029f + field public static final int accountType = 16843407; // 0x101028f + field public static final int action = 16842797; // 0x101002d + field public static final int actionBarDivider = 16843675; // 0x101039b + field public static final int actionBarItemBackground = 16843676; // 0x101039c + field public static final int actionBarPopupTheme = 16843917; // 0x101048d + field public static final int actionBarSize = 16843499; // 0x10102eb + field public static final int actionBarSplitStyle = 16843656; // 0x1010388 + field public static final int actionBarStyle = 16843470; // 0x10102ce + field public static final int actionBarTabBarStyle = 16843508; // 0x10102f4 + field public static final int actionBarTabStyle = 16843507; // 0x10102f3 + field public static final int actionBarTabTextStyle = 16843509; // 0x10102f5 + field public static final int actionBarTheme = 16843825; // 0x1010431 + field public static final int actionBarWidgetTheme = 16843671; // 0x1010397 + field public static final int actionButtonStyle = 16843480; // 0x10102d8 + field public static final int actionDropDownStyle = 16843479; // 0x10102d7 + field public static final int actionLayout = 16843515; // 0x10102fb + field public static final int actionMenuTextAppearance = 16843616; // 0x1010360 + field public static final int actionMenuTextColor = 16843617; // 0x1010361 + field public static final int actionModeBackground = 16843483; // 0x10102db + field public static final int actionModeCloseButtonStyle = 16843511; // 0x10102f7 + field public static final int actionModeCloseDrawable = 16843484; // 0x10102dc + field public static final int actionModeCopyDrawable = 16843538; // 0x1010312 + field public static final int actionModeCutDrawable = 16843537; // 0x1010311 + field public static final int actionModeFindDrawable = 16843898; // 0x101047a + field public static final int actionModePasteDrawable = 16843539; // 0x1010313 + field public static final int actionModeSelectAllDrawable = 16843646; // 0x101037e + field public static final int actionModeShareDrawable = 16843897; // 0x1010479 + field public static final int actionModeSplitBackground = 16843677; // 0x101039d + field public static final int actionModeStyle = 16843668; // 0x1010394 + field public static final int actionModeWebSearchDrawable = 16843899; // 0x101047b + field public static final int actionOverflowButtonStyle = 16843510; // 0x10102f6 + field public static final int actionOverflowMenuStyle = 16843844; // 0x1010444 + field public static final int actionProviderClass = 16843657; // 0x1010389 + field public static final int actionViewClass = 16843516; // 0x10102fc + field public static final int activatedBackgroundIndicator = 16843517; // 0x10102fd + field public static final int activityCloseEnterAnimation = 16842938; // 0x10100ba + field public static final int activityCloseExitAnimation = 16842939; // 0x10100bb + field public static final int activityOpenEnterAnimation = 16842936; // 0x10100b8 + field public static final int activityOpenExitAnimation = 16842937; // 0x10100b9 + field public static final int addPrintersActivity = 16843750; // 0x10103e6 + field public static final int addStatesFromChildren = 16842992; // 0x10100f0 + field public static final int adjustViewBounds = 16843038; // 0x101011e + field public static final int advancedPrintOptionsActivity = 16843761; // 0x10103f1 + field public static final int alertDialogIcon = 16843605; // 0x1010355 + field public static final int alertDialogStyle = 16842845; // 0x101005d + field public static final int alertDialogTheme = 16843529; // 0x1010309 + field public static final int alignmentMode = 16843642; // 0x101037a + field public static final int allContactsName = 16843468; // 0x10102cc + field public static final int allowBackup = 16843392; // 0x1010280 + field public static final int allowClearUserData = 16842757; // 0x1010005 + field public static final int allowEmbedded = 16843765; // 0x10103f5 + field public static final int allowParallelSyncs = 16843570; // 0x1010332 + field public static final int allowSingleTap = 16843353; // 0x1010259 + field public static final int allowTaskReparenting = 16843268; // 0x1010204 + field public static final int alpha = 16843551; // 0x101031f + field public static final int alphabeticShortcut = 16843235; // 0x10101e3 + field public static final int alwaysDrawnWithCache = 16842991; // 0x10100ef + field public static final int alwaysRetainTaskState = 16843267; // 0x1010203 + field public static final int amPmBackgroundColor = 16843941; // 0x10104a5 + field public static final int amPmTextColor = 16843940; // 0x10104a4 + field public static final int ambientShadowAlpha = 16843966; // 0x10104be + field public static final int angle = 16843168; // 0x10101a0 + field public static final int animateFirstView = 16843477; // 0x10102d5 + field public static final int animateLayoutChanges = 16843506; // 0x10102f2 + field public static final int animateOnClick = 16843356; // 0x101025c + field public static final int animation = 16843213; // 0x10101cd + field public static final int animationCache = 16842989; // 0x10100ed + field public static final int animationDuration = 16843026; // 0x1010112 + field public static final int animationOrder = 16843214; // 0x10101ce + field public static final deprecated int animationResolution = 16843546; // 0x101031a + field public static final int antialias = 16843034; // 0x101011a + field public static final int anyDensity = 16843372; // 0x101026c + field public static final int apduServiceBanner = 16843757; // 0x10103ed + field public static final int apiKey = 16843281; // 0x1010211 + field public static final int author = 16843444; // 0x10102b4 + field public static final int authorities = 16842776; // 0x1010018 + field public static final int autoAdvanceViewId = 16843535; // 0x101030f + field public static final int autoCompleteTextViewStyle = 16842859; // 0x101006b + field public static final int autoLink = 16842928; // 0x10100b0 + field public static final int autoMirrored = 16843754; // 0x10103ea + field public static final int autoRemoveFromRecents = 16843847; // 0x1010447 + field public static final int autoStart = 16843445; // 0x10102b5 + field public static final deprecated int autoText = 16843114; // 0x101016a + field public static final int autoUrlDetect = 16843404; // 0x101028c + field public static final int background = 16842964; // 0x10100d4 + field public static final int backgroundDimAmount = 16842802; // 0x1010032 + field public static final int backgroundDimEnabled = 16843295; // 0x101021f + field public static final int backgroundSplit = 16843659; // 0x101038b + field public static final int backgroundStacked = 16843658; // 0x101038a + field public static final int backgroundTint = 16843883; // 0x101046b + field public static final int backgroundTintMode = 16843884; // 0x101046c + field public static final int backupAgent = 16843391; // 0x101027f + field public static final int banner = 16843762; // 0x10103f2 + field public static final int baseline = 16843548; // 0x101031c + field public static final int baselineAlignBottom = 16843042; // 0x1010122 + field public static final int baselineAligned = 16843046; // 0x1010126 + field public static final int baselineAlignedChildIndex = 16843047; // 0x1010127 + field public static final int borderlessButtonStyle = 16843563; // 0x101032b + field public static final int bottom = 16843184; // 0x10101b0 + field public static final int bottomBright = 16842957; // 0x10100cd + field public static final int bottomDark = 16842953; // 0x10100c9 + field public static final int bottomLeftRadius = 16843179; // 0x10101ab + field public static final int bottomMedium = 16842958; // 0x10100ce + field public static final int bottomOffset = 16843351; // 0x1010257 + field public static final int bottomRightRadius = 16843180; // 0x10101ac + field public static final int breadCrumbShortTitle = 16843524; // 0x1010304 + field public static final int breadCrumbTitle = 16843523; // 0x1010303 + field public static final int bufferType = 16843086; // 0x101014e + field public static final int button = 16843015; // 0x1010107 + field public static final int buttonBarButtonStyle = 16843567; // 0x101032f + field public static final int buttonBarNegativeButtonStyle = 16843915; // 0x101048b + field public static final int buttonBarNeutralButtonStyle = 16843914; // 0x101048a + field public static final int buttonBarPositiveButtonStyle = 16843913; // 0x1010489 + field public static final int buttonBarStyle = 16843566; // 0x101032e + field public static final int buttonStyle = 16842824; // 0x1010048 + field public static final int buttonStyleInset = 16842826; // 0x101004a + field public static final int buttonStyleSmall = 16842825; // 0x1010049 + field public static final int buttonStyleToggle = 16842827; // 0x101004b + field public static final int buttonTint = 16843887; // 0x101046f + field public static final int buttonTintMode = 16843888; // 0x1010470 + field public static final int cacheColorHint = 16843009; // 0x1010101 + field public static final int calendarTextColor = 16843931; // 0x101049b + field public static final int calendarViewShown = 16843596; // 0x101034c + field public static final int calendarViewStyle = 16843613; // 0x101035d + field public static final int canRequestEnhancedWebAccessibility = 16843736; // 0x10103d8 + field public static final int canRequestFilterKeyEvents = 16843737; // 0x10103d9 + field public static final int canRequestTouchExplorationMode = 16843735; // 0x10103d7 + field public static final int canRetrieveWindowContent = 16843653; // 0x1010385 + field public static final int candidatesTextStyleSpans = 16843312; // 0x1010230 + field public static final deprecated int capitalize = 16843113; // 0x1010169 + field public static final int category = 16843752; // 0x10103e8 + field public static final int centerBright = 16842956; // 0x10100cc + field public static final int centerColor = 16843275; // 0x101020b + field public static final int centerDark = 16842952; // 0x10100c8 + field public static final int centerMedium = 16842959; // 0x10100cf + field public static final int centerX = 16843170; // 0x10101a2 + field public static final int centerY = 16843171; // 0x10101a3 + field public static final int checkBoxPreferenceStyle = 16842895; // 0x101008f + field public static final int checkMark = 16843016; // 0x1010108 + field public static final int checkMarkTint = 16843943; // 0x10104a7 + field public static final int checkMarkTintMode = 16843944; // 0x10104a8 + field public static final int checkable = 16843237; // 0x10101e5 + field public static final int checkableBehavior = 16843232; // 0x10101e0 + field public static final int checkboxStyle = 16842860; // 0x101006c + field public static final int checked = 16843014; // 0x1010106 + field public static final int checkedButton = 16843080; // 0x1010148 + field public static final int checkedTextViewStyle = 16843720; // 0x10103c8 + field public static final int childDivider = 16843025; // 0x1010111 + field public static final int childIndicator = 16843020; // 0x101010c + field public static final int childIndicatorEnd = 16843732; // 0x10103d4 + field public static final int childIndicatorLeft = 16843023; // 0x101010f + field public static final int childIndicatorRight = 16843024; // 0x1010110 + field public static final int childIndicatorStart = 16843731; // 0x10103d3 + field public static final int choiceMode = 16843051; // 0x101012b + field public static final int clearTaskOnLaunch = 16842773; // 0x1010015 + field public static final int clickable = 16842981; // 0x10100e5 + field public static final int clipChildren = 16842986; // 0x10100ea + field public static final int clipOrientation = 16843274; // 0x101020a + field public static final int clipToPadding = 16842987; // 0x10100eb + field public static final int closeIcon = 16843905; // 0x1010481 + field public static final int codes = 16843330; // 0x1010242 + field public static final int collapseColumns = 16843083; // 0x101014b + field public static final int collapseContentDescription = 16843984; // 0x10104d0 + field public static final int color = 16843173; // 0x10101a5 + field public static final int colorAccent = 16843829; // 0x1010435 + field public static final int colorActivatedHighlight = 16843664; // 0x1010390 + field public static final int colorBackground = 16842801; // 0x1010031 + field public static final int colorBackgroundCacheHint = 16843435; // 0x10102ab + field public static final int colorButtonNormal = 16843819; // 0x101042b + field public static final int colorControlActivated = 16843818; // 0x101042a + field public static final int colorControlHighlight = 16843820; // 0x101042c + field public static final int colorControlNormal = 16843817; // 0x1010429 + field public static final int colorEdgeEffect = 16843982; // 0x10104ce + field public static final int colorFocusedHighlight = 16843663; // 0x101038f + field public static final int colorForeground = 16842800; // 0x1010030 + field public static final int colorForegroundInverse = 16843270; // 0x1010206 + field public static final int colorLongPressedHighlight = 16843662; // 0x101038e + field public static final int colorMultiSelectHighlight = 16843665; // 0x1010391 + field public static final int colorPressedHighlight = 16843661; // 0x101038d + field public static final int colorPrimary = 16843827; // 0x1010433 + field public static final int colorPrimaryDark = 16843828; // 0x1010434 + field public static final int columnCount = 16843639; // 0x1010377 + field public static final int columnDelay = 16843215; // 0x10101cf + field public static final int columnOrderPreserved = 16843640; // 0x1010378 + field public static final int columnWidth = 16843031; // 0x1010117 + field public static final int commitIcon = 16843909; // 0x1010485 + field public static final int compatibleWidthLimitDp = 16843621; // 0x1010365 + field public static final int completionHint = 16843122; // 0x1010172 + field public static final int completionHintView = 16843123; // 0x1010173 + field public static final int completionThreshold = 16843124; // 0x1010174 + field public static final int configChanges = 16842783; // 0x101001f + field public static final int configure = 16843357; // 0x101025d + field public static final int constantSize = 16843158; // 0x1010196 + field public static final int content = 16843355; // 0x101025b + field public static final int contentAgeHint = 16843961; // 0x10104b9 + field public static final int contentAuthority = 16843408; // 0x1010290 + field public static final int contentDescription = 16843379; // 0x1010273 + field public static final int contentInsetEnd = 16843860; // 0x1010454 + field public static final int contentInsetLeft = 16843861; // 0x1010455 + field public static final int contentInsetRight = 16843862; // 0x1010456 + field public static final int contentInsetStart = 16843859; // 0x1010453 + field public static final int controlX1 = 16843772; // 0x10103fc + field public static final int controlX2 = 16843774; // 0x10103fe + field public static final int controlY1 = 16843773; // 0x10103fd + field public static final int controlY2 = 16843775; // 0x10103ff + field public static final int country = 16843962; // 0x10104ba + field public static final int cropToPadding = 16843043; // 0x1010123 + field public static final int cursorVisible = 16843090; // 0x1010152 + field public static final int customNavigationLayout = 16843474; // 0x10102d2 + field public static final int customTokens = 16843579; // 0x101033b + field public static final int cycles = 16843220; // 0x10101d4 + field public static final int dashGap = 16843175; // 0x10101a7 + field public static final int dashWidth = 16843174; // 0x10101a6 + field public static final int data = 16842798; // 0x101002e + field public static final int datePickerDialogTheme = 16843948; // 0x10104ac + field public static final int datePickerMode = 16843955; // 0x10104b3 + field public static final int datePickerStyle = 16843612; // 0x101035c + field public static final int dateTextAppearance = 16843593; // 0x1010349 + field public static final int dayOfWeekBackground = 16843924; // 0x1010494 + field public static final int dayOfWeekTextAppearance = 16843925; // 0x1010495 + field public static final int debuggable = 16842767; // 0x101000f + field public static final int defaultValue = 16843245; // 0x10101ed + field public static final int delay = 16843212; // 0x10101cc + field public static final int dependency = 16843244; // 0x10101ec + field public static final int descendantFocusability = 16842993; // 0x10100f1 + field public static final int description = 16842784; // 0x1010020 + field public static final int detachWallpaper = 16843430; // 0x10102a6 + field public static final int detailColumn = 16843427; // 0x10102a3 + field public static final int detailSocialSummary = 16843428; // 0x10102a4 + field public static final int detailsElementBackground = 16843598; // 0x101034e + field public static final int dial = 16843010; // 0x1010102 + field public static final int dialogIcon = 16843252; // 0x10101f4 + field public static final int dialogLayout = 16843255; // 0x10101f7 + field public static final int dialogMessage = 16843251; // 0x10101f3 + field public static final int dialogPreferenceStyle = 16842897; // 0x1010091 + field public static final int dialogPreferredPadding = 16843987; // 0x10104d3 + field public static final int dialogTheme = 16843528; // 0x1010308 + field public static final int dialogTitle = 16843250; // 0x10101f2 + field public static final int digits = 16843110; // 0x1010166 + field public static final int direction = 16843217; // 0x10101d1 + field public static final int directionDescriptions = 16843681; // 0x10103a1 + field public static final int directionPriority = 16843218; // 0x10101d2 + field public static final int disableDependentsState = 16843249; // 0x10101f1 + field public static final int disabledAlpha = 16842803; // 0x1010033 + field public static final int displayOptions = 16843472; // 0x10102d0 + field public static final int dither = 16843036; // 0x101011c + field public static final int divider = 16843049; // 0x1010129 + field public static final int dividerHeight = 16843050; // 0x101012a + field public static final int dividerHorizontal = 16843564; // 0x101032c + field public static final int dividerPadding = 16843562; // 0x101032a + field public static final int dividerVertical = 16843530; // 0x101030a + field public static final int documentLaunchMode = 16843845; // 0x1010445 + field public static final int drawSelectorOnTop = 16843004; // 0x10100fc + field public static final int drawable = 16843161; // 0x1010199 + field public static final int drawableBottom = 16843118; // 0x101016e + field public static final int drawableEnd = 16843667; // 0x1010393 + field public static final int drawableLeft = 16843119; // 0x101016f + field public static final int drawablePadding = 16843121; // 0x1010171 + field public static final int drawableRight = 16843120; // 0x1010170 + field public static final int drawableStart = 16843666; // 0x1010392 + field public static final int drawableTop = 16843117; // 0x101016d + field public static final int drawingCacheQuality = 16842984; // 0x10100e8 + field public static final int dropDownAnchor = 16843363; // 0x1010263 + field public static final int dropDownHeight = 16843395; // 0x1010283 + field public static final int dropDownHintAppearance = 16842888; // 0x1010088 + field public static final int dropDownHorizontalOffset = 16843436; // 0x10102ac + field public static final int dropDownItemStyle = 16842886; // 0x1010086 + field public static final int dropDownListViewStyle = 16842861; // 0x101006d + field public static final int dropDownSelector = 16843125; // 0x1010175 + field public static final int dropDownSpinnerStyle = 16843478; // 0x10102d6 + field public static final int dropDownVerticalOffset = 16843437; // 0x10102ad + field public static final int dropDownWidth = 16843362; // 0x1010262 + field public static final int duplicateParentState = 16842985; // 0x10100e9 + field public static final int duration = 16843160; // 0x1010198 + field public static final int editTextBackground = 16843602; // 0x1010352 + field public static final int editTextColor = 16843601; // 0x1010351 + field public static final int editTextPreferenceStyle = 16842898; // 0x1010092 + field public static final int editTextStyle = 16842862; // 0x101006e + field public static final deprecated int editable = 16843115; // 0x101016b + field public static final int editorExtras = 16843300; // 0x1010224 + field public static final int elegantTextHeight = 16843869; // 0x101045d + field public static final int elevation = 16843840; // 0x1010440 + field public static final int ellipsize = 16842923; // 0x10100ab + field public static final int ems = 16843096; // 0x1010158 + field public static final int enabled = 16842766; // 0x101000e + field public static final int endColor = 16843166; // 0x101019e + field public static final deprecated int endYear = 16843133; // 0x101017d + field public static final int enterFadeDuration = 16843532; // 0x101030c + field public static final int entries = 16842930; // 0x10100b2 + field public static final int entryValues = 16843256; // 0x10101f8 + field public static final int eventsInterceptionEnabled = 16843389; // 0x101027d + field public static final int excludeClass = 16843842; // 0x1010442 + field public static final int excludeFromRecents = 16842775; // 0x1010017 + field public static final int excludeId = 16843841; // 0x1010441 + field public static final int excludeName = 16843854; // 0x101044e + field public static final int exitFadeDuration = 16843533; // 0x101030d + field public static final int expandableListPreferredChildIndicatorLeft = 16842834; // 0x1010052 + field public static final int expandableListPreferredChildIndicatorRight = 16842835; // 0x1010053 + field public static final int expandableListPreferredChildPaddingLeft = 16842831; // 0x101004f + field public static final int expandableListPreferredItemIndicatorLeft = 16842832; // 0x1010050 + field public static final int expandableListPreferredItemIndicatorRight = 16842833; // 0x1010051 + field public static final int expandableListPreferredItemPaddingLeft = 16842830; // 0x101004e + field public static final int expandableListViewStyle = 16842863; // 0x101006f + field public static final int expandableListViewWhiteStyle = 16843446; // 0x10102b6 + field public static final int exported = 16842768; // 0x1010010 + field public static final int extraTension = 16843371; // 0x101026b + field public static final int factor = 16843219; // 0x10101d3 + field public static final int fadeDuration = 16843384; // 0x1010278 + field public static final int fadeEnabled = 16843390; // 0x101027e + field public static final int fadeOffset = 16843383; // 0x1010277 + field public static final int fadeScrollbars = 16843434; // 0x10102aa + field public static final int fadingEdge = 16842975; // 0x10100df + field public static final int fadingEdgeLength = 16842976; // 0x10100e0 + field public static final int fadingMode = 16843745; // 0x10103e1 + field public static final int fastScrollAlwaysVisible = 16843573; // 0x1010335 + field public static final int fastScrollEnabled = 16843302; // 0x1010226 + field public static final int fastScrollOverlayPosition = 16843578; // 0x101033a + field public static final int fastScrollPreviewBackgroundLeft = 16843575; // 0x1010337 + field public static final int fastScrollPreviewBackgroundRight = 16843576; // 0x1010338 + field public static final int fastScrollStyle = 16843767; // 0x10103f7 + field public static final int fastScrollTextColor = 16843609; // 0x1010359 + field public static final int fastScrollThumbDrawable = 16843574; // 0x1010336 + field public static final int fastScrollTrackDrawable = 16843577; // 0x1010339 + field public static final int fillAfter = 16843197; // 0x10101bd + field public static final int fillAlpha = 16843980; // 0x10104cc + field public static final int fillBefore = 16843196; // 0x10101bc + field public static final int fillColor = 16843780; // 0x1010404 + field public static final int fillEnabled = 16843343; // 0x101024f + field public static final int fillViewport = 16843130; // 0x101017a + field public static final int filter = 16843035; // 0x101011b + field public static final int filterTouchesWhenObscured = 16843460; // 0x10102c4 + field public static final int finishOnCloseSystemDialogs = 16843431; // 0x10102a7 + field public static final int finishOnTaskLaunch = 16842772; // 0x1010014 + field public static final int firstDayOfWeek = 16843581; // 0x101033d + field public static final int fitsSystemWindows = 16842973; // 0x10100dd + field public static final int flipInterval = 16843129; // 0x1010179 + field public static final int focusable = 16842970; // 0x10100da + field public static final int focusableInTouchMode = 16842971; // 0x10100db + field public static final int focusedMonthDateColor = 16843587; // 0x1010343 + field public static final int fontFamily = 16843692; // 0x10103ac + field public static final int fontFeatureSettings = 16843959; // 0x10104b7 + field public static final int footerDividersEnabled = 16843311; // 0x101022f + field public static final int foreground = 16843017; // 0x1010109 + field public static final int foregroundGravity = 16843264; // 0x1010200 + field public static final int foregroundTint = 16843885; // 0x101046d + field public static final int foregroundTintMode = 16843886; // 0x101046e + field public static final int format = 16843013; // 0x1010105 + field public static final int format12Hour = 16843722; // 0x10103ca + field public static final int format24Hour = 16843723; // 0x10103cb + field public static final int fragment = 16843491; // 0x10102e3 + field public static final int fragmentAllowEnterTransitionOverlap = 16843976; // 0x10104c8 + field public static final int fragmentAllowReturnTransitionOverlap = 16843977; // 0x10104c9 + field public static final int fragmentCloseEnterAnimation = 16843495; // 0x10102e7 + field public static final int fragmentCloseExitAnimation = 16843496; // 0x10102e8 + field public static final int fragmentEnterTransition = 16843971; // 0x10104c3 + field public static final int fragmentExitTransition = 16843970; // 0x10104c2 + field public static final int fragmentFadeEnterAnimation = 16843497; // 0x10102e9 + field public static final int fragmentFadeExitAnimation = 16843498; // 0x10102ea + field public static final int fragmentOpenEnterAnimation = 16843493; // 0x10102e5 + field public static final int fragmentOpenExitAnimation = 16843494; // 0x10102e6 + field public static final int fragmentReenterTransition = 16843975; // 0x10104c7 + field public static final int fragmentReturnTransition = 16843973; // 0x10104c5 + field public static final int fragmentSharedElementEnterTransition = 16843972; // 0x10104c4 + field public static final int fragmentSharedElementReturnTransition = 16843974; // 0x10104c6 + field public static final int freezesText = 16843116; // 0x101016c + field public static final int fromAlpha = 16843210; // 0x10101ca + field public static final int fromDegrees = 16843187; // 0x10101b3 + field public static final int fromId = 16843850; // 0x101044a + field public static final int fromScene = 16843741; // 0x10103dd + field public static final int fromXDelta = 16843206; // 0x10101c6 + field public static final int fromXScale = 16843202; // 0x10101c2 + field public static final int fromYDelta = 16843208; // 0x10101c8 + field public static final int fromYScale = 16843204; // 0x10101c4 + field public static final int fullBackupOnly = 16843891; // 0x1010473 + field public static final int fullBright = 16842954; // 0x10100ca + field public static final int fullDark = 16842950; // 0x10100c6 + field public static final int functionalTest = 16842787; // 0x1010023 + field public static final int galleryItemBackground = 16842828; // 0x101004c + field public static final int galleryStyle = 16842864; // 0x1010070 + field public static final int gestureColor = 16843381; // 0x1010275 + field public static final int gestureStrokeAngleThreshold = 16843388; // 0x101027c + field public static final int gestureStrokeLengthThreshold = 16843386; // 0x101027a + field public static final int gestureStrokeSquarenessThreshold = 16843387; // 0x101027b + field public static final int gestureStrokeType = 16843385; // 0x1010279 + field public static final int gestureStrokeWidth = 16843380; // 0x1010274 + field public static final int glEsVersion = 16843393; // 0x1010281 + field public static final int goIcon = 16843906; // 0x1010482 + field public static final int gradientRadius = 16843172; // 0x10101a4 + field public static final int grantUriPermissions = 16842779; // 0x101001b + field public static final int gravity = 16842927; // 0x10100af + field public static final int gridViewStyle = 16842865; // 0x1010071 + field public static final int groupIndicator = 16843019; // 0x101010b + field public static final int hand_hour = 16843011; // 0x1010103 + field public static final int hand_minute = 16843012; // 0x1010104 + field public static final int handle = 16843354; // 0x101025a + field public static final int handleProfiling = 16842786; // 0x1010022 + field public static final int hapticFeedbackEnabled = 16843358; // 0x101025e + field public static final int hardwareAccelerated = 16843475; // 0x10102d3 + field public static final int hasCode = 16842764; // 0x101000c + field public static final int headerAmPmTextAppearance = 16843936; // 0x10104a0 + field public static final int headerBackground = 16843055; // 0x101012f + field public static final int headerDayOfMonthTextAppearance = 16843927; // 0x1010497 + field public static final int headerDividersEnabled = 16843310; // 0x101022e + field public static final int headerMonthTextAppearance = 16843926; // 0x1010496 + field public static final int headerTimeTextAppearance = 16843935; // 0x101049f + field public static final int headerYearTextAppearance = 16843928; // 0x1010498 + field public static final int height = 16843093; // 0x1010155 + field public static final int hideOnContentScroll = 16843843; // 0x1010443 + field public static final int hint = 16843088; // 0x1010150 + field public static final int homeAsUpIndicator = 16843531; // 0x101030b + field public static final int homeLayout = 16843549; // 0x101031d + field public static final int horizontalDivider = 16843053; // 0x101012d + field public static final int horizontalGap = 16843327; // 0x101023f + field public static final int horizontalScrollViewStyle = 16843603; // 0x1010353 + field public static final int horizontalSpacing = 16843028; // 0x1010114 + field public static final int host = 16842792; // 0x1010028 + field public static final int icon = 16842754; // 0x1010002 + field public static final int iconPreview = 16843337; // 0x1010249 + field public static final int iconifiedByDefault = 16843514; // 0x10102fa + field public static final int id = 16842960; // 0x10100d0 + field public static final int ignoreGravity = 16843263; // 0x10101ff + field public static final int imageButtonStyle = 16842866; // 0x1010072 + field public static final int imageWellStyle = 16842867; // 0x1010073 + field public static final int imeActionId = 16843366; // 0x1010266 + field public static final int imeActionLabel = 16843365; // 0x1010265 + field public static final int imeExtractEnterAnimation = 16843368; // 0x1010268 + field public static final int imeExtractExitAnimation = 16843369; // 0x1010269 + field public static final int imeFullscreenBackground = 16843308; // 0x101022c + field public static final int imeOptions = 16843364; // 0x1010264 + field public static final int imeSubtypeExtraValue = 16843502; // 0x10102ee + field public static final int imeSubtypeLocale = 16843500; // 0x10102ec + field public static final int imeSubtypeMode = 16843501; // 0x10102ed + field public static final int immersive = 16843456; // 0x10102c0 + field public static final int importantForAccessibility = 16843690; // 0x10103aa + field public static final int inAnimation = 16843127; // 0x1010177 + field public static final int includeFontPadding = 16843103; // 0x101015f + field public static final int includeInGlobalSearch = 16843374; // 0x101026e + field public static final int indeterminate = 16843065; // 0x1010139 + field public static final int indeterminateBehavior = 16843070; // 0x101013e + field public static final int indeterminateDrawable = 16843067; // 0x101013b + field public static final int indeterminateDuration = 16843069; // 0x101013d + field public static final int indeterminateOnly = 16843066; // 0x101013a + field public static final int indeterminateProgressStyle = 16843544; // 0x1010318 + field public static final int indeterminateTint = 16843881; // 0x1010469 + field public static final int indeterminateTintMode = 16843882; // 0x101046a + field public static final int indicatorEnd = 16843730; // 0x10103d2 + field public static final int indicatorLeft = 16843021; // 0x101010d + field public static final int indicatorRight = 16843022; // 0x101010e + field public static final int indicatorStart = 16843729; // 0x10103d1 + field public static final int inflatedId = 16842995; // 0x10100f3 + field public static final int initOrder = 16842778; // 0x101001a + field public static final int initialKeyguardLayout = 16843714; // 0x10103c2 + field public static final int initialLayout = 16843345; // 0x1010251 + field public static final int innerRadius = 16843359; // 0x101025f + field public static final int innerRadiusRatio = 16843163; // 0x101019b + field public static final deprecated int inputMethod = 16843112; // 0x1010168 + field public static final int inputType = 16843296; // 0x1010220 + field public static final int inset = 16843957; // 0x10104b5 + field public static final int insetBottom = 16843194; // 0x10101ba + field public static final int insetLeft = 16843191; // 0x10101b7 + field public static final int insetRight = 16843192; // 0x10101b8 + field public static final int insetTop = 16843193; // 0x10101b9 + field public static final int installLocation = 16843447; // 0x10102b7 + field public static final int interpolator = 16843073; // 0x1010141 + field public static final int isAlwaysSyncable = 16843571; // 0x1010333 + field public static final int isAsciiCapable = 16843753; // 0x10103e9 + field public static final int isAuxiliary = 16843647; // 0x101037f + field public static final int isDefault = 16843297; // 0x1010221 + field public static final int isGame = 16843764; // 0x10103f4 + field public static final int isIndicator = 16843079; // 0x1010147 + field public static final int isModifier = 16843334; // 0x1010246 + field public static final int isRepeatable = 16843336; // 0x1010248 + field public static final int isScrollContainer = 16843342; // 0x101024e + field public static final int isSticky = 16843335; // 0x1010247 + field public static final int isolatedProcess = 16843689; // 0x10103a9 + field public static final int itemBackground = 16843056; // 0x1010130 + field public static final int itemIconDisabledAlpha = 16843057; // 0x1010131 + field public static final int itemPadding = 16843565; // 0x101032d + field public static final int itemTextAppearance = 16843052; // 0x101012c + field public static final int keepScreenOn = 16843286; // 0x1010216 + field public static final int key = 16843240; // 0x10101e8 + field public static final int keyBackground = 16843315; // 0x1010233 + field public static final int keyEdgeFlags = 16843333; // 0x1010245 + field public static final int keyHeight = 16843326; // 0x101023e + field public static final int keyIcon = 16843340; // 0x101024c + field public static final int keyLabel = 16843339; // 0x101024b + field public static final int keyOutputText = 16843338; // 0x101024a + field public static final int keyPreviewHeight = 16843321; // 0x1010239 + field public static final int keyPreviewLayout = 16843319; // 0x1010237 + field public static final int keyPreviewOffset = 16843320; // 0x1010238 + field public static final int keySet = 16843739; // 0x10103db + field public static final int keyTextColor = 16843318; // 0x1010236 + field public static final int keyTextSize = 16843316; // 0x1010234 + field public static final int keyWidth = 16843325; // 0x101023d + field public static final int keyboardLayout = 16843691; // 0x10103ab + field public static final int keyboardMode = 16843341; // 0x101024d + field public static final int keycode = 16842949; // 0x10100c5 + field public static final int killAfterRestore = 16843420; // 0x101029c + field public static final int label = 16842753; // 0x1010001 + field public static final int labelFor = 16843718; // 0x10103c6 + field public static final int labelTextSize = 16843317; // 0x1010235 + field public static final int largeHeap = 16843610; // 0x101035a + field public static final int largeScreens = 16843398; // 0x1010286 + field public static final int largestWidthLimitDp = 16843622; // 0x1010366 + field public static final int launchMode = 16842781; // 0x101001d + field public static final int launchTaskBehindSourceAnimation = 16843922; // 0x1010492 + field public static final int launchTaskBehindTargetAnimation = 16843921; // 0x1010491 + field public static final int layerType = 16843604; // 0x1010354 + field public static final int layout = 16842994; // 0x10100f2 + field public static final int layoutAnimation = 16842988; // 0x10100ec + field public static final int layoutDirection = 16843698; // 0x10103b2 + field public static final int layoutMode = 16843738; // 0x10103da + field public static final int layout_above = 16843140; // 0x1010184 + field public static final int layout_alignBaseline = 16843142; // 0x1010186 + field public static final int layout_alignBottom = 16843146; // 0x101018a + field public static final int layout_alignEnd = 16843706; // 0x10103ba + field public static final int layout_alignLeft = 16843143; // 0x1010187 + field public static final int layout_alignParentBottom = 16843150; // 0x101018e + field public static final int layout_alignParentEnd = 16843708; // 0x10103bc + field public static final int layout_alignParentLeft = 16843147; // 0x101018b + field public static final int layout_alignParentRight = 16843149; // 0x101018d + field public static final int layout_alignParentStart = 16843707; // 0x10103bb + field public static final int layout_alignParentTop = 16843148; // 0x101018c + field public static final int layout_alignRight = 16843145; // 0x1010189 + field public static final int layout_alignStart = 16843705; // 0x10103b9 + field public static final int layout_alignTop = 16843144; // 0x1010188 + field public static final int layout_alignWithParentIfMissing = 16843154; // 0x1010192 + field public static final int layout_below = 16843141; // 0x1010185 + field public static final int layout_centerHorizontal = 16843152; // 0x1010190 + field public static final int layout_centerInParent = 16843151; // 0x101018f + field public static final int layout_centerVertical = 16843153; // 0x1010191 + field public static final int layout_column = 16843084; // 0x101014c + field public static final int layout_columnSpan = 16843645; // 0x101037d + field public static final int layout_columnWeight = 16843865; // 0x1010459 + field public static final int layout_gravity = 16842931; // 0x10100b3 + field public static final int layout_height = 16842997; // 0x10100f5 + field public static final int layout_margin = 16842998; // 0x10100f6 + field public static final int layout_marginBottom = 16843002; // 0x10100fa + field public static final int layout_marginEnd = 16843702; // 0x10103b6 + field public static final int layout_marginLeft = 16842999; // 0x10100f7 + field public static final int layout_marginRight = 16843001; // 0x10100f9 + field public static final int layout_marginStart = 16843701; // 0x10103b5 + field public static final int layout_marginTop = 16843000; // 0x10100f8 + field public static final int layout_row = 16843643; // 0x101037b + field public static final int layout_rowSpan = 16843644; // 0x101037c + field public static final int layout_rowWeight = 16843864; // 0x1010458 + field public static final int layout_scale = 16843155; // 0x1010193 + field public static final int layout_span = 16843085; // 0x101014d + field public static final int layout_toEndOf = 16843704; // 0x10103b8 + field public static final int layout_toLeftOf = 16843138; // 0x1010182 + field public static final int layout_toRightOf = 16843139; // 0x1010183 + field public static final int layout_toStartOf = 16843703; // 0x10103b7 + field public static final int layout_weight = 16843137; // 0x1010181 + field public static final int layout_width = 16842996; // 0x10100f4 + field public static final int layout_x = 16843135; // 0x101017f + field public static final int layout_y = 16843136; // 0x1010180 + field public static final int left = 16843181; // 0x10101ad + field public static final int letterSpacing = 16843958; // 0x10104b6 + field public static final int lineSpacingExtra = 16843287; // 0x1010217 + field public static final int lineSpacingMultiplier = 16843288; // 0x1010218 + field public static final int lines = 16843092; // 0x1010154 + field public static final int linksClickable = 16842929; // 0x10100b1 + field public static final int listChoiceBackgroundIndicator = 16843504; // 0x10102f0 + field public static final int listChoiceIndicatorMultiple = 16843290; // 0x101021a + field public static final int listChoiceIndicatorSingle = 16843289; // 0x1010219 + field public static final int listDivider = 16843284; // 0x1010214 + field public static final int listDividerAlertDialog = 16843525; // 0x1010305 + field public static final int listPopupWindowStyle = 16843519; // 0x10102ff + field public static final int listPreferredItemHeight = 16842829; // 0x101004d + field public static final int listPreferredItemHeightLarge = 16843654; // 0x1010386 + field public static final int listPreferredItemHeightSmall = 16843655; // 0x1010387 + field public static final int listPreferredItemPaddingEnd = 16843710; // 0x10103be + field public static final int listPreferredItemPaddingLeft = 16843683; // 0x10103a3 + field public static final int listPreferredItemPaddingRight = 16843684; // 0x10103a4 + field public static final int listPreferredItemPaddingStart = 16843709; // 0x10103bd + field public static final int listSelector = 16843003; // 0x10100fb + field public static final int listSeparatorTextViewStyle = 16843272; // 0x1010208 + field public static final int listViewStyle = 16842868; // 0x1010074 + field public static final int listViewWhiteStyle = 16842869; // 0x1010075 + field public static final int logo = 16843454; // 0x10102be + field public static final int longClickable = 16842982; // 0x10100e6 + field public static final int loopViews = 16843527; // 0x1010307 + field public static final int manageSpaceActivity = 16842756; // 0x1010004 + field public static final int mapViewStyle = 16842890; // 0x101008a + field public static final int marqueeRepeatLimit = 16843293; // 0x101021d + field public static final int matchOrder = 16843855; // 0x101044f + field public static final int max = 16843062; // 0x1010136 + field public static final int maxDate = 16843584; // 0x1010340 + field public static final int maxEms = 16843095; // 0x1010157 + field public static final int maxHeight = 16843040; // 0x1010120 + field public static final int maxItemsPerRow = 16843060; // 0x1010134 + field public static final int maxLength = 16843104; // 0x1010160 + field public static final int maxLevel = 16843186; // 0x10101b2 + field public static final int maxLines = 16843091; // 0x1010153 + field public static final int maxRecents = 16843846; // 0x1010446 + field public static final int maxRows = 16843059; // 0x1010133 + field public static final int maxSdkVersion = 16843377; // 0x1010271 + field public static final int maxWidth = 16843039; // 0x101011f + field public static final int maximumAngle = 16843903; // 0x101047f + field public static final int measureAllChildren = 16843018; // 0x101010a + field public static final int measureWithLargestChild = 16843476; // 0x10102d4 + field public static final int mediaRouteButtonStyle = 16843693; // 0x10103ad + field public static final int mediaRouteTypes = 16843694; // 0x10103ae + field public static final int menuCategory = 16843230; // 0x10101de + field public static final int mimeType = 16842790; // 0x1010026 + field public static final int minDate = 16843583; // 0x101033f + field public static final int minEms = 16843098; // 0x101015a + field public static final int minHeight = 16843072; // 0x1010140 + field public static final int minLevel = 16843185; // 0x10101b1 + field public static final int minLines = 16843094; // 0x1010156 + field public static final int minResizeHeight = 16843670; // 0x1010396 + field public static final int minResizeWidth = 16843669; // 0x1010395 + field public static final int minSdkVersion = 16843276; // 0x101020c + field public static final int minWidth = 16843071; // 0x101013f + field public static final int minimumHorizontalAngle = 16843901; // 0x101047d + field public static final int minimumVerticalAngle = 16843902; // 0x101047e + field public static final int mipMap = 16843725; // 0x10103cd + field public static final int mirrorForRtl = 16843726; // 0x10103ce + field public static final int mode = 16843134; // 0x101017e + field public static final int moreIcon = 16843061; // 0x1010135 + field public static final int multiArch = 16843918; // 0x101048e + field public static final int multiprocess = 16842771; // 0x1010013 + field public static final int name = 16842755; // 0x1010003 + field public static final int navigationBarColor = 16843858; // 0x1010452 + field public static final int navigationContentDescription = 16843969; // 0x10104c1 + field public static final int navigationIcon = 16843968; // 0x10104c0 + field public static final int navigationMode = 16843471; // 0x10102cf + field public static final int negativeButtonText = 16843254; // 0x10101f6 + field public static final int nestedScrollingEnabled = 16843830; // 0x1010436 + field public static final int nextFocusDown = 16842980; // 0x10100e4 + field public static final int nextFocusForward = 16843580; // 0x101033c + field public static final int nextFocusLeft = 16842977; // 0x10100e1 + field public static final int nextFocusRight = 16842978; // 0x10100e2 + field public static final int nextFocusUp = 16842979; // 0x10100e3 + field public static final int noHistory = 16843309; // 0x101022d + field public static final int normalScreens = 16843397; // 0x1010285 + field public static final int notificationTimeout = 16843651; // 0x1010383 + field public static final int numColumns = 16843032; // 0x1010118 + field public static final int numStars = 16843076; // 0x1010144 + field public static final int numbersBackgroundColor = 16843938; // 0x10104a2 + field public static final int numbersSelectorColor = 16843939; // 0x10104a3 + field public static final int numbersTextColor = 16843937; // 0x10104a1 + field public static final deprecated int numeric = 16843109; // 0x1010165 + field public static final int numericShortcut = 16843236; // 0x10101e4 + field public static final int onClick = 16843375; // 0x101026f + field public static final int oneshot = 16843159; // 0x1010197 + field public static final int opacity = 16843550; // 0x101031e + field public static final int order = 16843242; // 0x10101ea + field public static final int orderInCategory = 16843231; // 0x10101df + field public static final int ordering = 16843490; // 0x10102e2 + field public static final int orderingFromXml = 16843239; // 0x10101e7 + field public static final int orientation = 16842948; // 0x10100c4 + field public static final int outAnimation = 16843128; // 0x1010178 + field public static final int outlineProvider = 16843960; // 0x10104b8 + field public static final int overScrollFooter = 16843459; // 0x10102c3 + field public static final int overScrollHeader = 16843458; // 0x10102c2 + field public static final int overScrollMode = 16843457; // 0x10102c1 + field public static final int overlapAnchor = 16843874; // 0x1010462 + field public static final int overridesImplicitlyEnabledSubtype = 16843682; // 0x10103a2 + field public static final int packageNames = 16843649; // 0x1010381 + field public static final int padding = 16842965; // 0x10100d5 + field public static final int paddingBottom = 16842969; // 0x10100d9 + field public static final int paddingEnd = 16843700; // 0x10103b4 + field public static final int paddingLeft = 16842966; // 0x10100d6 + field public static final int paddingMode = 16843863; // 0x1010457 + field public static final int paddingRight = 16842968; // 0x10100d8 + field public static final int paddingStart = 16843699; // 0x10103b3 + field public static final int paddingTop = 16842967; // 0x10100d7 + field public static final int panelBackground = 16842846; // 0x101005e + field public static final int panelColorBackground = 16842849; // 0x1010061 + field public static final int panelColorForeground = 16842848; // 0x1010060 + field public static final int panelFullBackground = 16842847; // 0x101005f + field public static final int panelTextAppearance = 16842850; // 0x1010062 + field public static final int parentActivityName = 16843687; // 0x10103a7 + field public static final deprecated int password = 16843100; // 0x101015c + field public static final int path = 16842794; // 0x101002a + field public static final int pathData = 16843781; // 0x1010405 + field public static final int pathPattern = 16842796; // 0x101002c + field public static final int pathPrefix = 16842795; // 0x101002b + field public static final int patternPathData = 16843978; // 0x10104ca + field public static final int permission = 16842758; // 0x1010006 + field public static final int permissionFlags = 16843719; // 0x10103c7 + field public static final int permissionGroup = 16842762; // 0x101000a + field public static final int permissionGroupFlags = 16843717; // 0x10103c5 + field public static final int persistableMode = 16843821; // 0x101042d + field public static final int persistent = 16842765; // 0x101000d + field public static final int persistentDrawingCache = 16842990; // 0x10100ee + field public static final deprecated int phoneNumber = 16843111; // 0x1010167 + field public static final int pivotX = 16843189; // 0x10101b5 + field public static final int pivotY = 16843190; // 0x10101b6 + field public static final int popupAnimationStyle = 16843465; // 0x10102c9 + field public static final int popupBackground = 16843126; // 0x1010176 + field public static final int popupCharacters = 16843332; // 0x1010244 + field public static final int popupElevation = 16843916; // 0x101048c + field public static final int popupKeyboard = 16843331; // 0x1010243 + field public static final int popupLayout = 16843323; // 0x101023b + field public static final int popupMenuStyle = 16843520; // 0x1010300 + field public static final int popupTheme = 16843945; // 0x10104a9 + field public static final int popupWindowStyle = 16842870; // 0x1010076 + field public static final int port = 16842793; // 0x1010029 + field public static final int positiveButtonText = 16843253; // 0x10101f5 + field public static final int preferenceCategoryStyle = 16842892; // 0x101008c + field public static final int preferenceInformationStyle = 16842893; // 0x101008d + field public static final int preferenceLayoutChild = 16842900; // 0x1010094 + field public static final int preferenceScreenStyle = 16842891; // 0x101008b + field public static final int preferenceStyle = 16842894; // 0x101008e + field public static final int presentationTheme = 16843712; // 0x10103c0 + field public static final int previewImage = 16843482; // 0x10102da + field public static final int priority = 16842780; // 0x101001c + field public static final int privateImeOptions = 16843299; // 0x1010223 + field public static final int process = 16842769; // 0x1010011 + field public static final int progress = 16843063; // 0x1010137 + field public static final int progressBackgroundTint = 16843877; // 0x1010465 + field public static final int progressBackgroundTintMode = 16843878; // 0x1010466 + field public static final int progressBarPadding = 16843545; // 0x1010319 + field public static final int progressBarStyle = 16842871; // 0x1010077 + field public static final int progressBarStyleHorizontal = 16842872; // 0x1010078 + field public static final int progressBarStyleInverse = 16843399; // 0x1010287 + field public static final int progressBarStyleLarge = 16842874; // 0x101007a + field public static final int progressBarStyleLargeInverse = 16843401; // 0x1010289 + field public static final int progressBarStyleSmall = 16842873; // 0x1010079 + field public static final int progressBarStyleSmallInverse = 16843400; // 0x1010288 + field public static final int progressBarStyleSmallTitle = 16843279; // 0x101020f + field public static final int progressDrawable = 16843068; // 0x101013c + field public static final int progressTint = 16843875; // 0x1010463 + field public static final int progressTintMode = 16843876; // 0x1010464 + field public static final int prompt = 16843131; // 0x101017b + field public static final int propertyName = 16843489; // 0x10102e1 + field public static final int propertyXName = 16843892; // 0x1010474 + field public static final int propertyYName = 16843893; // 0x1010475 + field public static final int protectionLevel = 16842761; // 0x1010009 + field public static final int publicKey = 16843686; // 0x10103a6 + field public static final int queryActionMsg = 16843227; // 0x10101db + field public static final int queryAfterZeroResults = 16843394; // 0x1010282 + field public static final int queryBackground = 16843911; // 0x1010487 + field public static final int queryHint = 16843608; // 0x1010358 + field public static final int quickContactBadgeStyleSmallWindowLarge = 16843443; // 0x10102b3 + field public static final int quickContactBadgeStyleSmallWindowMedium = 16843442; // 0x10102b2 + field public static final int quickContactBadgeStyleSmallWindowSmall = 16843441; // 0x10102b1 + field public static final int quickContactBadgeStyleWindowLarge = 16843440; // 0x10102b0 + field public static final int quickContactBadgeStyleWindowMedium = 16843439; // 0x10102af + field public static final int quickContactBadgeStyleWindowSmall = 16843438; // 0x10102ae + field public static final int radioButtonStyle = 16842878; // 0x101007e + field public static final int radius = 16843176; // 0x10101a8 + field public static final int rating = 16843077; // 0x1010145 + field public static final int ratingBarStyle = 16842876; // 0x101007c + field public static final int ratingBarStyleIndicator = 16843280; // 0x1010210 + field public static final int ratingBarStyleSmall = 16842877; // 0x101007d + field public static final int readPermission = 16842759; // 0x1010007 + field public static final int recognitionService = 16843932; // 0x101049c + field public static final int relinquishTaskIdentity = 16843894; // 0x1010476 + field public static final int reparent = 16843964; // 0x10104bc + field public static final int reparentWithOverlay = 16843965; // 0x10104bd + field public static final int repeatCount = 16843199; // 0x10101bf + field public static final int repeatMode = 16843200; // 0x10101c0 + field public static final int reqFiveWayNav = 16843314; // 0x1010232 + field public static final int reqHardKeyboard = 16843305; // 0x1010229 + field public static final int reqKeyboardType = 16843304; // 0x1010228 + field public static final int reqNavigation = 16843306; // 0x101022a + field public static final int reqTouchScreen = 16843303; // 0x1010227 + field public static final int requireDeviceUnlock = 16843756; // 0x10103ec + field public static final int required = 16843406; // 0x101028e + field public static final int requiredAccountType = 16843734; // 0x10103d6 + field public static final int requiredForAllUsers = 16843728; // 0x10103d0 + field public static final int requiresFadingEdge = 16843685; // 0x10103a5 + field public static final int requiresSmallestWidthDp = 16843620; // 0x1010364 + field public static final int resizeClip = 16843983; // 0x10104cf + field public static final int resizeMode = 16843619; // 0x1010363 + field public static final int resizeable = 16843405; // 0x101028d + field public static final int resource = 16842789; // 0x1010025 + field public static final int restoreAnyVersion = 16843450; // 0x10102ba + field public static final deprecated int restoreNeedsApplication = 16843421; // 0x101029d + field public static final int restrictedAccountType = 16843733; // 0x10103d5 + field public static final int restrictionType = 16843923; // 0x1010493 + field public static final int resumeWhilePausing = 16843954; // 0x10104b2 + field public static final int reversible = 16843851; // 0x101044b + field public static final int revisionCode = 16843989; // 0x10104d5 + field public static final int right = 16843183; // 0x10101af + field public static final int ringtonePreferenceStyle = 16842899; // 0x1010093 + field public static final int ringtoneType = 16843257; // 0x10101f9 + field public static final int rotation = 16843558; // 0x1010326 + field public static final int rotationX = 16843559; // 0x1010327 + field public static final int rotationY = 16843560; // 0x1010328 + field public static final int rowCount = 16843637; // 0x1010375 + field public static final int rowDelay = 16843216; // 0x10101d0 + field public static final int rowEdgeFlags = 16843329; // 0x1010241 + field public static final int rowHeight = 16843058; // 0x1010132 + field public static final int rowOrderPreserved = 16843638; // 0x1010376 + field public static final int saveEnabled = 16842983; // 0x10100e7 + field public static final int scaleGravity = 16843262; // 0x10101fe + field public static final int scaleHeight = 16843261; // 0x10101fd + field public static final int scaleType = 16843037; // 0x101011d + field public static final int scaleWidth = 16843260; // 0x10101fc + field public static final int scaleX = 16843556; // 0x1010324 + field public static final int scaleY = 16843557; // 0x1010325 + field public static final int scheme = 16842791; // 0x1010027 + field public static final int screenDensity = 16843467; // 0x10102cb + field public static final int screenOrientation = 16842782; // 0x101001e + field public static final int screenSize = 16843466; // 0x10102ca + field public static final int scrollHorizontally = 16843099; // 0x101015b + field public static final int scrollViewStyle = 16842880; // 0x1010080 + field public static final int scrollX = 16842962; // 0x10100d2 + field public static final int scrollY = 16842963; // 0x10100d3 + field public static final int scrollbarAlwaysDrawHorizontalTrack = 16842856; // 0x1010068 + field public static final int scrollbarAlwaysDrawVerticalTrack = 16842857; // 0x1010069 + field public static final int scrollbarDefaultDelayBeforeFade = 16843433; // 0x10102a9 + field public static final int scrollbarFadeDuration = 16843432; // 0x10102a8 + field public static final int scrollbarSize = 16842851; // 0x1010063 + field public static final int scrollbarStyle = 16842879; // 0x101007f + field public static final int scrollbarThumbHorizontal = 16842852; // 0x1010064 + field public static final int scrollbarThumbVertical = 16842853; // 0x1010065 + field public static final int scrollbarTrackHorizontal = 16842854; // 0x1010066 + field public static final int scrollbarTrackVertical = 16842855; // 0x1010067 + field public static final int scrollbars = 16842974; // 0x10100de + field public static final int scrollingCache = 16843006; // 0x10100fe + field public static final deprecated int searchButtonText = 16843269; // 0x1010205 + field public static final int searchHintIcon = 16843988; // 0x10104d4 + field public static final int searchIcon = 16843907; // 0x1010483 + field public static final int searchKeyphrase = 16843871; // 0x101045f + field public static final int searchKeyphraseId = 16843870; // 0x101045e + field public static final int searchKeyphraseRecognitionFlags = 16843942; // 0x10104a6 + field public static final int searchKeyphraseSupportedLocales = 16843872; // 0x1010460 + field public static final int searchMode = 16843221; // 0x10101d5 + field public static final int searchSettingsDescription = 16843402; // 0x101028a + field public static final int searchSuggestAuthority = 16843222; // 0x10101d6 + field public static final int searchSuggestIntentAction = 16843225; // 0x10101d9 + field public static final int searchSuggestIntentData = 16843226; // 0x10101da + field public static final int searchSuggestPath = 16843223; // 0x10101d7 + field public static final int searchSuggestSelection = 16843224; // 0x10101d8 + field public static final int searchSuggestThreshold = 16843373; // 0x101026d + field public static final int searchViewStyle = 16843904; // 0x1010480 + field public static final int secondaryProgress = 16843064; // 0x1010138 + field public static final int secondaryProgressTint = 16843879; // 0x1010467 + field public static final int secondaryProgressTintMode = 16843880; // 0x1010468 + field public static final int seekBarStyle = 16842875; // 0x101007b + field public static final int segmentedButtonStyle = 16843568; // 0x1010330 + field public static final int selectAllOnFocus = 16843102; // 0x101015e + field public static final int selectable = 16843238; // 0x10101e6 + field public static final int selectableItemBackground = 16843534; // 0x101030e + field public static final int selectableItemBackgroundBorderless = 16843868; // 0x101045c + field public static final int selectedDateVerticalBar = 16843591; // 0x1010347 + field public static final int selectedWeekBackgroundColor = 16843586; // 0x1010342 + field public static final int sessionService = 16843837; // 0x101043d + field public static final int settingsActivity = 16843301; // 0x1010225 + field public static final int setupActivity = 16843766; // 0x10103f6 + field public static final int shadowColor = 16843105; // 0x1010161 + field public static final int shadowDx = 16843106; // 0x1010162 + field public static final int shadowDy = 16843107; // 0x1010163 + field public static final int shadowRadius = 16843108; // 0x1010164 + field public static final int shape = 16843162; // 0x101019a + field public static final int shareInterpolator = 16843195; // 0x10101bb + field public static final int sharedUserId = 16842763; // 0x101000b + field public static final int sharedUserLabel = 16843361; // 0x1010261 + field public static final int shouldDisableView = 16843246; // 0x10101ee + field public static final int showAsAction = 16843481; // 0x10102d9 + field public static final int showDefault = 16843258; // 0x10101fa + field public static final int showDividers = 16843561; // 0x1010329 + field public static final int showOnLockScreen = 16843721; // 0x10103c9 + field public static final int showSilent = 16843259; // 0x10101fb + field public static final int showText = 16843949; // 0x10104ad + field public static final int showWeekNumber = 16843582; // 0x101033e + field public static final int shownWeekCount = 16843585; // 0x1010341 + field public static final int shrinkColumns = 16843082; // 0x101014a + field public static final deprecated int singleLine = 16843101; // 0x101015d + field public static final int singleUser = 16843711; // 0x10103bf + field public static final int slideEdge = 16843824; // 0x1010430 + field public static final int smallIcon = 16843422; // 0x101029e + field public static final int smallScreens = 16843396; // 0x1010284 + field public static final int smoothScrollbar = 16843313; // 0x1010231 + field public static final int soundEffectsEnabled = 16843285; // 0x1010215 + field public static final int spacing = 16843027; // 0x1010113 + field public static final int spinnerDropDownItemStyle = 16842887; // 0x1010087 + field public static final int spinnerItemStyle = 16842889; // 0x1010089 + field public static final int spinnerMode = 16843505; // 0x10102f1 + field public static final int spinnerStyle = 16842881; // 0x1010081 + field public static final int spinnersShown = 16843595; // 0x101034b + field public static final int splitMotionEvents = 16843503; // 0x10102ef + field public static final int splitTrack = 16843852; // 0x101044c + field public static final int spotShadowAlpha = 16843967; // 0x10104bf + field public static final int src = 16843033; // 0x1010119 + field public static final int ssp = 16843747; // 0x10103e3 + field public static final int sspPattern = 16843749; // 0x10103e5 + field public static final int sspPrefix = 16843748; // 0x10103e4 + field public static final int stackFromBottom = 16843005; // 0x10100fd + field public static final int stackViewStyle = 16843838; // 0x101043e + field public static final int starStyle = 16842882; // 0x1010082 + field public static final int startColor = 16843165; // 0x101019d + field public static final int startDelay = 16843746; // 0x10103e2 + field public static final int startOffset = 16843198; // 0x10101be + field public static final deprecated int startYear = 16843132; // 0x101017c + field public static final int stateListAnimator = 16843848; // 0x1010448 + field public static final int stateNotNeeded = 16842774; // 0x1010016 + field public static final int state_above_anchor = 16842922; // 0x10100aa + field public static final int state_accelerated = 16843547; // 0x101031b + field public static final int state_activated = 16843518; // 0x10102fe + field public static final int state_active = 16842914; // 0x10100a2 + field public static final int state_checkable = 16842911; // 0x101009f + field public static final int state_checked = 16842912; // 0x10100a0 + field public static final int state_drag_can_accept = 16843624; // 0x1010368 + field public static final int state_drag_hovered = 16843625; // 0x1010369 + field public static final int state_empty = 16842921; // 0x10100a9 + field public static final int state_enabled = 16842910; // 0x101009e + field public static final int state_expanded = 16842920; // 0x10100a8 + field public static final int state_first = 16842916; // 0x10100a4 + field public static final int state_focused = 16842908; // 0x101009c + field public static final int state_hovered = 16843623; // 0x1010367 + field public static final int state_last = 16842918; // 0x10100a6 + field public static final int state_long_pressable = 16843324; // 0x101023c + field public static final int state_middle = 16842917; // 0x10100a5 + field public static final int state_multiline = 16843597; // 0x101034d + field public static final int state_pressed = 16842919; // 0x10100a7 + field public static final int state_selected = 16842913; // 0x10100a1 + field public static final int state_single = 16842915; // 0x10100a3 + field public static final int state_window_focused = 16842909; // 0x101009d + field public static final int staticWallpaperPreview = 16843569; // 0x1010331 + field public static final int statusBarColor = 16843857; // 0x1010451 + field public static final int stepSize = 16843078; // 0x1010146 + field public static final int stopWithTask = 16843626; // 0x101036a + field public static final int streamType = 16843273; // 0x1010209 + field public static final int stretchColumns = 16843081; // 0x1010149 + field public static final int stretchMode = 16843030; // 0x1010116 + field public static final int strokeAlpha = 16843979; // 0x10104cb + field public static final int strokeColor = 16843782; // 0x1010406 + field public static final int strokeLineCap = 16843787; // 0x101040b + field public static final int strokeLineJoin = 16843788; // 0x101040c + field public static final int strokeMiterLimit = 16843789; // 0x101040d + field public static final int strokeWidth = 16843783; // 0x1010407 + field public static final int submitBackground = 16843912; // 0x1010488 + field public static final int subtitle = 16843473; // 0x10102d1 + field public static final int subtitleTextAppearance = 16843823; // 0x101042f + field public static final int subtitleTextStyle = 16843513; // 0x10102f9 + field public static final int subtypeExtraValue = 16843674; // 0x101039a + field public static final int subtypeId = 16843713; // 0x10103c1 + field public static final int subtypeLocale = 16843673; // 0x1010399 + field public static final int suggestActionMsg = 16843228; // 0x10101dc + field public static final int suggestActionMsgColumn = 16843229; // 0x10101dd + field public static final int suggestionRowLayout = 16843910; // 0x1010486 + field public static final int summary = 16843241; // 0x10101e9 + field public static final int summaryColumn = 16843426; // 0x10102a2 + field public static final int summaryOff = 16843248; // 0x10101f0 + field public static final int summaryOn = 16843247; // 0x10101ef + field public static final int supportsRtl = 16843695; // 0x10103af + field public static final int supportsSwitchingToNextInputMethod = 16843755; // 0x10103eb + field public static final int supportsUploading = 16843419; // 0x101029b + field public static final int switchMinWidth = 16843632; // 0x1010370 + field public static final int switchPadding = 16843633; // 0x1010371 + field public static final int switchPreferenceStyle = 16843629; // 0x101036d + field public static final int switchStyle = 16843839; // 0x101043f + field public static final int switchTextAppearance = 16843630; // 0x101036e + field public static final int switchTextOff = 16843628; // 0x101036c + field public static final int switchTextOn = 16843627; // 0x101036b + field public static final int syncable = 16842777; // 0x1010019 + field public static final int tabStripEnabled = 16843453; // 0x10102bd + field public static final int tabStripLeft = 16843451; // 0x10102bb + field public static final int tabStripRight = 16843452; // 0x10102bc + field public static final int tabWidgetStyle = 16842883; // 0x1010083 + field public static final int tag = 16842961; // 0x10100d1 + field public static final int targetActivity = 16843266; // 0x1010202 + field public static final int targetClass = 16842799; // 0x101002f + field public static final int targetDescriptions = 16843680; // 0x10103a0 + field public static final int targetId = 16843740; // 0x10103dc + field public static final int targetName = 16843853; // 0x101044d + field public static final int targetPackage = 16842785; // 0x1010021 + field public static final int targetSdkVersion = 16843376; // 0x1010270 + field public static final int taskAffinity = 16842770; // 0x1010012 + field public static final int taskCloseEnterAnimation = 16842942; // 0x10100be + field public static final int taskCloseExitAnimation = 16842943; // 0x10100bf + field public static final int taskOpenEnterAnimation = 16842940; // 0x10100bc + field public static final int taskOpenExitAnimation = 16842941; // 0x10100bd + field public static final int taskToBackEnterAnimation = 16842946; // 0x10100c2 + field public static final int taskToBackExitAnimation = 16842947; // 0x10100c3 + field public static final int taskToFrontEnterAnimation = 16842944; // 0x10100c0 + field public static final int taskToFrontExitAnimation = 16842945; // 0x10100c1 + field public static final int tension = 16843370; // 0x101026a + field public static final int testOnly = 16843378; // 0x1010272 + field public static final int text = 16843087; // 0x101014f + field public static final int textAlignment = 16843697; // 0x10103b1 + field public static final int textAllCaps = 16843660; // 0x101038c + field public static final int textAppearance = 16842804; // 0x1010034 + field public static final int textAppearanceButton = 16843271; // 0x1010207 + field public static final int textAppearanceInverse = 16842805; // 0x1010035 + field public static final int textAppearanceLarge = 16842816; // 0x1010040 + field public static final int textAppearanceLargeInverse = 16842819; // 0x1010043 + field public static final int textAppearanceLargePopupMenu = 16843521; // 0x1010301 + field public static final int textAppearanceListItem = 16843678; // 0x101039e + field public static final int textAppearanceListItemSecondary = 16843826; // 0x1010432 + field public static final int textAppearanceListItemSmall = 16843679; // 0x101039f + field public static final int textAppearanceMedium = 16842817; // 0x1010041 + field public static final int textAppearanceMediumInverse = 16842820; // 0x1010044 + field public static final int textAppearanceSearchResultSubtitle = 16843424; // 0x10102a0 + field public static final int textAppearanceSearchResultTitle = 16843425; // 0x10102a1 + field public static final int textAppearanceSmall = 16842818; // 0x1010042 + field public static final int textAppearanceSmallInverse = 16842821; // 0x1010045 + field public static final int textAppearanceSmallPopupMenu = 16843522; // 0x1010302 + field public static final int textCheckMark = 16842822; // 0x1010046 + field public static final int textCheckMarkInverse = 16842823; // 0x1010047 + field public static final int textColor = 16842904; // 0x1010098 + field public static final int textColorAlertDialogListItem = 16843526; // 0x1010306 + field public static final int textColorHighlight = 16842905; // 0x1010099 + field public static final int textColorHighlightInverse = 16843599; // 0x101034f + field public static final int textColorHint = 16842906; // 0x101009a + field public static final int textColorHintInverse = 16842815; // 0x101003f + field public static final int textColorLink = 16842907; // 0x101009b + field public static final int textColorLinkInverse = 16843600; // 0x1010350 + field public static final int textColorPrimary = 16842806; // 0x1010036 + field public static final int textColorPrimaryDisableOnly = 16842807; // 0x1010037 + field public static final int textColorPrimaryInverse = 16842809; // 0x1010039 + field public static final int textColorPrimaryInverseDisableOnly = 16843403; // 0x101028b + field public static final int textColorPrimaryInverseNoDisable = 16842813; // 0x101003d + field public static final int textColorPrimaryNoDisable = 16842811; // 0x101003b + field public static final int textColorSecondary = 16842808; // 0x1010038 + field public static final int textColorSecondaryInverse = 16842810; // 0x101003a + field public static final int textColorSecondaryInverseNoDisable = 16842814; // 0x101003e + field public static final int textColorSecondaryNoDisable = 16842812; // 0x101003c + field public static final int textColorTertiary = 16843282; // 0x1010212 + field public static final int textColorTertiaryInverse = 16843283; // 0x1010213 + field public static final int textCursorDrawable = 16843618; // 0x1010362 + field public static final int textDirection = 16843696; // 0x10103b0 + field public static final int textEditNoPasteWindowLayout = 16843541; // 0x1010315 + field public static final int textEditPasteWindowLayout = 16843540; // 0x1010314 + field public static final int textEditSideNoPasteWindowLayout = 16843615; // 0x101035f + field public static final int textEditSidePasteWindowLayout = 16843614; // 0x101035e + field public static final int textEditSuggestionItemLayout = 16843636; // 0x1010374 + field public static final int textFilterEnabled = 16843007; // 0x10100ff + field public static final int textIsSelectable = 16843542; // 0x1010316 + field public static final int textOff = 16843045; // 0x1010125 + field public static final int textOn = 16843044; // 0x1010124 + field public static final int textScaleX = 16843089; // 0x1010151 + field public static final int textSelectHandle = 16843463; // 0x10102c7 + field public static final int textSelectHandleLeft = 16843461; // 0x10102c5 + field public static final int textSelectHandleRight = 16843462; // 0x10102c6 + field public static final int textSelectHandleWindowStyle = 16843464; // 0x10102c8 + field public static final int textSize = 16842901; // 0x1010095 + field public static final int textStyle = 16842903; // 0x1010097 + field public static final int textSuggestionsWindowStyle = 16843635; // 0x1010373 + field public static final int textViewStyle = 16842884; // 0x1010084 + field public static final int theme = 16842752; // 0x1010000 + field public static final int thickness = 16843360; // 0x1010260 + field public static final int thicknessRatio = 16843164; // 0x101019c + field public static final int thumb = 16843074; // 0x1010142 + field public static final int thumbOffset = 16843075; // 0x1010143 + field public static final int thumbTextPadding = 16843634; // 0x1010372 + field public static final int thumbTint = 16843889; // 0x1010471 + field public static final int thumbTintMode = 16843890; // 0x1010472 + field public static final int thumbnail = 16843429; // 0x10102a5 + field public static final int tileMode = 16843265; // 0x1010201 + field public static final int tileModeX = 16843895; // 0x1010477 + field public static final int tileModeY = 16843896; // 0x1010478 + field public static final int timePickerDialogTheme = 16843934; // 0x101049e + field public static final int timePickerMode = 16843956; // 0x10104b4 + field public static final int timePickerStyle = 16843933; // 0x101049d + field public static final int timeZone = 16843724; // 0x10103cc + field public static final int tint = 16843041; // 0x1010121 + field public static final int tintMode = 16843771; // 0x10103fb + field public static final int title = 16843233; // 0x10101e1 + field public static final int titleCondensed = 16843234; // 0x10101e2 + field public static final int titleTextAppearance = 16843822; // 0x101042e + field public static final int titleTextStyle = 16843512; // 0x10102f8 + field public static final int toAlpha = 16843211; // 0x10101cb + field public static final int toDegrees = 16843188; // 0x10101b4 + field public static final int toId = 16843849; // 0x1010449 + field public static final int toScene = 16843742; // 0x10103de + field public static final int toXDelta = 16843207; // 0x10101c7 + field public static final int toXScale = 16843203; // 0x10101c3 + field public static final int toYDelta = 16843209; // 0x10101c9 + field public static final int toYScale = 16843205; // 0x10101c5 + field public static final int toolbarStyle = 16843946; // 0x10104aa + field public static final int top = 16843182; // 0x10101ae + field public static final int topBright = 16842955; // 0x10100cb + field public static final int topDark = 16842951; // 0x10100c7 + field public static final int topLeftRadius = 16843177; // 0x10101a9 + field public static final int topOffset = 16843352; // 0x1010258 + field public static final int topRightRadius = 16843178; // 0x10101aa + field public static final int touchscreenBlocksFocus = 16843919; // 0x101048f + field public static final int track = 16843631; // 0x101036f + field public static final int transcriptMode = 16843008; // 0x1010100 + field public static final int transformPivotX = 16843552; // 0x1010320 + field public static final int transformPivotY = 16843553; // 0x1010321 + field public static final int transition = 16843743; // 0x10103df + field public static final int transitionGroup = 16843777; // 0x1010401 + field public static final int transitionName = 16843776; // 0x1010400 + field public static final int transitionOrdering = 16843744; // 0x10103e0 + field public static final int transitionVisibilityMode = 16843900; // 0x101047c + field public static final int translateX = 16843866; // 0x101045a + field public static final int translateY = 16843867; // 0x101045b + field public static final int translationX = 16843554; // 0x1010322 + field public static final int translationY = 16843555; // 0x1010323 + field public static final int translationZ = 16843770; // 0x10103fa + field public static final int trimPathEnd = 16843785; // 0x1010409 + field public static final int trimPathOffset = 16843786; // 0x101040a + field public static final int trimPathStart = 16843784; // 0x1010408 + field public static final int type = 16843169; // 0x10101a1 + field public static final int typeface = 16842902; // 0x1010096 + field public static final int uiOptions = 16843672; // 0x1010398 + field public static final int uncertainGestureColor = 16843382; // 0x1010276 + field public static final int unfocusedMonthDateColor = 16843588; // 0x1010344 + field public static final int unselectedAlpha = 16843278; // 0x101020e + field public static final int updatePeriodMillis = 16843344; // 0x1010250 + field public static final int useDefaultMargins = 16843641; // 0x1010379 + field public static final int useIntrinsicSizeAsMinimum = 16843536; // 0x1010310 + field public static final int useLevel = 16843167; // 0x101019f + field public static final int userVisible = 16843409; // 0x1010291 + field public static final int value = 16842788; // 0x1010024 + field public static final int valueFrom = 16843486; // 0x10102de + field public static final int valueTo = 16843487; // 0x10102df + field public static final int valueType = 16843488; // 0x10102e0 + field public static final int variablePadding = 16843157; // 0x1010195 + field public static final int vendor = 16843751; // 0x10103e7 + field public static final int versionCode = 16843291; // 0x101021b + field public static final int versionName = 16843292; // 0x101021c + field public static final int verticalCorrection = 16843322; // 0x101023a + field public static final int verticalDivider = 16843054; // 0x101012e + field public static final int verticalGap = 16843328; // 0x1010240 + field public static final int verticalScrollbarPosition = 16843572; // 0x1010334 + field public static final int verticalSpacing = 16843029; // 0x1010115 + field public static final int viewportHeight = 16843779; // 0x1010403 + field public static final int viewportWidth = 16843778; // 0x1010402 + field public static final int visibility = 16842972; // 0x10100dc + field public static final int visible = 16843156; // 0x1010194 + field public static final int vmSafeMode = 16843448; // 0x10102b8 + field public static final int voiceIcon = 16843908; // 0x1010484 + field public static final int voiceLanguage = 16843349; // 0x1010255 + field public static final int voiceLanguageModel = 16843347; // 0x1010253 + field public static final int voiceMaxResults = 16843350; // 0x1010256 + field public static final int voicePromptText = 16843348; // 0x1010254 + field public static final int voiceSearchMode = 16843346; // 0x1010252 + field public static final int wallpaperCloseEnterAnimation = 16843413; // 0x1010295 + field public static final int wallpaperCloseExitAnimation = 16843414; // 0x1010296 + field public static final int wallpaperIntraCloseEnterAnimation = 16843417; // 0x1010299 + field public static final int wallpaperIntraCloseExitAnimation = 16843418; // 0x101029a + field public static final int wallpaperIntraOpenEnterAnimation = 16843415; // 0x1010297 + field public static final int wallpaperIntraOpenExitAnimation = 16843416; // 0x1010298 + field public static final int wallpaperOpenEnterAnimation = 16843411; // 0x1010293 + field public static final int wallpaperOpenExitAnimation = 16843412; // 0x1010294 + field public static final int webTextViewStyle = 16843449; // 0x10102b9 + field public static final int webViewStyle = 16842885; // 0x1010085 + field public static final int weekDayTextAppearance = 16843592; // 0x1010348 + field public static final int weekNumberColor = 16843589; // 0x1010345 + field public static final int weekSeparatorLineColor = 16843590; // 0x1010346 + field public static final int weightSum = 16843048; // 0x1010128 + field public static final int widgetCategory = 16843716; // 0x10103c4 + field public static final int widgetLayout = 16843243; // 0x10101eb + field public static final int width = 16843097; // 0x1010159 + field public static final int windowActionBar = 16843469; // 0x10102cd + field public static final int windowActionBarOverlay = 16843492; // 0x10102e4 + field public static final int windowActionModeOverlay = 16843485; // 0x10102dd + field public static final int windowActivityTransitions = 16843981; // 0x10104cd + field public static final int windowAllowEnterTransitionOverlap = 16843836; // 0x101043c + field public static final int windowAllowReturnTransitionOverlap = 16843835; // 0x101043b + field public static final int windowAnimationStyle = 16842926; // 0x10100ae + field public static final int windowBackground = 16842836; // 0x1010054 + field public static final int windowClipToOutline = 16843947; // 0x10104ab + field public static final int windowCloseOnTouchOutside = 16843611; // 0x101035b + field public static final int windowContentOverlay = 16842841; // 0x1010059 + field public static final int windowContentTransitionManager = 16843769; // 0x10103f9 + field public static final int windowContentTransitions = 16843768; // 0x10103f8 + field public static final int windowDisablePreview = 16843298; // 0x1010222 + field public static final int windowDrawsSystemBarBackgrounds = 16843856; // 0x1010450 + field public static final int windowElevation = 16843920; // 0x1010490 + field public static final int windowEnableSplitTouch = 16843543; // 0x1010317 + field public static final int windowEnterAnimation = 16842932; // 0x10100b4 + field public static final int windowEnterTransition = 16843831; // 0x1010437 + field public static final int windowExitAnimation = 16842933; // 0x10100b5 + field public static final int windowExitTransition = 16843832; // 0x1010438 + field public static final int windowFrame = 16842837; // 0x1010055 + field public static final int windowFullscreen = 16843277; // 0x101020d + field public static final int windowHideAnimation = 16842935; // 0x10100b7 + field public static final int windowIsFloating = 16842839; // 0x1010057 + field public static final int windowIsTranslucent = 16842840; // 0x1010058 + field public static final int windowMinWidthMajor = 16843606; // 0x1010356 + field public static final int windowMinWidthMinor = 16843607; // 0x1010357 + field public static final int windowNoDisplay = 16843294; // 0x101021e + field public static final int windowNoTitle = 16842838; // 0x1010056 + field public static final int windowOverscan = 16843727; // 0x10103cf + field public static final int windowReenterTransition = 16843951; // 0x10104af + field public static final int windowReturnTransition = 16843950; // 0x10104ae + field public static final int windowSharedElementEnterTransition = 16843833; // 0x1010439 + field public static final int windowSharedElementExitTransition = 16843834; // 0x101043a + field public static final int windowSharedElementReenterTransition = 16843953; // 0x10104b1 + field public static final int windowSharedElementReturnTransition = 16843952; // 0x10104b0 + field public static final int windowSharedElementsUseOverlay = 16843963; // 0x10104bb + field public static final int windowShowAnimation = 16842934; // 0x10100b6 + field public static final int windowShowWallpaper = 16843410; // 0x1010292 + field public static final int windowSoftInputMode = 16843307; // 0x101022b + field public static final int windowSwipeToDismiss = 16843763; // 0x10103f3 + field public static final int windowTitleBackgroundStyle = 16842844; // 0x101005c + field public static final int windowTitleSize = 16842842; // 0x101005a + field public static final int windowTitleStyle = 16842843; // 0x101005b + field public static final int windowTransitionBackgroundFadeDuration = 16843873; // 0x1010461 + field public static final int windowTranslucentNavigation = 16843760; // 0x10103f0 + field public static final int windowTranslucentStatus = 16843759; // 0x10103ef + field public static final int writePermission = 16842760; // 0x1010008 + field public static final int x = 16842924; // 0x10100ac + field public static final int xlargeScreens = 16843455; // 0x10102bf + field public static final int y = 16842925; // 0x10100ad + field public static final int yearListItemTextAppearance = 16843929; // 0x1010499 + field public static final int yearListSelectorColor = 16843930; // 0x101049a + field public static final int yesNoPreferenceStyle = 16842896; // 0x1010090 + field public static final int zAdjustment = 16843201; // 0x10101c1 + } + + public static final class R.bool { + ctor public R.bool(); + } + + public static final class R.color { + ctor public R.color(); + field public static final int background_dark = 17170446; // 0x106000e + field public static final int background_light = 17170447; // 0x106000f + field public static final int black = 17170444; // 0x106000c + field public static final int darker_gray = 17170432; // 0x1060000 + field public static final int holo_blue_bright = 17170459; // 0x106001b + field public static final int holo_blue_dark = 17170451; // 0x1060013 + field public static final int holo_blue_light = 17170450; // 0x1060012 + field public static final int holo_green_dark = 17170453; // 0x1060015 + field public static final int holo_green_light = 17170452; // 0x1060014 + field public static final int holo_orange_dark = 17170457; // 0x1060019 + field public static final int holo_orange_light = 17170456; // 0x1060018 + field public static final int holo_purple = 17170458; // 0x106001a + field public static final int holo_red_dark = 17170455; // 0x1060017 + field public static final int holo_red_light = 17170454; // 0x1060016 + field public static final int primary_text_dark = 17170433; // 0x1060001 + field public static final int primary_text_dark_nodisable = 17170434; // 0x1060002 + field public static final int primary_text_light = 17170435; // 0x1060003 + field public static final int primary_text_light_nodisable = 17170436; // 0x1060004 + field public static final int secondary_text_dark = 17170437; // 0x1060005 + field public static final int secondary_text_dark_nodisable = 17170438; // 0x1060006 + field public static final int secondary_text_light = 17170439; // 0x1060007 + field public static final int secondary_text_light_nodisable = 17170440; // 0x1060008 + field public static final int tab_indicator_text = 17170441; // 0x1060009 + field public static final int tertiary_text_dark = 17170448; // 0x1060010 + field public static final int tertiary_text_light = 17170449; // 0x1060011 + field public static final int transparent = 17170445; // 0x106000d + field public static final int white = 17170443; // 0x106000b + field public static final int widget_edittext_dark = 17170442; // 0x106000a + } + + public static final class R.dimen { + ctor public R.dimen(); + field public static final int app_icon_size = 17104896; // 0x1050000 + field public static final int dialog_min_width_major = 17104899; // 0x1050003 + field public static final int dialog_min_width_minor = 17104900; // 0x1050004 + field public static final int notification_large_icon_height = 17104902; // 0x1050006 + field public static final int notification_large_icon_width = 17104901; // 0x1050005 + field public static final int thumbnail_height = 17104897; // 0x1050001 + field public static final int thumbnail_width = 17104898; // 0x1050002 + } + + public static final class R.drawable { + ctor public R.drawable(); + field public static final int alert_dark_frame = 17301504; // 0x1080000 + field public static final int alert_light_frame = 17301505; // 0x1080001 + field public static final int arrow_down_float = 17301506; // 0x1080002 + field public static final int arrow_up_float = 17301507; // 0x1080003 + field public static final int bottom_bar = 17301658; // 0x108009a + field public static final int btn_default = 17301508; // 0x1080004 + field public static final int btn_default_small = 17301509; // 0x1080005 + field public static final int btn_dialog = 17301527; // 0x1080017 + field public static final int btn_dropdown = 17301510; // 0x1080006 + field public static final int btn_minus = 17301511; // 0x1080007 + field public static final int btn_plus = 17301512; // 0x1080008 + field public static final int btn_radio = 17301513; // 0x1080009 + field public static final int btn_star = 17301514; // 0x108000a + field public static final int btn_star_big_off = 17301515; // 0x108000b + field public static final int btn_star_big_on = 17301516; // 0x108000c + field public static final int button_onoff_indicator_off = 17301518; // 0x108000e + field public static final int button_onoff_indicator_on = 17301517; // 0x108000d + field public static final int checkbox_off_background = 17301519; // 0x108000f + field public static final int checkbox_on_background = 17301520; // 0x1080010 + field public static final int dark_header = 17301669; // 0x10800a5 + field public static final int dialog_frame = 17301521; // 0x1080011 + field public static final int dialog_holo_dark_frame = 17301682; // 0x10800b2 + field public static final int dialog_holo_light_frame = 17301683; // 0x10800b3 + field public static final int divider_horizontal_bright = 17301522; // 0x1080012 + field public static final int divider_horizontal_dark = 17301524; // 0x1080014 + field public static final int divider_horizontal_dim_dark = 17301525; // 0x1080015 + field public static final int divider_horizontal_textfield = 17301523; // 0x1080013 + field public static final int edit_text = 17301526; // 0x1080016 + field public static final int editbox_background = 17301528; // 0x1080018 + field public static final int editbox_background_normal = 17301529; // 0x1080019 + field public static final int editbox_dropdown_dark_frame = 17301530; // 0x108001a + field public static final int editbox_dropdown_light_frame = 17301531; // 0x108001b + field public static final int gallery_thumb = 17301532; // 0x108001c + field public static final int ic_btn_speak_now = 17301668; // 0x10800a4 + field public static final int ic_delete = 17301533; // 0x108001d + field public static final int ic_dialog_alert = 17301543; // 0x1080027 + field public static final int ic_dialog_dialer = 17301544; // 0x1080028 + field public static final int ic_dialog_email = 17301545; // 0x1080029 + field public static final int ic_dialog_info = 17301659; // 0x108009b + field public static final int ic_dialog_map = 17301546; // 0x108002a + field public static final int ic_input_add = 17301547; // 0x108002b + field public static final int ic_input_delete = 17301548; // 0x108002c + field public static final int ic_input_get = 17301549; // 0x108002d + field public static final int ic_lock_idle_alarm = 17301550; // 0x108002e + field public static final int ic_lock_idle_charging = 17301534; // 0x108001e + field public static final int ic_lock_idle_lock = 17301535; // 0x108001f + field public static final int ic_lock_idle_low_battery = 17301536; // 0x1080020 + field public static final int ic_lock_lock = 17301551; // 0x108002f + field public static final int ic_lock_power_off = 17301552; // 0x1080030 + field public static final int ic_lock_silent_mode = 17301553; // 0x1080031 + field public static final int ic_lock_silent_mode_off = 17301554; // 0x1080032 + field public static final int ic_media_ff = 17301537; // 0x1080021 + field public static final int ic_media_next = 17301538; // 0x1080022 + field public static final int ic_media_pause = 17301539; // 0x1080023 + field public static final int ic_media_play = 17301540; // 0x1080024 + field public static final int ic_media_previous = 17301541; // 0x1080025 + field public static final int ic_media_rew = 17301542; // 0x1080026 + field public static final int ic_menu_add = 17301555; // 0x1080033 + field public static final int ic_menu_agenda = 17301556; // 0x1080034 + field public static final int ic_menu_always_landscape_portrait = 17301557; // 0x1080035 + field public static final int ic_menu_call = 17301558; // 0x1080036 + field public static final int ic_menu_camera = 17301559; // 0x1080037 + field public static final int ic_menu_close_clear_cancel = 17301560; // 0x1080038 + field public static final int ic_menu_compass = 17301561; // 0x1080039 + field public static final int ic_menu_crop = 17301562; // 0x108003a + field public static final int ic_menu_day = 17301563; // 0x108003b + field public static final int ic_menu_delete = 17301564; // 0x108003c + field public static final int ic_menu_directions = 17301565; // 0x108003d + field public static final int ic_menu_edit = 17301566; // 0x108003e + field public static final int ic_menu_gallery = 17301567; // 0x108003f + field public static final int ic_menu_help = 17301568; // 0x1080040 + field public static final int ic_menu_info_details = 17301569; // 0x1080041 + field public static final int ic_menu_manage = 17301570; // 0x1080042 + field public static final int ic_menu_mapmode = 17301571; // 0x1080043 + field public static final int ic_menu_month = 17301572; // 0x1080044 + field public static final int ic_menu_more = 17301573; // 0x1080045 + field public static final int ic_menu_my_calendar = 17301574; // 0x1080046 + field public static final int ic_menu_mylocation = 17301575; // 0x1080047 + field public static final int ic_menu_myplaces = 17301576; // 0x1080048 + field public static final int ic_menu_preferences = 17301577; // 0x1080049 + field public static final int ic_menu_recent_history = 17301578; // 0x108004a + field public static final int ic_menu_report_image = 17301579; // 0x108004b + field public static final int ic_menu_revert = 17301580; // 0x108004c + field public static final int ic_menu_rotate = 17301581; // 0x108004d + field public static final int ic_menu_save = 17301582; // 0x108004e + field public static final int ic_menu_search = 17301583; // 0x108004f + field public static final int ic_menu_send = 17301584; // 0x1080050 + field public static final int ic_menu_set_as = 17301585; // 0x1080051 + field public static final int ic_menu_share = 17301586; // 0x1080052 + field public static final int ic_menu_slideshow = 17301587; // 0x1080053 + field public static final int ic_menu_sort_alphabetically = 17301660; // 0x108009c + field public static final int ic_menu_sort_by_size = 17301661; // 0x108009d + field public static final int ic_menu_today = 17301588; // 0x1080054 + field public static final int ic_menu_upload = 17301589; // 0x1080055 + field public static final int ic_menu_upload_you_tube = 17301590; // 0x1080056 + field public static final int ic_menu_view = 17301591; // 0x1080057 + field public static final int ic_menu_week = 17301592; // 0x1080058 + field public static final int ic_menu_zoom = 17301593; // 0x1080059 + field public static final int ic_notification_clear_all = 17301594; // 0x108005a + field public static final int ic_notification_overlay = 17301595; // 0x108005b + field public static final int ic_partial_secure = 17301596; // 0x108005c + field public static final int ic_popup_disk_full = 17301597; // 0x108005d + field public static final int ic_popup_reminder = 17301598; // 0x108005e + field public static final int ic_popup_sync = 17301599; // 0x108005f + field public static final int ic_search_category_default = 17301600; // 0x1080060 + field public static final int ic_secure = 17301601; // 0x1080061 + field public static final int list_selector_background = 17301602; // 0x1080062 + field public static final int menu_frame = 17301603; // 0x1080063 + field public static final int menu_full_frame = 17301604; // 0x1080064 + field public static final int menuitem_background = 17301605; // 0x1080065 + field public static final int picture_frame = 17301606; // 0x1080066 + field public static final int presence_audio_away = 17301679; // 0x10800af + field public static final int presence_audio_busy = 17301680; // 0x10800b0 + field public static final int presence_audio_online = 17301681; // 0x10800b1 + field public static final int presence_away = 17301607; // 0x1080067 + field public static final int presence_busy = 17301608; // 0x1080068 + field public static final int presence_invisible = 17301609; // 0x1080069 + field public static final int presence_offline = 17301610; // 0x108006a + field public static final int presence_online = 17301611; // 0x108006b + field public static final int presence_video_away = 17301676; // 0x10800ac + field public static final int presence_video_busy = 17301677; // 0x10800ad + field public static final int presence_video_online = 17301678; // 0x10800ae + field public static final int progress_horizontal = 17301612; // 0x108006c + field public static final int progress_indeterminate_horizontal = 17301613; // 0x108006d + field public static final int radiobutton_off_background = 17301614; // 0x108006e + field public static final int radiobutton_on_background = 17301615; // 0x108006f + field public static final int screen_background_dark = 17301656; // 0x1080098 + field public static final int screen_background_dark_transparent = 17301673; // 0x10800a9 + field public static final int screen_background_light = 17301657; // 0x1080099 + field public static final int screen_background_light_transparent = 17301674; // 0x10800aa + field public static final int spinner_background = 17301616; // 0x1080070 + field public static final int spinner_dropdown_background = 17301617; // 0x1080071 + field public static final int star_big_off = 17301619; // 0x1080073 + field public static final int star_big_on = 17301618; // 0x1080072 + field public static final int star_off = 17301621; // 0x1080075 + field public static final int star_on = 17301620; // 0x1080074 + field public static final int stat_notify_call_mute = 17301622; // 0x1080076 + field public static final int stat_notify_chat = 17301623; // 0x1080077 + field public static final int stat_notify_error = 17301624; // 0x1080078 + field public static final int stat_notify_missed_call = 17301631; // 0x108007f + field public static final int stat_notify_more = 17301625; // 0x1080079 + field public static final int stat_notify_sdcard = 17301626; // 0x108007a + field public static final int stat_notify_sdcard_prepare = 17301675; // 0x10800ab + field public static final int stat_notify_sdcard_usb = 17301627; // 0x108007b + field public static final int stat_notify_sync = 17301628; // 0x108007c + field public static final int stat_notify_sync_noanim = 17301629; // 0x108007d + field public static final int stat_notify_voicemail = 17301630; // 0x108007e + field public static final int stat_sys_data_bluetooth = 17301632; // 0x1080080 + field public static final int stat_sys_download = 17301633; // 0x1080081 + field public static final int stat_sys_download_done = 17301634; // 0x1080082 + field public static final int stat_sys_headset = 17301635; // 0x1080083 + field public static final deprecated int stat_sys_phone_call = 17301636; // 0x1080084 + field public static final deprecated int stat_sys_phone_call_forward = 17301637; // 0x1080085 + field public static final deprecated int stat_sys_phone_call_on_hold = 17301638; // 0x1080086 + field public static final int stat_sys_speakerphone = 17301639; // 0x1080087 + field public static final int stat_sys_upload = 17301640; // 0x1080088 + field public static final int stat_sys_upload_done = 17301641; // 0x1080089 + field public static final deprecated int stat_sys_vp_phone_call = 17301671; // 0x10800a7 + field public static final deprecated int stat_sys_vp_phone_call_on_hold = 17301672; // 0x10800a8 + field public static final int stat_sys_warning = 17301642; // 0x108008a + field public static final int status_bar_item_app_background = 17301643; // 0x108008b + field public static final int status_bar_item_background = 17301644; // 0x108008c + field public static final int sym_action_call = 17301645; // 0x108008d + field public static final int sym_action_chat = 17301646; // 0x108008e + field public static final int sym_action_email = 17301647; // 0x108008f + field public static final int sym_call_incoming = 17301648; // 0x1080090 + field public static final int sym_call_missed = 17301649; // 0x1080091 + field public static final int sym_call_outgoing = 17301650; // 0x1080092 + field public static final int sym_contact_card = 17301652; // 0x1080094 + field public static final int sym_def_app_icon = 17301651; // 0x1080093 + field public static final int title_bar = 17301653; // 0x1080095 + field public static final int title_bar_tall = 17301670; // 0x10800a6 + field public static final int toast_frame = 17301654; // 0x1080096 + field public static final int zoom_plate = 17301655; // 0x1080097 + } + + public static final class R.fraction { + ctor public R.fraction(); + } + + public static final class R.id { + ctor public R.id(); + field public static final int addToDictionary = 16908330; // 0x102002a + field public static final int background = 16908288; // 0x1020000 + field public static final int button1 = 16908313; // 0x1020019 + field public static final int button2 = 16908314; // 0x102001a + field public static final int button3 = 16908315; // 0x102001b + field public static final int candidatesArea = 16908317; // 0x102001d + field public static final int checkbox = 16908289; // 0x1020001 + field public static final int closeButton = 16908327; // 0x1020027 + field public static final int content = 16908290; // 0x1020002 + field public static final int copy = 16908321; // 0x1020021 + field public static final int copyUrl = 16908323; // 0x1020023 + field public static final int custom = 16908331; // 0x102002b + field public static final int cut = 16908320; // 0x1020020 + field public static final int edit = 16908291; // 0x1020003 + field public static final int empty = 16908292; // 0x1020004 + field public static final int extractArea = 16908316; // 0x102001c + field public static final int hint = 16908293; // 0x1020005 + field public static final int home = 16908332; // 0x102002c + field public static final int icon = 16908294; // 0x1020006 + field public static final int icon1 = 16908295; // 0x1020007 + field public static final int icon2 = 16908296; // 0x1020008 + field public static final int input = 16908297; // 0x1020009 + field public static final int inputArea = 16908318; // 0x102001e + field public static final int inputExtractEditText = 16908325; // 0x1020025 + field public static final int keyboardView = 16908326; // 0x1020026 + field public static final int list = 16908298; // 0x102000a + field public static final int mask = 16908334; // 0x102002e + field public static final int message = 16908299; // 0x102000b + field public static final int navigationBarBackground = 16908336; // 0x1020030 + field public static final int paste = 16908322; // 0x1020022 + field public static final int primary = 16908300; // 0x102000c + field public static final int progress = 16908301; // 0x102000d + field public static final int secondaryProgress = 16908303; // 0x102000f + field public static final int selectAll = 16908319; // 0x102001f + field public static final int selectTextMode = 16908333; // 0x102002d + field public static final int selectedIcon = 16908302; // 0x102000e + field public static final int startSelectingText = 16908328; // 0x1020028 + field public static final int statusBarBackground = 16908335; // 0x102002f + field public static final int stopSelectingText = 16908329; // 0x1020029 + field public static final int summary = 16908304; // 0x1020010 + field public static final int switchInputMethod = 16908324; // 0x1020024 + field public static final int tabcontent = 16908305; // 0x1020011 + field public static final int tabhost = 16908306; // 0x1020012 + field public static final int tabs = 16908307; // 0x1020013 + field public static final int text1 = 16908308; // 0x1020014 + field public static final int text2 = 16908309; // 0x1020015 + field public static final int title = 16908310; // 0x1020016 + field public static final int toggle = 16908311; // 0x1020017 + field public static final int widget_frame = 16908312; // 0x1020018 + } + + public static final class R.integer { + ctor public R.integer(); + field public static final int config_longAnimTime = 17694722; // 0x10e0002 + field public static final int config_mediumAnimTime = 17694721; // 0x10e0001 + field public static final int config_shortAnimTime = 17694720; // 0x10e0000 + field public static final int status_bar_notification_info_maxnum = 17694723; // 0x10e0003 + } + + public static final class R.interpolator { + ctor public R.interpolator(); + field public static final int accelerate_cubic = 17563650; // 0x10c0002 + field public static final int accelerate_decelerate = 17563654; // 0x10c0006 + field public static final int accelerate_quad = 17563648; // 0x10c0000 + field public static final int accelerate_quint = 17563652; // 0x10c0004 + field public static final int anticipate = 17563655; // 0x10c0007 + field public static final int anticipate_overshoot = 17563657; // 0x10c0009 + field public static final int bounce = 17563658; // 0x10c000a + field public static final int cycle = 17563660; // 0x10c000c + field public static final int decelerate_cubic = 17563651; // 0x10c0003 + field public static final int decelerate_quad = 17563649; // 0x10c0001 + field public static final int decelerate_quint = 17563653; // 0x10c0005 + field public static final int fast_out_linear_in = 17563663; // 0x10c000f + field public static final int fast_out_slow_in = 17563661; // 0x10c000d + field public static final int linear = 17563659; // 0x10c000b + field public static final int linear_out_slow_in = 17563662; // 0x10c000e + field public static final int overshoot = 17563656; // 0x10c0008 + } + + public static final class R.layout { + ctor public R.layout(); + field public static final int activity_list_item = 17367040; // 0x1090000 + field public static final int browser_link_context_header = 17367054; // 0x109000e + field public static final int expandable_list_content = 17367041; // 0x1090001 + field public static final int list_content = 17367060; // 0x1090014 + field public static final int preference_category = 17367042; // 0x1090002 + field public static final int select_dialog_item = 17367057; // 0x1090011 + field public static final int select_dialog_multichoice = 17367059; // 0x1090013 + field public static final int select_dialog_singlechoice = 17367058; // 0x1090012 + field public static final int simple_dropdown_item_1line = 17367050; // 0x109000a + field public static final int simple_expandable_list_item_1 = 17367046; // 0x1090006 + field public static final int simple_expandable_list_item_2 = 17367047; // 0x1090007 + field public static final int simple_gallery_item = 17367051; // 0x109000b + field public static final int simple_list_item_1 = 17367043; // 0x1090003 + field public static final int simple_list_item_2 = 17367044; // 0x1090004 + field public static final int simple_list_item_activated_1 = 17367062; // 0x1090016 + field public static final int simple_list_item_activated_2 = 17367063; // 0x1090017 + field public static final int simple_list_item_checked = 17367045; // 0x1090005 + field public static final int simple_list_item_multiple_choice = 17367056; // 0x1090010 + field public static final int simple_list_item_single_choice = 17367055; // 0x109000f + field public static final int simple_selectable_list_item = 17367061; // 0x1090015 + field public static final int simple_spinner_dropdown_item = 17367049; // 0x1090009 + field public static final int simple_spinner_item = 17367048; // 0x1090008 + field public static final int test_list_item = 17367052; // 0x109000c + field public static final int two_line_list_item = 17367053; // 0x109000d + } + + public static final class R.menu { + ctor public R.menu(); + } + + public static final class R.mipmap { + ctor public R.mipmap(); + field public static final int sym_def_app_icon = 17629184; // 0x10d0000 + } + + public static final class R.plurals { + ctor public R.plurals(); + } + + public static final class R.raw { + ctor public R.raw(); + field public static final int loaderror = 17825792; // 0x1100000 + field public static final int nodomain = 17825793; // 0x1100001 + } + + public static final class R.string { + ctor public R.string(); + field public static final int VideoView_error_button = 17039376; // 0x1040010 + field public static final int VideoView_error_text_invalid_progressive_playback = 17039381; // 0x1040015 + field public static final int VideoView_error_text_unknown = 17039377; // 0x1040011 + field public static final int VideoView_error_title = 17039378; // 0x1040012 + field public static final int cancel = 17039360; // 0x1040000 + field public static final int copy = 17039361; // 0x1040001 + field public static final int copyUrl = 17039362; // 0x1040002 + field public static final int cut = 17039363; // 0x1040003 + field public static final int defaultMsisdnAlphaTag = 17039365; // 0x1040005 + field public static final int defaultVoiceMailAlphaTag = 17039364; // 0x1040004 + field public static final int dialog_alert_title = 17039380; // 0x1040014 + field public static final int emptyPhoneNumber = 17039366; // 0x1040006 + field public static final int httpErrorBadUrl = 17039367; // 0x1040007 + field public static final int httpErrorUnsupportedScheme = 17039368; // 0x1040008 + field public static final int no = 17039369; // 0x1040009 + field public static final int ok = 17039370; // 0x104000a + field public static final int paste = 17039371; // 0x104000b + field public static final int search_go = 17039372; // 0x104000c + field public static final int selectAll = 17039373; // 0x104000d + field public static final int selectTextMode = 17039382; // 0x1040016 + field public static final int status_bar_notification_info_overflow = 17039383; // 0x1040017 + field public static final int unknownName = 17039374; // 0x104000e + field public static final int untitled = 17039375; // 0x104000f + field public static final int yes = 17039379; // 0x1040013 + } + + public static final class R.style { + ctor public R.style(); + field public static final int Animation = 16973824; // 0x1030000 + field public static final int Animation_Activity = 16973825; // 0x1030001 + field public static final int Animation_Dialog = 16973826; // 0x1030002 + field public static final int Animation_InputMethod = 16973910; // 0x1030056 + field public static final int Animation_Toast = 16973828; // 0x1030004 + field public static final int Animation_Translucent = 16973827; // 0x1030003 + field public static final int DeviceDefault_ButtonBar = 16974287; // 0x10301cf + field public static final int DeviceDefault_ButtonBar_AlertDialog = 16974288; // 0x10301d0 + field public static final int DeviceDefault_Light_ButtonBar = 16974290; // 0x10301d2 + field public static final int DeviceDefault_Light_ButtonBar_AlertDialog = 16974291; // 0x10301d3 + field public static final int DeviceDefault_Light_SegmentedButton = 16974292; // 0x10301d4 + field public static final int DeviceDefault_SegmentedButton = 16974289; // 0x10301d1 + field public static final int Holo_ButtonBar = 16974053; // 0x10300e5 + field public static final int Holo_ButtonBar_AlertDialog = 16974055; // 0x10300e7 + field public static final int Holo_Light_ButtonBar = 16974054; // 0x10300e6 + field public static final int Holo_Light_ButtonBar_AlertDialog = 16974056; // 0x10300e8 + field public static final int Holo_Light_SegmentedButton = 16974058; // 0x10300ea + field public static final int Holo_SegmentedButton = 16974057; // 0x10300e9 + field public static final int MediaButton = 16973879; // 0x1030037 + field public static final int MediaButton_Ffwd = 16973883; // 0x103003b + field public static final int MediaButton_Next = 16973881; // 0x1030039 + field public static final int MediaButton_Pause = 16973885; // 0x103003d + field public static final int MediaButton_Play = 16973882; // 0x103003a + field public static final int MediaButton_Previous = 16973880; // 0x1030038 + field public static final int MediaButton_Rew = 16973884; // 0x103003c + field public static final int TextAppearance = 16973886; // 0x103003e + field public static final int TextAppearance_DeviceDefault = 16974253; // 0x10301ad + field public static final int TextAppearance_DeviceDefault_DialogWindowTitle = 16974264; // 0x10301b8 + field public static final int TextAppearance_DeviceDefault_Inverse = 16974254; // 0x10301ae + field public static final int TextAppearance_DeviceDefault_Large = 16974255; // 0x10301af + field public static final int TextAppearance_DeviceDefault_Large_Inverse = 16974256; // 0x10301b0 + field public static final int TextAppearance_DeviceDefault_Medium = 16974257; // 0x10301b1 + field public static final int TextAppearance_DeviceDefault_Medium_Inverse = 16974258; // 0x10301b2 + field public static final int TextAppearance_DeviceDefault_SearchResult_Subtitle = 16974262; // 0x10301b6 + field public static final int TextAppearance_DeviceDefault_SearchResult_Title = 16974261; // 0x10301b5 + field public static final int TextAppearance_DeviceDefault_Small = 16974259; // 0x10301b3 + field public static final int TextAppearance_DeviceDefault_Small_Inverse = 16974260; // 0x10301b4 + field public static final int TextAppearance_DeviceDefault_Widget = 16974265; // 0x10301b9 + field public static final int TextAppearance_DeviceDefault_Widget_ActionBar_Menu = 16974286; // 0x10301ce + field public static final int TextAppearance_DeviceDefault_Widget_ActionBar_Subtitle = 16974279; // 0x10301c7 + field public static final deprecated int TextAppearance_DeviceDefault_Widget_ActionBar_Subtitle_Inverse = 16974283; // 0x10301cb + field public static final int TextAppearance_DeviceDefault_Widget_ActionBar_Title = 16974278; // 0x10301c6 + field public static final deprecated int TextAppearance_DeviceDefault_Widget_ActionBar_Title_Inverse = 16974282; // 0x10301ca + field public static final int TextAppearance_DeviceDefault_Widget_ActionMode_Subtitle = 16974281; // 0x10301c9 + field public static final deprecated int TextAppearance_DeviceDefault_Widget_ActionMode_Subtitle_Inverse = 16974285; // 0x10301cd + field public static final int TextAppearance_DeviceDefault_Widget_ActionMode_Title = 16974280; // 0x10301c8 + field public static final deprecated int TextAppearance_DeviceDefault_Widget_ActionMode_Title_Inverse = 16974284; // 0x10301cc + field public static final int TextAppearance_DeviceDefault_Widget_Button = 16974266; // 0x10301ba + field public static final int TextAppearance_DeviceDefault_Widget_DropDownHint = 16974271; // 0x10301bf + field public static final int TextAppearance_DeviceDefault_Widget_DropDownItem = 16974272; // 0x10301c0 + field public static final int TextAppearance_DeviceDefault_Widget_EditText = 16974274; // 0x10301c2 + field public static final int TextAppearance_DeviceDefault_Widget_IconMenu_Item = 16974267; // 0x10301bb + field public static final int TextAppearance_DeviceDefault_Widget_PopupMenu = 16974275; // 0x10301c3 + field public static final int TextAppearance_DeviceDefault_Widget_PopupMenu_Large = 16974276; // 0x10301c4 + field public static final int TextAppearance_DeviceDefault_Widget_PopupMenu_Small = 16974277; // 0x10301c5 + field public static final int TextAppearance_DeviceDefault_Widget_TabWidget = 16974268; // 0x10301bc + field public static final int TextAppearance_DeviceDefault_Widget_TextView = 16974269; // 0x10301bd + field public static final int TextAppearance_DeviceDefault_Widget_TextView_PopupMenu = 16974270; // 0x10301be + field public static final int TextAppearance_DeviceDefault_Widget_TextView_SpinnerItem = 16974273; // 0x10301c1 + field public static final int TextAppearance_DeviceDefault_WindowTitle = 16974263; // 0x10301b7 + field public static final int TextAppearance_DialogWindowTitle = 16973889; // 0x1030041 + field public static final int TextAppearance_Holo = 16974075; // 0x10300fb + field public static final int TextAppearance_Holo_DialogWindowTitle = 16974103; // 0x1030117 + field public static final int TextAppearance_Holo_Inverse = 16974076; // 0x10300fc + field public static final int TextAppearance_Holo_Large = 16974077; // 0x10300fd + field public static final int TextAppearance_Holo_Large_Inverse = 16974078; // 0x10300fe + field public static final int TextAppearance_Holo_Medium = 16974079; // 0x10300ff + field public static final int TextAppearance_Holo_Medium_Inverse = 16974080; // 0x1030100 + field public static final int TextAppearance_Holo_SearchResult_Subtitle = 16974084; // 0x1030104 + field public static final int TextAppearance_Holo_SearchResult_Title = 16974083; // 0x1030103 + field public static final int TextAppearance_Holo_Small = 16974081; // 0x1030101 + field public static final int TextAppearance_Holo_Small_Inverse = 16974082; // 0x1030102 + field public static final int TextAppearance_Holo_Widget = 16974085; // 0x1030105 + field public static final int TextAppearance_Holo_Widget_ActionBar_Menu = 16974112; // 0x1030120 + field public static final int TextAppearance_Holo_Widget_ActionBar_Subtitle = 16974099; // 0x1030113 + field public static final int TextAppearance_Holo_Widget_ActionBar_Subtitle_Inverse = 16974109; // 0x103011d + field public static final int TextAppearance_Holo_Widget_ActionBar_Title = 16974098; // 0x1030112 + field public static final int TextAppearance_Holo_Widget_ActionBar_Title_Inverse = 16974108; // 0x103011c + field public static final int TextAppearance_Holo_Widget_ActionMode_Subtitle = 16974101; // 0x1030115 + field public static final int TextAppearance_Holo_Widget_ActionMode_Subtitle_Inverse = 16974111; // 0x103011f + field public static final int TextAppearance_Holo_Widget_ActionMode_Title = 16974100; // 0x1030114 + field public static final int TextAppearance_Holo_Widget_ActionMode_Title_Inverse = 16974110; // 0x103011e + field public static final int TextAppearance_Holo_Widget_Button = 16974086; // 0x1030106 + field public static final int TextAppearance_Holo_Widget_DropDownHint = 16974091; // 0x103010b + field public static final int TextAppearance_Holo_Widget_DropDownItem = 16974092; // 0x103010c + field public static final int TextAppearance_Holo_Widget_EditText = 16974094; // 0x103010e + field public static final int TextAppearance_Holo_Widget_IconMenu_Item = 16974087; // 0x1030107 + field public static final int TextAppearance_Holo_Widget_PopupMenu = 16974095; // 0x103010f + field public static final int TextAppearance_Holo_Widget_PopupMenu_Large = 16974096; // 0x1030110 + field public static final int TextAppearance_Holo_Widget_PopupMenu_Small = 16974097; // 0x1030111 + field public static final int TextAppearance_Holo_Widget_TabWidget = 16974088; // 0x1030108 + field public static final int TextAppearance_Holo_Widget_TextView = 16974089; // 0x1030109 + field public static final int TextAppearance_Holo_Widget_TextView_PopupMenu = 16974090; // 0x103010a + field public static final int TextAppearance_Holo_Widget_TextView_SpinnerItem = 16974093; // 0x103010d + field public static final int TextAppearance_Holo_WindowTitle = 16974102; // 0x1030116 + field public static final int TextAppearance_Inverse = 16973887; // 0x103003f + field public static final int TextAppearance_Large = 16973890; // 0x1030042 + field public static final int TextAppearance_Large_Inverse = 16973891; // 0x1030043 + field public static final int TextAppearance_Material = 16974317; // 0x10301ed + field public static final int TextAppearance_Material_Body1 = 16974320; // 0x10301f0 + field public static final int TextAppearance_Material_Body2 = 16974319; // 0x10301ef + field public static final int TextAppearance_Material_Button = 16974318; // 0x10301ee + field public static final int TextAppearance_Material_Caption = 16974321; // 0x10301f1 + field public static final int TextAppearance_Material_DialogWindowTitle = 16974322; // 0x10301f2 + field public static final int TextAppearance_Material_Display1 = 16974326; // 0x10301f6 + field public static final int TextAppearance_Material_Display2 = 16974325; // 0x10301f5 + field public static final int TextAppearance_Material_Display3 = 16974324; // 0x10301f4 + field public static final int TextAppearance_Material_Display4 = 16974323; // 0x10301f3 + field public static final int TextAppearance_Material_Headline = 16974327; // 0x10301f7 + field public static final int TextAppearance_Material_Inverse = 16974328; // 0x10301f8 + field public static final int TextAppearance_Material_Large = 16974329; // 0x10301f9 + field public static final int TextAppearance_Material_Large_Inverse = 16974330; // 0x10301fa + field public static final int TextAppearance_Material_Medium = 16974331; // 0x10301fb + field public static final int TextAppearance_Material_Medium_Inverse = 16974332; // 0x10301fc + field public static final int TextAppearance_Material_Menu = 16974333; // 0x10301fd + field public static final int TextAppearance_Material_Notification = 16974334; // 0x10301fe + field public static final int TextAppearance_Material_Notification_Emphasis = 16974335; // 0x10301ff + field public static final int TextAppearance_Material_Notification_Info = 16974336; // 0x1030200 + field public static final int TextAppearance_Material_Notification_Line2 = 16974337; // 0x1030201 + field public static final int TextAppearance_Material_Notification_Time = 16974338; // 0x1030202 + field public static final int TextAppearance_Material_Notification_Title = 16974339; // 0x1030203 + field public static final int TextAppearance_Material_SearchResult_Subtitle = 16974340; // 0x1030204 + field public static final int TextAppearance_Material_SearchResult_Title = 16974341; // 0x1030205 + field public static final int TextAppearance_Material_Small = 16974342; // 0x1030206 + field public static final int TextAppearance_Material_Small_Inverse = 16974343; // 0x1030207 + field public static final int TextAppearance_Material_Subhead = 16974344; // 0x1030208 + field public static final int TextAppearance_Material_Title = 16974345; // 0x1030209 + field public static final int TextAppearance_Material_Widget = 16974347; // 0x103020b + field public static final int TextAppearance_Material_Widget_ActionBar_Menu = 16974348; // 0x103020c + field public static final int TextAppearance_Material_Widget_ActionBar_Subtitle = 16974349; // 0x103020d + field public static final int TextAppearance_Material_Widget_ActionBar_Subtitle_Inverse = 16974350; // 0x103020e + field public static final int TextAppearance_Material_Widget_ActionBar_Title = 16974351; // 0x103020f + field public static final int TextAppearance_Material_Widget_ActionBar_Title_Inverse = 16974352; // 0x1030210 + field public static final int TextAppearance_Material_Widget_ActionMode_Subtitle = 16974353; // 0x1030211 + field public static final int TextAppearance_Material_Widget_ActionMode_Subtitle_Inverse = 16974354; // 0x1030212 + field public static final int TextAppearance_Material_Widget_ActionMode_Title = 16974355; // 0x1030213 + field public static final int TextAppearance_Material_Widget_ActionMode_Title_Inverse = 16974356; // 0x1030214 + field public static final int TextAppearance_Material_Widget_Button = 16974357; // 0x1030215 + field public static final int TextAppearance_Material_Widget_DropDownHint = 16974358; // 0x1030216 + field public static final int TextAppearance_Material_Widget_DropDownItem = 16974359; // 0x1030217 + field public static final int TextAppearance_Material_Widget_EditText = 16974360; // 0x1030218 + field public static final int TextAppearance_Material_Widget_IconMenu_Item = 16974361; // 0x1030219 + field public static final int TextAppearance_Material_Widget_PopupMenu = 16974362; // 0x103021a + field public static final int TextAppearance_Material_Widget_PopupMenu_Large = 16974363; // 0x103021b + field public static final int TextAppearance_Material_Widget_PopupMenu_Small = 16974364; // 0x103021c + field public static final int TextAppearance_Material_Widget_TabWidget = 16974365; // 0x103021d + field public static final int TextAppearance_Material_Widget_TextView = 16974366; // 0x103021e + field public static final int TextAppearance_Material_Widget_TextView_PopupMenu = 16974367; // 0x103021f + field public static final int TextAppearance_Material_Widget_TextView_SpinnerItem = 16974368; // 0x1030220 + field public static final int TextAppearance_Material_Widget_Toolbar_Subtitle = 16974369; // 0x1030221 + field public static final int TextAppearance_Material_Widget_Toolbar_Title = 16974370; // 0x1030222 + field public static final int TextAppearance_Material_WindowTitle = 16974346; // 0x103020a + field public static final int TextAppearance_Medium = 16973892; // 0x1030044 + field public static final int TextAppearance_Medium_Inverse = 16973893; // 0x1030045 + field public static final int TextAppearance_Small = 16973894; // 0x1030046 + field public static final int TextAppearance_Small_Inverse = 16973895; // 0x1030047 + field public static final int TextAppearance_StatusBar_EventContent = 16973927; // 0x1030067 + field public static final int TextAppearance_StatusBar_EventContent_Title = 16973928; // 0x1030068 + field public static final int TextAppearance_StatusBar_Icon = 16973926; // 0x1030066 + field public static final int TextAppearance_StatusBar_Title = 16973925; // 0x1030065 + field public static final int TextAppearance_SuggestionHighlight = 16974104; // 0x1030118 + field public static final int TextAppearance_Theme = 16973888; // 0x1030040 + field public static final int TextAppearance_Theme_Dialog = 16973896; // 0x1030048 + field public static final int TextAppearance_Widget = 16973897; // 0x1030049 + field public static final int TextAppearance_Widget_Button = 16973898; // 0x103004a + field public static final int TextAppearance_Widget_DropDownHint = 16973904; // 0x1030050 + field public static final int TextAppearance_Widget_DropDownItem = 16973905; // 0x1030051 + field public static final int TextAppearance_Widget_EditText = 16973900; // 0x103004c + field public static final int TextAppearance_Widget_IconMenu_Item = 16973899; // 0x103004b + field public static final int TextAppearance_Widget_PopupMenu_Large = 16973952; // 0x1030080 + field public static final int TextAppearance_Widget_PopupMenu_Small = 16973953; // 0x1030081 + field public static final int TextAppearance_Widget_TabWidget = 16973901; // 0x103004d + field public static final int TextAppearance_Widget_TextView = 16973902; // 0x103004e + field public static final int TextAppearance_Widget_TextView_PopupMenu = 16973903; // 0x103004f + field public static final int TextAppearance_Widget_TextView_SpinnerItem = 16973906; // 0x1030052 + field public static final int TextAppearance_WindowTitle = 16973907; // 0x1030053 + field public static final int Theme = 16973829; // 0x1030005 + field public static final int ThemeOverlay = 16974407; // 0x1030247 + field public static final int ThemeOverlay_Material = 16974408; // 0x1030248 + field public static final int ThemeOverlay_Material_ActionBar = 16974409; // 0x1030249 + field public static final int ThemeOverlay_Material_Dark = 16974411; // 0x103024b + field public static final int ThemeOverlay_Material_Dark_ActionBar = 16974412; // 0x103024c + field public static final int ThemeOverlay_Material_Light = 16974410; // 0x103024a + field public static final int Theme_Black = 16973832; // 0x1030008 + field public static final int Theme_Black_NoTitleBar = 16973833; // 0x1030009 + field public static final int Theme_Black_NoTitleBar_Fullscreen = 16973834; // 0x103000a + field public static final int Theme_DeviceDefault = 16974120; // 0x1030128 + field public static final int Theme_DeviceDefault_Dialog = 16974126; // 0x103012e + field public static final int Theme_DeviceDefault_DialogWhenLarge = 16974134; // 0x1030136 + field public static final int Theme_DeviceDefault_DialogWhenLarge_NoActionBar = 16974135; // 0x1030137 + field public static final int Theme_DeviceDefault_Dialog_Alert = 16974545; // 0x10302d1 + field public static final int Theme_DeviceDefault_Dialog_MinWidth = 16974127; // 0x103012f + field public static final int Theme_DeviceDefault_Dialog_NoActionBar = 16974128; // 0x1030130 + field public static final int Theme_DeviceDefault_Dialog_NoActionBar_MinWidth = 16974129; // 0x1030131 + field public static final int Theme_DeviceDefault_InputMethod = 16974142; // 0x103013e + field public static final int Theme_DeviceDefault_Light = 16974123; // 0x103012b + field public static final int Theme_DeviceDefault_Light_DarkActionBar = 16974143; // 0x103013f + field public static final int Theme_DeviceDefault_Light_Dialog = 16974130; // 0x1030132 + field public static final int Theme_DeviceDefault_Light_DialogWhenLarge = 16974136; // 0x1030138 + field public static final int Theme_DeviceDefault_Light_DialogWhenLarge_NoActionBar = 16974137; // 0x1030139 + field public static final int Theme_DeviceDefault_Light_Dialog_Alert = 16974546; // 0x10302d2 + field public static final int Theme_DeviceDefault_Light_Dialog_MinWidth = 16974131; // 0x1030133 + field public static final int Theme_DeviceDefault_Light_Dialog_NoActionBar = 16974132; // 0x1030134 + field public static final int Theme_DeviceDefault_Light_Dialog_NoActionBar_MinWidth = 16974133; // 0x1030135 + field public static final int Theme_DeviceDefault_Light_NoActionBar = 16974124; // 0x103012c + field public static final int Theme_DeviceDefault_Light_NoActionBar_Fullscreen = 16974125; // 0x103012d + field public static final int Theme_DeviceDefault_Light_NoActionBar_Overscan = 16974304; // 0x10301e0 + field public static final int Theme_DeviceDefault_Light_NoActionBar_TranslucentDecor = 16974308; // 0x10301e4 + field public static final int Theme_DeviceDefault_Light_Panel = 16974139; // 0x103013b + field public static final int Theme_DeviceDefault_NoActionBar = 16974121; // 0x1030129 + field public static final int Theme_DeviceDefault_NoActionBar_Fullscreen = 16974122; // 0x103012a + field public static final int Theme_DeviceDefault_NoActionBar_Overscan = 16974303; // 0x10301df + field public static final int Theme_DeviceDefault_NoActionBar_TranslucentDecor = 16974307; // 0x10301e3 + field public static final int Theme_DeviceDefault_Panel = 16974138; // 0x103013a + field public static final int Theme_DeviceDefault_Settings = 16974371; // 0x1030223 + field public static final int Theme_DeviceDefault_Wallpaper = 16974140; // 0x103013c + field public static final int Theme_DeviceDefault_Wallpaper_NoTitleBar = 16974141; // 0x103013d + field public static final int Theme_Dialog = 16973835; // 0x103000b + field public static final int Theme_Holo = 16973931; // 0x103006b + field public static final int Theme_Holo_Dialog = 16973935; // 0x103006f + field public static final int Theme_Holo_DialogWhenLarge = 16973943; // 0x1030077 + field public static final int Theme_Holo_DialogWhenLarge_NoActionBar = 16973944; // 0x1030078 + field public static final int Theme_Holo_Dialog_MinWidth = 16973936; // 0x1030070 + field public static final int Theme_Holo_Dialog_NoActionBar = 16973937; // 0x1030071 + field public static final int Theme_Holo_Dialog_NoActionBar_MinWidth = 16973938; // 0x1030072 + field public static final int Theme_Holo_InputMethod = 16973951; // 0x103007f + field public static final int Theme_Holo_Light = 16973934; // 0x103006e + field public static final int Theme_Holo_Light_DarkActionBar = 16974105; // 0x1030119 + field public static final int Theme_Holo_Light_Dialog = 16973939; // 0x1030073 + field public static final int Theme_Holo_Light_DialogWhenLarge = 16973945; // 0x1030079 + field public static final int Theme_Holo_Light_DialogWhenLarge_NoActionBar = 16973946; // 0x103007a + field public static final int Theme_Holo_Light_Dialog_MinWidth = 16973940; // 0x1030074 + field public static final int Theme_Holo_Light_Dialog_NoActionBar = 16973941; // 0x1030075 + field public static final int Theme_Holo_Light_Dialog_NoActionBar_MinWidth = 16973942; // 0x1030076 + field public static final int Theme_Holo_Light_NoActionBar = 16974064; // 0x10300f0 + field public static final int Theme_Holo_Light_NoActionBar_Fullscreen = 16974065; // 0x10300f1 + field public static final int Theme_Holo_Light_NoActionBar_Overscan = 16974302; // 0x10301de + field public static final int Theme_Holo_Light_NoActionBar_TranslucentDecor = 16974306; // 0x10301e2 + field public static final int Theme_Holo_Light_Panel = 16973948; // 0x103007c + field public static final int Theme_Holo_NoActionBar = 16973932; // 0x103006c + field public static final int Theme_Holo_NoActionBar_Fullscreen = 16973933; // 0x103006d + field public static final int Theme_Holo_NoActionBar_Overscan = 16974301; // 0x10301dd + field public static final int Theme_Holo_NoActionBar_TranslucentDecor = 16974305; // 0x10301e1 + field public static final int Theme_Holo_Panel = 16973947; // 0x103007b + field public static final int Theme_Holo_Wallpaper = 16973949; // 0x103007d + field public static final int Theme_Holo_Wallpaper_NoTitleBar = 16973950; // 0x103007e + field public static final int Theme_InputMethod = 16973908; // 0x1030054 + field public static final int Theme_Leanback_FormWizard = 16974544; // 0x10302d0 + field public static final int Theme_Light = 16973836; // 0x103000c + field public static final int Theme_Light_NoTitleBar = 16973837; // 0x103000d + field public static final int Theme_Light_NoTitleBar_Fullscreen = 16973838; // 0x103000e + field public static final int Theme_Light_Panel = 16973914; // 0x103005a + field public static final int Theme_Light_WallpaperSettings = 16973922; // 0x1030062 + field public static final int Theme_Material = 16974372; // 0x1030224 + field public static final int Theme_Material_Dialog = 16974373; // 0x1030225 + field public static final int Theme_Material_DialogWhenLarge = 16974379; // 0x103022b + field public static final int Theme_Material_DialogWhenLarge_NoActionBar = 16974380; // 0x103022c + field public static final int Theme_Material_Dialog_Alert = 16974374; // 0x1030226 + field public static final int Theme_Material_Dialog_MinWidth = 16974375; // 0x1030227 + field public static final int Theme_Material_Dialog_NoActionBar = 16974376; // 0x1030228 + field public static final int Theme_Material_Dialog_NoActionBar_MinWidth = 16974377; // 0x1030229 + field public static final int Theme_Material_Dialog_Presentation = 16974378; // 0x103022a + field public static final int Theme_Material_InputMethod = 16974381; // 0x103022d + field public static final int Theme_Material_Light = 16974391; // 0x1030237 + field public static final int Theme_Material_Light_DarkActionBar = 16974392; // 0x1030238 + field public static final int Theme_Material_Light_Dialog = 16974393; // 0x1030239 + field public static final int Theme_Material_Light_DialogWhenLarge = 16974399; // 0x103023f + field public static final int Theme_Material_Light_DialogWhenLarge_NoActionBar = 16974400; // 0x1030240 + field public static final int Theme_Material_Light_Dialog_Alert = 16974394; // 0x103023a + field public static final int Theme_Material_Light_Dialog_MinWidth = 16974395; // 0x103023b + field public static final int Theme_Material_Light_Dialog_NoActionBar = 16974396; // 0x103023c + field public static final int Theme_Material_Light_Dialog_NoActionBar_MinWidth = 16974397; // 0x103023d + field public static final int Theme_Material_Light_Dialog_Presentation = 16974398; // 0x103023e + field public static final int Theme_Material_Light_NoActionBar = 16974401; // 0x1030241 + field public static final int Theme_Material_Light_NoActionBar_Fullscreen = 16974402; // 0x1030242 + field public static final int Theme_Material_Light_NoActionBar_Overscan = 16974403; // 0x1030243 + field public static final int Theme_Material_Light_NoActionBar_TranslucentDecor = 16974404; // 0x1030244 + field public static final int Theme_Material_Light_Panel = 16974405; // 0x1030245 + field public static final int Theme_Material_Light_Voice = 16974406; // 0x1030246 + field public static final int Theme_Material_NoActionBar = 16974382; // 0x103022e + field public static final int Theme_Material_NoActionBar_Fullscreen = 16974383; // 0x103022f + field public static final int Theme_Material_NoActionBar_Overscan = 16974384; // 0x1030230 + field public static final int Theme_Material_NoActionBar_TranslucentDecor = 16974385; // 0x1030231 + field public static final int Theme_Material_Panel = 16974386; // 0x1030232 + field public static final int Theme_Material_Settings = 16974387; // 0x1030233 + field public static final int Theme_Material_Voice = 16974388; // 0x1030234 + field public static final int Theme_Material_Wallpaper = 16974389; // 0x1030235 + field public static final int Theme_Material_Wallpaper_NoTitleBar = 16974390; // 0x1030236 + field public static final int Theme_NoDisplay = 16973909; // 0x1030055 + field public static final int Theme_NoTitleBar = 16973830; // 0x1030006 + field public static final int Theme_NoTitleBar_Fullscreen = 16973831; // 0x1030007 + field public static final int Theme_NoTitleBar_OverlayActionModes = 16973930; // 0x103006a + field public static final int Theme_Panel = 16973913; // 0x1030059 + field public static final int Theme_Translucent = 16973839; // 0x103000f + field public static final int Theme_Translucent_NoTitleBar = 16973840; // 0x1030010 + field public static final int Theme_Translucent_NoTitleBar_Fullscreen = 16973841; // 0x1030011 + field public static final int Theme_Wallpaper = 16973918; // 0x103005e + field public static final int Theme_WallpaperSettings = 16973921; // 0x1030061 + field public static final int Theme_Wallpaper_NoTitleBar = 16973919; // 0x103005f + field public static final int Theme_Wallpaper_NoTitleBar_Fullscreen = 16973920; // 0x1030060 + field public static final int Theme_WithActionBar = 16973929; // 0x1030069 + field public static final int Widget = 16973842; // 0x1030012 + field public static final int Widget_AbsListView = 16973843; // 0x1030013 + field public static final int Widget_ActionBar = 16973954; // 0x1030082 + field public static final int Widget_ActionBar_TabBar = 16974068; // 0x10300f4 + field public static final int Widget_ActionBar_TabText = 16974067; // 0x10300f3 + field public static final int Widget_ActionBar_TabView = 16974066; // 0x10300f2 + field public static final int Widget_ActionButton = 16973956; // 0x1030084 + field public static final int Widget_ActionButton_CloseMode = 16973960; // 0x1030088 + field public static final int Widget_ActionButton_Overflow = 16973959; // 0x1030087 + field public static final int Widget_AutoCompleteTextView = 16973863; // 0x1030027 + field public static final int Widget_Button = 16973844; // 0x1030014 + field public static final int Widget_Button_Inset = 16973845; // 0x1030015 + field public static final int Widget_Button_Small = 16973846; // 0x1030016 + field public static final int Widget_Button_Toggle = 16973847; // 0x1030017 + field public static final int Widget_CalendarView = 16974059; // 0x10300eb + field public static final int Widget_CompoundButton = 16973848; // 0x1030018 + field public static final int Widget_CompoundButton_CheckBox = 16973849; // 0x1030019 + field public static final int Widget_CompoundButton_RadioButton = 16973850; // 0x103001a + field public static final int Widget_CompoundButton_Star = 16973851; // 0x103001b + field public static final int Widget_DatePicker = 16974062; // 0x10300ee + field public static final int Widget_DeviceDefault = 16974144; // 0x1030140 + field public static final int Widget_DeviceDefault_ActionBar = 16974187; // 0x103016b + field public static final int Widget_DeviceDefault_ActionBar_Solid = 16974195; // 0x1030173 + field public static final int Widget_DeviceDefault_ActionBar_TabBar = 16974194; // 0x1030172 + field public static final int Widget_DeviceDefault_ActionBar_TabText = 16974193; // 0x1030171 + field public static final int Widget_DeviceDefault_ActionBar_TabView = 16974192; // 0x1030170 + field public static final int Widget_DeviceDefault_ActionButton = 16974182; // 0x1030166 + field public static final int Widget_DeviceDefault_ActionButton_CloseMode = 16974186; // 0x103016a + field public static final int Widget_DeviceDefault_ActionButton_Overflow = 16974183; // 0x1030167 + field public static final int Widget_DeviceDefault_ActionButton_TextButton = 16974184; // 0x1030168 + field public static final int Widget_DeviceDefault_ActionMode = 16974185; // 0x1030169 + field public static final int Widget_DeviceDefault_AutoCompleteTextView = 16974151; // 0x1030147 + field public static final int Widget_DeviceDefault_Button = 16974145; // 0x1030141 + field public static final int Widget_DeviceDefault_Button_Borderless = 16974188; // 0x103016c + field public static final int Widget_DeviceDefault_Button_Borderless_Small = 16974149; // 0x1030145 + field public static final int Widget_DeviceDefault_Button_Inset = 16974147; // 0x1030143 + field public static final int Widget_DeviceDefault_Button_Small = 16974146; // 0x1030142 + field public static final int Widget_DeviceDefault_Button_Toggle = 16974148; // 0x1030144 + field public static final int Widget_DeviceDefault_CalendarView = 16974190; // 0x103016e + field public static final int Widget_DeviceDefault_CheckedTextView = 16974299; // 0x10301db + field public static final int Widget_DeviceDefault_CompoundButton_CheckBox = 16974152; // 0x1030148 + field public static final int Widget_DeviceDefault_CompoundButton_RadioButton = 16974169; // 0x1030159 + field public static final int Widget_DeviceDefault_CompoundButton_Star = 16974173; // 0x103015d + field public static final int Widget_DeviceDefault_DatePicker = 16974191; // 0x103016f + field public static final int Widget_DeviceDefault_DropDownItem = 16974177; // 0x1030161 + field public static final int Widget_DeviceDefault_DropDownItem_Spinner = 16974178; // 0x1030162 + field public static final int Widget_DeviceDefault_EditText = 16974154; // 0x103014a + field public static final int Widget_DeviceDefault_ExpandableListView = 16974155; // 0x103014b + field public static final int Widget_DeviceDefault_FastScroll = 16974313; // 0x10301e9 + field public static final int Widget_DeviceDefault_GridView = 16974156; // 0x103014c + field public static final int Widget_DeviceDefault_HorizontalScrollView = 16974171; // 0x103015b + field public static final int Widget_DeviceDefault_ImageButton = 16974157; // 0x103014d + field public static final int Widget_DeviceDefault_Light = 16974196; // 0x1030174 + field public static final int Widget_DeviceDefault_Light_ActionBar = 16974243; // 0x10301a3 + field public static final int Widget_DeviceDefault_Light_ActionBar_Solid = 16974247; // 0x10301a7 + field public static final deprecated int Widget_DeviceDefault_Light_ActionBar_Solid_Inverse = 16974248; // 0x10301a8 + field public static final int Widget_DeviceDefault_Light_ActionBar_TabBar = 16974246; // 0x10301a6 + field public static final deprecated int Widget_DeviceDefault_Light_ActionBar_TabBar_Inverse = 16974249; // 0x10301a9 + field public static final int Widget_DeviceDefault_Light_ActionBar_TabText = 16974245; // 0x10301a5 + field public static final deprecated int Widget_DeviceDefault_Light_ActionBar_TabText_Inverse = 16974251; // 0x10301ab + field public static final int Widget_DeviceDefault_Light_ActionBar_TabView = 16974244; // 0x10301a4 + field public static final deprecated int Widget_DeviceDefault_Light_ActionBar_TabView_Inverse = 16974250; // 0x10301aa + field public static final int Widget_DeviceDefault_Light_ActionButton = 16974239; // 0x103019f + field public static final int Widget_DeviceDefault_Light_ActionButton_CloseMode = 16974242; // 0x10301a2 + field public static final int Widget_DeviceDefault_Light_ActionButton_Overflow = 16974240; // 0x10301a0 + field public static final int Widget_DeviceDefault_Light_ActionMode = 16974241; // 0x10301a1 + field public static final deprecated int Widget_DeviceDefault_Light_ActionMode_Inverse = 16974252; // 0x10301ac + field public static final int Widget_DeviceDefault_Light_AutoCompleteTextView = 16974203; // 0x103017b + field public static final int Widget_DeviceDefault_Light_Button = 16974197; // 0x1030175 + field public static final int Widget_DeviceDefault_Light_Button_Borderless_Small = 16974201; // 0x1030179 + field public static final int Widget_DeviceDefault_Light_Button_Inset = 16974199; // 0x1030177 + field public static final int Widget_DeviceDefault_Light_Button_Small = 16974198; // 0x1030176 + field public static final int Widget_DeviceDefault_Light_Button_Toggle = 16974200; // 0x1030178 + field public static final int Widget_DeviceDefault_Light_CalendarView = 16974238; // 0x103019e + field public static final int Widget_DeviceDefault_Light_CheckedTextView = 16974300; // 0x10301dc + field public static final int Widget_DeviceDefault_Light_CompoundButton_CheckBox = 16974204; // 0x103017c + field public static final int Widget_DeviceDefault_Light_CompoundButton_RadioButton = 16974224; // 0x1030190 + field public static final int Widget_DeviceDefault_Light_CompoundButton_Star = 16974228; // 0x1030194 + field public static final int Widget_DeviceDefault_Light_DropDownItem = 16974232; // 0x1030198 + field public static final int Widget_DeviceDefault_Light_DropDownItem_Spinner = 16974233; // 0x1030199 + field public static final int Widget_DeviceDefault_Light_EditText = 16974206; // 0x103017e + field public static final int Widget_DeviceDefault_Light_ExpandableListView = 16974207; // 0x103017f + field public static final int Widget_DeviceDefault_Light_FastScroll = 16974315; // 0x10301eb + field public static final int Widget_DeviceDefault_Light_GridView = 16974208; // 0x1030180 + field public static final int Widget_DeviceDefault_Light_HorizontalScrollView = 16974226; // 0x1030192 + field public static final int Widget_DeviceDefault_Light_ImageButton = 16974209; // 0x1030181 + field public static final int Widget_DeviceDefault_Light_ListPopupWindow = 16974235; // 0x103019b + field public static final int Widget_DeviceDefault_Light_ListView = 16974210; // 0x1030182 + field public static final int Widget_DeviceDefault_Light_ListView_DropDown = 16974205; // 0x103017d + field public static final int Widget_DeviceDefault_Light_MediaRouteButton = 16974296; // 0x10301d8 + field public static final int Widget_DeviceDefault_Light_PopupMenu = 16974236; // 0x103019c + field public static final int Widget_DeviceDefault_Light_PopupWindow = 16974211; // 0x1030183 + field public static final int Widget_DeviceDefault_Light_ProgressBar = 16974212; // 0x1030184 + field public static final int Widget_DeviceDefault_Light_ProgressBar_Horizontal = 16974213; // 0x1030185 + field public static final int Widget_DeviceDefault_Light_ProgressBar_Inverse = 16974217; // 0x1030189 + field public static final int Widget_DeviceDefault_Light_ProgressBar_Large = 16974216; // 0x1030188 + field public static final int Widget_DeviceDefault_Light_ProgressBar_Large_Inverse = 16974219; // 0x103018b + field public static final int Widget_DeviceDefault_Light_ProgressBar_Small = 16974214; // 0x1030186 + field public static final int Widget_DeviceDefault_Light_ProgressBar_Small_Inverse = 16974218; // 0x103018a + field public static final int Widget_DeviceDefault_Light_ProgressBar_Small_Title = 16974215; // 0x1030187 + field public static final int Widget_DeviceDefault_Light_RatingBar = 16974221; // 0x103018d + field public static final int Widget_DeviceDefault_Light_RatingBar_Indicator = 16974222; // 0x103018e + field public static final int Widget_DeviceDefault_Light_RatingBar_Small = 16974223; // 0x103018f + field public static final int Widget_DeviceDefault_Light_ScrollView = 16974225; // 0x1030191 + field public static final int Widget_DeviceDefault_Light_SeekBar = 16974220; // 0x103018c + field public static final int Widget_DeviceDefault_Light_Spinner = 16974227; // 0x1030193 + field public static final int Widget_DeviceDefault_Light_StackView = 16974316; // 0x10301ec + field public static final int Widget_DeviceDefault_Light_Tab = 16974237; // 0x103019d + field public static final int Widget_DeviceDefault_Light_TabWidget = 16974229; // 0x1030195 + field public static final int Widget_DeviceDefault_Light_TextView = 16974202; // 0x103017a + field public static final int Widget_DeviceDefault_Light_TextView_SpinnerItem = 16974234; // 0x103019a + field public static final int Widget_DeviceDefault_Light_WebTextView = 16974230; // 0x1030196 + field public static final int Widget_DeviceDefault_Light_WebView = 16974231; // 0x1030197 + field public static final int Widget_DeviceDefault_ListPopupWindow = 16974180; // 0x1030164 + field public static final int Widget_DeviceDefault_ListView = 16974158; // 0x103014e + field public static final int Widget_DeviceDefault_ListView_DropDown = 16974153; // 0x1030149 + field public static final int Widget_DeviceDefault_MediaRouteButton = 16974295; // 0x10301d7 + field public static final int Widget_DeviceDefault_PopupMenu = 16974181; // 0x1030165 + field public static final int Widget_DeviceDefault_PopupWindow = 16974159; // 0x103014f + field public static final int Widget_DeviceDefault_ProgressBar = 16974160; // 0x1030150 + field public static final int Widget_DeviceDefault_ProgressBar_Horizontal = 16974161; // 0x1030151 + field public static final int Widget_DeviceDefault_ProgressBar_Large = 16974164; // 0x1030154 + field public static final int Widget_DeviceDefault_ProgressBar_Small = 16974162; // 0x1030152 + field public static final int Widget_DeviceDefault_ProgressBar_Small_Title = 16974163; // 0x1030153 + field public static final int Widget_DeviceDefault_RatingBar = 16974166; // 0x1030156 + field public static final int Widget_DeviceDefault_RatingBar_Indicator = 16974167; // 0x1030157 + field public static final int Widget_DeviceDefault_RatingBar_Small = 16974168; // 0x1030158 + field public static final int Widget_DeviceDefault_ScrollView = 16974170; // 0x103015a + field public static final int Widget_DeviceDefault_SeekBar = 16974165; // 0x1030155 + field public static final int Widget_DeviceDefault_Spinner = 16974172; // 0x103015c + field public static final int Widget_DeviceDefault_StackView = 16974314; // 0x10301ea + field public static final int Widget_DeviceDefault_Tab = 16974189; // 0x103016d + field public static final int Widget_DeviceDefault_TabWidget = 16974174; // 0x103015e + field public static final int Widget_DeviceDefault_TextView = 16974150; // 0x1030146 + field public static final int Widget_DeviceDefault_TextView_SpinnerItem = 16974179; // 0x1030163 + field public static final int Widget_DeviceDefault_WebTextView = 16974175; // 0x103015f + field public static final int Widget_DeviceDefault_WebView = 16974176; // 0x1030160 + field public static final int Widget_DropDownItem = 16973867; // 0x103002b + field public static final int Widget_DropDownItem_Spinner = 16973868; // 0x103002c + field public static final int Widget_EditText = 16973859; // 0x1030023 + field public static final int Widget_ExpandableListView = 16973860; // 0x1030024 + field public static final int Widget_FastScroll = 16974309; // 0x10301e5 + field public static final int Widget_FragmentBreadCrumbs = 16973961; // 0x1030089 + field public static final int Widget_Gallery = 16973877; // 0x1030035 + field public static final int Widget_GridView = 16973874; // 0x1030032 + field public static final int Widget_Holo = 16973962; // 0x103008a + field public static final int Widget_Holo_ActionBar = 16974004; // 0x10300b4 + field public static final int Widget_Holo_ActionBar_Solid = 16974113; // 0x1030121 + field public static final int Widget_Holo_ActionBar_TabBar = 16974071; // 0x10300f7 + field public static final int Widget_Holo_ActionBar_TabText = 16974070; // 0x10300f6 + field public static final int Widget_Holo_ActionBar_TabView = 16974069; // 0x10300f5 + field public static final int Widget_Holo_ActionButton = 16973999; // 0x10300af + field public static final int Widget_Holo_ActionButton_CloseMode = 16974003; // 0x10300b3 + field public static final int Widget_Holo_ActionButton_Overflow = 16974000; // 0x10300b0 + field public static final int Widget_Holo_ActionButton_TextButton = 16974001; // 0x10300b1 + field public static final int Widget_Holo_ActionMode = 16974002; // 0x10300b2 + field public static final int Widget_Holo_AutoCompleteTextView = 16973968; // 0x1030090 + field public static final int Widget_Holo_Button = 16973963; // 0x103008b + field public static final int Widget_Holo_Button_Borderless = 16974050; // 0x10300e2 + field public static final int Widget_Holo_Button_Borderless_Small = 16974106; // 0x103011a + field public static final int Widget_Holo_Button_Inset = 16973965; // 0x103008d + field public static final int Widget_Holo_Button_Small = 16973964; // 0x103008c + field public static final int Widget_Holo_Button_Toggle = 16973966; // 0x103008e + field public static final int Widget_Holo_CalendarView = 16974060; // 0x10300ec + field public static final int Widget_Holo_CheckedTextView = 16974297; // 0x10301d9 + field public static final int Widget_Holo_CompoundButton_CheckBox = 16973969; // 0x1030091 + field public static final int Widget_Holo_CompoundButton_RadioButton = 16973986; // 0x10300a2 + field public static final int Widget_Holo_CompoundButton_Star = 16973990; // 0x10300a6 + field public static final int Widget_Holo_DatePicker = 16974063; // 0x10300ef + field public static final int Widget_Holo_DropDownItem = 16973994; // 0x10300aa + field public static final int Widget_Holo_DropDownItem_Spinner = 16973995; // 0x10300ab + field public static final int Widget_Holo_EditText = 16973971; // 0x1030093 + field public static final int Widget_Holo_ExpandableListView = 16973972; // 0x1030094 + field public static final int Widget_Holo_GridView = 16973973; // 0x1030095 + field public static final int Widget_Holo_HorizontalScrollView = 16973988; // 0x10300a4 + field public static final int Widget_Holo_ImageButton = 16973974; // 0x1030096 + field public static final int Widget_Holo_Light = 16974005; // 0x10300b5 + field public static final int Widget_Holo_Light_ActionBar = 16974049; // 0x10300e1 + field public static final int Widget_Holo_Light_ActionBar_Solid = 16974114; // 0x1030122 + field public static final int Widget_Holo_Light_ActionBar_Solid_Inverse = 16974115; // 0x1030123 + field public static final int Widget_Holo_Light_ActionBar_TabBar = 16974074; // 0x10300fa + field public static final int Widget_Holo_Light_ActionBar_TabBar_Inverse = 16974116; // 0x1030124 + field public static final int Widget_Holo_Light_ActionBar_TabText = 16974073; // 0x10300f9 + field public static final int Widget_Holo_Light_ActionBar_TabText_Inverse = 16974118; // 0x1030126 + field public static final int Widget_Holo_Light_ActionBar_TabView = 16974072; // 0x10300f8 + field public static final int Widget_Holo_Light_ActionBar_TabView_Inverse = 16974117; // 0x1030125 + field public static final int Widget_Holo_Light_ActionButton = 16974045; // 0x10300dd + field public static final int Widget_Holo_Light_ActionButton_CloseMode = 16974048; // 0x10300e0 + field public static final int Widget_Holo_Light_ActionButton_Overflow = 16974046; // 0x10300de + field public static final int Widget_Holo_Light_ActionMode = 16974047; // 0x10300df + field public static final int Widget_Holo_Light_ActionMode_Inverse = 16974119; // 0x1030127 + field public static final int Widget_Holo_Light_AutoCompleteTextView = 16974011; // 0x10300bb + field public static final int Widget_Holo_Light_Button = 16974006; // 0x10300b6 + field public static final int Widget_Holo_Light_Button_Borderless_Small = 16974107; // 0x103011b + field public static final int Widget_Holo_Light_Button_Inset = 16974008; // 0x10300b8 + field public static final int Widget_Holo_Light_Button_Small = 16974007; // 0x10300b7 + field public static final int Widget_Holo_Light_Button_Toggle = 16974009; // 0x10300b9 + field public static final int Widget_Holo_Light_CalendarView = 16974061; // 0x10300ed + field public static final int Widget_Holo_Light_CheckedTextView = 16974298; // 0x10301da + field public static final int Widget_Holo_Light_CompoundButton_CheckBox = 16974012; // 0x10300bc + field public static final int Widget_Holo_Light_CompoundButton_RadioButton = 16974032; // 0x10300d0 + field public static final int Widget_Holo_Light_CompoundButton_Star = 16974036; // 0x10300d4 + field public static final int Widget_Holo_Light_DropDownItem = 16974040; // 0x10300d8 + field public static final int Widget_Holo_Light_DropDownItem_Spinner = 16974041; // 0x10300d9 + field public static final int Widget_Holo_Light_EditText = 16974014; // 0x10300be + field public static final int Widget_Holo_Light_ExpandableListView = 16974015; // 0x10300bf + field public static final int Widget_Holo_Light_GridView = 16974016; // 0x10300c0 + field public static final int Widget_Holo_Light_HorizontalScrollView = 16974034; // 0x10300d2 + field public static final int Widget_Holo_Light_ImageButton = 16974017; // 0x10300c1 + field public static final int Widget_Holo_Light_ListPopupWindow = 16974043; // 0x10300db + field public static final int Widget_Holo_Light_ListView = 16974018; // 0x10300c2 + field public static final int Widget_Holo_Light_ListView_DropDown = 16974013; // 0x10300bd + field public static final int Widget_Holo_Light_MediaRouteButton = 16974294; // 0x10301d6 + field public static final int Widget_Holo_Light_PopupMenu = 16974044; // 0x10300dc + field public static final int Widget_Holo_Light_PopupWindow = 16974019; // 0x10300c3 + field public static final int Widget_Holo_Light_ProgressBar = 16974020; // 0x10300c4 + field public static final int Widget_Holo_Light_ProgressBar_Horizontal = 16974021; // 0x10300c5 + field public static final int Widget_Holo_Light_ProgressBar_Inverse = 16974025; // 0x10300c9 + field public static final int Widget_Holo_Light_ProgressBar_Large = 16974024; // 0x10300c8 + field public static final int Widget_Holo_Light_ProgressBar_Large_Inverse = 16974027; // 0x10300cb + field public static final int Widget_Holo_Light_ProgressBar_Small = 16974022; // 0x10300c6 + field public static final int Widget_Holo_Light_ProgressBar_Small_Inverse = 16974026; // 0x10300ca + field public static final int Widget_Holo_Light_ProgressBar_Small_Title = 16974023; // 0x10300c7 + field public static final int Widget_Holo_Light_RatingBar = 16974029; // 0x10300cd + field public static final int Widget_Holo_Light_RatingBar_Indicator = 16974030; // 0x10300ce + field public static final int Widget_Holo_Light_RatingBar_Small = 16974031; // 0x10300cf + field public static final int Widget_Holo_Light_ScrollView = 16974033; // 0x10300d1 + field public static final int Widget_Holo_Light_SeekBar = 16974028; // 0x10300cc + field public static final int Widget_Holo_Light_Spinner = 16974035; // 0x10300d3 + field public static final int Widget_Holo_Light_Tab = 16974052; // 0x10300e4 + field public static final int Widget_Holo_Light_TabWidget = 16974037; // 0x10300d5 + field public static final int Widget_Holo_Light_TextView = 16974010; // 0x10300ba + field public static final int Widget_Holo_Light_TextView_SpinnerItem = 16974042; // 0x10300da + field public static final int Widget_Holo_Light_WebTextView = 16974038; // 0x10300d6 + field public static final int Widget_Holo_Light_WebView = 16974039; // 0x10300d7 + field public static final int Widget_Holo_ListPopupWindow = 16973997; // 0x10300ad + field public static final int Widget_Holo_ListView = 16973975; // 0x1030097 + field public static final int Widget_Holo_ListView_DropDown = 16973970; // 0x1030092 + field public static final int Widget_Holo_MediaRouteButton = 16974293; // 0x10301d5 + field public static final int Widget_Holo_PopupMenu = 16973998; // 0x10300ae + field public static final int Widget_Holo_PopupWindow = 16973976; // 0x1030098 + field public static final int Widget_Holo_ProgressBar = 16973977; // 0x1030099 + field public static final int Widget_Holo_ProgressBar_Horizontal = 16973978; // 0x103009a + field public static final int Widget_Holo_ProgressBar_Large = 16973981; // 0x103009d + field public static final int Widget_Holo_ProgressBar_Small = 16973979; // 0x103009b + field public static final int Widget_Holo_ProgressBar_Small_Title = 16973980; // 0x103009c + field public static final int Widget_Holo_RatingBar = 16973983; // 0x103009f + field public static final int Widget_Holo_RatingBar_Indicator = 16973984; // 0x10300a0 + field public static final int Widget_Holo_RatingBar_Small = 16973985; // 0x10300a1 + field public static final int Widget_Holo_ScrollView = 16973987; // 0x10300a3 + field public static final int Widget_Holo_SeekBar = 16973982; // 0x103009e + field public static final int Widget_Holo_Spinner = 16973989; // 0x10300a5 + field public static final int Widget_Holo_Tab = 16974051; // 0x10300e3 + field public static final int Widget_Holo_TabWidget = 16973991; // 0x10300a7 + field public static final int Widget_Holo_TextView = 16973967; // 0x103008f + field public static final int Widget_Holo_TextView_SpinnerItem = 16973996; // 0x10300ac + field public static final int Widget_Holo_WebTextView = 16973992; // 0x10300a8 + field public static final int Widget_Holo_WebView = 16973993; // 0x10300a9 + field public static final int Widget_ImageButton = 16973862; // 0x1030026 + field public static final int Widget_ImageWell = 16973861; // 0x1030025 + field public static final int Widget_KeyboardView = 16973911; // 0x1030057 + field public static final int Widget_ListPopupWindow = 16973957; // 0x1030085 + field public static final int Widget_ListView = 16973870; // 0x103002e + field public static final int Widget_ListView_DropDown = 16973872; // 0x1030030 + field public static final int Widget_ListView_Menu = 16973873; // 0x1030031 + field public static final int Widget_ListView_White = 16973871; // 0x103002f + field public static final int Widget_Material = 16974413; // 0x103024d + field public static final int Widget_Material_ActionBar = 16974414; // 0x103024e + field public static final int Widget_Material_ActionBar_Solid = 16974415; // 0x103024f + field public static final int Widget_Material_ActionBar_TabBar = 16974416; // 0x1030250 + field public static final int Widget_Material_ActionBar_TabText = 16974417; // 0x1030251 + field public static final int Widget_Material_ActionBar_TabView = 16974418; // 0x1030252 + field public static final int Widget_Material_ActionButton = 16974419; // 0x1030253 + field public static final int Widget_Material_ActionButton_CloseMode = 16974420; // 0x1030254 + field public static final int Widget_Material_ActionButton_Overflow = 16974421; // 0x1030255 + field public static final int Widget_Material_ActionMode = 16974422; // 0x1030256 + field public static final int Widget_Material_AutoCompleteTextView = 16974423; // 0x1030257 + field public static final int Widget_Material_Button = 16974424; // 0x1030258 + field public static final int Widget_Material_ButtonBar = 16974431; // 0x103025f + field public static final int Widget_Material_ButtonBar_AlertDialog = 16974432; // 0x1030260 + field public static final int Widget_Material_Button_Borderless = 16974425; // 0x1030259 + field public static final int Widget_Material_Button_Borderless_Colored = 16974426; // 0x103025a + field public static final int Widget_Material_Button_Borderless_Small = 16974427; // 0x103025b + field public static final int Widget_Material_Button_Inset = 16974428; // 0x103025c + field public static final int Widget_Material_Button_Small = 16974429; // 0x103025d + field public static final int Widget_Material_Button_Toggle = 16974430; // 0x103025e + field public static final int Widget_Material_CalendarView = 16974433; // 0x1030261 + field public static final int Widget_Material_CheckedTextView = 16974434; // 0x1030262 + field public static final int Widget_Material_CompoundButton_CheckBox = 16974435; // 0x1030263 + field public static final int Widget_Material_CompoundButton_RadioButton = 16974436; // 0x1030264 + field public static final int Widget_Material_CompoundButton_Star = 16974437; // 0x1030265 + field public static final int Widget_Material_DatePicker = 16974438; // 0x1030266 + field public static final int Widget_Material_DropDownItem = 16974439; // 0x1030267 + field public static final int Widget_Material_DropDownItem_Spinner = 16974440; // 0x1030268 + field public static final int Widget_Material_EditText = 16974441; // 0x1030269 + field public static final int Widget_Material_ExpandableListView = 16974442; // 0x103026a + field public static final int Widget_Material_FastScroll = 16974443; // 0x103026b + field public static final int Widget_Material_GridView = 16974444; // 0x103026c + field public static final int Widget_Material_HorizontalScrollView = 16974445; // 0x103026d + field public static final int Widget_Material_ImageButton = 16974446; // 0x103026e + field public static final int Widget_Material_Light = 16974478; // 0x103028e + field public static final int Widget_Material_Light_ActionBar = 16974479; // 0x103028f + field public static final int Widget_Material_Light_ActionBar_Solid = 16974480; // 0x1030290 + field public static final int Widget_Material_Light_ActionBar_TabBar = 16974481; // 0x1030291 + field public static final int Widget_Material_Light_ActionBar_TabText = 16974482; // 0x1030292 + field public static final int Widget_Material_Light_ActionBar_TabView = 16974483; // 0x1030293 + field public static final int Widget_Material_Light_ActionButton = 16974484; // 0x1030294 + field public static final int Widget_Material_Light_ActionButton_CloseMode = 16974485; // 0x1030295 + field public static final int Widget_Material_Light_ActionButton_Overflow = 16974486; // 0x1030296 + field public static final int Widget_Material_Light_ActionMode = 16974487; // 0x1030297 + field public static final int Widget_Material_Light_AutoCompleteTextView = 16974488; // 0x1030298 + field public static final int Widget_Material_Light_Button = 16974489; // 0x1030299 + field public static final int Widget_Material_Light_ButtonBar = 16974496; // 0x10302a0 + field public static final int Widget_Material_Light_ButtonBar_AlertDialog = 16974497; // 0x10302a1 + field public static final int Widget_Material_Light_Button_Borderless = 16974490; // 0x103029a + field public static final int Widget_Material_Light_Button_Borderless_Colored = 16974491; // 0x103029b + field public static final int Widget_Material_Light_Button_Borderless_Small = 16974492; // 0x103029c + field public static final int Widget_Material_Light_Button_Inset = 16974493; // 0x103029d + field public static final int Widget_Material_Light_Button_Small = 16974494; // 0x103029e + field public static final int Widget_Material_Light_Button_Toggle = 16974495; // 0x103029f + field public static final int Widget_Material_Light_CalendarView = 16974498; // 0x10302a2 + field public static final int Widget_Material_Light_CheckedTextView = 16974499; // 0x10302a3 + field public static final int Widget_Material_Light_CompoundButton_CheckBox = 16974500; // 0x10302a4 + field public static final int Widget_Material_Light_CompoundButton_RadioButton = 16974501; // 0x10302a5 + field public static final int Widget_Material_Light_CompoundButton_Star = 16974502; // 0x10302a6 + field public static final int Widget_Material_Light_DatePicker = 16974503; // 0x10302a7 + field public static final int Widget_Material_Light_DropDownItem = 16974504; // 0x10302a8 + field public static final int Widget_Material_Light_DropDownItem_Spinner = 16974505; // 0x10302a9 + field public static final int Widget_Material_Light_EditText = 16974506; // 0x10302aa + field public static final int Widget_Material_Light_ExpandableListView = 16974507; // 0x10302ab + field public static final int Widget_Material_Light_FastScroll = 16974508; // 0x10302ac + field public static final int Widget_Material_Light_GridView = 16974509; // 0x10302ad + field public static final int Widget_Material_Light_HorizontalScrollView = 16974510; // 0x10302ae + field public static final int Widget_Material_Light_ImageButton = 16974511; // 0x10302af + field public static final int Widget_Material_Light_ListPopupWindow = 16974512; // 0x10302b0 + field public static final int Widget_Material_Light_ListView = 16974513; // 0x10302b1 + field public static final int Widget_Material_Light_ListView_DropDown = 16974514; // 0x10302b2 + field public static final int Widget_Material_Light_MediaRouteButton = 16974515; // 0x10302b3 + field public static final int Widget_Material_Light_PopupMenu = 16974516; // 0x10302b4 + field public static final int Widget_Material_Light_PopupMenu_Overflow = 16974517; // 0x10302b5 + field public static final int Widget_Material_Light_PopupWindow = 16974518; // 0x10302b6 + field public static final int Widget_Material_Light_ProgressBar = 16974519; // 0x10302b7 + field public static final int Widget_Material_Light_ProgressBar_Horizontal = 16974520; // 0x10302b8 + field public static final int Widget_Material_Light_ProgressBar_Inverse = 16974521; // 0x10302b9 + field public static final int Widget_Material_Light_ProgressBar_Large = 16974522; // 0x10302ba + field public static final int Widget_Material_Light_ProgressBar_Large_Inverse = 16974523; // 0x10302bb + field public static final int Widget_Material_Light_ProgressBar_Small = 16974524; // 0x10302bc + field public static final int Widget_Material_Light_ProgressBar_Small_Inverse = 16974525; // 0x10302bd + field public static final int Widget_Material_Light_ProgressBar_Small_Title = 16974526; // 0x10302be + field public static final int Widget_Material_Light_RatingBar = 16974527; // 0x10302bf + field public static final int Widget_Material_Light_RatingBar_Indicator = 16974528; // 0x10302c0 + field public static final int Widget_Material_Light_RatingBar_Small = 16974529; // 0x10302c1 + field public static final int Widget_Material_Light_ScrollView = 16974530; // 0x10302c2 + field public static final int Widget_Material_Light_SearchView = 16974531; // 0x10302c3 + field public static final int Widget_Material_Light_SeekBar = 16974532; // 0x10302c4 + field public static final int Widget_Material_Light_SegmentedButton = 16974533; // 0x10302c5 + field public static final int Widget_Material_Light_Spinner = 16974535; // 0x10302c7 + field public static final int Widget_Material_Light_Spinner_Underlined = 16974536; // 0x10302c8 + field public static final int Widget_Material_Light_StackView = 16974534; // 0x10302c6 + field public static final int Widget_Material_Light_Tab = 16974537; // 0x10302c9 + field public static final int Widget_Material_Light_TabWidget = 16974538; // 0x10302ca + field public static final int Widget_Material_Light_TextView = 16974539; // 0x10302cb + field public static final int Widget_Material_Light_TextView_SpinnerItem = 16974540; // 0x10302cc + field public static final int Widget_Material_Light_TimePicker = 16974541; // 0x10302cd + field public static final int Widget_Material_Light_WebTextView = 16974542; // 0x10302ce + field public static final int Widget_Material_Light_WebView = 16974543; // 0x10302cf + field public static final int Widget_Material_ListPopupWindow = 16974447; // 0x103026f + field public static final int Widget_Material_ListView = 16974448; // 0x1030270 + field public static final int Widget_Material_ListView_DropDown = 16974449; // 0x1030271 + field public static final int Widget_Material_MediaRouteButton = 16974450; // 0x1030272 + field public static final int Widget_Material_PopupMenu = 16974451; // 0x1030273 + field public static final int Widget_Material_PopupMenu_Overflow = 16974452; // 0x1030274 + field public static final int Widget_Material_PopupWindow = 16974453; // 0x1030275 + field public static final int Widget_Material_ProgressBar = 16974454; // 0x1030276 + field public static final int Widget_Material_ProgressBar_Horizontal = 16974455; // 0x1030277 + field public static final int Widget_Material_ProgressBar_Large = 16974456; // 0x1030278 + field public static final int Widget_Material_ProgressBar_Small = 16974457; // 0x1030279 + field public static final int Widget_Material_ProgressBar_Small_Title = 16974458; // 0x103027a + field public static final int Widget_Material_RatingBar = 16974459; // 0x103027b + field public static final int Widget_Material_RatingBar_Indicator = 16974460; // 0x103027c + field public static final int Widget_Material_RatingBar_Small = 16974461; // 0x103027d + field public static final int Widget_Material_ScrollView = 16974462; // 0x103027e + field public static final int Widget_Material_SearchView = 16974463; // 0x103027f + field public static final int Widget_Material_SeekBar = 16974464; // 0x1030280 + field public static final int Widget_Material_SegmentedButton = 16974465; // 0x1030281 + field public static final int Widget_Material_Spinner = 16974467; // 0x1030283 + field public static final int Widget_Material_Spinner_Underlined = 16974468; // 0x1030284 + field public static final int Widget_Material_StackView = 16974466; // 0x1030282 + field public static final int Widget_Material_Tab = 16974469; // 0x1030285 + field public static final int Widget_Material_TabWidget = 16974470; // 0x1030286 + field public static final int Widget_Material_TextView = 16974471; // 0x1030287 + field public static final int Widget_Material_TextView_SpinnerItem = 16974472; // 0x1030288 + field public static final int Widget_Material_TimePicker = 16974473; // 0x1030289 + field public static final int Widget_Material_Toolbar = 16974474; // 0x103028a + field public static final int Widget_Material_Toolbar_Button_Navigation = 16974475; // 0x103028b + field public static final int Widget_Material_WebTextView = 16974476; // 0x103028c + field public static final int Widget_Material_WebView = 16974477; // 0x103028d + field public static final int Widget_PopupMenu = 16973958; // 0x1030086 + field public static final int Widget_PopupWindow = 16973878; // 0x1030036 + field public static final int Widget_ProgressBar = 16973852; // 0x103001c + field public static final int Widget_ProgressBar_Horizontal = 16973855; // 0x103001f + field public static final int Widget_ProgressBar_Inverse = 16973915; // 0x103005b + field public static final int Widget_ProgressBar_Large = 16973853; // 0x103001d + field public static final int Widget_ProgressBar_Large_Inverse = 16973916; // 0x103005c + field public static final int Widget_ProgressBar_Small = 16973854; // 0x103001e + field public static final int Widget_ProgressBar_Small_Inverse = 16973917; // 0x103005d + field public static final int Widget_RatingBar = 16973857; // 0x1030021 + field public static final int Widget_ScrollView = 16973869; // 0x103002d + field public static final int Widget_SeekBar = 16973856; // 0x1030020 + field public static final int Widget_Spinner = 16973864; // 0x1030028 + field public static final int Widget_Spinner_DropDown = 16973955; // 0x1030083 + field public static final int Widget_StackView = 16974310; // 0x10301e6 + field public static final int Widget_TabWidget = 16973876; // 0x1030034 + field public static final int Widget_TextView = 16973858; // 0x1030022 + field public static final int Widget_TextView_PopupMenu = 16973865; // 0x1030029 + field public static final int Widget_TextView_SpinnerItem = 16973866; // 0x103002a + field public static final int Widget_Toolbar = 16974311; // 0x10301e7 + field public static final int Widget_Toolbar_Button_Navigation = 16974312; // 0x10301e8 + field public static final int Widget_WebView = 16973875; // 0x1030033 + } + + public static final class R.transition { + ctor public R.transition(); + field public static final int explode = 17760259; // 0x10f0003 + field public static final int fade = 17760258; // 0x10f0002 + field public static final int move = 17760257; // 0x10f0001 + field public static final int no_transition = 17760256; // 0x10f0000 + field public static final int slide_bottom = 17760260; // 0x10f0004 + field public static final int slide_left = 17760263; // 0x10f0007 + field public static final int slide_right = 17760262; // 0x10f0006 + field public static final int slide_top = 17760261; // 0x10f0005 + } + + public static final class R.xml { + ctor public R.xml(); + } + +} + +package android.accessibilityservice { + + public abstract class AccessibilityService extends android.app.Service { + ctor public AccessibilityService(); + method public android.view.accessibility.AccessibilityNodeInfo findFocus(int); + method public android.view.accessibility.AccessibilityNodeInfo getRootInActiveWindow(); + method public final android.accessibilityservice.AccessibilityServiceInfo getServiceInfo(); + method public java.util.List getWindows(); + method public abstract void onAccessibilityEvent(android.view.accessibility.AccessibilityEvent); + method public final android.os.IBinder onBind(android.content.Intent); + method protected boolean onGesture(int); + method public abstract void onInterrupt(); + method protected boolean onKeyEvent(android.view.KeyEvent); + method protected void onServiceConnected(); + method public final boolean performGlobalAction(int); + method public final void setServiceInfo(android.accessibilityservice.AccessibilityServiceInfo); + field public static final int GESTURE_SWIPE_DOWN = 2; // 0x2 + field public static final int GESTURE_SWIPE_DOWN_AND_LEFT = 15; // 0xf + field public static final int GESTURE_SWIPE_DOWN_AND_RIGHT = 16; // 0x10 + field public static final int GESTURE_SWIPE_DOWN_AND_UP = 8; // 0x8 + field public static final int GESTURE_SWIPE_LEFT = 3; // 0x3 + field public static final int GESTURE_SWIPE_LEFT_AND_DOWN = 10; // 0xa + field public static final int GESTURE_SWIPE_LEFT_AND_RIGHT = 5; // 0x5 + field public static final int GESTURE_SWIPE_LEFT_AND_UP = 9; // 0x9 + field public static final int GESTURE_SWIPE_RIGHT = 4; // 0x4 + field public static final int GESTURE_SWIPE_RIGHT_AND_DOWN = 12; // 0xc + field public static final int GESTURE_SWIPE_RIGHT_AND_LEFT = 6; // 0x6 + field public static final int GESTURE_SWIPE_RIGHT_AND_UP = 11; // 0xb + field public static final int GESTURE_SWIPE_UP = 1; // 0x1 + field public static final int GESTURE_SWIPE_UP_AND_DOWN = 7; // 0x7 + field public static final int GESTURE_SWIPE_UP_AND_LEFT = 13; // 0xd + field public static final int GESTURE_SWIPE_UP_AND_RIGHT = 14; // 0xe + field public static final int GLOBAL_ACTION_BACK = 1; // 0x1 + field public static final int GLOBAL_ACTION_HOME = 2; // 0x2 + field public static final int GLOBAL_ACTION_NOTIFICATIONS = 4; // 0x4 + field public static final int GLOBAL_ACTION_POWER_DIALOG = 6; // 0x6 + field public static final int GLOBAL_ACTION_QUICK_SETTINGS = 5; // 0x5 + field public static final int GLOBAL_ACTION_RECENTS = 3; // 0x3 + field public static final java.lang.String SERVICE_INTERFACE = "android.accessibilityservice.AccessibilityService"; + field public static final java.lang.String SERVICE_META_DATA = "android.accessibilityservice"; + } + + public class AccessibilityServiceInfo implements android.os.Parcelable { + ctor public AccessibilityServiceInfo(); + method public static java.lang.String capabilityToString(int); + method public int describeContents(); + method public static java.lang.String feedbackTypeToString(int); + method public static java.lang.String flagToString(int); + method public deprecated boolean getCanRetrieveWindowContent(); + method public int getCapabilities(); + method public deprecated java.lang.String getDescription(); + method public java.lang.String getId(); + method public android.content.pm.ResolveInfo getResolveInfo(); + method public java.lang.String getSettingsActivityName(); + method public java.lang.String loadDescription(android.content.pm.PackageManager); + method public void writeToParcel(android.os.Parcel, int); + field public static final int CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 4; // 0x4 + field public static final int CAPABILITY_CAN_REQUEST_FILTER_KEY_EVENTS = 8; // 0x8 + field public static final int CAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION = 2; // 0x2 + field public static final int CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT = 1; // 0x1 + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int DEFAULT = 1; // 0x1 + field public static final int FEEDBACK_ALL_MASK = -1; // 0xffffffff + field public static final int FEEDBACK_AUDIBLE = 4; // 0x4 + field public static final int FEEDBACK_BRAILLE = 32; // 0x20 + field public static final int FEEDBACK_GENERIC = 16; // 0x10 + field public static final int FEEDBACK_HAPTIC = 2; // 0x2 + field public static final int FEEDBACK_SPOKEN = 1; // 0x1 + field public static final int FEEDBACK_VISUAL = 8; // 0x8 + field public static final int FLAG_INCLUDE_NOT_IMPORTANT_VIEWS = 2; // 0x2 + field public static final int FLAG_REPORT_VIEW_IDS = 16; // 0x10 + field public static final int FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 8; // 0x8 + field public static final int FLAG_REQUEST_FILTER_KEY_EVENTS = 32; // 0x20 + field public static final int FLAG_REQUEST_TOUCH_EXPLORATION_MODE = 4; // 0x4 + field public static final int FLAG_RETRIEVE_INTERACTIVE_WINDOWS = 64; // 0x40 + field public int eventTypes; + field public int feedbackType; + field public int flags; + field public long notificationTimeout; + field public java.lang.String[] packageNames; + } + +} + +package android.accounts { + + public abstract class AbstractAccountAuthenticator { + ctor public AbstractAccountAuthenticator(android.content.Context); + method public abstract android.os.Bundle addAccount(android.accounts.AccountAuthenticatorResponse, java.lang.String, java.lang.String, java.lang.String[], android.os.Bundle) throws android.accounts.NetworkErrorException; + method public android.os.Bundle addAccountFromCredentials(android.accounts.AccountAuthenticatorResponse, android.accounts.Account, android.os.Bundle) throws android.accounts.NetworkErrorException; + method public abstract android.os.Bundle confirmCredentials(android.accounts.AccountAuthenticatorResponse, android.accounts.Account, android.os.Bundle) throws android.accounts.NetworkErrorException; + method public abstract android.os.Bundle editProperties(android.accounts.AccountAuthenticatorResponse, java.lang.String); + method public android.os.Bundle getAccountCredentialsForCloning(android.accounts.AccountAuthenticatorResponse, android.accounts.Account) throws android.accounts.NetworkErrorException; + method public android.os.Bundle getAccountRemovalAllowed(android.accounts.AccountAuthenticatorResponse, android.accounts.Account) throws android.accounts.NetworkErrorException; + method public abstract android.os.Bundle getAuthToken(android.accounts.AccountAuthenticatorResponse, android.accounts.Account, java.lang.String, android.os.Bundle) throws android.accounts.NetworkErrorException; + method public abstract java.lang.String getAuthTokenLabel(java.lang.String); + method public final android.os.IBinder getIBinder(); + method public abstract android.os.Bundle hasFeatures(android.accounts.AccountAuthenticatorResponse, android.accounts.Account, java.lang.String[]) throws android.accounts.NetworkErrorException; + method public abstract android.os.Bundle updateCredentials(android.accounts.AccountAuthenticatorResponse, android.accounts.Account, java.lang.String, android.os.Bundle) throws android.accounts.NetworkErrorException; + } + + public class Account implements android.os.Parcelable { + ctor public Account(java.lang.String, java.lang.String); + ctor public Account(android.os.Parcel); + method public int describeContents(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public final java.lang.String name; + field public final java.lang.String type; + } + + public class AccountAuthenticatorActivity extends android.app.Activity { + ctor public AccountAuthenticatorActivity(); + method public final void setAccountAuthenticatorResult(android.os.Bundle); + } + + public class AccountAuthenticatorResponse implements android.os.Parcelable { + ctor public AccountAuthenticatorResponse(android.os.Parcel); + method public int describeContents(); + method public void onError(int, java.lang.String); + method public void onRequestContinued(); + method public void onResult(android.os.Bundle); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public class AccountManager { + method public android.accounts.AccountManagerFuture addAccount(java.lang.String, java.lang.String, java.lang.String[], android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback, android.os.Handler); + method public boolean addAccountExplicitly(android.accounts.Account, java.lang.String, android.os.Bundle); + method public void addOnAccountsUpdatedListener(android.accounts.OnAccountsUpdateListener, android.os.Handler, boolean); + method public java.lang.String blockingGetAuthToken(android.accounts.Account, java.lang.String, boolean) throws android.accounts.AuthenticatorException, java.io.IOException, android.accounts.OperationCanceledException; + method public void clearPassword(android.accounts.Account); + method public android.accounts.AccountManagerFuture confirmCredentials(android.accounts.Account, android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback, android.os.Handler); + method public android.accounts.AccountManagerFuture editProperties(java.lang.String, android.app.Activity, android.accounts.AccountManagerCallback, android.os.Handler); + method public static android.accounts.AccountManager get(android.content.Context); + method public android.accounts.Account[] getAccounts(); + method public android.accounts.Account[] getAccountsByType(java.lang.String); + method public android.accounts.AccountManagerFuture getAccountsByTypeAndFeatures(java.lang.String, java.lang.String[], android.accounts.AccountManagerCallback, android.os.Handler); + method public android.accounts.Account[] getAccountsByTypeForPackage(java.lang.String, java.lang.String); + method public android.accounts.AccountManagerFuture getAuthToken(android.accounts.Account, java.lang.String, android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback, android.os.Handler); + method public deprecated android.accounts.AccountManagerFuture getAuthToken(android.accounts.Account, java.lang.String, boolean, android.accounts.AccountManagerCallback, android.os.Handler); + method public android.accounts.AccountManagerFuture getAuthToken(android.accounts.Account, java.lang.String, android.os.Bundle, boolean, android.accounts.AccountManagerCallback, android.os.Handler); + method public android.accounts.AccountManagerFuture getAuthTokenByFeatures(java.lang.String, java.lang.String, java.lang.String[], android.app.Activity, android.os.Bundle, android.os.Bundle, android.accounts.AccountManagerCallback, android.os.Handler); + method public android.accounts.AuthenticatorDescription[] getAuthenticatorTypes(); + method public java.lang.String getPassword(android.accounts.Account); + method public java.lang.String getPreviousName(android.accounts.Account); + method public java.lang.String getUserData(android.accounts.Account, java.lang.String); + method public android.accounts.AccountManagerFuture hasFeatures(android.accounts.Account, java.lang.String[], android.accounts.AccountManagerCallback, android.os.Handler); + method public void invalidateAuthToken(java.lang.String, java.lang.String); + method public static android.content.Intent newChooseAccountIntent(android.accounts.Account, java.util.ArrayList, java.lang.String[], boolean, java.lang.String, java.lang.String, java.lang.String[], android.os.Bundle); + method public java.lang.String peekAuthToken(android.accounts.Account, java.lang.String); + method public deprecated android.accounts.AccountManagerFuture removeAccount(android.accounts.Account, android.accounts.AccountManagerCallback, android.os.Handler); + method public android.accounts.AccountManagerFuture removeAccount(android.accounts.Account, android.app.Activity, android.accounts.AccountManagerCallback, android.os.Handler); + method public boolean removeAccountExplicitly(android.accounts.Account); + method public void removeOnAccountsUpdatedListener(android.accounts.OnAccountsUpdateListener); + method public android.accounts.AccountManagerFuture renameAccount(android.accounts.Account, java.lang.String, android.accounts.AccountManagerCallback, android.os.Handler); + method public void setAuthToken(android.accounts.Account, java.lang.String, java.lang.String); + method public void setPassword(android.accounts.Account, java.lang.String); + method public void setUserData(android.accounts.Account, java.lang.String, java.lang.String); + method public android.accounts.AccountManagerFuture updateCredentials(android.accounts.Account, java.lang.String, android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback, android.os.Handler); + field public static final java.lang.String ACTION_AUTHENTICATOR_INTENT = "android.accounts.AccountAuthenticator"; + field public static final java.lang.String AUTHENTICATOR_ATTRIBUTES_NAME = "account-authenticator"; + field public static final java.lang.String AUTHENTICATOR_META_DATA_NAME = "android.accounts.AccountAuthenticator"; + field public static final int ERROR_CODE_BAD_ARGUMENTS = 7; // 0x7 + field public static final int ERROR_CODE_BAD_AUTHENTICATION = 9; // 0x9 + field public static final int ERROR_CODE_BAD_REQUEST = 8; // 0x8 + field public static final int ERROR_CODE_CANCELED = 4; // 0x4 + field public static final int ERROR_CODE_INVALID_RESPONSE = 5; // 0x5 + field public static final int ERROR_CODE_NETWORK_ERROR = 3; // 0x3 + field public static final int ERROR_CODE_REMOTE_EXCEPTION = 1; // 0x1 + field public static final int ERROR_CODE_UNSUPPORTED_OPERATION = 6; // 0x6 + field public static final java.lang.String KEY_ACCOUNTS = "accounts"; + field public static final java.lang.String KEY_ACCOUNT_AUTHENTICATOR_RESPONSE = "accountAuthenticatorResponse"; + field public static final java.lang.String KEY_ACCOUNT_MANAGER_RESPONSE = "accountManagerResponse"; + field public static final java.lang.String KEY_ACCOUNT_NAME = "authAccount"; + field public static final java.lang.String KEY_ACCOUNT_TYPE = "accountType"; + field public static final java.lang.String KEY_ANDROID_PACKAGE_NAME = "androidPackageName"; + field public static final java.lang.String KEY_AUTHENTICATOR_TYPES = "authenticator_types"; + field public static final java.lang.String KEY_AUTHTOKEN = "authtoken"; + field public static final java.lang.String KEY_AUTH_FAILED_MESSAGE = "authFailedMessage"; + field public static final java.lang.String KEY_AUTH_TOKEN_LABEL = "authTokenLabelKey"; + field public static final java.lang.String KEY_BOOLEAN_RESULT = "booleanResult"; + field public static final java.lang.String KEY_CALLER_PID = "callerPid"; + field public static final java.lang.String KEY_CALLER_UID = "callerUid"; + field public static final java.lang.String KEY_ERROR_CODE = "errorCode"; + field public static final java.lang.String KEY_ERROR_MESSAGE = "errorMessage"; + field public static final java.lang.String KEY_INTENT = "intent"; + field public static final java.lang.String KEY_PASSWORD = "password"; + field public static final java.lang.String KEY_USERDATA = "userdata"; + field public static final java.lang.String LOGIN_ACCOUNTS_CHANGED_ACTION = "android.accounts.LOGIN_ACCOUNTS_CHANGED"; + } + + public abstract interface AccountManagerCallback { + method public abstract void run(android.accounts.AccountManagerFuture); + } + + public abstract interface AccountManagerFuture { + method public abstract boolean cancel(boolean); + method public abstract V getResult() throws android.accounts.AuthenticatorException, java.io.IOException, android.accounts.OperationCanceledException; + method public abstract V getResult(long, java.util.concurrent.TimeUnit) throws android.accounts.AuthenticatorException, java.io.IOException, android.accounts.OperationCanceledException; + method public abstract boolean isCancelled(); + method public abstract boolean isDone(); + } + + public class AccountsException extends java.lang.Exception { + ctor public AccountsException(); + ctor public AccountsException(java.lang.String); + ctor public AccountsException(java.lang.String, java.lang.Throwable); + ctor public AccountsException(java.lang.Throwable); + } + + public class AuthenticatorDescription implements android.os.Parcelable { + ctor public AuthenticatorDescription(java.lang.String, java.lang.String, int, int, int, int, boolean); + ctor public AuthenticatorDescription(java.lang.String, java.lang.String, int, int, int, int); + method public int describeContents(); + method public static android.accounts.AuthenticatorDescription newKey(java.lang.String); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public final int accountPreferencesId; + field public final boolean customTokens; + field public final int iconId; + field public final int labelId; + field public final java.lang.String packageName; + field public final int smallIconId; + field public final java.lang.String type; + } + + public class AuthenticatorException extends android.accounts.AccountsException { + ctor public AuthenticatorException(); + ctor public AuthenticatorException(java.lang.String); + ctor public AuthenticatorException(java.lang.String, java.lang.Throwable); + ctor public AuthenticatorException(java.lang.Throwable); + } + + public class NetworkErrorException extends android.accounts.AccountsException { + ctor public NetworkErrorException(); + ctor public NetworkErrorException(java.lang.String); + ctor public NetworkErrorException(java.lang.String, java.lang.Throwable); + ctor public NetworkErrorException(java.lang.Throwable); + } + + public abstract interface OnAccountsUpdateListener { + method public abstract void onAccountsUpdated(android.accounts.Account[]); + } + + public class OperationCanceledException extends android.accounts.AccountsException { + ctor public OperationCanceledException(); + ctor public OperationCanceledException(java.lang.String); + ctor public OperationCanceledException(java.lang.String, java.lang.Throwable); + ctor public OperationCanceledException(java.lang.Throwable); + } + +} + +package android.animation { + + public abstract class Animator implements java.lang.Cloneable { + ctor public Animator(); + method public void addListener(android.animation.Animator.AnimatorListener); + method public void addPauseListener(android.animation.Animator.AnimatorPauseListener); + method public void cancel(); + method public android.animation.Animator clone(); + method public void end(); + method public abstract long getDuration(); + method public android.animation.TimeInterpolator getInterpolator(); + method public java.util.ArrayList getListeners(); + method public abstract long getStartDelay(); + method public boolean isPaused(); + method public abstract boolean isRunning(); + method public boolean isStarted(); + method public void pause(); + method public void removeAllListeners(); + method public void removeListener(android.animation.Animator.AnimatorListener); + method public void removePauseListener(android.animation.Animator.AnimatorPauseListener); + method public void resume(); + method public abstract android.animation.Animator setDuration(long); + method public abstract void setInterpolator(android.animation.TimeInterpolator); + method public abstract void setStartDelay(long); + method public void setTarget(java.lang.Object); + method public void setupEndValues(); + method public void setupStartValues(); + method public void start(); + } + + public static abstract interface Animator.AnimatorListener { + method public abstract void onAnimationCancel(android.animation.Animator); + method public abstract void onAnimationEnd(android.animation.Animator); + method public abstract void onAnimationRepeat(android.animation.Animator); + method public abstract void onAnimationStart(android.animation.Animator); + } + + public static abstract interface Animator.AnimatorPauseListener { + method public abstract void onAnimationPause(android.animation.Animator); + method public abstract void onAnimationResume(android.animation.Animator); + } + + public class AnimatorInflater { + ctor public AnimatorInflater(); + method public static android.animation.Animator loadAnimator(android.content.Context, int) throws android.content.res.Resources.NotFoundException; + method public static android.animation.StateListAnimator loadStateListAnimator(android.content.Context, int) throws android.content.res.Resources.NotFoundException; + } + + public abstract class AnimatorListenerAdapter implements android.animation.Animator.AnimatorListener android.animation.Animator.AnimatorPauseListener { + ctor public AnimatorListenerAdapter(); + method public void onAnimationCancel(android.animation.Animator); + method public void onAnimationEnd(android.animation.Animator); + method public void onAnimationPause(android.animation.Animator); + method public void onAnimationRepeat(android.animation.Animator); + method public void onAnimationResume(android.animation.Animator); + method public void onAnimationStart(android.animation.Animator); + } + + public final class AnimatorSet extends android.animation.Animator { + ctor public AnimatorSet(); + method public java.util.ArrayList getChildAnimations(); + method public long getDuration(); + method public long getStartDelay(); + method public boolean isRunning(); + method public android.animation.AnimatorSet.Builder play(android.animation.Animator); + method public void playSequentially(android.animation.Animator...); + method public void playSequentially(java.util.List); + method public void playTogether(android.animation.Animator...); + method public void playTogether(java.util.Collection); + method public android.animation.AnimatorSet setDuration(long); + method public void setInterpolator(android.animation.TimeInterpolator); + method public void setStartDelay(long); + } + + public class AnimatorSet.Builder { + method public android.animation.AnimatorSet.Builder after(android.animation.Animator); + method public android.animation.AnimatorSet.Builder after(long); + method public android.animation.AnimatorSet.Builder before(android.animation.Animator); + method public android.animation.AnimatorSet.Builder with(android.animation.Animator); + } + + public class ArgbEvaluator implements android.animation.TypeEvaluator { + ctor public ArgbEvaluator(); + method public java.lang.Object evaluate(float, java.lang.Object, java.lang.Object); + } + + public abstract class BidirectionalTypeConverter extends android.animation.TypeConverter { + ctor public BidirectionalTypeConverter(java.lang.Class, java.lang.Class); + method public abstract T convertBack(V); + method public android.animation.BidirectionalTypeConverter invert(); + } + + public class FloatArrayEvaluator implements android.animation.TypeEvaluator { + ctor public FloatArrayEvaluator(); + ctor public FloatArrayEvaluator(float[]); + method public float[] evaluate(float, float[], float[]); + } + + public class FloatEvaluator implements android.animation.TypeEvaluator { + ctor public FloatEvaluator(); + method public java.lang.Float evaluate(float, java.lang.Number, java.lang.Number); + } + + public class IntArrayEvaluator implements android.animation.TypeEvaluator { + ctor public IntArrayEvaluator(); + ctor public IntArrayEvaluator(int[]); + method public int[] evaluate(float, int[], int[]); + } + + public class IntEvaluator implements android.animation.TypeEvaluator { + ctor public IntEvaluator(); + method public java.lang.Integer evaluate(float, java.lang.Integer, java.lang.Integer); + } + + public abstract class Keyframe implements java.lang.Cloneable { + ctor public Keyframe(); + method public abstract android.animation.Keyframe clone(); + method public float getFraction(); + method public android.animation.TimeInterpolator getInterpolator(); + method public java.lang.Class getType(); + method public abstract java.lang.Object getValue(); + method public boolean hasValue(); + method public static android.animation.Keyframe ofFloat(float, float); + method public static android.animation.Keyframe ofFloat(float); + method public static android.animation.Keyframe ofInt(float, int); + method public static android.animation.Keyframe ofInt(float); + method public static android.animation.Keyframe ofObject(float, java.lang.Object); + method public static android.animation.Keyframe ofObject(float); + method public void setFraction(float); + method public void setInterpolator(android.animation.TimeInterpolator); + method public abstract void setValue(java.lang.Object); + } + + public class LayoutTransition { + ctor public LayoutTransition(); + method public void addChild(android.view.ViewGroup, android.view.View); + method public void addTransitionListener(android.animation.LayoutTransition.TransitionListener); + method public void disableTransitionType(int); + method public void enableTransitionType(int); + method public android.animation.Animator getAnimator(int); + method public long getDuration(int); + method public android.animation.TimeInterpolator getInterpolator(int); + method public long getStagger(int); + method public long getStartDelay(int); + method public java.util.List getTransitionListeners(); + method public deprecated void hideChild(android.view.ViewGroup, android.view.View); + method public void hideChild(android.view.ViewGroup, android.view.View, int); + method public boolean isChangingLayout(); + method public boolean isRunning(); + method public boolean isTransitionTypeEnabled(int); + method public void removeChild(android.view.ViewGroup, android.view.View); + method public void removeTransitionListener(android.animation.LayoutTransition.TransitionListener); + method public void setAnimateParentHierarchy(boolean); + method public void setAnimator(int, android.animation.Animator); + method public void setDuration(long); + method public void setDuration(int, long); + method public void setInterpolator(int, android.animation.TimeInterpolator); + method public void setStagger(int, long); + method public void setStartDelay(int, long); + method public deprecated void showChild(android.view.ViewGroup, android.view.View); + method public void showChild(android.view.ViewGroup, android.view.View, int); + field public static final int APPEARING = 2; // 0x2 + field public static final int CHANGE_APPEARING = 0; // 0x0 + field public static final int CHANGE_DISAPPEARING = 1; // 0x1 + field public static final int CHANGING = 4; // 0x4 + field public static final int DISAPPEARING = 3; // 0x3 + } + + public static abstract interface LayoutTransition.TransitionListener { + method public abstract void endTransition(android.animation.LayoutTransition, android.view.ViewGroup, android.view.View, int); + method public abstract void startTransition(android.animation.LayoutTransition, android.view.ViewGroup, android.view.View, int); + } + + public final class ObjectAnimator extends android.animation.ValueAnimator { + ctor public ObjectAnimator(); + method public java.lang.String getPropertyName(); + method public java.lang.Object getTarget(); + method public static android.animation.ObjectAnimator ofArgb(java.lang.Object, java.lang.String, int...); + method public static android.animation.ObjectAnimator ofArgb(T, android.util.Property, int...); + method public static android.animation.ObjectAnimator ofFloat(java.lang.Object, java.lang.String, float...); + method public static android.animation.ObjectAnimator ofFloat(java.lang.Object, java.lang.String, java.lang.String, android.graphics.Path); + method public static android.animation.ObjectAnimator ofFloat(T, android.util.Property, float...); + method public static android.animation.ObjectAnimator ofFloat(T, android.util.Property, android.util.Property, android.graphics.Path); + method public static android.animation.ObjectAnimator ofInt(java.lang.Object, java.lang.String, int...); + method public static android.animation.ObjectAnimator ofInt(java.lang.Object, java.lang.String, java.lang.String, android.graphics.Path); + method public static android.animation.ObjectAnimator ofInt(T, android.util.Property, int...); + method public static android.animation.ObjectAnimator ofInt(T, android.util.Property, android.util.Property, android.graphics.Path); + method public static android.animation.ObjectAnimator ofMultiFloat(java.lang.Object, java.lang.String, float[][]); + method public static android.animation.ObjectAnimator ofMultiFloat(java.lang.Object, java.lang.String, android.graphics.Path); + method public static android.animation.ObjectAnimator ofMultiFloat(java.lang.Object, java.lang.String, android.animation.TypeConverter, android.animation.TypeEvaluator, T...); + method public static android.animation.ObjectAnimator ofMultiInt(java.lang.Object, java.lang.String, int[][]); + method public static android.animation.ObjectAnimator ofMultiInt(java.lang.Object, java.lang.String, android.graphics.Path); + method public static android.animation.ObjectAnimator ofMultiInt(java.lang.Object, java.lang.String, android.animation.TypeConverter, android.animation.TypeEvaluator, T...); + method public static android.animation.ObjectAnimator ofObject(java.lang.Object, java.lang.String, android.animation.TypeEvaluator, java.lang.Object...); + method public static android.animation.ObjectAnimator ofObject(java.lang.Object, java.lang.String, android.animation.TypeConverter, android.graphics.Path); + method public static android.animation.ObjectAnimator ofObject(T, android.util.Property, android.animation.TypeEvaluator, V...); + method public static android.animation.ObjectAnimator ofObject(T, android.util.Property, android.animation.TypeConverter, android.animation.TypeEvaluator, V...); + method public static android.animation.ObjectAnimator ofObject(T, android.util.Property, android.animation.TypeConverter, android.graphics.Path); + method public static android.animation.ObjectAnimator ofPropertyValuesHolder(java.lang.Object, android.animation.PropertyValuesHolder...); + method public void setAutoCancel(boolean); + method public void setProperty(android.util.Property); + method public void setPropertyName(java.lang.String); + } + + public class PointFEvaluator implements android.animation.TypeEvaluator { + ctor public PointFEvaluator(); + ctor public PointFEvaluator(android.graphics.PointF); + method public android.graphics.PointF evaluate(float, android.graphics.PointF, android.graphics.PointF); + } + + public class PropertyValuesHolder implements java.lang.Cloneable { + method public android.animation.PropertyValuesHolder clone(); + method public java.lang.String getPropertyName(); + method public static android.animation.PropertyValuesHolder ofFloat(java.lang.String, float...); + method public static android.animation.PropertyValuesHolder ofFloat(android.util.Property, float...); + method public static android.animation.PropertyValuesHolder ofInt(java.lang.String, int...); + method public static android.animation.PropertyValuesHolder ofInt(android.util.Property, int...); + method public static android.animation.PropertyValuesHolder ofKeyframe(java.lang.String, android.animation.Keyframe...); + method public static android.animation.PropertyValuesHolder ofKeyframe(android.util.Property, android.animation.Keyframe...); + method public static android.animation.PropertyValuesHolder ofMultiFloat(java.lang.String, float[][]); + method public static android.animation.PropertyValuesHolder ofMultiFloat(java.lang.String, android.graphics.Path); + method public static android.animation.PropertyValuesHolder ofMultiFloat(java.lang.String, android.animation.TypeConverter, android.animation.TypeEvaluator, V...); + method public static android.animation.PropertyValuesHolder ofMultiFloat(java.lang.String, android.animation.TypeConverter, android.animation.TypeEvaluator, android.animation.Keyframe...); + method public static android.animation.PropertyValuesHolder ofMultiInt(java.lang.String, int[][]); + method public static android.animation.PropertyValuesHolder ofMultiInt(java.lang.String, android.graphics.Path); + method public static android.animation.PropertyValuesHolder ofMultiInt(java.lang.String, android.animation.TypeConverter, android.animation.TypeEvaluator, V...); + method public static android.animation.PropertyValuesHolder ofMultiInt(java.lang.String, android.animation.TypeConverter, android.animation.TypeEvaluator, android.animation.Keyframe...); + method public static android.animation.PropertyValuesHolder ofObject(java.lang.String, android.animation.TypeEvaluator, java.lang.Object...); + method public static android.animation.PropertyValuesHolder ofObject(java.lang.String, android.animation.TypeConverter, android.graphics.Path); + method public static android.animation.PropertyValuesHolder ofObject(android.util.Property, android.animation.TypeEvaluator, V...); + method public static android.animation.PropertyValuesHolder ofObject(android.util.Property, android.animation.TypeConverter, android.animation.TypeEvaluator, T...); + method public static android.animation.PropertyValuesHolder ofObject(android.util.Property, android.animation.TypeConverter, android.graphics.Path); + method public void setConverter(android.animation.TypeConverter); + method public void setEvaluator(android.animation.TypeEvaluator); + method public void setFloatValues(float...); + method public void setIntValues(int...); + method public void setKeyframes(android.animation.Keyframe...); + method public void setObjectValues(java.lang.Object...); + method public void setProperty(android.util.Property); + method public void setPropertyName(java.lang.String); + } + + public class RectEvaluator implements android.animation.TypeEvaluator { + ctor public RectEvaluator(); + ctor public RectEvaluator(android.graphics.Rect); + method public android.graphics.Rect evaluate(float, android.graphics.Rect, android.graphics.Rect); + } + + public class StateListAnimator implements java.lang.Cloneable { + ctor public StateListAnimator(); + method public void addState(int[], android.animation.Animator); + method public android.animation.StateListAnimator clone(); + method public void jumpToCurrentState(); + } + + public class TimeAnimator extends android.animation.ValueAnimator { + ctor public TimeAnimator(); + method public void setTimeListener(android.animation.TimeAnimator.TimeListener); + } + + public static abstract interface TimeAnimator.TimeListener { + method public abstract void onTimeUpdate(android.animation.TimeAnimator, long, long); + } + + public abstract interface TimeInterpolator { + method public abstract float getInterpolation(float); + } + + public abstract class TypeConverter { + ctor public TypeConverter(java.lang.Class, java.lang.Class); + method public abstract V convert(T); + } + + public abstract interface TypeEvaluator { + method public abstract T evaluate(float, T, T); + } + + public class ValueAnimator extends android.animation.Animator { + ctor public ValueAnimator(); + method public void addUpdateListener(android.animation.ValueAnimator.AnimatorUpdateListener); + method public float getAnimatedFraction(); + method public java.lang.Object getAnimatedValue(); + method public java.lang.Object getAnimatedValue(java.lang.String); + method public long getCurrentPlayTime(); + method public long getDuration(); + method public static long getFrameDelay(); + method public int getRepeatCount(); + method public int getRepeatMode(); + method public long getStartDelay(); + method public android.animation.PropertyValuesHolder[] getValues(); + method public boolean isRunning(); + method public static android.animation.ValueAnimator ofArgb(int...); + method public static android.animation.ValueAnimator ofFloat(float...); + method public static android.animation.ValueAnimator ofInt(int...); + method public static android.animation.ValueAnimator ofObject(android.animation.TypeEvaluator, java.lang.Object...); + method public static android.animation.ValueAnimator ofPropertyValuesHolder(android.animation.PropertyValuesHolder...); + method public void removeAllUpdateListeners(); + method public void removeUpdateListener(android.animation.ValueAnimator.AnimatorUpdateListener); + method public void reverse(); + method public void setCurrentFraction(float); + method public void setCurrentPlayTime(long); + method public android.animation.ValueAnimator setDuration(long); + method public void setEvaluator(android.animation.TypeEvaluator); + method public void setFloatValues(float...); + method public static void setFrameDelay(long); + method public void setIntValues(int...); + method public void setInterpolator(android.animation.TimeInterpolator); + method public void setObjectValues(java.lang.Object...); + method public void setRepeatCount(int); + method public void setRepeatMode(int); + method public void setStartDelay(long); + method public void setValues(android.animation.PropertyValuesHolder...); + field public static final int INFINITE = -1; // 0xffffffff + field public static final int RESTART = 1; // 0x1 + field public static final int REVERSE = 2; // 0x2 + } + + public static abstract interface ValueAnimator.AnimatorUpdateListener { + method public abstract void onAnimationUpdate(android.animation.ValueAnimator); + } + +} + +package android.annotation { + + public abstract class SuppressLint implements java.lang.annotation.Annotation { + } + + public abstract class TargetApi implements java.lang.annotation.Annotation { + } + +} + +package android.app { + + public abstract class ActionBar { + ctor public ActionBar(); + method public abstract void addOnMenuVisibilityListener(android.app.ActionBar.OnMenuVisibilityListener); + method public abstract deprecated void addTab(android.app.ActionBar.Tab); + method public abstract deprecated void addTab(android.app.ActionBar.Tab, boolean); + method public abstract deprecated void addTab(android.app.ActionBar.Tab, int); + method public abstract deprecated void addTab(android.app.ActionBar.Tab, int, boolean); + method public abstract android.view.View getCustomView(); + method public abstract int getDisplayOptions(); + method public float getElevation(); + method public abstract int getHeight(); + method public int getHideOffset(); + method public abstract deprecated int getNavigationItemCount(); + method public abstract deprecated int getNavigationMode(); + method public abstract deprecated int getSelectedNavigationIndex(); + method public abstract deprecated android.app.ActionBar.Tab getSelectedTab(); + method public abstract java.lang.CharSequence getSubtitle(); + method public abstract deprecated android.app.ActionBar.Tab getTabAt(int); + method public abstract deprecated int getTabCount(); + method public android.content.Context getThemedContext(); + method public abstract java.lang.CharSequence getTitle(); + method public abstract void hide(); + method public boolean isHideOnContentScrollEnabled(); + method public abstract boolean isShowing(); + method public abstract deprecated android.app.ActionBar.Tab newTab(); + method public abstract deprecated void removeAllTabs(); + method public abstract void removeOnMenuVisibilityListener(android.app.ActionBar.OnMenuVisibilityListener); + method public abstract deprecated void removeTab(android.app.ActionBar.Tab); + method public abstract deprecated void removeTabAt(int); + method public abstract deprecated void selectTab(android.app.ActionBar.Tab); + method public abstract void setBackgroundDrawable(android.graphics.drawable.Drawable); + method public abstract void setCustomView(android.view.View); + method public abstract void setCustomView(android.view.View, android.app.ActionBar.LayoutParams); + method public abstract void setCustomView(int); + method public abstract void setDisplayHomeAsUpEnabled(boolean); + method public abstract void setDisplayOptions(int); + method public abstract void setDisplayOptions(int, int); + method public abstract void setDisplayShowCustomEnabled(boolean); + method public abstract void setDisplayShowHomeEnabled(boolean); + method public abstract void setDisplayShowTitleEnabled(boolean); + method public abstract void setDisplayUseLogoEnabled(boolean); + method public void setElevation(float); + method public void setHideOffset(int); + method public void setHideOnContentScrollEnabled(boolean); + method public void setHomeActionContentDescription(java.lang.CharSequence); + method public void setHomeActionContentDescription(int); + method public void setHomeAsUpIndicator(android.graphics.drawable.Drawable); + method public void setHomeAsUpIndicator(int); + method public void setHomeButtonEnabled(boolean); + method public abstract void setIcon(int); + method public abstract void setIcon(android.graphics.drawable.Drawable); + method public abstract deprecated void setListNavigationCallbacks(android.widget.SpinnerAdapter, android.app.ActionBar.OnNavigationListener); + method public abstract void setLogo(int); + method public abstract void setLogo(android.graphics.drawable.Drawable); + method public abstract deprecated void setNavigationMode(int); + method public abstract deprecated void setSelectedNavigationItem(int); + method public void setSplitBackgroundDrawable(android.graphics.drawable.Drawable); + method public void setStackedBackgroundDrawable(android.graphics.drawable.Drawable); + method public abstract void setSubtitle(java.lang.CharSequence); + method public abstract void setSubtitle(int); + method public abstract void setTitle(java.lang.CharSequence); + method public abstract void setTitle(int); + method public abstract void show(); + field public static final int DISPLAY_HOME_AS_UP = 4; // 0x4 + field public static final int DISPLAY_SHOW_CUSTOM = 16; // 0x10 + field public static final int DISPLAY_SHOW_HOME = 2; // 0x2 + field public static final int DISPLAY_SHOW_TITLE = 8; // 0x8 + field public static final int DISPLAY_USE_LOGO = 1; // 0x1 + field public static final deprecated int NAVIGATION_MODE_LIST = 1; // 0x1 + field public static final deprecated int NAVIGATION_MODE_STANDARD = 0; // 0x0 + field public static final deprecated int NAVIGATION_MODE_TABS = 2; // 0x2 + } + + public static class ActionBar.LayoutParams extends android.view.ViewGroup.MarginLayoutParams { + ctor public ActionBar.LayoutParams(android.content.Context, android.util.AttributeSet); + ctor public ActionBar.LayoutParams(int, int); + ctor public ActionBar.LayoutParams(int, int, int); + ctor public ActionBar.LayoutParams(int); + ctor public ActionBar.LayoutParams(android.app.ActionBar.LayoutParams); + ctor public ActionBar.LayoutParams(android.view.ViewGroup.LayoutParams); + field public int gravity; + } + + public static abstract interface ActionBar.OnMenuVisibilityListener { + method public abstract void onMenuVisibilityChanged(boolean); + } + + public static abstract deprecated interface ActionBar.OnNavigationListener { + method public abstract boolean onNavigationItemSelected(int, long); + } + + public static abstract deprecated class ActionBar.Tab { + ctor public ActionBar.Tab(); + method public abstract java.lang.CharSequence getContentDescription(); + method public abstract android.view.View getCustomView(); + method public abstract android.graphics.drawable.Drawable getIcon(); + method public abstract int getPosition(); + method public abstract java.lang.Object getTag(); + method public abstract java.lang.CharSequence getText(); + method public abstract void select(); + method public abstract android.app.ActionBar.Tab setContentDescription(int); + method public abstract android.app.ActionBar.Tab setContentDescription(java.lang.CharSequence); + method public abstract android.app.ActionBar.Tab setCustomView(android.view.View); + method public abstract android.app.ActionBar.Tab setCustomView(int); + method public abstract android.app.ActionBar.Tab setIcon(android.graphics.drawable.Drawable); + method public abstract android.app.ActionBar.Tab setIcon(int); + method public abstract android.app.ActionBar.Tab setTabListener(android.app.ActionBar.TabListener); + method public abstract android.app.ActionBar.Tab setTag(java.lang.Object); + method public abstract android.app.ActionBar.Tab setText(java.lang.CharSequence); + method public abstract android.app.ActionBar.Tab setText(int); + field public static final int INVALID_POSITION = -1; // 0xffffffff + } + + public static abstract deprecated interface ActionBar.TabListener { + method public abstract void onTabReselected(android.app.ActionBar.Tab, android.app.FragmentTransaction); + method public abstract void onTabSelected(android.app.ActionBar.Tab, android.app.FragmentTransaction); + method public abstract void onTabUnselected(android.app.ActionBar.Tab, android.app.FragmentTransaction); + } + + public class Activity extends android.view.ContextThemeWrapper implements android.content.ComponentCallbacks2 android.view.KeyEvent.Callback android.view.LayoutInflater.Factory2 android.view.View.OnCreateContextMenuListener android.view.Window.Callback { + ctor public Activity(); + method public void addContentView(android.view.View, android.view.ViewGroup.LayoutParams); + method public void closeContextMenu(); + method public void closeOptionsMenu(); + method public void convertFromTranslucent(); + method public boolean convertToTranslucent(android.app.Activity.TranslucentConversionListener, android.app.ActivityOptions); + method public android.app.PendingIntent createPendingResult(int, android.content.Intent, int); + method public final deprecated void dismissDialog(int); + method public boolean dispatchGenericMotionEvent(android.view.MotionEvent); + method public boolean dispatchKeyEvent(android.view.KeyEvent); + method public boolean dispatchKeyShortcutEvent(android.view.KeyEvent); + method public boolean dispatchPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent); + method public boolean dispatchTouchEvent(android.view.MotionEvent); + method public boolean dispatchTrackballEvent(android.view.MotionEvent); + method public void dump(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]); + method public android.view.View findViewById(int); + method public void finish(); + method public void finishActivity(int); + method public void finishActivityFromChild(android.app.Activity, int); + method public void finishAffinity(); + method public void finishAfterTransition(); + method public void finishAndRemoveTask(); + method public void finishFromChild(android.app.Activity); + method public android.app.ActionBar getActionBar(); + method public final android.app.Application getApplication(); + method public android.content.ComponentName getCallingActivity(); + method public java.lang.String getCallingPackage(); + method public int getChangingConfigurations(); + method public android.content.ComponentName getComponentName(); + method public android.transition.Scene getContentScene(); + method public android.transition.TransitionManager getContentTransitionManager(); + method public android.view.View getCurrentFocus(); + method public android.app.FragmentManager getFragmentManager(); + method public android.content.Intent getIntent(); + method public deprecated java.lang.Object getLastNonConfigurationInstance(); + method public android.view.LayoutInflater getLayoutInflater(); + method public android.app.LoaderManager getLoaderManager(); + method public java.lang.String getLocalClassName(); + method public final android.media.session.MediaController getMediaController(); + method public android.view.MenuInflater getMenuInflater(); + method public final android.app.Activity getParent(); + method public android.content.Intent getParentActivityIntent(); + method public android.content.SharedPreferences getPreferences(int); + method public android.net.Uri getReferrer(); + method public int getRequestedOrientation(); + method public int getTaskId(); + method public final java.lang.CharSequence getTitle(); + method public final int getTitleColor(); + method public android.app.VoiceInteractor getVoiceInteractor(); + method public final int getVolumeControlStream(); + method public android.view.Window getWindow(); + method public android.view.WindowManager getWindowManager(); + method public boolean hasWindowFocus(); + method public void invalidateOptionsMenu(); + method public boolean isBackgroundVisibleBehind(); + method public boolean isChangingConfigurations(); + method public final boolean isChild(); + method public boolean isDestroyed(); + method public boolean isFinishing(); + method public boolean isImmersive(); + method public boolean isTaskRoot(); + method public boolean isVoiceInteraction(); + method public final deprecated android.database.Cursor managedQuery(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String); + method public boolean moveTaskToBack(boolean); + method public boolean navigateUpTo(android.content.Intent); + method public boolean navigateUpToFromChild(android.app.Activity, android.content.Intent); + method public void onActionModeFinished(android.view.ActionMode); + method public void onActionModeStarted(android.view.ActionMode); + method public void onActivityReenter(int, android.content.Intent); + method protected void onActivityResult(int, int, android.content.Intent); + method public void onAttachFragment(android.app.Fragment); + method public void onAttachedToWindow(); + method public void onBackPressed(); + method public void onBackgroundVisibleBehindChanged(boolean); + method protected void onChildTitleChanged(android.app.Activity, java.lang.CharSequence); + method public void onConfigurationChanged(android.content.res.Configuration); + method public void onContentChanged(); + method public boolean onContextItemSelected(android.view.MenuItem); + method public void onContextMenuClosed(android.view.Menu); + method protected void onCreate(android.os.Bundle); + method public void onCreate(android.os.Bundle, android.os.PersistableBundle); + method public void onCreateContextMenu(android.view.ContextMenu, android.view.View, android.view.ContextMenu.ContextMenuInfo); + method public java.lang.CharSequence onCreateDescription(); + method protected deprecated android.app.Dialog onCreateDialog(int); + method protected deprecated android.app.Dialog onCreateDialog(int, android.os.Bundle); + method public void onCreateNavigateUpTaskStack(android.app.TaskStackBuilder); + method public boolean onCreateOptionsMenu(android.view.Menu); + method public boolean onCreatePanelMenu(int, android.view.Menu); + method public android.view.View onCreatePanelView(int); + method public boolean onCreateThumbnail(android.graphics.Bitmap, android.graphics.Canvas); + method public android.view.View onCreateView(java.lang.String, android.content.Context, android.util.AttributeSet); + method public android.view.View onCreateView(android.view.View, java.lang.String, android.content.Context, android.util.AttributeSet); + method protected void onDestroy(); + method public void onDetachedFromWindow(); + method public void onEnterAnimationComplete(); + method public boolean onGenericMotionEvent(android.view.MotionEvent); + method public boolean onKeyDown(int, android.view.KeyEvent); + method public boolean onKeyLongPress(int, android.view.KeyEvent); + method public boolean onKeyMultiple(int, int, android.view.KeyEvent); + method public boolean onKeyShortcut(int, android.view.KeyEvent); + method public boolean onKeyUp(int, android.view.KeyEvent); + method public void onLowMemory(); + method public boolean onMenuItemSelected(int, android.view.MenuItem); + method public boolean onMenuOpened(int, android.view.Menu); + method public boolean onNavigateUp(); + method public boolean onNavigateUpFromChild(android.app.Activity); + method protected void onNewIntent(android.content.Intent); + method public boolean onOptionsItemSelected(android.view.MenuItem); + method public void onOptionsMenuClosed(android.view.Menu); + method public void onPanelClosed(int, android.view.Menu); + method protected void onPause(); + method protected void onPostCreate(android.os.Bundle); + method public void onPostCreate(android.os.Bundle, android.os.PersistableBundle); + method protected void onPostResume(); + method protected deprecated void onPrepareDialog(int, android.app.Dialog); + method protected deprecated void onPrepareDialog(int, android.app.Dialog, android.os.Bundle); + method public void onPrepareNavigateUpTaskStack(android.app.TaskStackBuilder); + method public boolean onPrepareOptionsMenu(android.view.Menu); + method public boolean onPreparePanel(int, android.view.View, android.view.Menu); + method public void onProvideAssistData(android.os.Bundle); + method protected void onRestart(); + method protected void onRestoreInstanceState(android.os.Bundle); + method public void onRestoreInstanceState(android.os.Bundle, android.os.PersistableBundle); + method protected void onResume(); + method public deprecated java.lang.Object onRetainNonConfigurationInstance(); + method protected void onSaveInstanceState(android.os.Bundle); + method public void onSaveInstanceState(android.os.Bundle, android.os.PersistableBundle); + method public boolean onSearchRequested(); + method protected void onStart(); + method protected void onStop(); + method protected void onTitleChanged(java.lang.CharSequence, int); + method public boolean onTouchEvent(android.view.MotionEvent); + method public boolean onTrackballEvent(android.view.MotionEvent); + method public void onTrimMemory(int); + method public void onUserInteraction(); + method protected void onUserLeaveHint(); + method public void onVisibleBehindCanceled(); + method public void onWindowAttributesChanged(android.view.WindowManager.LayoutParams); + method public void onWindowFocusChanged(boolean); + method public android.view.ActionMode onWindowStartingActionMode(android.view.ActionMode.Callback); + method public void openContextMenu(android.view.View); + method public void openOptionsMenu(); + method public void overridePendingTransition(int, int); + method public void postponeEnterTransition(); + method public void recreate(); + method public void registerForContextMenu(android.view.View); + method public boolean releaseInstance(); + method public final deprecated void removeDialog(int); + method public void reportFullyDrawn(); + method public boolean requestVisibleBehind(boolean); + method public final boolean requestWindowFeature(int); + method public final void runOnUiThread(java.lang.Runnable); + method public void setActionBar(android.widget.Toolbar); + method public void setContentTransitionManager(android.transition.TransitionManager); + method public void setContentView(int); + method public void setContentView(android.view.View); + method public void setContentView(android.view.View, android.view.ViewGroup.LayoutParams); + method public final void setDefaultKeyMode(int); + method public void setEnterSharedElementCallback(android.app.SharedElementCallback); + method public void setExitSharedElementCallback(android.app.SharedElementCallback); + method public final void setFeatureDrawable(int, android.graphics.drawable.Drawable); + method public final void setFeatureDrawableAlpha(int, int); + method public final void setFeatureDrawableResource(int, int); + method public final void setFeatureDrawableUri(int, android.net.Uri); + method public void setFinishOnTouchOutside(boolean); + method public void setImmersive(boolean); + method public void setIntent(android.content.Intent); + method public final void setMediaController(android.media.session.MediaController); + method public final void setProgress(int); + method public final void setProgressBarIndeterminate(boolean); + method public final void setProgressBarIndeterminateVisibility(boolean); + method public final void setProgressBarVisibility(boolean); + method public void setRequestedOrientation(int); + method public final void setResult(int); + method public final void setResult(int, android.content.Intent); + method public final void setSecondaryProgress(int); + method public void setTaskDescription(android.app.ActivityManager.TaskDescription); + method public void setTitle(java.lang.CharSequence); + method public void setTitle(int); + method public deprecated void setTitleColor(int); + method public void setVisible(boolean); + method public final void setVolumeControlStream(int); + method public boolean shouldUpRecreateTask(android.content.Intent); + method public final deprecated void showDialog(int); + method public final deprecated boolean showDialog(int, android.os.Bundle); + method public android.view.ActionMode startActionMode(android.view.ActionMode.Callback); + method public void startActivityForResult(android.content.Intent, int); + method public void startActivityForResult(android.content.Intent, int, android.os.Bundle); + method public void startActivityFromChild(android.app.Activity, android.content.Intent, int); + method public void startActivityFromChild(android.app.Activity, android.content.Intent, int, android.os.Bundle); + method public void startActivityFromFragment(android.app.Fragment, android.content.Intent, int); + method public void startActivityFromFragment(android.app.Fragment, android.content.Intent, int, android.os.Bundle); + method public boolean startActivityIfNeeded(android.content.Intent, int); + method public boolean startActivityIfNeeded(android.content.Intent, int, android.os.Bundle); + method public void startIntentSenderForResult(android.content.IntentSender, int, android.content.Intent, int, int, int) throws android.content.IntentSender.SendIntentException; + method public void startIntentSenderForResult(android.content.IntentSender, int, android.content.Intent, int, int, int, android.os.Bundle) throws android.content.IntentSender.SendIntentException; + method public void startIntentSenderFromChild(android.app.Activity, android.content.IntentSender, int, android.content.Intent, int, int, int) throws android.content.IntentSender.SendIntentException; + method public void startIntentSenderFromChild(android.app.Activity, android.content.IntentSender, int, android.content.Intent, int, int, int, android.os.Bundle) throws android.content.IntentSender.SendIntentException; + method public void startLockTask(); + method public deprecated void startManagingCursor(android.database.Cursor); + method public boolean startNextMatchingActivity(android.content.Intent); + method public boolean startNextMatchingActivity(android.content.Intent, android.os.Bundle); + method public void startPostponedEnterTransition(); + method public void startSearch(java.lang.String, boolean, android.os.Bundle, boolean); + method public void stopLockTask(); + method public deprecated void stopManagingCursor(android.database.Cursor); + method public void takeKeyEvents(boolean); + method public void triggerSearch(java.lang.String, android.os.Bundle); + method public void unregisterForContextMenu(android.view.View); + field public static final int DEFAULT_KEYS_DIALER = 1; // 0x1 + field public static final int DEFAULT_KEYS_DISABLE = 0; // 0x0 + field public static final int DEFAULT_KEYS_SEARCH_GLOBAL = 4; // 0x4 + field public static final int DEFAULT_KEYS_SEARCH_LOCAL = 3; // 0x3 + field public static final int DEFAULT_KEYS_SHORTCUT = 2; // 0x2 + field protected static final int[] FOCUSED_STATE_SET; + field public static final int RESULT_CANCELED = 0; // 0x0 + field public static final int RESULT_FIRST_USER = 1; // 0x1 + field public static final int RESULT_OK = -1; // 0xffffffff + } + + public static abstract interface Activity.TranslucentConversionListener { + method public abstract void onTranslucentConversionComplete(boolean); + } + + public deprecated class ActivityGroup extends android.app.Activity { + ctor public ActivityGroup(); + ctor public ActivityGroup(boolean); + method public android.app.Activity getCurrentActivity(); + method public final android.app.LocalActivityManager getLocalActivityManager(); + } + + public class ActivityManager { + method public int addAppTask(android.app.Activity, android.content.Intent, android.app.ActivityManager.TaskDescription, android.graphics.Bitmap); + method public boolean clearApplicationUserData(); + method public void dumpPackageState(java.io.FileDescriptor, java.lang.String); + method public android.util.Size getAppTaskThumbnailSize(); + method public java.util.List getAppTasks(); + method public static int getCurrentUser(); + method public android.content.pm.ConfigurationInfo getDeviceConfigurationInfo(); + method public int getLargeMemoryClass(); + method public int getLauncherLargeIconDensity(); + method public int getLauncherLargeIconSize(); + method public int getMemoryClass(); + method public void getMemoryInfo(android.app.ActivityManager.MemoryInfo); + method public static void getMyMemoryState(android.app.ActivityManager.RunningAppProcessInfo); + method public android.os.Debug.MemoryInfo[] getProcessMemoryInfo(int[]); + method public java.util.List getProcessesInErrorState(); + method public deprecated java.util.List getRecentTasks(int, int) throws java.lang.SecurityException; + method public java.util.List getRunningAppProcesses(); + method public android.app.PendingIntent getRunningServiceControlPanel(android.content.ComponentName) throws java.lang.SecurityException; + method public java.util.List getRunningServices(int) throws java.lang.SecurityException; + method public deprecated java.util.List getRunningTasks(int) throws java.lang.SecurityException; + method public boolean isInLockTaskMode(); + method public boolean isLowRamDevice(); + method public static boolean isRunningInTestHarness(); + method public static boolean isUserAMonkey(); + method public void killBackgroundProcesses(java.lang.String); + method public void moveTaskToFront(int, int); + method public void moveTaskToFront(int, int, android.os.Bundle); + method public deprecated void restartPackage(java.lang.String); + field public static final java.lang.String META_HOME_ALTERNATE = "android.app.home.alternate"; + field public static final int MOVE_TASK_NO_USER_ACTION = 2; // 0x2 + field public static final int MOVE_TASK_WITH_HOME = 1; // 0x1 + field public static final int RECENT_IGNORE_UNAVAILABLE = 2; // 0x2 + field public static final int RECENT_WITH_EXCLUDED = 1; // 0x1 + } + + public static class ActivityManager.AppTask { + method public void finishAndRemoveTask(); + method public android.app.ActivityManager.RecentTaskInfo getTaskInfo(); + method public void moveToFront(); + method public void setExcludeFromRecents(boolean); + method public void startActivity(android.content.Context, android.content.Intent, android.os.Bundle); + } + + public static class ActivityManager.MemoryInfo implements android.os.Parcelable { + ctor public ActivityManager.MemoryInfo(); + method public int describeContents(); + method public void readFromParcel(android.os.Parcel); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public long availMem; + field public boolean lowMemory; + field public long threshold; + field public long totalMem; + } + + public static class ActivityManager.ProcessErrorStateInfo implements android.os.Parcelable { + ctor public ActivityManager.ProcessErrorStateInfo(); + method public int describeContents(); + method public void readFromParcel(android.os.Parcel); + method public void writeToParcel(android.os.Parcel, int); + field public static final int CRASHED = 1; // 0x1 + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int NOT_RESPONDING = 2; // 0x2 + field public static final int NO_ERROR = 0; // 0x0 + field public int condition; + field public byte[] crashData; + field public java.lang.String longMsg; + field public int pid; + field public java.lang.String processName; + field public java.lang.String shortMsg; + field public java.lang.String stackTrace; + field public java.lang.String tag; + field public int uid; + } + + public static class ActivityManager.RecentTaskInfo implements android.os.Parcelable { + ctor public ActivityManager.RecentTaskInfo(); + method public int describeContents(); + method public void readFromParcel(android.os.Parcel); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public int affiliatedTaskId; + field public android.content.Intent baseIntent; + field public java.lang.CharSequence description; + field public int id; + field public android.content.ComponentName origActivity; + field public int persistentId; + field public android.app.ActivityManager.TaskDescription taskDescription; + } + + public static class ActivityManager.RunningAppProcessInfo implements android.os.Parcelable { + ctor public ActivityManager.RunningAppProcessInfo(); + ctor public ActivityManager.RunningAppProcessInfo(java.lang.String, int, java.lang.String[]); + method public int describeContents(); + method public void readFromParcel(android.os.Parcel); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int IMPORTANCE_BACKGROUND = 400; // 0x190 + field public static final int IMPORTANCE_EMPTY = 500; // 0x1f4 + field public static final int IMPORTANCE_FOREGROUND = 100; // 0x64 + field public static final int IMPORTANCE_GONE = 1000; // 0x3e8 + field public static final int IMPORTANCE_PERCEPTIBLE = 130; // 0x82 + field public static final int IMPORTANCE_SERVICE = 300; // 0x12c + field public static final int IMPORTANCE_VISIBLE = 200; // 0xc8 + field public static final int REASON_PROVIDER_IN_USE = 1; // 0x1 + field public static final int REASON_SERVICE_IN_USE = 2; // 0x2 + field public static final int REASON_UNKNOWN = 0; // 0x0 + field public int importance; + field public int importanceReasonCode; + field public android.content.ComponentName importanceReasonComponent; + field public int importanceReasonPid; + field public int lastTrimLevel; + field public int lru; + field public int pid; + field public java.lang.String[] pkgList; + field public java.lang.String processName; + field public int uid; + } + + public static class ActivityManager.RunningServiceInfo implements android.os.Parcelable { + ctor public ActivityManager.RunningServiceInfo(); + method public int describeContents(); + method public void readFromParcel(android.os.Parcel); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int FLAG_FOREGROUND = 2; // 0x2 + field public static final int FLAG_PERSISTENT_PROCESS = 8; // 0x8 + field public static final int FLAG_STARTED = 1; // 0x1 + field public static final int FLAG_SYSTEM_PROCESS = 4; // 0x4 + field public long activeSince; + field public int clientCount; + field public int clientLabel; + field public java.lang.String clientPackage; + field public int crashCount; + field public int flags; + field public boolean foreground; + field public long lastActivityTime; + field public int pid; + field public java.lang.String process; + field public long restarting; + field public android.content.ComponentName service; + field public boolean started; + field public int uid; + } + + public static class ActivityManager.RunningTaskInfo implements android.os.Parcelable { + ctor public ActivityManager.RunningTaskInfo(); + method public int describeContents(); + method public void readFromParcel(android.os.Parcel); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public android.content.ComponentName baseActivity; + field public java.lang.CharSequence description; + field public int id; + field public int numActivities; + field public int numRunning; + field public android.graphics.Bitmap thumbnail; + field public android.content.ComponentName topActivity; + } + + public static class ActivityManager.TaskDescription implements android.os.Parcelable { + ctor public ActivityManager.TaskDescription(java.lang.String, android.graphics.Bitmap, int); + ctor public ActivityManager.TaskDescription(java.lang.String, android.graphics.Bitmap); + ctor public ActivityManager.TaskDescription(java.lang.String); + ctor public ActivityManager.TaskDescription(); + ctor public ActivityManager.TaskDescription(android.app.ActivityManager.TaskDescription); + method public int describeContents(); + method public android.graphics.Bitmap getIcon(); + method public java.lang.String getLabel(); + method public int getPrimaryColor(); + method public void readFromParcel(android.os.Parcel); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public class ActivityOptions { + method public static android.app.ActivityOptions makeCustomAnimation(android.content.Context, int, int); + method public static android.app.ActivityOptions makeScaleUpAnimation(android.view.View, int, int, int, int); + method public static android.app.ActivityOptions makeSceneTransitionAnimation(android.app.Activity, android.view.View, java.lang.String); + method public static android.app.ActivityOptions makeSceneTransitionAnimation(android.app.Activity, android.util.Pair...); + method public static android.app.ActivityOptions makeTaskLaunchBehind(); + method public static android.app.ActivityOptions makeThumbnailScaleUpAnimation(android.view.View, android.graphics.Bitmap, int, int); + method public android.os.Bundle toBundle(); + method public void update(android.app.ActivityOptions); + } + + public class AlarmManager { + method public void cancel(android.app.PendingIntent); + method public android.app.AlarmManager.AlarmClockInfo getNextAlarmClock(); + method public void set(int, long, android.app.PendingIntent); + method public void set(int, long, long, long, android.app.PendingIntent, android.os.WorkSource); + method public void setAlarmClock(android.app.AlarmManager.AlarmClockInfo, android.app.PendingIntent); + method public void setExact(int, long, android.app.PendingIntent); + method public void setInexactRepeating(int, long, long, android.app.PendingIntent); + method public void setRepeating(int, long, long, android.app.PendingIntent); + method public void setTime(long); + method public void setTimeZone(java.lang.String); + method public void setWindow(int, long, long, android.app.PendingIntent); + field public static final java.lang.String ACTION_NEXT_ALARM_CLOCK_CHANGED = "android.app.action.NEXT_ALARM_CLOCK_CHANGED"; + field public static final int ELAPSED_REALTIME = 3; // 0x3 + field public static final int ELAPSED_REALTIME_WAKEUP = 2; // 0x2 + field public static final long INTERVAL_DAY = 86400000L; // 0x5265c00L + field public static final long INTERVAL_FIFTEEN_MINUTES = 900000L; // 0xdbba0L + field public static final long INTERVAL_HALF_DAY = 43200000L; // 0x2932e00L + field public static final long INTERVAL_HALF_HOUR = 1800000L; // 0x1b7740L + field public static final long INTERVAL_HOUR = 3600000L; // 0x36ee80L + field public static final int RTC = 1; // 0x1 + field public static final int RTC_WAKEUP = 0; // 0x0 + } + + public static final class AlarmManager.AlarmClockInfo implements android.os.Parcelable { + ctor public AlarmManager.AlarmClockInfo(long, android.app.PendingIntent); + method public int describeContents(); + method public android.app.PendingIntent getShowIntent(); + method public long getTriggerTime(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public class AlertDialog extends android.app.Dialog implements android.content.DialogInterface { + ctor protected AlertDialog(android.content.Context); + ctor protected AlertDialog(android.content.Context, int); + ctor protected AlertDialog(android.content.Context, boolean, android.content.DialogInterface.OnCancelListener); + method public android.widget.Button getButton(int); + method public android.widget.ListView getListView(); + method public void setButton(int, java.lang.CharSequence, android.os.Message); + method public void setButton(int, java.lang.CharSequence, android.content.DialogInterface.OnClickListener); + method public deprecated void setButton(java.lang.CharSequence, android.os.Message); + method public deprecated void setButton(java.lang.CharSequence, android.content.DialogInterface.OnClickListener); + method public deprecated void setButton2(java.lang.CharSequence, android.os.Message); + method public deprecated void setButton2(java.lang.CharSequence, android.content.DialogInterface.OnClickListener); + method public deprecated void setButton3(java.lang.CharSequence, android.os.Message); + method public deprecated void setButton3(java.lang.CharSequence, android.content.DialogInterface.OnClickListener); + method public void setCustomTitle(android.view.View); + method public void setIcon(int); + method public void setIcon(android.graphics.drawable.Drawable); + method public void setIconAttribute(int); + method public void setInverseBackgroundForced(boolean); + method public void setMessage(java.lang.CharSequence); + method public void setView(android.view.View); + method public void setView(android.view.View, int, int, int, int); + field public static final int THEME_DEVICE_DEFAULT_DARK = 4; // 0x4 + field public static final int THEME_DEVICE_DEFAULT_LIGHT = 5; // 0x5 + field public static final int THEME_HOLO_DARK = 2; // 0x2 + field public static final int THEME_HOLO_LIGHT = 3; // 0x3 + field public static final int THEME_TRADITIONAL = 1; // 0x1 + } + + public static class AlertDialog.Builder { + ctor public AlertDialog.Builder(android.content.Context); + ctor public AlertDialog.Builder(android.content.Context, int); + method public android.app.AlertDialog create(); + method public android.content.Context getContext(); + method public android.app.AlertDialog.Builder setAdapter(android.widget.ListAdapter, android.content.DialogInterface.OnClickListener); + method public android.app.AlertDialog.Builder setCancelable(boolean); + method public android.app.AlertDialog.Builder setCursor(android.database.Cursor, android.content.DialogInterface.OnClickListener, java.lang.String); + method public android.app.AlertDialog.Builder setCustomTitle(android.view.View); + method public android.app.AlertDialog.Builder setIcon(int); + method public android.app.AlertDialog.Builder setIcon(android.graphics.drawable.Drawable); + method public android.app.AlertDialog.Builder setIconAttribute(int); + method public android.app.AlertDialog.Builder setInverseBackgroundForced(boolean); + method public android.app.AlertDialog.Builder setItems(int, android.content.DialogInterface.OnClickListener); + method public android.app.AlertDialog.Builder setItems(java.lang.CharSequence[], android.content.DialogInterface.OnClickListener); + method public android.app.AlertDialog.Builder setMessage(int); + method public android.app.AlertDialog.Builder setMessage(java.lang.CharSequence); + method public android.app.AlertDialog.Builder setMultiChoiceItems(int, boolean[], android.content.DialogInterface.OnMultiChoiceClickListener); + method public android.app.AlertDialog.Builder setMultiChoiceItems(java.lang.CharSequence[], boolean[], android.content.DialogInterface.OnMultiChoiceClickListener); + method public android.app.AlertDialog.Builder setMultiChoiceItems(android.database.Cursor, java.lang.String, java.lang.String, android.content.DialogInterface.OnMultiChoiceClickListener); + method public android.app.AlertDialog.Builder setNegativeButton(int, android.content.DialogInterface.OnClickListener); + method public android.app.AlertDialog.Builder setNegativeButton(java.lang.CharSequence, android.content.DialogInterface.OnClickListener); + method public android.app.AlertDialog.Builder setNeutralButton(int, android.content.DialogInterface.OnClickListener); + method public android.app.AlertDialog.Builder setNeutralButton(java.lang.CharSequence, android.content.DialogInterface.OnClickListener); + method public android.app.AlertDialog.Builder setOnCancelListener(android.content.DialogInterface.OnCancelListener); + method public android.app.AlertDialog.Builder setOnDismissListener(android.content.DialogInterface.OnDismissListener); + method public android.app.AlertDialog.Builder setOnItemSelectedListener(android.widget.AdapterView.OnItemSelectedListener); + method public android.app.AlertDialog.Builder setOnKeyListener(android.content.DialogInterface.OnKeyListener); + method public android.app.AlertDialog.Builder setPositiveButton(int, android.content.DialogInterface.OnClickListener); + method public android.app.AlertDialog.Builder setPositiveButton(java.lang.CharSequence, android.content.DialogInterface.OnClickListener); + method public android.app.AlertDialog.Builder setSingleChoiceItems(int, int, android.content.DialogInterface.OnClickListener); + method public android.app.AlertDialog.Builder setSingleChoiceItems(android.database.Cursor, int, java.lang.String, android.content.DialogInterface.OnClickListener); + method public android.app.AlertDialog.Builder setSingleChoiceItems(java.lang.CharSequence[], int, android.content.DialogInterface.OnClickListener); + method public android.app.AlertDialog.Builder setSingleChoiceItems(android.widget.ListAdapter, int, android.content.DialogInterface.OnClickListener); + method public android.app.AlertDialog.Builder setTitle(int); + method public android.app.AlertDialog.Builder setTitle(java.lang.CharSequence); + method public android.app.AlertDialog.Builder setView(int); + method public android.app.AlertDialog.Builder setView(android.view.View); + method public android.app.AlertDialog show(); + } + + public class AliasActivity extends android.app.Activity { + ctor public AliasActivity(); + } + + public class AppOpsManager { + method public int checkOp(java.lang.String, int, java.lang.String); + method public int checkOpNoThrow(java.lang.String, int, java.lang.String); + method public void checkPackage(int, java.lang.String); + method public void finishOp(java.lang.String, int, java.lang.String); + method public int noteOp(java.lang.String, int, java.lang.String); + method public int noteOpNoThrow(java.lang.String, int, java.lang.String); + method public int startOp(java.lang.String, int, java.lang.String); + method public int startOpNoThrow(java.lang.String, int, java.lang.String); + method public void startWatchingMode(java.lang.String, java.lang.String, android.app.AppOpsManager.OnOpChangedListener); + method public void stopWatchingMode(android.app.AppOpsManager.OnOpChangedListener); + field public static final int MODE_ALLOWED = 0; // 0x0 + field public static final int MODE_DEFAULT = 3; // 0x3 + field public static final int MODE_ERRORED = 2; // 0x2 + field public static final int MODE_IGNORED = 1; // 0x1 + field public static final java.lang.String OPSTR_ACTIVATE_VPN = "android:activate_vpn"; + field public static final java.lang.String OPSTR_COARSE_LOCATION = "android:coarse_location"; + field public static final java.lang.String OPSTR_FINE_LOCATION = "android:fine_location"; + field public static final java.lang.String OPSTR_GET_USAGE_STATS = "android:get_usage_stats"; + field public static final java.lang.String OPSTR_MONITOR_HIGH_POWER_LOCATION = "android:monitor_location_high_power"; + field public static final java.lang.String OPSTR_MONITOR_LOCATION = "android:monitor_location"; + } + + public static abstract interface AppOpsManager.OnOpChangedListener { + method public abstract void onOpChanged(java.lang.String, java.lang.String); + } + + public class Application extends android.content.ContextWrapper implements android.content.ComponentCallbacks2 { + ctor public Application(); + method public void onConfigurationChanged(android.content.res.Configuration); + method public void onCreate(); + method public void onLowMemory(); + method public void onTerminate(); + method public void onTrimMemory(int); + method public void registerActivityLifecycleCallbacks(android.app.Application.ActivityLifecycleCallbacks); + method public void registerOnProvideAssistDataListener(android.app.Application.OnProvideAssistDataListener); + method public void unregisterActivityLifecycleCallbacks(android.app.Application.ActivityLifecycleCallbacks); + method public void unregisterOnProvideAssistDataListener(android.app.Application.OnProvideAssistDataListener); + } + + public static abstract interface Application.ActivityLifecycleCallbacks { + method public abstract void onActivityCreated(android.app.Activity, android.os.Bundle); + method public abstract void onActivityDestroyed(android.app.Activity); + method public abstract void onActivityPaused(android.app.Activity); + method public abstract void onActivityResumed(android.app.Activity); + method public abstract void onActivitySaveInstanceState(android.app.Activity, android.os.Bundle); + method public abstract void onActivityStarted(android.app.Activity); + method public abstract void onActivityStopped(android.app.Activity); + } + + public static abstract interface Application.OnProvideAssistDataListener { + method public abstract void onProvideAssistData(android.app.Activity, android.os.Bundle); + } + + public class ApplicationErrorReport implements android.os.Parcelable { + ctor public ApplicationErrorReport(); + method public int describeContents(); + method public void dump(android.util.Printer, java.lang.String); + method public static android.content.ComponentName getErrorReportReceiver(android.content.Context, java.lang.String, int); + method public void readFromParcel(android.os.Parcel); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int TYPE_ANR = 2; // 0x2 + field public static final int TYPE_BATTERY = 3; // 0x3 + field public static final int TYPE_CRASH = 1; // 0x1 + field public static final int TYPE_NONE = 0; // 0x0 + field public static final int TYPE_RUNNING_SERVICE = 5; // 0x5 + field public android.app.ApplicationErrorReport.AnrInfo anrInfo; + field public android.app.ApplicationErrorReport.BatteryInfo batteryInfo; + field public android.app.ApplicationErrorReport.CrashInfo crashInfo; + field public java.lang.String installerPackageName; + field public java.lang.String packageName; + field public java.lang.String processName; + field public android.app.ApplicationErrorReport.RunningServiceInfo runningServiceInfo; + field public boolean systemApp; + field public long time; + field public int type; + } + + public static class ApplicationErrorReport.AnrInfo { + ctor public ApplicationErrorReport.AnrInfo(); + ctor public ApplicationErrorReport.AnrInfo(android.os.Parcel); + method public void dump(android.util.Printer, java.lang.String); + method public void writeToParcel(android.os.Parcel, int); + field public java.lang.String activity; + field public java.lang.String cause; + field public java.lang.String info; + } + + public static class ApplicationErrorReport.BatteryInfo { + ctor public ApplicationErrorReport.BatteryInfo(); + ctor public ApplicationErrorReport.BatteryInfo(android.os.Parcel); + method public void dump(android.util.Printer, java.lang.String); + method public void writeToParcel(android.os.Parcel, int); + field public java.lang.String checkinDetails; + field public long durationMicros; + field public java.lang.String usageDetails; + field public int usagePercent; + } + + public static class ApplicationErrorReport.CrashInfo { + ctor public ApplicationErrorReport.CrashInfo(); + ctor public ApplicationErrorReport.CrashInfo(java.lang.Throwable); + ctor public ApplicationErrorReport.CrashInfo(android.os.Parcel); + method public void dump(android.util.Printer, java.lang.String); + method public void writeToParcel(android.os.Parcel, int); + field public java.lang.String exceptionClassName; + field public java.lang.String exceptionMessage; + field public java.lang.String stackTrace; + field public java.lang.String throwClassName; + field public java.lang.String throwFileName; + field public int throwLineNumber; + field public java.lang.String throwMethodName; + } + + public static class ApplicationErrorReport.RunningServiceInfo { + ctor public ApplicationErrorReport.RunningServiceInfo(); + ctor public ApplicationErrorReport.RunningServiceInfo(android.os.Parcel); + method public void dump(android.util.Printer, java.lang.String); + method public void writeToParcel(android.os.Parcel, int); + field public long durationMillis; + field public java.lang.String serviceDetails; + } + + public class DatePickerDialog extends android.app.AlertDialog implements android.widget.DatePicker.OnDateChangedListener android.content.DialogInterface.OnClickListener { + ctor public DatePickerDialog(android.content.Context, android.app.DatePickerDialog.OnDateSetListener, int, int, int); + ctor public DatePickerDialog(android.content.Context, int, android.app.DatePickerDialog.OnDateSetListener, int, int, int); + method public android.widget.DatePicker getDatePicker(); + method public void onClick(android.content.DialogInterface, int); + method public void onDateChanged(android.widget.DatePicker, int, int, int); + method public void updateDate(int, int, int); + } + + public static abstract interface DatePickerDialog.OnDateSetListener { + method public abstract void onDateSet(android.widget.DatePicker, int, int, int); + } + + public class Dialog implements android.content.DialogInterface android.view.KeyEvent.Callback android.view.View.OnCreateContextMenuListener android.view.Window.Callback { + ctor public Dialog(android.content.Context); + ctor public Dialog(android.content.Context, int); + ctor protected Dialog(android.content.Context, boolean, android.content.DialogInterface.OnCancelListener); + method public void addContentView(android.view.View, android.view.ViewGroup.LayoutParams); + method public void cancel(); + method public void closeOptionsMenu(); + method public void create(); + method public void dismiss(); + method public boolean dispatchGenericMotionEvent(android.view.MotionEvent); + method public boolean dispatchKeyEvent(android.view.KeyEvent); + method public boolean dispatchKeyShortcutEvent(android.view.KeyEvent); + method public boolean dispatchPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent); + method public boolean dispatchTouchEvent(android.view.MotionEvent); + method public boolean dispatchTrackballEvent(android.view.MotionEvent); + method public android.view.View findViewById(int); + method public android.app.ActionBar getActionBar(); + method public final android.content.Context getContext(); + method public android.view.View getCurrentFocus(); + method public android.view.LayoutInflater getLayoutInflater(); + method public final android.app.Activity getOwnerActivity(); + method public final int getVolumeControlStream(); + method public android.view.Window getWindow(); + method public void hide(); + method public void invalidateOptionsMenu(); + method public boolean isShowing(); + method public void onActionModeFinished(android.view.ActionMode); + method public void onActionModeStarted(android.view.ActionMode); + method public void onAttachedToWindow(); + method public void onBackPressed(); + method public void onContentChanged(); + method public boolean onContextItemSelected(android.view.MenuItem); + method public void onContextMenuClosed(android.view.Menu); + method protected void onCreate(android.os.Bundle); + method public void onCreateContextMenu(android.view.ContextMenu, android.view.View, android.view.ContextMenu.ContextMenuInfo); + method public boolean onCreateOptionsMenu(android.view.Menu); + method public boolean onCreatePanelMenu(int, android.view.Menu); + method public android.view.View onCreatePanelView(int); + method public void onDetachedFromWindow(); + method public boolean onGenericMotionEvent(android.view.MotionEvent); + method public boolean onKeyDown(int, android.view.KeyEvent); + method public boolean onKeyLongPress(int, android.view.KeyEvent); + method public boolean onKeyMultiple(int, int, android.view.KeyEvent); + method public boolean onKeyShortcut(int, android.view.KeyEvent); + method public boolean onKeyUp(int, android.view.KeyEvent); + method public boolean onMenuItemSelected(int, android.view.MenuItem); + method public boolean onMenuOpened(int, android.view.Menu); + method public boolean onOptionsItemSelected(android.view.MenuItem); + method public void onOptionsMenuClosed(android.view.Menu); + method public void onPanelClosed(int, android.view.Menu); + method public boolean onPrepareOptionsMenu(android.view.Menu); + method public boolean onPreparePanel(int, android.view.View, android.view.Menu); + method public void onRestoreInstanceState(android.os.Bundle); + method public android.os.Bundle onSaveInstanceState(); + method public boolean onSearchRequested(); + method protected void onStart(); + method protected void onStop(); + method public boolean onTouchEvent(android.view.MotionEvent); + method public boolean onTrackballEvent(android.view.MotionEvent); + method public void onWindowAttributesChanged(android.view.WindowManager.LayoutParams); + method public void onWindowFocusChanged(boolean); + method public android.view.ActionMode onWindowStartingActionMode(android.view.ActionMode.Callback); + method public void openContextMenu(android.view.View); + method public void openOptionsMenu(); + method public void registerForContextMenu(android.view.View); + method public final boolean requestWindowFeature(int); + method public void setCancelMessage(android.os.Message); + method public void setCancelable(boolean); + method public void setCanceledOnTouchOutside(boolean); + method public void setContentView(int); + method public void setContentView(android.view.View); + method public void setContentView(android.view.View, android.view.ViewGroup.LayoutParams); + method public void setDismissMessage(android.os.Message); + method public final void setFeatureDrawable(int, android.graphics.drawable.Drawable); + method public final void setFeatureDrawableAlpha(int, int); + method public final void setFeatureDrawableResource(int, int); + method public final void setFeatureDrawableUri(int, android.net.Uri); + method public void setOnCancelListener(android.content.DialogInterface.OnCancelListener); + method public void setOnDismissListener(android.content.DialogInterface.OnDismissListener); + method public void setOnKeyListener(android.content.DialogInterface.OnKeyListener); + method public void setOnShowListener(android.content.DialogInterface.OnShowListener); + method public final void setOwnerActivity(android.app.Activity); + method public void setTitle(java.lang.CharSequence); + method public void setTitle(int); + method public final void setVolumeControlStream(int); + method public void show(); + method public void takeKeyEvents(boolean); + method public void unregisterForContextMenu(android.view.View); + } + + public class DialogFragment extends android.app.Fragment implements android.content.DialogInterface.OnCancelListener android.content.DialogInterface.OnDismissListener { + ctor public DialogFragment(); + method public void dismiss(); + method public void dismissAllowingStateLoss(); + method public android.app.Dialog getDialog(); + method public boolean getShowsDialog(); + method public int getTheme(); + method public boolean isCancelable(); + method public void onCancel(android.content.DialogInterface); + method public android.app.Dialog onCreateDialog(android.os.Bundle); + method public void onDismiss(android.content.DialogInterface); + method public void setCancelable(boolean); + method public void setShowsDialog(boolean); + method public void setStyle(int, int); + method public void show(android.app.FragmentManager, java.lang.String); + method public int show(android.app.FragmentTransaction, java.lang.String); + field public static final int STYLE_NORMAL = 0; // 0x0 + field public static final int STYLE_NO_FRAME = 2; // 0x2 + field public static final int STYLE_NO_INPUT = 3; // 0x3 + field public static final int STYLE_NO_TITLE = 1; // 0x1 + } + + public class DownloadManager { + method public long addCompletedDownload(java.lang.String, java.lang.String, boolean, java.lang.String, java.lang.String, long, boolean); + method public long enqueue(android.app.DownloadManager.Request); + method public static java.lang.Long getMaxBytesOverMobile(android.content.Context); + method public java.lang.String getMimeTypeForDownloadedFile(long); + method public static java.lang.Long getRecommendedMaxBytesOverMobile(android.content.Context); + method public android.net.Uri getUriForDownloadedFile(long); + method public android.os.ParcelFileDescriptor openDownloadedFile(long) throws java.io.FileNotFoundException; + method public android.database.Cursor query(android.app.DownloadManager.Query); + method public int remove(long...); + field public static final java.lang.String ACTION_DOWNLOAD_COMPLETE = "android.intent.action.DOWNLOAD_COMPLETE"; + field public static final java.lang.String ACTION_NOTIFICATION_CLICKED = "android.intent.action.DOWNLOAD_NOTIFICATION_CLICKED"; + field public static final java.lang.String ACTION_VIEW_DOWNLOADS = "android.intent.action.VIEW_DOWNLOADS"; + field public static final java.lang.String COLUMN_BYTES_DOWNLOADED_SO_FAR = "bytes_so_far"; + field public static final java.lang.String COLUMN_DESCRIPTION = "description"; + field public static final java.lang.String COLUMN_ID = "_id"; + field public static final java.lang.String COLUMN_LAST_MODIFIED_TIMESTAMP = "last_modified_timestamp"; + field public static final java.lang.String COLUMN_LOCAL_FILENAME = "local_filename"; + field public static final java.lang.String COLUMN_LOCAL_URI = "local_uri"; + field public static final java.lang.String COLUMN_MEDIAPROVIDER_URI = "mediaprovider_uri"; + field public static final java.lang.String COLUMN_MEDIA_TYPE = "media_type"; + field public static final java.lang.String COLUMN_REASON = "reason"; + field public static final java.lang.String COLUMN_STATUS = "status"; + field public static final java.lang.String COLUMN_TITLE = "title"; + field public static final java.lang.String COLUMN_TOTAL_SIZE_BYTES = "total_size"; + field public static final java.lang.String COLUMN_URI = "uri"; + field public static final int ERROR_CANNOT_RESUME = 1008; // 0x3f0 + field public static final int ERROR_DEVICE_NOT_FOUND = 1007; // 0x3ef + field public static final int ERROR_FILE_ALREADY_EXISTS = 1009; // 0x3f1 + field public static final int ERROR_FILE_ERROR = 1001; // 0x3e9 + field public static final int ERROR_HTTP_DATA_ERROR = 1004; // 0x3ec + field public static final int ERROR_INSUFFICIENT_SPACE = 1006; // 0x3ee + field public static final int ERROR_TOO_MANY_REDIRECTS = 1005; // 0x3ed + field public static final int ERROR_UNHANDLED_HTTP_CODE = 1002; // 0x3ea + field public static final int ERROR_UNKNOWN = 1000; // 0x3e8 + field public static final java.lang.String EXTRA_DOWNLOAD_ID = "extra_download_id"; + field public static final java.lang.String EXTRA_NOTIFICATION_CLICK_DOWNLOAD_IDS = "extra_click_download_ids"; + field public static final java.lang.String INTENT_EXTRAS_SORT_BY_SIZE = "android.app.DownloadManager.extra_sortBySize"; + field public static final int PAUSED_QUEUED_FOR_WIFI = 3; // 0x3 + field public static final int PAUSED_UNKNOWN = 4; // 0x4 + field public static final int PAUSED_WAITING_FOR_NETWORK = 2; // 0x2 + field public static final int PAUSED_WAITING_TO_RETRY = 1; // 0x1 + field public static final int STATUS_FAILED = 16; // 0x10 + field public static final int STATUS_PAUSED = 4; // 0x4 + field public static final int STATUS_PENDING = 1; // 0x1 + field public static final int STATUS_RUNNING = 2; // 0x2 + field public static final int STATUS_SUCCESSFUL = 8; // 0x8 + } + + public static class DownloadManager.Query { + ctor public DownloadManager.Query(); + method public android.app.DownloadManager.Query setFilterById(long...); + method public android.app.DownloadManager.Query setFilterByStatus(int); + } + + public static class DownloadManager.Request { + ctor public DownloadManager.Request(android.net.Uri); + method public android.app.DownloadManager.Request addRequestHeader(java.lang.String, java.lang.String); + method public void allowScanningByMediaScanner(); + method public android.app.DownloadManager.Request setAllowedNetworkTypes(int); + method public android.app.DownloadManager.Request setAllowedOverMetered(boolean); + method public android.app.DownloadManager.Request setAllowedOverRoaming(boolean); + method public android.app.DownloadManager.Request setDescription(java.lang.CharSequence); + method public android.app.DownloadManager.Request setDestinationInExternalFilesDir(android.content.Context, java.lang.String, java.lang.String); + method public android.app.DownloadManager.Request setDestinationInExternalPublicDir(java.lang.String, java.lang.String); + method public android.app.DownloadManager.Request setDestinationUri(android.net.Uri); + method public android.app.DownloadManager.Request setMimeType(java.lang.String); + method public android.app.DownloadManager.Request setNotificationVisibility(int); + method public deprecated android.app.DownloadManager.Request setShowRunningNotification(boolean); + method public android.app.DownloadManager.Request setTitle(java.lang.CharSequence); + method public android.app.DownloadManager.Request setVisibleInDownloadsUi(boolean); + field public static final int NETWORK_MOBILE = 1; // 0x1 + field public static final int NETWORK_WIFI = 2; // 0x2 + field public static final int VISIBILITY_HIDDEN = 2; // 0x2 + field public static final int VISIBILITY_VISIBLE = 0; // 0x0 + field public static final int VISIBILITY_VISIBLE_NOTIFY_COMPLETED = 1; // 0x1 + field public static final int VISIBILITY_VISIBLE_NOTIFY_ONLY_COMPLETION = 3; // 0x3 + } + + public class ExpandableListActivity extends android.app.Activity implements android.widget.ExpandableListView.OnChildClickListener android.widget.ExpandableListView.OnGroupCollapseListener android.widget.ExpandableListView.OnGroupExpandListener android.view.View.OnCreateContextMenuListener { + ctor public ExpandableListActivity(); + method public android.widget.ExpandableListAdapter getExpandableListAdapter(); + method public android.widget.ExpandableListView getExpandableListView(); + method public long getSelectedId(); + method public long getSelectedPosition(); + method public boolean onChildClick(android.widget.ExpandableListView, android.view.View, int, int, long); + method public void onGroupCollapse(int); + method public void onGroupExpand(int); + method public void setListAdapter(android.widget.ExpandableListAdapter); + method public boolean setSelectedChild(int, int, boolean); + method public void setSelectedGroup(int); + } + + public class Fragment implements android.content.ComponentCallbacks2 android.view.View.OnCreateContextMenuListener { + ctor public Fragment(); + method public void dump(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]); + method public final boolean equals(java.lang.Object); + method public final android.app.Activity getActivity(); + method public boolean getAllowEnterTransitionOverlap(); + method public boolean getAllowReturnTransitionOverlap(); + method public final android.os.Bundle getArguments(); + method public final android.app.FragmentManager getChildFragmentManager(); + method public android.transition.Transition getEnterTransition(); + method public android.transition.Transition getExitTransition(); + method public final android.app.FragmentManager getFragmentManager(); + method public final int getId(); + method public android.app.LoaderManager getLoaderManager(); + method public final android.app.Fragment getParentFragment(); + method public android.transition.Transition getReenterTransition(); + method public final android.content.res.Resources getResources(); + method public final boolean getRetainInstance(); + method public android.transition.Transition getReturnTransition(); + method public android.transition.Transition getSharedElementEnterTransition(); + method public android.transition.Transition getSharedElementReturnTransition(); + method public final java.lang.String getString(int); + method public final java.lang.String getString(int, java.lang.Object...); + method public final java.lang.String getTag(); + method public final android.app.Fragment getTargetFragment(); + method public final int getTargetRequestCode(); + method public final java.lang.CharSequence getText(int); + method public boolean getUserVisibleHint(); + method public android.view.View getView(); + method public final int hashCode(); + method public static android.app.Fragment instantiate(android.content.Context, java.lang.String); + method public static android.app.Fragment instantiate(android.content.Context, java.lang.String, android.os.Bundle); + method public final boolean isAdded(); + method public final boolean isDetached(); + method public final boolean isHidden(); + method public final boolean isInLayout(); + method public final boolean isRemoving(); + method public final boolean isResumed(); + method public final boolean isVisible(); + method public void onActivityCreated(android.os.Bundle); + method public void onActivityResult(int, int, android.content.Intent); + method public void onAttach(android.app.Activity); + method public void onConfigurationChanged(android.content.res.Configuration); + method public boolean onContextItemSelected(android.view.MenuItem); + method public void onCreate(android.os.Bundle); + method public android.animation.Animator onCreateAnimator(int, boolean, int); + method public void onCreateContextMenu(android.view.ContextMenu, android.view.View, android.view.ContextMenu.ContextMenuInfo); + method public void onCreateOptionsMenu(android.view.Menu, android.view.MenuInflater); + method public android.view.View onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle); + method public void onDestroy(); + method public void onDestroyOptionsMenu(); + method public void onDestroyView(); + method public void onDetach(); + method public void onHiddenChanged(boolean); + method public deprecated void onInflate(android.util.AttributeSet, android.os.Bundle); + method public void onInflate(android.app.Activity, android.util.AttributeSet, android.os.Bundle); + method public void onLowMemory(); + method public boolean onOptionsItemSelected(android.view.MenuItem); + method public void onOptionsMenuClosed(android.view.Menu); + method public void onPause(); + method public void onPrepareOptionsMenu(android.view.Menu); + method public void onResume(); + method public void onSaveInstanceState(android.os.Bundle); + method public void onStart(); + method public void onStop(); + method public void onTrimMemory(int); + method public void onViewCreated(android.view.View, android.os.Bundle); + method public void onViewStateRestored(android.os.Bundle); + method public void registerForContextMenu(android.view.View); + method public void setAllowEnterTransitionOverlap(boolean); + method public void setAllowReturnTransitionOverlap(boolean); + method public void setArguments(android.os.Bundle); + method public void setEnterSharedElementCallback(android.app.SharedElementCallback); + method public void setEnterTransition(android.transition.Transition); + method public void setExitSharedElementCallback(android.app.SharedElementCallback); + method public void setExitTransition(android.transition.Transition); + method public void setHasOptionsMenu(boolean); + method public void setInitialSavedState(android.app.Fragment.SavedState); + method public void setMenuVisibility(boolean); + method public void setReenterTransition(android.transition.Transition); + method public void setRetainInstance(boolean); + method public void setReturnTransition(android.transition.Transition); + method public void setSharedElementEnterTransition(android.transition.Transition); + method public void setSharedElementReturnTransition(android.transition.Transition); + method public void setTargetFragment(android.app.Fragment, int); + method public void setUserVisibleHint(boolean); + method public void startActivity(android.content.Intent); + method public void startActivity(android.content.Intent, android.os.Bundle); + method public void startActivityForResult(android.content.Intent, int); + method public void startActivityForResult(android.content.Intent, int, android.os.Bundle); + method public void unregisterForContextMenu(android.view.View); + } + + public static class Fragment.InstantiationException extends android.util.AndroidRuntimeException { + ctor public Fragment.InstantiationException(java.lang.String, java.lang.Exception); + } + + public static class Fragment.SavedState implements android.os.Parcelable { + method public int describeContents(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.ClassLoaderCreator CREATOR; + } + + public deprecated class FragmentBreadCrumbs extends android.view.ViewGroup implements android.app.FragmentManager.OnBackStackChangedListener { + ctor public FragmentBreadCrumbs(android.content.Context); + ctor public FragmentBreadCrumbs(android.content.Context, android.util.AttributeSet); + ctor public FragmentBreadCrumbs(android.content.Context, android.util.AttributeSet, int); + method public void onBackStackChanged(); + method protected void onLayout(boolean, int, int, int, int); + method public void setActivity(android.app.Activity); + method public void setMaxVisible(int); + method public void setOnBreadCrumbClickListener(android.app.FragmentBreadCrumbs.OnBreadCrumbClickListener); + method public void setParentTitle(java.lang.CharSequence, java.lang.CharSequence, android.view.View.OnClickListener); + method public void setTitle(java.lang.CharSequence, java.lang.CharSequence); + } + + public static abstract interface FragmentBreadCrumbs.OnBreadCrumbClickListener { + method public abstract boolean onBreadCrumbClick(android.app.FragmentManager.BackStackEntry, int); + } + + public abstract class FragmentManager { + ctor public FragmentManager(); + method public abstract void addOnBackStackChangedListener(android.app.FragmentManager.OnBackStackChangedListener); + method public abstract android.app.FragmentTransaction beginTransaction(); + method public abstract void dump(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]); + method public static void enableDebugLogging(boolean); + method public abstract boolean executePendingTransactions(); + method public abstract android.app.Fragment findFragmentById(int); + method public abstract android.app.Fragment findFragmentByTag(java.lang.String); + method public abstract android.app.FragmentManager.BackStackEntry getBackStackEntryAt(int); + method public abstract int getBackStackEntryCount(); + method public abstract android.app.Fragment getFragment(android.os.Bundle, java.lang.String); + method public void invalidateOptionsMenu(); + method public abstract boolean isDestroyed(); + method public abstract void popBackStack(); + method public abstract void popBackStack(java.lang.String, int); + method public abstract void popBackStack(int, int); + method public abstract boolean popBackStackImmediate(); + method public abstract boolean popBackStackImmediate(java.lang.String, int); + method public abstract boolean popBackStackImmediate(int, int); + method public abstract void putFragment(android.os.Bundle, java.lang.String, android.app.Fragment); + method public abstract void removeOnBackStackChangedListener(android.app.FragmentManager.OnBackStackChangedListener); + method public abstract android.app.Fragment.SavedState saveFragmentInstanceState(android.app.Fragment); + field public static final int POP_BACK_STACK_INCLUSIVE = 1; // 0x1 + } + + public static abstract interface FragmentManager.BackStackEntry { + method public abstract java.lang.CharSequence getBreadCrumbShortTitle(); + method public abstract int getBreadCrumbShortTitleRes(); + method public abstract java.lang.CharSequence getBreadCrumbTitle(); + method public abstract int getBreadCrumbTitleRes(); + method public abstract int getId(); + method public abstract java.lang.String getName(); + } + + public static abstract interface FragmentManager.OnBackStackChangedListener { + method public abstract void onBackStackChanged(); + } + + public abstract class FragmentTransaction { + ctor public FragmentTransaction(); + method public abstract android.app.FragmentTransaction add(android.app.Fragment, java.lang.String); + method public abstract android.app.FragmentTransaction add(int, android.app.Fragment); + method public abstract android.app.FragmentTransaction add(int, android.app.Fragment, java.lang.String); + method public abstract android.app.FragmentTransaction addSharedElement(android.view.View, java.lang.String); + method public abstract android.app.FragmentTransaction addToBackStack(java.lang.String); + method public abstract android.app.FragmentTransaction attach(android.app.Fragment); + method public abstract int commit(); + method public abstract int commitAllowingStateLoss(); + method public abstract android.app.FragmentTransaction detach(android.app.Fragment); + method public abstract android.app.FragmentTransaction disallowAddToBackStack(); + method public abstract android.app.FragmentTransaction hide(android.app.Fragment); + method public abstract boolean isAddToBackStackAllowed(); + method public abstract boolean isEmpty(); + method public abstract android.app.FragmentTransaction remove(android.app.Fragment); + method public abstract android.app.FragmentTransaction replace(int, android.app.Fragment); + method public abstract android.app.FragmentTransaction replace(int, android.app.Fragment, java.lang.String); + method public abstract android.app.FragmentTransaction setBreadCrumbShortTitle(int); + method public abstract android.app.FragmentTransaction setBreadCrumbShortTitle(java.lang.CharSequence); + method public abstract android.app.FragmentTransaction setBreadCrumbTitle(int); + method public abstract android.app.FragmentTransaction setBreadCrumbTitle(java.lang.CharSequence); + method public abstract android.app.FragmentTransaction setCustomAnimations(int, int); + method public abstract android.app.FragmentTransaction setCustomAnimations(int, int, int, int); + method public abstract android.app.FragmentTransaction setTransition(int); + method public abstract android.app.FragmentTransaction setTransitionStyle(int); + method public abstract android.app.FragmentTransaction show(android.app.Fragment); + field public static final int TRANSIT_ENTER_MASK = 4096; // 0x1000 + field public static final int TRANSIT_EXIT_MASK = 8192; // 0x2000 + field public static final int TRANSIT_FRAGMENT_CLOSE = 8194; // 0x2002 + field public static final int TRANSIT_FRAGMENT_FADE = 4099; // 0x1003 + field public static final int TRANSIT_FRAGMENT_OPEN = 4097; // 0x1001 + field public static final int TRANSIT_NONE = 0; // 0x0 + field public static final int TRANSIT_UNSET = -1; // 0xffffffff + } + + public class Instrumentation { + ctor public Instrumentation(); + method public void addMonitor(android.app.Instrumentation.ActivityMonitor); + method public android.app.Instrumentation.ActivityMonitor addMonitor(android.content.IntentFilter, android.app.Instrumentation.ActivityResult, boolean); + method public android.app.Instrumentation.ActivityMonitor addMonitor(java.lang.String, android.app.Instrumentation.ActivityResult, boolean); + method public void callActivityOnCreate(android.app.Activity, android.os.Bundle); + method public void callActivityOnCreate(android.app.Activity, android.os.Bundle, android.os.PersistableBundle); + method public void callActivityOnDestroy(android.app.Activity); + method public void callActivityOnNewIntent(android.app.Activity, android.content.Intent); + method public void callActivityOnPause(android.app.Activity); + method public void callActivityOnPostCreate(android.app.Activity, android.os.Bundle); + method public void callActivityOnPostCreate(android.app.Activity, android.os.Bundle, android.os.PersistableBundle); + method public void callActivityOnRestart(android.app.Activity); + method public void callActivityOnRestoreInstanceState(android.app.Activity, android.os.Bundle); + method public void callActivityOnRestoreInstanceState(android.app.Activity, android.os.Bundle, android.os.PersistableBundle); + method public void callActivityOnResume(android.app.Activity); + method public void callActivityOnSaveInstanceState(android.app.Activity, android.os.Bundle); + method public void callActivityOnSaveInstanceState(android.app.Activity, android.os.Bundle, android.os.PersistableBundle); + method public void callActivityOnStart(android.app.Activity); + method public void callActivityOnStop(android.app.Activity); + method public void callActivityOnUserLeaving(android.app.Activity); + method public void callApplicationOnCreate(android.app.Application); + method public boolean checkMonitorHit(android.app.Instrumentation.ActivityMonitor, int); + method public void endPerformanceSnapshot(); + method public void finish(int, android.os.Bundle); + method public android.os.Bundle getAllocCounts(); + method public android.os.Bundle getBinderCounts(); + method public android.content.ComponentName getComponentName(); + method public android.content.Context getContext(); + method public android.content.Context getTargetContext(); + method public android.app.UiAutomation getUiAutomation(); + method public boolean invokeContextMenuAction(android.app.Activity, int, int); + method public boolean invokeMenuActionSync(android.app.Activity, int, int); + method public boolean isProfiling(); + method public android.app.Activity newActivity(java.lang.Class, android.content.Context, android.os.IBinder, android.app.Application, android.content.Intent, android.content.pm.ActivityInfo, java.lang.CharSequence, android.app.Activity, java.lang.String, java.lang.Object) throws java.lang.IllegalAccessException, java.lang.InstantiationException; + method public android.app.Activity newActivity(java.lang.ClassLoader, java.lang.String, android.content.Intent) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException; + method public android.app.Application newApplication(java.lang.ClassLoader, java.lang.String, android.content.Context) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException; + method public static android.app.Application newApplication(java.lang.Class, android.content.Context) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException; + method public void onCreate(android.os.Bundle); + method public void onDestroy(); + method public boolean onException(java.lang.Object, java.lang.Throwable); + method public void onStart(); + method public void removeMonitor(android.app.Instrumentation.ActivityMonitor); + method public void runOnMainSync(java.lang.Runnable); + method public void sendCharacterSync(int); + method public void sendKeyDownUpSync(int); + method public void sendKeySync(android.view.KeyEvent); + method public void sendPointerSync(android.view.MotionEvent); + method public void sendStatus(int, android.os.Bundle); + method public void sendStringSync(java.lang.String); + method public void sendTrackballEventSync(android.view.MotionEvent); + method public void setAutomaticPerformanceSnapshots(); + method public void setInTouchMode(boolean); + method public void start(); + method public android.app.Activity startActivitySync(android.content.Intent); + method public void startAllocCounting(); + method public void startPerformanceSnapshot(); + method public void startProfiling(); + method public void stopAllocCounting(); + method public void stopProfiling(); + method public void waitForIdle(java.lang.Runnable); + method public void waitForIdleSync(); + method public android.app.Activity waitForMonitor(android.app.Instrumentation.ActivityMonitor); + method public android.app.Activity waitForMonitorWithTimeout(android.app.Instrumentation.ActivityMonitor, long); + field public static final java.lang.String REPORT_KEY_IDENTIFIER = "id"; + field public static final java.lang.String REPORT_KEY_STREAMRESULT = "stream"; + } + + public static class Instrumentation.ActivityMonitor { + ctor public Instrumentation.ActivityMonitor(android.content.IntentFilter, android.app.Instrumentation.ActivityResult, boolean); + ctor public Instrumentation.ActivityMonitor(java.lang.String, android.app.Instrumentation.ActivityResult, boolean); + method public final android.content.IntentFilter getFilter(); + method public final int getHits(); + method public final android.app.Activity getLastActivity(); + method public final android.app.Instrumentation.ActivityResult getResult(); + method public final boolean isBlocking(); + method public final android.app.Activity waitForActivity(); + method public final android.app.Activity waitForActivityWithTimeout(long); + } + + public static final class Instrumentation.ActivityResult { + ctor public Instrumentation.ActivityResult(int, android.content.Intent); + method public int getResultCode(); + method public android.content.Intent getResultData(); + } + + public abstract class IntentService extends android.app.Service { + ctor public IntentService(java.lang.String); + method public android.os.IBinder onBind(android.content.Intent); + method protected abstract void onHandleIntent(android.content.Intent); + method public void setIntentRedelivery(boolean); + } + + public class KeyguardManager { + method public android.content.Intent createConfirmDeviceCredentialIntent(java.lang.CharSequence, java.lang.CharSequence); + method public deprecated void exitKeyguardSecurely(android.app.KeyguardManager.OnKeyguardExitResult); + method public boolean inKeyguardRestrictedInputMode(); + method public boolean isDeviceLocked(); + method public boolean isKeyguardLocked(); + method public boolean isKeyguardSecure(); + method public deprecated android.app.KeyguardManager.KeyguardLock newKeyguardLock(java.lang.String); + } + + public deprecated class KeyguardManager.KeyguardLock { + method public void disableKeyguard(); + method public void reenableKeyguard(); + } + + public static abstract interface KeyguardManager.OnKeyguardExitResult { + method public abstract void onKeyguardExitResult(boolean); + } + + public abstract class LauncherActivity extends android.app.ListActivity { + ctor public LauncherActivity(); + method protected android.content.Intent getTargetIntent(); + method protected android.content.Intent intentForPosition(int); + method protected android.app.LauncherActivity.ListItem itemForPosition(int); + method public java.util.List makeListItems(); + method protected java.util.List onQueryPackageManager(android.content.Intent); + method protected void onSetContentView(); + } + + public class LauncherActivity.IconResizer { + ctor public LauncherActivity.IconResizer(); + method public android.graphics.drawable.Drawable createIconThumbnail(android.graphics.drawable.Drawable); + } + + public static class LauncherActivity.ListItem { + ctor public LauncherActivity.ListItem(); + field public java.lang.String className; + field public android.os.Bundle extras; + field public android.graphics.drawable.Drawable icon; + field public java.lang.CharSequence label; + field public java.lang.String packageName; + field public android.content.pm.ResolveInfo resolveInfo; + } + + public class ListActivity extends android.app.Activity { + ctor public ListActivity(); + method public android.widget.ListAdapter getListAdapter(); + method public android.widget.ListView getListView(); + method public long getSelectedItemId(); + method public int getSelectedItemPosition(); + method protected void onListItemClick(android.widget.ListView, android.view.View, int, long); + method public void setListAdapter(android.widget.ListAdapter); + method public void setSelection(int); + } + + public class ListFragment extends android.app.Fragment { + ctor public ListFragment(); + method public android.widget.ListAdapter getListAdapter(); + method public android.widget.ListView getListView(); + method public long getSelectedItemId(); + method public int getSelectedItemPosition(); + method public void onListItemClick(android.widget.ListView, android.view.View, int, long); + method public void setEmptyText(java.lang.CharSequence); + method public void setListAdapter(android.widget.ListAdapter); + method public void setListShown(boolean); + method public void setListShownNoAnimation(boolean); + method public void setSelection(int); + } + + public abstract class LoaderManager { + ctor public LoaderManager(); + method public abstract void destroyLoader(int); + method public abstract void dump(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]); + method public static void enableDebugLogging(boolean); + method public abstract android.content.Loader getLoader(int); + method public abstract android.content.Loader initLoader(int, android.os.Bundle, android.app.LoaderManager.LoaderCallbacks); + method public abstract android.content.Loader restartLoader(int, android.os.Bundle, android.app.LoaderManager.LoaderCallbacks); + } + + public static abstract interface LoaderManager.LoaderCallbacks { + method public abstract android.content.Loader onCreateLoader(int, android.os.Bundle); + method public abstract void onLoadFinished(android.content.Loader, D); + method public abstract void onLoaderReset(android.content.Loader); + } + + public deprecated class LocalActivityManager { + ctor public LocalActivityManager(android.app.Activity, boolean); + method public android.view.Window destroyActivity(java.lang.String, boolean); + method public void dispatchCreate(android.os.Bundle); + method public void dispatchDestroy(boolean); + method public void dispatchPause(boolean); + method public void dispatchResume(); + method public void dispatchStop(); + method public android.app.Activity getActivity(java.lang.String); + method public android.app.Activity getCurrentActivity(); + method public java.lang.String getCurrentId(); + method public void removeAllActivities(); + method public android.os.Bundle saveInstanceState(); + method public android.view.Window startActivity(java.lang.String, android.content.Intent); + } + + public class MediaRouteActionProvider extends android.view.ActionProvider { + ctor public MediaRouteActionProvider(android.content.Context); + method public android.view.View onCreateActionView(); + method public void setExtendedSettingsClickListener(android.view.View.OnClickListener); + method public void setRouteTypes(int); + } + + public class MediaRouteButton extends android.view.View { + ctor public MediaRouteButton(android.content.Context); + ctor public MediaRouteButton(android.content.Context, android.util.AttributeSet); + ctor public MediaRouteButton(android.content.Context, android.util.AttributeSet, int); + ctor public MediaRouteButton(android.content.Context, android.util.AttributeSet, int, int); + method public int getRouteTypes(); + method public void onAttachedToWindow(); + method public void onDetachedFromWindow(); + method public void setExtendedSettingsClickListener(android.view.View.OnClickListener); + method public void setRouteTypes(int); + method public void showDialog(); + } + + public class NativeActivity extends android.app.Activity implements android.view.InputQueue.Callback android.view.SurfaceHolder.Callback2 android.view.ViewTreeObserver.OnGlobalLayoutListener { + ctor public NativeActivity(); + method public void onGlobalLayout(); + method public void onInputQueueCreated(android.view.InputQueue); + method public void onInputQueueDestroyed(android.view.InputQueue); + method public void surfaceChanged(android.view.SurfaceHolder, int, int, int); + method public void surfaceCreated(android.view.SurfaceHolder); + method public void surfaceDestroyed(android.view.SurfaceHolder); + method public void surfaceRedrawNeeded(android.view.SurfaceHolder); + field public static final java.lang.String META_DATA_FUNC_NAME = "android.app.func_name"; + field public static final java.lang.String META_DATA_LIB_NAME = "android.app.lib_name"; + } + + public class Notification implements android.os.Parcelable { + ctor public Notification(); + ctor public deprecated Notification(int, java.lang.CharSequence, long); + ctor public Notification(android.os.Parcel); + method public android.app.Notification clone(); + method public int describeContents(); + method public java.lang.String getGroup(); + method public java.lang.String getSortKey(); + method public deprecated void setLatestEventInfo(android.content.Context, java.lang.CharSequence, java.lang.CharSequence, android.app.PendingIntent); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.media.AudioAttributes AUDIO_ATTRIBUTES_DEFAULT; + field public static final java.lang.String CATEGORY_ALARM = "alarm"; + field public static final java.lang.String CATEGORY_CALL = "call"; + field public static final java.lang.String CATEGORY_EMAIL = "email"; + field public static final java.lang.String CATEGORY_ERROR = "err"; + field public static final java.lang.String CATEGORY_EVENT = "event"; + field public static final java.lang.String CATEGORY_MESSAGE = "msg"; + field public static final java.lang.String CATEGORY_PROGRESS = "progress"; + field public static final java.lang.String CATEGORY_PROMO = "promo"; + field public static final java.lang.String CATEGORY_RECOMMENDATION = "recommendation"; + field public static final java.lang.String CATEGORY_SERVICE = "service"; + field public static final java.lang.String CATEGORY_SOCIAL = "social"; + field public static final java.lang.String CATEGORY_STATUS = "status"; + field public static final java.lang.String CATEGORY_SYSTEM = "sys"; + field public static final java.lang.String CATEGORY_TRANSPORT = "transport"; + field public static final int COLOR_DEFAULT = 0; // 0x0 + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int DEFAULT_ALL = -1; // 0xffffffff + field public static final int DEFAULT_LIGHTS = 4; // 0x4 + field public static final int DEFAULT_SOUND = 1; // 0x1 + field public static final int DEFAULT_VIBRATE = 2; // 0x2 + field public static final java.lang.String EXTRA_BACKGROUND_IMAGE_URI = "android.backgroundImageUri"; + field public static final java.lang.String EXTRA_BIG_TEXT = "android.bigText"; + field public static final java.lang.String EXTRA_COMPACT_ACTIONS = "android.compactActions"; + field public static final java.lang.String EXTRA_INFO_TEXT = "android.infoText"; + field public static final java.lang.String EXTRA_LARGE_ICON = "android.largeIcon"; + field public static final java.lang.String EXTRA_LARGE_ICON_BIG = "android.largeIcon.big"; + field public static final java.lang.String EXTRA_MEDIA_SESSION = "android.mediaSession"; + field public static final java.lang.String EXTRA_PEOPLE = "android.people"; + field public static final java.lang.String EXTRA_PICTURE = "android.picture"; + field public static final java.lang.String EXTRA_PROGRESS = "android.progress"; + field public static final java.lang.String EXTRA_PROGRESS_INDETERMINATE = "android.progressIndeterminate"; + field public static final java.lang.String EXTRA_PROGRESS_MAX = "android.progressMax"; + field public static final java.lang.String EXTRA_SHOW_CHRONOMETER = "android.showChronometer"; + field public static final java.lang.String EXTRA_SHOW_WHEN = "android.showWhen"; + field public static final java.lang.String EXTRA_SMALL_ICON = "android.icon"; + field public static final java.lang.String EXTRA_SUB_TEXT = "android.subText"; + field public static final java.lang.String EXTRA_SUMMARY_TEXT = "android.summaryText"; + field public static final java.lang.String EXTRA_TEMPLATE = "android.template"; + field public static final java.lang.String EXTRA_TEXT = "android.text"; + field public static final java.lang.String EXTRA_TEXT_LINES = "android.textLines"; + field public static final java.lang.String EXTRA_TITLE = "android.title"; + field public static final java.lang.String EXTRA_TITLE_BIG = "android.title.big"; + field public static final int FLAG_AUTO_CANCEL = 16; // 0x10 + field public static final int FLAG_FOREGROUND_SERVICE = 64; // 0x40 + field public static final int FLAG_GROUP_SUMMARY = 512; // 0x200 + field public static final deprecated int FLAG_HIGH_PRIORITY = 128; // 0x80 + field public static final int FLAG_INSISTENT = 4; // 0x4 + field public static final int FLAG_LOCAL_ONLY = 256; // 0x100 + field public static final int FLAG_NO_CLEAR = 32; // 0x20 + field public static final int FLAG_ONGOING_EVENT = 2; // 0x2 + field public static final int FLAG_ONLY_ALERT_ONCE = 8; // 0x8 + field public static final int FLAG_SHOW_LIGHTS = 1; // 0x1 + field public static final java.lang.String INTENT_CATEGORY_NOTIFICATION_PREFERENCES = "android.intent.category.NOTIFICATION_PREFERENCES"; + field public static final int PRIORITY_DEFAULT = 0; // 0x0 + field public static final int PRIORITY_HIGH = 1; // 0x1 + field public static final int PRIORITY_LOW = -1; // 0xffffffff + field public static final int PRIORITY_MAX = 2; // 0x2 + field public static final int PRIORITY_MIN = -2; // 0xfffffffe + field public static final deprecated int STREAM_DEFAULT = -1; // 0xffffffff + field public static final int VISIBILITY_PRIVATE = 0; // 0x0 + field public static final int VISIBILITY_PUBLIC = 1; // 0x1 + field public static final int VISIBILITY_SECRET = -1; // 0xffffffff + field public android.app.Notification.Action[] actions; + field public android.media.AudioAttributes audioAttributes; + field public deprecated int audioStreamType; + field public android.widget.RemoteViews bigContentView; + field public java.lang.String category; + field public int color; + field public android.app.PendingIntent contentIntent; + field public android.widget.RemoteViews contentView; + field public int defaults; + field public android.app.PendingIntent deleteIntent; + field public android.os.Bundle extras; + field public int flags; + field public android.app.PendingIntent fullScreenIntent; + field public android.widget.RemoteViews headsUpContentView; + field public int icon; + field public int iconLevel; + field public android.graphics.Bitmap largeIcon; + field public int ledARGB; + field public int ledOffMS; + field public int ledOnMS; + field public int number; + field public int priority; + field public android.app.Notification publicVersion; + field public android.net.Uri sound; + field public java.lang.CharSequence tickerText; + field public deprecated android.widget.RemoteViews tickerView; + field public long[] vibrate; + field public int visibility; + field public long when; + } + + public static class Notification.Action implements android.os.Parcelable { + ctor public Notification.Action(int, java.lang.CharSequence, android.app.PendingIntent); + method public android.app.Notification.Action clone(); + method public int describeContents(); + method public android.os.Bundle getExtras(); + method public android.app.RemoteInput[] getRemoteInputs(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public android.app.PendingIntent actionIntent; + field public int icon; + field public java.lang.CharSequence title; + } + + public static final class Notification.Action.Builder { + ctor public Notification.Action.Builder(int, java.lang.CharSequence, android.app.PendingIntent); + ctor public Notification.Action.Builder(android.app.Notification.Action); + method public android.app.Notification.Action.Builder addExtras(android.os.Bundle); + method public android.app.Notification.Action.Builder addRemoteInput(android.app.RemoteInput); + method public android.app.Notification.Action build(); + method public android.app.Notification.Action.Builder extend(android.app.Notification.Action.Extender); + method public android.os.Bundle getExtras(); + } + + public static abstract interface Notification.Action.Extender { + method public abstract android.app.Notification.Action.Builder extend(android.app.Notification.Action.Builder); + } + + public static final class Notification.Action.WearableExtender implements android.app.Notification.Action.Extender { + ctor public Notification.Action.WearableExtender(); + ctor public Notification.Action.WearableExtender(android.app.Notification.Action); + method public android.app.Notification.Action.WearableExtender clone(); + method public android.app.Notification.Action.Builder extend(android.app.Notification.Action.Builder); + method public java.lang.CharSequence getCancelLabel(); + method public java.lang.CharSequence getConfirmLabel(); + method public java.lang.CharSequence getInProgressLabel(); + method public boolean isAvailableOffline(); + method public android.app.Notification.Action.WearableExtender setAvailableOffline(boolean); + method public android.app.Notification.Action.WearableExtender setCancelLabel(java.lang.CharSequence); + method public android.app.Notification.Action.WearableExtender setConfirmLabel(java.lang.CharSequence); + method public android.app.Notification.Action.WearableExtender setInProgressLabel(java.lang.CharSequence); + } + + public static class Notification.BigPictureStyle extends android.app.Notification.Style { + ctor public Notification.BigPictureStyle(); + ctor public Notification.BigPictureStyle(android.app.Notification.Builder); + method public android.app.Notification.BigPictureStyle bigLargeIcon(android.graphics.Bitmap); + method public android.app.Notification.BigPictureStyle bigPicture(android.graphics.Bitmap); + method public android.app.Notification.BigPictureStyle setBigContentTitle(java.lang.CharSequence); + method public android.app.Notification.BigPictureStyle setSummaryText(java.lang.CharSequence); + } + + public static class Notification.BigTextStyle extends android.app.Notification.Style { + ctor public Notification.BigTextStyle(); + ctor public Notification.BigTextStyle(android.app.Notification.Builder); + method public android.app.Notification.BigTextStyle bigText(java.lang.CharSequence); + method public android.app.Notification.BigTextStyle setBigContentTitle(java.lang.CharSequence); + method public android.app.Notification.BigTextStyle setSummaryText(java.lang.CharSequence); + } + + public static class Notification.Builder { + ctor public Notification.Builder(android.content.Context); + method public android.app.Notification.Builder addAction(int, java.lang.CharSequence, android.app.PendingIntent); + method public android.app.Notification.Builder addAction(android.app.Notification.Action); + method public android.app.Notification.Builder addExtras(android.os.Bundle); + method public android.app.Notification.Builder addPerson(java.lang.String); + method public android.app.Notification build(); + method public android.app.Notification.Builder extend(android.app.Notification.Extender); + method public android.os.Bundle getExtras(); + method public deprecated android.app.Notification getNotification(); + method public android.app.Notification.Builder setAutoCancel(boolean); + method public android.app.Notification.Builder setCategory(java.lang.String); + method public android.app.Notification.Builder setColor(int); + method public android.app.Notification.Builder setContent(android.widget.RemoteViews); + method public android.app.Notification.Builder setContentInfo(java.lang.CharSequence); + method public android.app.Notification.Builder setContentIntent(android.app.PendingIntent); + method public android.app.Notification.Builder setContentText(java.lang.CharSequence); + method public android.app.Notification.Builder setContentTitle(java.lang.CharSequence); + method public android.app.Notification.Builder setDefaults(int); + method public android.app.Notification.Builder setDeleteIntent(android.app.PendingIntent); + method public android.app.Notification.Builder setExtras(android.os.Bundle); + method public android.app.Notification.Builder setFullScreenIntent(android.app.PendingIntent, boolean); + method public android.app.Notification.Builder setGroup(java.lang.String); + method public android.app.Notification.Builder setGroupSummary(boolean); + method public android.app.Notification.Builder setLargeIcon(android.graphics.Bitmap); + method public android.app.Notification.Builder setLights(int, int, int); + method public android.app.Notification.Builder setLocalOnly(boolean); + method public android.app.Notification.Builder setNumber(int); + method public android.app.Notification.Builder setOngoing(boolean); + method public android.app.Notification.Builder setOnlyAlertOnce(boolean); + method public android.app.Notification.Builder setPriority(int); + method public android.app.Notification.Builder setProgress(int, int, boolean); + method public android.app.Notification.Builder setPublicVersion(android.app.Notification); + method public android.app.Notification.Builder setShowWhen(boolean); + method public android.app.Notification.Builder setSmallIcon(int); + method public android.app.Notification.Builder setSmallIcon(int, int); + method public android.app.Notification.Builder setSortKey(java.lang.String); + method public android.app.Notification.Builder setSound(android.net.Uri); + method public deprecated android.app.Notification.Builder setSound(android.net.Uri, int); + method public android.app.Notification.Builder setSound(android.net.Uri, android.media.AudioAttributes); + method public android.app.Notification.Builder setStyle(android.app.Notification.Style); + method public android.app.Notification.Builder setSubText(java.lang.CharSequence); + method public android.app.Notification.Builder setTicker(java.lang.CharSequence); + method public deprecated android.app.Notification.Builder setTicker(java.lang.CharSequence, android.widget.RemoteViews); + method public android.app.Notification.Builder setUsesChronometer(boolean); + method public android.app.Notification.Builder setVibrate(long[]); + method public android.app.Notification.Builder setVisibility(int); + method public android.app.Notification.Builder setWhen(long); + } + + public static abstract interface Notification.Extender { + method public abstract android.app.Notification.Builder extend(android.app.Notification.Builder); + } + + public static class Notification.InboxStyle extends android.app.Notification.Style { + ctor public Notification.InboxStyle(); + ctor public Notification.InboxStyle(android.app.Notification.Builder); + method public android.app.Notification.InboxStyle addLine(java.lang.CharSequence); + method public android.app.Notification.InboxStyle setBigContentTitle(java.lang.CharSequence); + method public android.app.Notification.InboxStyle setSummaryText(java.lang.CharSequence); + } + + public static class Notification.MediaStyle extends android.app.Notification.Style { + ctor public Notification.MediaStyle(); + ctor public Notification.MediaStyle(android.app.Notification.Builder); + method public android.app.Notification.MediaStyle setMediaSession(android.media.session.MediaSession.Token); + method public android.app.Notification.MediaStyle setShowActionsInCompactView(int...); + } + + public static abstract class Notification.Style { + ctor public Notification.Style(); + method public android.app.Notification build(); + method protected void checkBuilder(); + method protected android.widget.RemoteViews getStandardView(int); + method protected void internalSetBigContentTitle(java.lang.CharSequence); + method protected void internalSetSummaryText(java.lang.CharSequence); + method public void setBuilder(android.app.Notification.Builder); + field protected android.app.Notification.Builder mBuilder; + } + + public static final class Notification.WearableExtender implements android.app.Notification.Extender { + ctor public Notification.WearableExtender(); + ctor public Notification.WearableExtender(android.app.Notification); + method public android.app.Notification.WearableExtender addAction(android.app.Notification.Action); + method public android.app.Notification.WearableExtender addActions(java.util.List); + method public android.app.Notification.WearableExtender addPage(android.app.Notification); + method public android.app.Notification.WearableExtender addPages(java.util.List); + method public android.app.Notification.WearableExtender clearActions(); + method public android.app.Notification.WearableExtender clearPages(); + method public android.app.Notification.WearableExtender clone(); + method public android.app.Notification.Builder extend(android.app.Notification.Builder); + method public java.util.List getActions(); + method public android.graphics.Bitmap getBackground(); + method public int getContentAction(); + method public int getContentIcon(); + method public int getContentIconGravity(); + method public boolean getContentIntentAvailableOffline(); + method public int getCustomContentHeight(); + method public int getCustomSizePreset(); + method public android.app.PendingIntent getDisplayIntent(); + method public int getGravity(); + method public boolean getHintAvoidBackgroundClipping(); + method public boolean getHintHideIcon(); + method public int getHintScreenTimeout(); + method public boolean getHintShowBackgroundOnly(); + method public java.util.List getPages(); + method public boolean getStartScrollBottom(); + method public android.app.Notification.WearableExtender setBackground(android.graphics.Bitmap); + method public android.app.Notification.WearableExtender setContentAction(int); + method public android.app.Notification.WearableExtender setContentIcon(int); + method public android.app.Notification.WearableExtender setContentIconGravity(int); + method public android.app.Notification.WearableExtender setContentIntentAvailableOffline(boolean); + method public android.app.Notification.WearableExtender setCustomContentHeight(int); + method public android.app.Notification.WearableExtender setCustomSizePreset(int); + method public android.app.Notification.WearableExtender setDisplayIntent(android.app.PendingIntent); + method public android.app.Notification.WearableExtender setGravity(int); + method public android.app.Notification.WearableExtender setHintAvoidBackgroundClipping(boolean); + method public android.app.Notification.WearableExtender setHintHideIcon(boolean); + method public android.app.Notification.WearableExtender setHintScreenTimeout(int); + method public android.app.Notification.WearableExtender setHintShowBackgroundOnly(boolean); + method public android.app.Notification.WearableExtender setStartScrollBottom(boolean); + field public static final int SCREEN_TIMEOUT_LONG = -1; // 0xffffffff + field public static final int SCREEN_TIMEOUT_SHORT = 0; // 0x0 + field public static final int SIZE_DEFAULT = 0; // 0x0 + field public static final int SIZE_FULL_SCREEN = 5; // 0x5 + field public static final int SIZE_LARGE = 4; // 0x4 + field public static final int SIZE_MEDIUM = 3; // 0x3 + field public static final int SIZE_SMALL = 2; // 0x2 + field public static final int SIZE_XSMALL = 1; // 0x1 + field public static final int UNSET_ACTION_INDEX = -1; // 0xffffffff + } + + public class NotificationManager { + method public void cancel(int); + method public void cancel(java.lang.String, int); + method public void cancelAll(); + method public void notify(int, android.app.Notification); + method public void notify(java.lang.String, int, android.app.Notification); + } + + public final class PendingIntent implements android.os.Parcelable { + method public void cancel(); + method public int describeContents(); + method public static android.app.PendingIntent getActivities(android.content.Context, int, android.content.Intent[], int); + method public static android.app.PendingIntent getActivities(android.content.Context, int, android.content.Intent[], int, android.os.Bundle); + method public static android.app.PendingIntent getActivity(android.content.Context, int, android.content.Intent, int); + method public static android.app.PendingIntent getActivity(android.content.Context, int, android.content.Intent, int, android.os.Bundle); + method public static android.app.PendingIntent getBroadcast(android.content.Context, int, android.content.Intent, int); + method public java.lang.String getCreatorPackage(); + method public int getCreatorUid(); + method public android.os.UserHandle getCreatorUserHandle(); + method public android.content.IntentSender getIntentSender(); + method public static android.app.PendingIntent getService(android.content.Context, int, android.content.Intent, int); + method public deprecated java.lang.String getTargetPackage(); + method public static android.app.PendingIntent readPendingIntentOrNullFromParcel(android.os.Parcel); + method public void send() throws android.app.PendingIntent.CanceledException; + method public void send(int) throws android.app.PendingIntent.CanceledException; + method public void send(android.content.Context, int, android.content.Intent) throws android.app.PendingIntent.CanceledException; + method public void send(int, android.app.PendingIntent.OnFinished, android.os.Handler) throws android.app.PendingIntent.CanceledException; + method public void send(android.content.Context, int, android.content.Intent, android.app.PendingIntent.OnFinished, android.os.Handler) throws android.app.PendingIntent.CanceledException; + method public void send(android.content.Context, int, android.content.Intent, android.app.PendingIntent.OnFinished, android.os.Handler, java.lang.String) throws android.app.PendingIntent.CanceledException; + method public static void writePendingIntentOrNullToParcel(android.app.PendingIntent, android.os.Parcel); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int FLAG_CANCEL_CURRENT = 268435456; // 0x10000000 + field public static final int FLAG_NO_CREATE = 536870912; // 0x20000000 + field public static final int FLAG_ONE_SHOT = 1073741824; // 0x40000000 + field public static final int FLAG_UPDATE_CURRENT = 134217728; // 0x8000000 + } + + public static class PendingIntent.CanceledException extends android.util.AndroidException { + ctor public PendingIntent.CanceledException(); + ctor public PendingIntent.CanceledException(java.lang.String); + ctor public PendingIntent.CanceledException(java.lang.Exception); + } + + public static abstract interface PendingIntent.OnFinished { + method public abstract void onSendFinished(android.app.PendingIntent, android.content.Intent, int, java.lang.String, android.os.Bundle); + } + + public class Presentation extends android.app.Dialog { + ctor public Presentation(android.content.Context, android.view.Display); + ctor public Presentation(android.content.Context, android.view.Display, int); + method public android.view.Display getDisplay(); + method public android.content.res.Resources getResources(); + method public void onDisplayChanged(); + method public void onDisplayRemoved(); + } + + public class ProgressDialog extends android.app.AlertDialog { + ctor public ProgressDialog(android.content.Context); + ctor public ProgressDialog(android.content.Context, int); + method public int getMax(); + method public int getProgress(); + method public int getSecondaryProgress(); + method public void incrementProgressBy(int); + method public void incrementSecondaryProgressBy(int); + method public boolean isIndeterminate(); + method public void onStart(); + method public void setIndeterminate(boolean); + method public void setIndeterminateDrawable(android.graphics.drawable.Drawable); + method public void setMax(int); + method public void setProgress(int); + method public void setProgressDrawable(android.graphics.drawable.Drawable); + method public void setProgressNumberFormat(java.lang.String); + method public void setProgressPercentFormat(java.text.NumberFormat); + method public void setProgressStyle(int); + method public void setSecondaryProgress(int); + method public static android.app.ProgressDialog show(android.content.Context, java.lang.CharSequence, java.lang.CharSequence); + method public static android.app.ProgressDialog show(android.content.Context, java.lang.CharSequence, java.lang.CharSequence, boolean); + method public static android.app.ProgressDialog show(android.content.Context, java.lang.CharSequence, java.lang.CharSequence, boolean, boolean); + method public static android.app.ProgressDialog show(android.content.Context, java.lang.CharSequence, java.lang.CharSequence, boolean, boolean, android.content.DialogInterface.OnCancelListener); + field public static final int STYLE_HORIZONTAL = 1; // 0x1 + field public static final int STYLE_SPINNER = 0; // 0x0 + } + + public final class RemoteInput implements android.os.Parcelable { + method public static void addResultsToIntent(android.app.RemoteInput[], android.content.Intent, android.os.Bundle); + method public int describeContents(); + method public boolean getAllowFreeFormInput(); + method public java.lang.CharSequence[] getChoices(); + method public android.os.Bundle getExtras(); + method public java.lang.CharSequence getLabel(); + method public java.lang.String getResultKey(); + method public static android.os.Bundle getResultsFromIntent(android.content.Intent); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final java.lang.String EXTRA_RESULTS_DATA = "android.remoteinput.resultsData"; + field public static final java.lang.String RESULTS_CLIP_LABEL = "android.remoteinput.results"; + } + + public static final class RemoteInput.Builder { + ctor public RemoteInput.Builder(java.lang.String); + method public android.app.RemoteInput.Builder addExtras(android.os.Bundle); + method public android.app.RemoteInput build(); + method public android.os.Bundle getExtras(); + method public android.app.RemoteInput.Builder setAllowFreeFormInput(boolean); + method public android.app.RemoteInput.Builder setChoices(java.lang.CharSequence[]); + method public android.app.RemoteInput.Builder setLabel(java.lang.CharSequence); + } + + public class SearchManager implements android.content.DialogInterface.OnCancelListener android.content.DialogInterface.OnDismissListener { + method public android.content.ComponentName getGlobalSearchActivity(); + method public android.app.SearchableInfo getSearchableInfo(android.content.ComponentName); + method public java.util.List getSearchablesInGlobalSearch(); + method public deprecated void onCancel(android.content.DialogInterface); + method public deprecated void onDismiss(android.content.DialogInterface); + method public void setOnCancelListener(android.app.SearchManager.OnCancelListener); + method public void setOnDismissListener(android.app.SearchManager.OnDismissListener); + method public void startSearch(java.lang.String, boolean, android.content.ComponentName, android.os.Bundle, boolean); + method public void stopSearch(); + method public void triggerSearch(java.lang.String, android.content.ComponentName, android.os.Bundle); + field public static final java.lang.String ACTION_KEY = "action_key"; + field public static final java.lang.String ACTION_MSG = "action_msg"; + field public static final java.lang.String APP_DATA = "app_data"; + field public static final java.lang.String CURSOR_EXTRA_KEY_IN_PROGRESS = "in_progress"; + field public static final java.lang.String EXTRA_DATA_KEY = "intent_extra_data_key"; + field public static final java.lang.String EXTRA_NEW_SEARCH = "new_search"; + field public static final java.lang.String EXTRA_SELECT_QUERY = "select_query"; + field public static final java.lang.String EXTRA_WEB_SEARCH_PENDINGINTENT = "web_search_pendingintent"; + field public static final int FLAG_QUERY_REFINEMENT = 1; // 0x1 + field public static final java.lang.String INTENT_ACTION_GLOBAL_SEARCH = "android.search.action.GLOBAL_SEARCH"; + field public static final java.lang.String INTENT_ACTION_SEARCHABLES_CHANGED = "android.search.action.SEARCHABLES_CHANGED"; + field public static final java.lang.String INTENT_ACTION_SEARCH_SETTINGS = "android.search.action.SEARCH_SETTINGS"; + field public static final java.lang.String INTENT_ACTION_SEARCH_SETTINGS_CHANGED = "android.search.action.SETTINGS_CHANGED"; + field public static final java.lang.String INTENT_ACTION_WEB_SEARCH_SETTINGS = "android.search.action.WEB_SEARCH_SETTINGS"; + field public static final java.lang.String INTENT_GLOBAL_SEARCH_ACTIVITY_CHANGED = "android.search.action.GLOBAL_SEARCH_ACTIVITY_CHANGED"; + field public static final char MENU_KEY = 115; // 0x0073 's' + field public static final int MENU_KEYCODE = 47; // 0x2f + field public static final java.lang.String QUERY = "query"; + field public static final java.lang.String SHORTCUT_MIME_TYPE = "vnd.android.cursor.item/vnd.android.search.suggest"; + field public static final java.lang.String SUGGEST_COLUMN_AUDIO_CHANNEL_CONFIG = "suggest_audio_channel_config"; + field public static final java.lang.String SUGGEST_COLUMN_CONTENT_TYPE = "suggest_content_type"; + field public static final java.lang.String SUGGEST_COLUMN_DURATION = "suggest_duration"; + field public static final java.lang.String SUGGEST_COLUMN_FLAGS = "suggest_flags"; + field public static final java.lang.String SUGGEST_COLUMN_FORMAT = "suggest_format"; + field public static final java.lang.String SUGGEST_COLUMN_ICON_1 = "suggest_icon_1"; + field public static final java.lang.String SUGGEST_COLUMN_ICON_2 = "suggest_icon_2"; + field public static final java.lang.String SUGGEST_COLUMN_INTENT_ACTION = "suggest_intent_action"; + field public static final java.lang.String SUGGEST_COLUMN_INTENT_DATA = "suggest_intent_data"; + field public static final java.lang.String SUGGEST_COLUMN_INTENT_DATA_ID = "suggest_intent_data_id"; + field public static final java.lang.String SUGGEST_COLUMN_INTENT_EXTRA_DATA = "suggest_intent_extra_data"; + field public static final java.lang.String SUGGEST_COLUMN_IS_LIVE = "suggest_is_live"; + field public static final java.lang.String SUGGEST_COLUMN_LAST_ACCESS_HINT = "suggest_last_access_hint"; + field public static final java.lang.String SUGGEST_COLUMN_PRODUCTION_YEAR = "suggest_production_year"; + field public static final java.lang.String SUGGEST_COLUMN_PURCHASE_PRICE = "suggest_purchase_price"; + field public static final java.lang.String SUGGEST_COLUMN_QUERY = "suggest_intent_query"; + field public static final java.lang.String SUGGEST_COLUMN_RATING_SCORE = "suggest_rating_score"; + field public static final java.lang.String SUGGEST_COLUMN_RATING_STYLE = "suggest_rating_style"; + field public static final java.lang.String SUGGEST_COLUMN_RENTAL_PRICE = "suggest_rental_price"; + field public static final java.lang.String SUGGEST_COLUMN_RESULT_CARD_IMAGE = "suggest_result_card_image"; + field public static final java.lang.String SUGGEST_COLUMN_SHORTCUT_ID = "suggest_shortcut_id"; + field public static final java.lang.String SUGGEST_COLUMN_SPINNER_WHILE_REFRESHING = "suggest_spinner_while_refreshing"; + field public static final java.lang.String SUGGEST_COLUMN_TEXT_1 = "suggest_text_1"; + field public static final java.lang.String SUGGEST_COLUMN_TEXT_2 = "suggest_text_2"; + field public static final java.lang.String SUGGEST_COLUMN_TEXT_2_URL = "suggest_text_2_url"; + field public static final java.lang.String SUGGEST_COLUMN_VIDEO_HEIGHT = "suggest_video_height"; + field public static final java.lang.String SUGGEST_COLUMN_VIDEO_WIDTH = "suggest_video_width"; + field public static final java.lang.String SUGGEST_MIME_TYPE = "vnd.android.cursor.dir/vnd.android.search.suggest"; + field public static final java.lang.String SUGGEST_NEVER_MAKE_SHORTCUT = "_-1"; + field public static final java.lang.String SUGGEST_PARAMETER_LIMIT = "limit"; + field public static final java.lang.String SUGGEST_URI_PATH_QUERY = "search_suggest_query"; + field public static final java.lang.String SUGGEST_URI_PATH_SHORTCUT = "search_suggest_shortcut"; + field public static final java.lang.String USER_QUERY = "user_query"; + } + + public static abstract interface SearchManager.OnCancelListener { + method public abstract void onCancel(); + } + + public static abstract interface SearchManager.OnDismissListener { + method public abstract void onDismiss(); + } + + public final class SearchableInfo implements android.os.Parcelable { + method public boolean autoUrlDetect(); + method public int describeContents(); + method public int getHintId(); + method public int getImeOptions(); + method public int getInputType(); + method public android.content.ComponentName getSearchActivity(); + method public int getSettingsDescriptionId(); + method public java.lang.String getSuggestAuthority(); + method public java.lang.String getSuggestIntentAction(); + method public java.lang.String getSuggestIntentData(); + method public java.lang.String getSuggestPackage(); + method public java.lang.String getSuggestPath(); + method public java.lang.String getSuggestSelection(); + method public int getSuggestThreshold(); + method public int getVoiceLanguageId(); + method public int getVoiceLanguageModeId(); + method public int getVoiceMaxResults(); + method public int getVoicePromptTextId(); + method public boolean getVoiceSearchEnabled(); + method public boolean getVoiceSearchLaunchRecognizer(); + method public boolean getVoiceSearchLaunchWebSearch(); + method public boolean queryAfterZeroResults(); + method public boolean shouldIncludeInGlobalSearch(); + method public boolean shouldRewriteQueryFromData(); + method public boolean shouldRewriteQueryFromText(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public abstract class Service extends android.content.ContextWrapper implements android.content.ComponentCallbacks2 { + ctor public Service(); + method protected void dump(java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]); + method public final android.app.Application getApplication(); + method public abstract android.os.IBinder onBind(android.content.Intent); + method public void onConfigurationChanged(android.content.res.Configuration); + method public void onCreate(); + method public void onDestroy(); + method public void onLowMemory(); + method public void onRebind(android.content.Intent); + method public deprecated void onStart(android.content.Intent, int); + method public int onStartCommand(android.content.Intent, int, int); + method public void onTaskRemoved(android.content.Intent); + method public void onTrimMemory(int); + method public boolean onUnbind(android.content.Intent); + method public final void startForeground(int, android.app.Notification); + method public final void stopForeground(boolean); + method public final void stopSelf(); + method public final void stopSelf(int); + method public final boolean stopSelfResult(int); + field public static final int START_CONTINUATION_MASK = 15; // 0xf + field public static final int START_FLAG_REDELIVERY = 1; // 0x1 + field public static final int START_FLAG_RETRY = 2; // 0x2 + field public static final int START_NOT_STICKY = 2; // 0x2 + field public static final int START_REDELIVER_INTENT = 3; // 0x3 + field public static final int START_STICKY = 1; // 0x1 + field public static final int START_STICKY_COMPATIBILITY = 0; // 0x0 + } + + public abstract class SharedElementCallback { + ctor public SharedElementCallback(); + method public android.os.Parcelable onCaptureSharedElementSnapshot(android.view.View, android.graphics.Matrix, android.graphics.RectF); + method public android.view.View onCreateSnapshotView(android.content.Context, android.os.Parcelable); + method public void onMapSharedElements(java.util.List, java.util.Map); + method public void onRejectSharedElements(java.util.List); + method public void onSharedElementEnd(java.util.List, java.util.List, java.util.List); + method public void onSharedElementStart(java.util.List, java.util.List, java.util.List); + } + + public deprecated class TabActivity extends android.app.ActivityGroup { + ctor public TabActivity(); + method public android.widget.TabHost getTabHost(); + method public android.widget.TabWidget getTabWidget(); + method public void setDefaultTab(java.lang.String); + method public void setDefaultTab(int); + } + + public class TaskStackBuilder { + method public android.app.TaskStackBuilder addNextIntent(android.content.Intent); + method public android.app.TaskStackBuilder addNextIntentWithParentStack(android.content.Intent); + method public android.app.TaskStackBuilder addParentStack(android.app.Activity); + method public android.app.TaskStackBuilder addParentStack(java.lang.Class); + method public android.app.TaskStackBuilder addParentStack(android.content.ComponentName); + method public static android.app.TaskStackBuilder create(android.content.Context); + method public android.content.Intent editIntentAt(int); + method public int getIntentCount(); + method public android.content.Intent[] getIntents(); + method public android.app.PendingIntent getPendingIntent(int, int); + method public android.app.PendingIntent getPendingIntent(int, int, android.os.Bundle); + method public void startActivities(); + method public void startActivities(android.os.Bundle); + } + + public class TimePickerDialog extends android.app.AlertDialog implements android.content.DialogInterface.OnClickListener android.widget.TimePicker.OnTimeChangedListener { + ctor public TimePickerDialog(android.content.Context, android.app.TimePickerDialog.OnTimeSetListener, int, int, boolean); + ctor public TimePickerDialog(android.content.Context, int, android.app.TimePickerDialog.OnTimeSetListener, int, int, boolean); + method public void onClick(android.content.DialogInterface, int); + method public void onTimeChanged(android.widget.TimePicker, int, int); + method public void updateTime(int, int); + } + + public static abstract interface TimePickerDialog.OnTimeSetListener { + method public abstract void onTimeSet(android.widget.TimePicker, int, int); + } + + public final class UiAutomation { + method public void clearWindowAnimationFrameStats(); + method public boolean clearWindowContentFrameStats(int); + method public android.view.accessibility.AccessibilityEvent executeAndWaitForEvent(java.lang.Runnable, android.app.UiAutomation.AccessibilityEventFilter, long) throws java.util.concurrent.TimeoutException; + method public android.os.ParcelFileDescriptor executeShellCommand(java.lang.String); + method public android.view.accessibility.AccessibilityNodeInfo findFocus(int); + method public android.view.accessibility.AccessibilityNodeInfo getRootInActiveWindow(); + method public final android.accessibilityservice.AccessibilityServiceInfo getServiceInfo(); + method public android.view.WindowAnimationFrameStats getWindowAnimationFrameStats(); + method public android.view.WindowContentFrameStats getWindowContentFrameStats(int); + method public java.util.List getWindows(); + method public boolean injectInputEvent(android.view.InputEvent, boolean); + method public final boolean performGlobalAction(int); + method public void setOnAccessibilityEventListener(android.app.UiAutomation.OnAccessibilityEventListener); + method public boolean setRotation(int); + method public void setRunAsMonkey(boolean); + method public final void setServiceInfo(android.accessibilityservice.AccessibilityServiceInfo); + method public android.graphics.Bitmap takeScreenshot(); + method public void waitForIdle(long, long) throws java.util.concurrent.TimeoutException; + field public static final int ROTATION_FREEZE_0 = 0; // 0x0 + field public static final int ROTATION_FREEZE_180 = 2; // 0x2 + field public static final int ROTATION_FREEZE_270 = 3; // 0x3 + field public static final int ROTATION_FREEZE_90 = 1; // 0x1 + field public static final int ROTATION_FREEZE_CURRENT = -1; // 0xffffffff + field public static final int ROTATION_UNFREEZE = -2; // 0xfffffffe + } + + public static abstract interface UiAutomation.AccessibilityEventFilter { + method public abstract boolean accept(android.view.accessibility.AccessibilityEvent); + } + + public static abstract interface UiAutomation.OnAccessibilityEventListener { + method public abstract void onAccessibilityEvent(android.view.accessibility.AccessibilityEvent); + } + + public class UiModeManager { + method public void disableCarMode(int); + method public void enableCarMode(int); + method public int getCurrentModeType(); + method public int getNightMode(); + method public void setNightMode(int); + field public static java.lang.String ACTION_ENTER_CAR_MODE; + field public static java.lang.String ACTION_ENTER_DESK_MODE; + field public static java.lang.String ACTION_EXIT_CAR_MODE; + field public static java.lang.String ACTION_EXIT_DESK_MODE; + field public static final int DISABLE_CAR_MODE_GO_HOME = 1; // 0x1 + field public static final int ENABLE_CAR_MODE_ALLOW_SLEEP = 2; // 0x2 + field public static final int ENABLE_CAR_MODE_GO_CAR_HOME = 1; // 0x1 + field public static final int MODE_NIGHT_AUTO = 0; // 0x0 + field public static final int MODE_NIGHT_NO = 1; // 0x1 + field public static final int MODE_NIGHT_YES = 2; // 0x2 + } + + public class VoiceInteractor { + method public boolean submitRequest(android.app.VoiceInteractor.Request); + method public boolean[] supportsCommands(java.lang.String[]); + } + + public static class VoiceInteractor.AbortVoiceRequest extends android.app.VoiceInteractor.Request { + ctor public VoiceInteractor.AbortVoiceRequest(java.lang.CharSequence, android.os.Bundle); + method public void onAbortResult(android.os.Bundle); + } + + public static class VoiceInteractor.CommandRequest extends android.app.VoiceInteractor.Request { + ctor public VoiceInteractor.CommandRequest(java.lang.String, android.os.Bundle); + method public void onCommandResult(android.os.Bundle); + } + + public static class VoiceInteractor.CompleteVoiceRequest extends android.app.VoiceInteractor.Request { + ctor public VoiceInteractor.CompleteVoiceRequest(java.lang.CharSequence, android.os.Bundle); + method public void onCompleteResult(android.os.Bundle); + } + + public static class VoiceInteractor.ConfirmationRequest extends android.app.VoiceInteractor.Request { + ctor public VoiceInteractor.ConfirmationRequest(java.lang.CharSequence, android.os.Bundle); + method public void onConfirmationResult(boolean, android.os.Bundle); + } + + public static abstract class VoiceInteractor.Request { + ctor public VoiceInteractor.Request(); + method public void cancel(); + method public android.app.Activity getActivity(); + method public android.content.Context getContext(); + method public void onAttached(android.app.Activity); + method public void onCancel(); + method public void onDetached(); + } + + public final class WallpaperInfo implements android.os.Parcelable { + ctor public WallpaperInfo(android.content.Context, android.content.pm.ResolveInfo) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException; + method public int describeContents(); + method public void dump(android.util.Printer, java.lang.String); + method public android.content.ComponentName getComponent(); + method public java.lang.String getPackageName(); + method public android.content.pm.ServiceInfo getServiceInfo(); + method public java.lang.String getServiceName(); + method public java.lang.String getSettingsActivity(); + method public java.lang.CharSequence loadAuthor(android.content.pm.PackageManager) throws android.content.res.Resources.NotFoundException; + method public java.lang.CharSequence loadDescription(android.content.pm.PackageManager) throws android.content.res.Resources.NotFoundException; + method public android.graphics.drawable.Drawable loadIcon(android.content.pm.PackageManager); + method public java.lang.CharSequence loadLabel(android.content.pm.PackageManager); + method public android.graphics.drawable.Drawable loadThumbnail(android.content.pm.PackageManager); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public class WallpaperManager { + method public void clear() throws java.io.IOException; + method public void clearWallpaper(); + method public void clearWallpaperOffsets(android.os.IBinder); + method public void forgetLoadedWallpaper(); + method public android.graphics.drawable.Drawable getBuiltInDrawable(); + method public android.graphics.drawable.Drawable getBuiltInDrawable(int, int, boolean, float, float); + method public android.content.Intent getCropAndSetWallpaperIntent(android.net.Uri); + method public int getDesiredMinimumHeight(); + method public int getDesiredMinimumWidth(); + method public android.graphics.drawable.Drawable getDrawable(); + method public android.graphics.drawable.Drawable getFastDrawable(); + method public static android.app.WallpaperManager getInstance(android.content.Context); + method public android.app.WallpaperInfo getWallpaperInfo(); + method public boolean hasResourceWallpaper(int); + method public android.graphics.drawable.Drawable peekDrawable(); + method public android.graphics.drawable.Drawable peekFastDrawable(); + method public void sendWallpaperCommand(android.os.IBinder, java.lang.String, int, int, int, android.os.Bundle); + method public void setBitmap(android.graphics.Bitmap) throws java.io.IOException; + method public void setDisplayOffset(android.os.IBinder, int, int); + method public void setDisplayPadding(android.graphics.Rect); + method public void setResource(int) throws java.io.IOException; + method public void setStream(java.io.InputStream) throws java.io.IOException; + method public boolean setWallpaperComponent(android.content.ComponentName); + method public void setWallpaperOffsetSteps(float, float); + method public void setWallpaperOffsets(android.os.IBinder, float, float); + method public void suggestDesiredDimensions(int, int); + field public static final java.lang.String ACTION_CHANGE_LIVE_WALLPAPER = "android.service.wallpaper.CHANGE_LIVE_WALLPAPER"; + field public static final java.lang.String ACTION_CROP_AND_SET_WALLPAPER = "android.service.wallpaper.CROP_AND_SET_WALLPAPER"; + field public static final java.lang.String ACTION_LIVE_WALLPAPER_CHOOSER = "android.service.wallpaper.LIVE_WALLPAPER_CHOOSER"; + field public static final java.lang.String COMMAND_DROP = "android.home.drop"; + field public static final java.lang.String COMMAND_SECONDARY_TAP = "android.wallpaper.secondaryTap"; + field public static final java.lang.String COMMAND_TAP = "android.wallpaper.tap"; + field public static final java.lang.String EXTRA_LIVE_WALLPAPER_COMPONENT = "android.service.wallpaper.extra.LIVE_WALLPAPER_COMPONENT"; + field public static final java.lang.String WALLPAPER_PREVIEW_META_DATA = "android.wallpaper.preview"; + } + +} + +package android.app.admin { + + public final class DeviceAdminInfo implements android.os.Parcelable { + ctor public DeviceAdminInfo(android.content.Context, android.content.pm.ResolveInfo) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException; + method public int describeContents(); + method public void dump(android.util.Printer, java.lang.String); + method public android.content.pm.ActivityInfo getActivityInfo(); + method public android.content.ComponentName getComponent(); + method public java.lang.String getPackageName(); + method public java.lang.String getReceiverName(); + method public java.lang.String getTagForPolicy(int); + method public boolean isVisible(); + method public java.lang.CharSequence loadDescription(android.content.pm.PackageManager) throws android.content.res.Resources.NotFoundException; + method public android.graphics.drawable.Drawable loadIcon(android.content.pm.PackageManager); + method public java.lang.CharSequence loadLabel(android.content.pm.PackageManager); + method public boolean usesPolicy(int); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int USES_ENCRYPTED_STORAGE = 7; // 0x7 + field public static final int USES_POLICY_DISABLE_CAMERA = 8; // 0x8 + field public static final int USES_POLICY_DISABLE_KEYGUARD_FEATURES = 9; // 0x9 + field public static final int USES_POLICY_EXPIRE_PASSWORD = 6; // 0x6 + field public static final int USES_POLICY_FORCE_LOCK = 3; // 0x3 + field public static final int USES_POLICY_LIMIT_PASSWORD = 0; // 0x0 + field public static final int USES_POLICY_RESET_PASSWORD = 2; // 0x2 + field public static final int USES_POLICY_WATCH_LOGIN = 1; // 0x1 + field public static final int USES_POLICY_WIPE_DATA = 4; // 0x4 + } + + public class DeviceAdminReceiver extends android.content.BroadcastReceiver { + ctor public DeviceAdminReceiver(); + method public android.app.admin.DevicePolicyManager getManager(android.content.Context); + method public android.content.ComponentName getWho(android.content.Context); + method public java.lang.CharSequence onDisableRequested(android.content.Context, android.content.Intent); + method public void onDisabled(android.content.Context, android.content.Intent); + method public void onEnabled(android.content.Context, android.content.Intent); + method public void onLockTaskModeEntering(android.content.Context, android.content.Intent, java.lang.String); + method public void onLockTaskModeExiting(android.content.Context, android.content.Intent); + method public void onPasswordChanged(android.content.Context, android.content.Intent); + method public void onPasswordExpiring(android.content.Context, android.content.Intent); + method public void onPasswordFailed(android.content.Context, android.content.Intent); + method public void onPasswordSucceeded(android.content.Context, android.content.Intent); + method public void onProfileProvisioningComplete(android.content.Context, android.content.Intent); + method public void onReceive(android.content.Context, android.content.Intent); + field public static final java.lang.String ACTION_DEVICE_ADMIN_DISABLED = "android.app.action.DEVICE_ADMIN_DISABLED"; + field public static final java.lang.String ACTION_DEVICE_ADMIN_DISABLE_REQUESTED = "android.app.action.DEVICE_ADMIN_DISABLE_REQUESTED"; + field public static final java.lang.String ACTION_DEVICE_ADMIN_ENABLED = "android.app.action.DEVICE_ADMIN_ENABLED"; + field public static final java.lang.String ACTION_LOCK_TASK_ENTERING = "android.app.action.LOCK_TASK_ENTERING"; + field public static final java.lang.String ACTION_LOCK_TASK_EXITING = "android.app.action.LOCK_TASK_EXITING"; + field public static final java.lang.String ACTION_PASSWORD_CHANGED = "android.app.action.ACTION_PASSWORD_CHANGED"; + field public static final java.lang.String ACTION_PASSWORD_EXPIRING = "android.app.action.ACTION_PASSWORD_EXPIRING"; + field public static final java.lang.String ACTION_PASSWORD_FAILED = "android.app.action.ACTION_PASSWORD_FAILED"; + field public static final java.lang.String ACTION_PASSWORD_SUCCEEDED = "android.app.action.ACTION_PASSWORD_SUCCEEDED"; + field public static final java.lang.String ACTION_PROFILE_PROVISIONING_COMPLETE = "android.app.action.PROFILE_PROVISIONING_COMPLETE"; + field public static final java.lang.String DEVICE_ADMIN_META_DATA = "android.app.device_admin"; + field public static final java.lang.String EXTRA_DISABLE_WARNING = "android.app.extra.DISABLE_WARNING"; + field public static final java.lang.String EXTRA_LOCK_TASK_PACKAGE = "android.app.extra.LOCK_TASK_PACKAGE"; + } + + public class DevicePolicyManager { + method public void addCrossProfileIntentFilter(android.content.ComponentName, android.content.IntentFilter, int); + method public boolean addCrossProfileWidgetProvider(android.content.ComponentName, java.lang.String); + method public void addPersistentPreferredActivity(android.content.ComponentName, android.content.IntentFilter, android.content.ComponentName); + method public void addUserRestriction(android.content.ComponentName, java.lang.String); + method public void clearCrossProfileIntentFilters(android.content.ComponentName); + method public void clearDeviceOwnerApp(java.lang.String); + method public void clearPackagePersistentPreferredActivities(android.content.ComponentName, java.lang.String); + method public void clearProfileOwner(android.content.ComponentName); + method public void clearUserRestriction(android.content.ComponentName, java.lang.String); + method public android.os.UserHandle createAndInitializeUser(android.content.ComponentName, java.lang.String, java.lang.String, android.content.ComponentName, android.os.Bundle); + method public android.os.UserHandle createUser(android.content.ComponentName, java.lang.String); + method public void enableSystemApp(android.content.ComponentName, java.lang.String); + method public int enableSystemApp(android.content.ComponentName, android.content.Intent); + method public java.lang.String[] getAccountTypesWithManagementDisabled(); + method public java.util.List getActiveAdmins(); + method public android.os.Bundle getApplicationRestrictions(android.content.ComponentName, java.lang.String); + method public boolean getAutoTimeRequired(); + method public boolean getCameraDisabled(android.content.ComponentName); + method public boolean getCrossProfileCallerIdDisabled(android.content.ComponentName); + method public java.util.List getCrossProfileWidgetProviders(android.content.ComponentName); + method public int getCurrentFailedPasswordAttempts(); + method public java.lang.String getDeviceOwner(); + method public java.util.List getInstalledCaCerts(android.content.ComponentName); + method public int getKeyguardDisabledFeatures(android.content.ComponentName); + method public int getMaximumFailedPasswordsForWipe(android.content.ComponentName); + method public long getMaximumTimeToLock(android.content.ComponentName); + method public long getPasswordExpiration(android.content.ComponentName); + method public long getPasswordExpirationTimeout(android.content.ComponentName); + method public int getPasswordHistoryLength(android.content.ComponentName); + method public int getPasswordMaximumLength(int); + method public int getPasswordMinimumLength(android.content.ComponentName); + method public int getPasswordMinimumLetters(android.content.ComponentName); + method public int getPasswordMinimumLowerCase(android.content.ComponentName); + method public int getPasswordMinimumNonLetter(android.content.ComponentName); + method public int getPasswordMinimumNumeric(android.content.ComponentName); + method public int getPasswordMinimumSymbols(android.content.ComponentName); + method public int getPasswordMinimumUpperCase(android.content.ComponentName); + method public int getPasswordQuality(android.content.ComponentName); + method public java.util.List getPermittedAccessibilityServices(android.content.ComponentName); + method public java.util.List getPermittedAccessibilityServices(int); + method public java.util.List getPermittedInputMethods(android.content.ComponentName); + method public java.util.List getPermittedInputMethodsForCurrentUser(); + method public android.content.ComponentName getProfileOwner() throws java.lang.IllegalArgumentException; + method public java.lang.String getProfileOwnerNameAsUser(int) throws java.lang.IllegalArgumentException; + method public boolean getScreenCaptureDisabled(android.content.ComponentName); + method public boolean getStorageEncryption(android.content.ComponentName); + method public int getStorageEncryptionStatus(); + method public java.util.List getTrustAgentConfiguration(android.content.ComponentName, android.content.ComponentName); + method public boolean hasCaCertInstalled(android.content.ComponentName, byte[]); + method public boolean hasGrantedPolicy(android.content.ComponentName, int); + method public boolean installCaCert(android.content.ComponentName, byte[]); + method public boolean installKeyPair(android.content.ComponentName, java.security.PrivateKey, java.security.cert.Certificate, java.lang.String); + method public boolean isActivePasswordSufficient(); + method public boolean isAdminActive(android.content.ComponentName); + method public boolean isApplicationHidden(android.content.ComponentName, java.lang.String); + method public boolean isDeviceOwnerApp(java.lang.String); + method public boolean isLockTaskPermitted(java.lang.String); + method public boolean isMasterVolumeMuted(android.content.ComponentName); + method public boolean isProfileOwnerApp(java.lang.String); + method public boolean isUninstallBlocked(android.content.ComponentName, java.lang.String); + method public void lockNow(); + method public void removeActiveAdmin(android.content.ComponentName); + method public boolean removeCrossProfileWidgetProvider(android.content.ComponentName, java.lang.String); + method public boolean removeUser(android.content.ComponentName, android.os.UserHandle); + method public boolean resetPassword(java.lang.String, int); + method public void setAccountManagementDisabled(android.content.ComponentName, java.lang.String, boolean); + method public deprecated boolean setActiveProfileOwner(android.content.ComponentName, java.lang.String) throws java.lang.IllegalArgumentException; + method public boolean setApplicationHidden(android.content.ComponentName, java.lang.String, boolean); + method public void setApplicationRestrictions(android.content.ComponentName, java.lang.String, android.os.Bundle); + method public void setAutoTimeRequired(android.content.ComponentName, boolean); + method public void setCameraDisabled(android.content.ComponentName, boolean); + method public void setCrossProfileCallerIdDisabled(android.content.ComponentName, boolean); + method public void setGlobalSetting(android.content.ComponentName, java.lang.String, java.lang.String); + method public void setKeyguardDisabledFeatures(android.content.ComponentName, int); + method public void setLockTaskPackages(android.content.ComponentName, java.lang.String[]) throws java.lang.SecurityException; + method public void setMasterVolumeMuted(android.content.ComponentName, boolean); + method public void setMaximumFailedPasswordsForWipe(android.content.ComponentName, int); + method public void setMaximumTimeToLock(android.content.ComponentName, long); + method public void setPasswordExpirationTimeout(android.content.ComponentName, long); + method public void setPasswordHistoryLength(android.content.ComponentName, int); + method public void setPasswordMinimumLength(android.content.ComponentName, int); + method public void setPasswordMinimumLetters(android.content.ComponentName, int); + method public void setPasswordMinimumLowerCase(android.content.ComponentName, int); + method public void setPasswordMinimumNonLetter(android.content.ComponentName, int); + method public void setPasswordMinimumNumeric(android.content.ComponentName, int); + method public void setPasswordMinimumSymbols(android.content.ComponentName, int); + method public void setPasswordMinimumUpperCase(android.content.ComponentName, int); + method public void setPasswordQuality(android.content.ComponentName, int); + method public boolean setPermittedAccessibilityServices(android.content.ComponentName, java.util.List); + method public boolean setPermittedInputMethods(android.content.ComponentName, java.util.List); + method public void setProfileEnabled(android.content.ComponentName); + method public void setProfileName(android.content.ComponentName, java.lang.String); + method public void setRecommendedGlobalProxy(android.content.ComponentName, android.net.ProxyInfo); + method public void setRestrictionsProvider(android.content.ComponentName, android.content.ComponentName); + method public void setScreenCaptureDisabled(android.content.ComponentName, boolean); + method public void setSecureSetting(android.content.ComponentName, java.lang.String, java.lang.String); + method public int setStorageEncryption(android.content.ComponentName, boolean); + method public void setTrustAgentConfiguration(android.content.ComponentName, android.content.ComponentName, android.os.PersistableBundle); + method public void setUninstallBlocked(android.content.ComponentName, java.lang.String, boolean); + method public boolean switchUser(android.content.ComponentName, android.os.UserHandle); + method public void uninstallAllUserCaCerts(android.content.ComponentName); + method public void uninstallCaCert(android.content.ComponentName, byte[]); + method public void wipeData(int); + field public static final java.lang.String ACTION_ADD_DEVICE_ADMIN = "android.app.action.ADD_DEVICE_ADMIN"; + field public static final java.lang.String ACTION_PROVISION_MANAGED_PROFILE = "android.app.action.PROVISION_MANAGED_PROFILE"; + field public static final java.lang.String ACTION_SET_NEW_PASSWORD = "android.app.action.SET_NEW_PASSWORD"; + field public static final java.lang.String ACTION_SET_PROFILE_OWNER = "android.app.action.SET_PROFILE_OWNER"; + field public static final java.lang.String ACTION_START_ENCRYPTION = "android.app.action.START_ENCRYPTION"; + field public static final int ENCRYPTION_STATUS_ACTIVATING = 2; // 0x2 + field public static final int ENCRYPTION_STATUS_ACTIVE = 3; // 0x3 + field public static final int ENCRYPTION_STATUS_INACTIVE = 1; // 0x1 + field public static final int ENCRYPTION_STATUS_UNSUPPORTED = 0; // 0x0 + field public static final java.lang.String EXTRA_ADD_EXPLANATION = "android.app.extra.ADD_EXPLANATION"; + field public static final java.lang.String EXTRA_DEVICE_ADMIN = "android.app.extra.DEVICE_ADMIN"; + field public static final java.lang.String EXTRA_PROFILE_OWNER_NAME = "android.app.extra.PROFILE_OWNER_NAME"; + field public static final java.lang.String EXTRA_PROVISIONING_ACCOUNT_TO_MIGRATE = "android.app.extra.PROVISIONING_ACCOUNT_TO_MIGRATE"; + field public static final java.lang.String EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE = "android.app.extra.PROVISIONING_ADMIN_EXTRAS_BUNDLE"; + field public static final java.lang.String EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM = "android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM"; + field public static final java.lang.String EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_COOKIE_HEADER = "android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_COOKIE_HEADER"; + field public static final java.lang.String EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION = "android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION"; + field public static final java.lang.String EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME = "android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME"; + field public static final java.lang.String EXTRA_PROVISIONING_EMAIL_ADDRESS = "android.app.extra.PROVISIONING_EMAIL_ADDRESS"; + field public static final java.lang.String EXTRA_PROVISIONING_LEAVE_ALL_SYSTEM_APPS_ENABLED = "android.app.extra.PROVISIONING_LEAVE_ALL_SYSTEM_APPS_ENABLED"; + field public static final java.lang.String EXTRA_PROVISIONING_LOCALE = "android.app.extra.PROVISIONING_LOCALE"; + field public static final java.lang.String EXTRA_PROVISIONING_LOCAL_TIME = "android.app.extra.PROVISIONING_LOCAL_TIME"; + field public static final java.lang.String EXTRA_PROVISIONING_TIME_ZONE = "android.app.extra.PROVISIONING_TIME_ZONE"; + field public static final java.lang.String EXTRA_PROVISIONING_WIFI_HIDDEN = "android.app.extra.PROVISIONING_WIFI_HIDDEN"; + field public static final java.lang.String EXTRA_PROVISIONING_WIFI_PAC_URL = "android.app.extra.PROVISIONING_WIFI_PAC_URL"; + field public static final java.lang.String EXTRA_PROVISIONING_WIFI_PASSWORD = "android.app.extra.PROVISIONING_WIFI_PASSWORD"; + field public static final java.lang.String EXTRA_PROVISIONING_WIFI_PROXY_BYPASS = "android.app.extra.PROVISIONING_WIFI_PROXY_BYPASS"; + field public static final java.lang.String EXTRA_PROVISIONING_WIFI_PROXY_HOST = "android.app.extra.PROVISIONING_WIFI_PROXY_HOST"; + field public static final java.lang.String EXTRA_PROVISIONING_WIFI_PROXY_PORT = "android.app.extra.PROVISIONING_WIFI_PROXY_PORT"; + field public static final java.lang.String EXTRA_PROVISIONING_WIFI_SECURITY_TYPE = "android.app.extra.PROVISIONING_WIFI_SECURITY_TYPE"; + field public static final java.lang.String EXTRA_PROVISIONING_WIFI_SSID = "android.app.extra.PROVISIONING_WIFI_SSID"; + field public static final int FLAG_MANAGED_CAN_ACCESS_PARENT = 2; // 0x2 + field public static final int FLAG_PARENT_CAN_ACCESS_MANAGED = 1; // 0x1 + field public static final int KEYGUARD_DISABLE_FEATURES_ALL = 2147483647; // 0x7fffffff + field public static final int KEYGUARD_DISABLE_FEATURES_NONE = 0; // 0x0 + field public static final int KEYGUARD_DISABLE_FINGERPRINT = 32; // 0x20 + field public static final int KEYGUARD_DISABLE_SECURE_CAMERA = 2; // 0x2 + field public static final int KEYGUARD_DISABLE_SECURE_NOTIFICATIONS = 4; // 0x4 + field public static final int KEYGUARD_DISABLE_TRUST_AGENTS = 16; // 0x10 + field public static final int KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS = 8; // 0x8 + field public static final int KEYGUARD_DISABLE_WIDGETS_ALL = 1; // 0x1 + field public static final java.lang.String MIME_TYPE_PROVISIONING_NFC = "application/com.android.managedprovisioning"; + field public static final int PASSWORD_QUALITY_ALPHABETIC = 262144; // 0x40000 + field public static final int PASSWORD_QUALITY_ALPHANUMERIC = 327680; // 0x50000 + field public static final int PASSWORD_QUALITY_BIOMETRIC_WEAK = 32768; // 0x8000 + field public static final int PASSWORD_QUALITY_COMPLEX = 393216; // 0x60000 + field public static final int PASSWORD_QUALITY_NUMERIC = 131072; // 0x20000 + field public static final int PASSWORD_QUALITY_NUMERIC_COMPLEX = 196608; // 0x30000 + field public static final int PASSWORD_QUALITY_SOMETHING = 65536; // 0x10000 + field public static final int PASSWORD_QUALITY_UNSPECIFIED = 0; // 0x0 + field public static final int RESET_PASSWORD_REQUIRE_ENTRY = 1; // 0x1 + field public static final int WIPE_EXTERNAL_STORAGE = 1; // 0x1 + field public static final int WIPE_RESET_PROTECTION_DATA = 2; // 0x2 + } + +} + +package android.app.backup { + + public abstract class BackupAgent extends android.content.ContextWrapper { + ctor public BackupAgent(); + method public final void fullBackupFile(java.io.File, android.app.backup.FullBackupDataOutput); + method public abstract void onBackup(android.os.ParcelFileDescriptor, android.app.backup.BackupDataOutput, android.os.ParcelFileDescriptor) throws java.io.IOException; + method public void onCreate(); + method public void onDestroy(); + method public void onFullBackup(android.app.backup.FullBackupDataOutput) throws java.io.IOException; + method public abstract void onRestore(android.app.backup.BackupDataInput, int, android.os.ParcelFileDescriptor) throws java.io.IOException; + method public void onRestoreFile(android.os.ParcelFileDescriptor, long, java.io.File, int, long, long) throws java.io.IOException; + method public void onRestoreFinished(); + field public static final int TYPE_DIRECTORY = 2; // 0x2 + field public static final int TYPE_FILE = 1; // 0x1 + } + + public class BackupAgentHelper extends android.app.backup.BackupAgent { + ctor public BackupAgentHelper(); + method public void addHelper(java.lang.String, android.app.backup.BackupHelper); + method public void onBackup(android.os.ParcelFileDescriptor, android.app.backup.BackupDataOutput, android.os.ParcelFileDescriptor) throws java.io.IOException; + method public void onRestore(android.app.backup.BackupDataInput, int, android.os.ParcelFileDescriptor) throws java.io.IOException; + } + + public class BackupDataInput { + ctor public BackupDataInput(java.io.FileDescriptor); + method public int getDataSize(); + method public java.lang.String getKey(); + method public int readEntityData(byte[], int, int) throws java.io.IOException; + method public boolean readNextHeader() throws java.io.IOException; + method public void skipEntityData() throws java.io.IOException; + } + + public class BackupDataInputStream extends java.io.InputStream { + method public java.lang.String getKey(); + method public int read() throws java.io.IOException; + method public int size(); + } + + public class BackupDataOutput { + ctor public BackupDataOutput(java.io.FileDescriptor); + method public int writeEntityData(byte[], int) throws java.io.IOException; + method public int writeEntityHeader(java.lang.String, int) throws java.io.IOException; + } + + public abstract interface BackupHelper { + method public abstract void performBackup(android.os.ParcelFileDescriptor, android.app.backup.BackupDataOutput, android.os.ParcelFileDescriptor); + method public abstract void restoreEntity(android.app.backup.BackupDataInputStream); + method public abstract void writeNewStateDescription(android.os.ParcelFileDescriptor); + } + + public class BackupManager { + ctor public BackupManager(android.content.Context); + method public void backupNow(); + method public android.app.backup.RestoreSession beginRestoreSession(); + method public void dataChanged(); + method public static void dataChanged(java.lang.String); + method public java.lang.String getCurrentTransport(); + method public boolean isBackupEnabled(); + method public java.lang.String[] listAllTransports(); + method public int requestRestore(android.app.backup.RestoreObserver); + method public java.lang.String selectBackupTransport(java.lang.String); + method public void setAutoRestore(boolean); + method public void setBackupEnabled(boolean); + } + + public class BackupTransport { + ctor public BackupTransport(); + method public int abortFullRestore(); + method public void cancelFullBackup(); + method public int clearBackupData(android.content.pm.PackageInfo); + method public android.content.Intent configurationIntent(); + method public java.lang.String currentDestinationString(); + method public android.content.Intent dataManagementIntent(); + method public java.lang.String dataManagementLabel(); + method public int finishBackup(); + method public void finishRestore(); + method public android.app.backup.RestoreSet[] getAvailableRestoreSets(); + method public android.os.IBinder getBinder(); + method public long getCurrentRestoreSet(); + method public int getNextFullRestoreDataChunk(android.os.ParcelFileDescriptor); + method public int getRestoreData(android.os.ParcelFileDescriptor); + method public int initializeDevice(); + method public java.lang.String name(); + method public android.app.backup.RestoreDescription nextRestorePackage(); + method public int performBackup(android.content.pm.PackageInfo, android.os.ParcelFileDescriptor); + method public int performFullBackup(android.content.pm.PackageInfo, android.os.ParcelFileDescriptor); + method public long requestBackupTime(); + method public long requestFullBackupTime(); + method public int sendBackupData(int); + method public int startRestore(long, android.content.pm.PackageInfo[]); + method public java.lang.String transportDirName(); + field public static final int AGENT_ERROR = -1003; // 0xfffffc15 + field public static final int AGENT_UNKNOWN = -1004; // 0xfffffc14 + field public static final int NO_MORE_DATA = -1; // 0xffffffff + field public static final int TRANSPORT_ERROR = -1000; // 0xfffffc18 + field public static final int TRANSPORT_NOT_INITIALIZED = -1001; // 0xfffffc17 + field public static final int TRANSPORT_OK = 0; // 0x0 + field public static final int TRANSPORT_PACKAGE_REJECTED = -1002; // 0xfffffc16 + } + + public class FileBackupHelper extends android.app.backup.FileBackupHelperBase implements android.app.backup.BackupHelper { + ctor public FileBackupHelper(android.content.Context, java.lang.String...); + method public void performBackup(android.os.ParcelFileDescriptor, android.app.backup.BackupDataOutput, android.os.ParcelFileDescriptor); + method public void restoreEntity(android.app.backup.BackupDataInputStream); + } + + class FileBackupHelperBase { + method public void writeNewStateDescription(android.os.ParcelFileDescriptor); + } + + public class FullBackupDataOutput { + } + + public class RestoreDescription implements android.os.Parcelable { + ctor public RestoreDescription(java.lang.String, int); + method public int describeContents(); + method public int getDataType(); + method public java.lang.String getPackageName(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.app.backup.RestoreDescription NO_MORE_PACKAGES; + field public static final int TYPE_FULL_STREAM = 2; // 0x2 + field public static final int TYPE_KEY_VALUE = 1; // 0x1 + } + + public abstract class RestoreObserver { + ctor public RestoreObserver(); + method public void onUpdate(int, java.lang.String); + method public void restoreFinished(int); + method public void restoreSetsAvailable(android.app.backup.RestoreSet[]); + method public void restoreStarting(int); + } + + public class RestoreSession { + method public void endRestoreSession(); + method public int getAvailableRestoreSets(android.app.backup.RestoreObserver); + method public int restoreAll(long, android.app.backup.RestoreObserver); + method public int restorePackage(java.lang.String, android.app.backup.RestoreObserver); + } + + public class RestoreSet implements android.os.Parcelable { + ctor public RestoreSet(); + ctor public RestoreSet(java.lang.String, java.lang.String, long); + method public int describeContents(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public java.lang.String device; + field public java.lang.String name; + field public long token; + } + + public class SharedPreferencesBackupHelper extends android.app.backup.FileBackupHelperBase implements android.app.backup.BackupHelper { + ctor public SharedPreferencesBackupHelper(android.content.Context, java.lang.String...); + method public void performBackup(android.os.ParcelFileDescriptor, android.app.backup.BackupDataOutput, android.os.ParcelFileDescriptor); + method public void restoreEntity(android.app.backup.BackupDataInputStream); + } + +} + +package android.app.job { + + public class JobInfo implements android.os.Parcelable { + method public int describeContents(); + method public int getBackoffPolicy(); + method public android.os.PersistableBundle getExtras(); + method public int getId(); + method public long getInitialBackoffMillis(); + method public long getIntervalMillis(); + method public long getMaxExecutionDelayMillis(); + method public long getMinLatencyMillis(); + method public int getNetworkType(); + method public android.content.ComponentName getService(); + method public boolean isPeriodic(); + method public boolean isPersisted(); + method public boolean isRequireCharging(); + method public boolean isRequireDeviceIdle(); + method public void writeToParcel(android.os.Parcel, int); + field public static final int BACKOFF_POLICY_EXPONENTIAL = 1; // 0x1 + field public static final int BACKOFF_POLICY_LINEAR = 0; // 0x0 + field public static final android.os.Parcelable.Creator CREATOR; + field public static final long DEFAULT_INITIAL_BACKOFF_MILLIS = 30000L; // 0x7530L + field public static final long MAX_BACKOFF_DELAY_MILLIS = 18000000L; // 0x112a880L + field public static final int NETWORK_TYPE_ANY = 1; // 0x1 + field public static final int NETWORK_TYPE_NONE = 0; // 0x0 + field public static final int NETWORK_TYPE_UNMETERED = 2; // 0x2 + } + + public static final class JobInfo.Builder { + ctor public JobInfo.Builder(int, android.content.ComponentName); + method public android.app.job.JobInfo build(); + method public android.app.job.JobInfo.Builder setBackoffCriteria(long, int); + method public android.app.job.JobInfo.Builder setExtras(android.os.PersistableBundle); + method public android.app.job.JobInfo.Builder setMinimumLatency(long); + method public android.app.job.JobInfo.Builder setOverrideDeadline(long); + method public android.app.job.JobInfo.Builder setPeriodic(long); + method public android.app.job.JobInfo.Builder setPersisted(boolean); + method public android.app.job.JobInfo.Builder setRequiredNetworkType(int); + method public android.app.job.JobInfo.Builder setRequiresCharging(boolean); + method public android.app.job.JobInfo.Builder setRequiresDeviceIdle(boolean); + } + + public class JobParameters implements android.os.Parcelable { + method public int describeContents(); + method public android.os.PersistableBundle getExtras(); + method public int getJobId(); + method public boolean isOverrideDeadlineExpired(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public abstract class JobScheduler { + ctor public JobScheduler(); + method public abstract void cancel(int); + method public abstract void cancelAll(); + method public abstract java.util.List getAllPendingJobs(); + method public abstract int schedule(android.app.job.JobInfo); + field public static final int RESULT_FAILURE = 0; // 0x0 + field public static final int RESULT_SUCCESS = 1; // 0x1 + } + + public abstract class JobService extends android.app.Service { + ctor public JobService(); + method public final void jobFinished(android.app.job.JobParameters, boolean); + method public final android.os.IBinder onBind(android.content.Intent); + method public abstract boolean onStartJob(android.app.job.JobParameters); + method public abstract boolean onStopJob(android.app.job.JobParameters); + field public static final java.lang.String PERMISSION_BIND = "android.permission.BIND_JOB_SERVICE"; + } + +} + +package android.app.usage { + + public final class ConfigurationStats implements android.os.Parcelable { + ctor public ConfigurationStats(android.app.usage.ConfigurationStats); + method public int describeContents(); + method public int getActivationCount(); + method public android.content.res.Configuration getConfiguration(); + method public long getFirstTimeStamp(); + method public long getLastTimeActive(); + method public long getLastTimeStamp(); + method public long getTotalTimeActive(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public final class UsageEvents implements android.os.Parcelable { + method public int describeContents(); + method public boolean getNextEvent(android.app.usage.UsageEvents.Event); + method public boolean hasNextEvent(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public static final class UsageEvents.Event { + ctor public UsageEvents.Event(); + method public java.lang.String getClassName(); + method public android.content.res.Configuration getConfiguration(); + method public int getEventType(); + method public java.lang.String getPackageName(); + method public long getTimeStamp(); + field public static final int CONFIGURATION_CHANGE = 5; // 0x5 + field public static final int MOVE_TO_BACKGROUND = 2; // 0x2 + field public static final int MOVE_TO_FOREGROUND = 1; // 0x1 + field public static final int NONE = 0; // 0x0 + } + + public final class UsageStats implements android.os.Parcelable { + ctor public UsageStats(android.app.usage.UsageStats); + method public void add(android.app.usage.UsageStats); + method public int describeContents(); + method public long getFirstTimeStamp(); + method public long getLastTimeStamp(); + method public long getLastTimeUsed(); + method public java.lang.String getPackageName(); + method public long getTotalTimeInForeground(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public final class UsageStatsManager { + method public java.util.Map queryAndAggregateUsageStats(long, long); + method public java.util.List queryConfigurations(int, long, long); + method public android.app.usage.UsageEvents queryEvents(long, long); + method public java.util.List queryUsageStats(int, long, long); + field public static final int INTERVAL_BEST = 4; // 0x4 + field public static final int INTERVAL_DAILY = 0; // 0x0 + field public static final int INTERVAL_MONTHLY = 2; // 0x2 + field public static final int INTERVAL_WEEKLY = 1; // 0x1 + field public static final int INTERVAL_YEARLY = 3; // 0x3 + } + +} + +package android.appwidget { + + public class AppWidgetHost { + ctor public AppWidgetHost(android.content.Context, int); + method public int allocateAppWidgetId(); + method protected void clearViews(); + method public final android.appwidget.AppWidgetHostView createView(android.content.Context, int, android.appwidget.AppWidgetProviderInfo); + method public static void deleteAllHosts(); + method public void deleteAppWidgetId(int); + method public void deleteHost(); + method protected android.appwidget.AppWidgetHostView onCreateView(android.content.Context, int, android.appwidget.AppWidgetProviderInfo); + method protected void onProviderChanged(int, android.appwidget.AppWidgetProviderInfo); + method protected void onProvidersChanged(); + method public final void startAppWidgetConfigureActivityForResult(android.app.Activity, int, int, int, android.os.Bundle); + method public void startListening(); + method public void stopListening(); + } + + public class AppWidgetHostView extends android.widget.FrameLayout { + ctor public AppWidgetHostView(android.content.Context); + ctor public AppWidgetHostView(android.content.Context, int, int); + method public int getAppWidgetId(); + method public android.appwidget.AppWidgetProviderInfo getAppWidgetInfo(); + method public static android.graphics.Rect getDefaultPaddingForWidget(android.content.Context, android.content.ComponentName, android.graphics.Rect); + method protected android.view.View getDefaultView(); + method protected android.view.View getErrorView(); + method protected void prepareView(android.view.View); + method public void setAppWidget(int, android.appwidget.AppWidgetProviderInfo); + method public void updateAppWidget(android.widget.RemoteViews); + method public void updateAppWidgetOptions(android.os.Bundle); + method public void updateAppWidgetSize(android.os.Bundle, int, int, int, int); + } + + public class AppWidgetManager { + method public boolean bindAppWidgetIdIfAllowed(int, android.content.ComponentName); + method public boolean bindAppWidgetIdIfAllowed(int, android.content.ComponentName, android.os.Bundle); + method public boolean bindAppWidgetIdIfAllowed(int, android.os.UserHandle, android.content.ComponentName, android.os.Bundle); + method public int[] getAppWidgetIds(android.content.ComponentName); + method public android.appwidget.AppWidgetProviderInfo getAppWidgetInfo(int); + method public android.os.Bundle getAppWidgetOptions(int); + method public java.util.List getInstalledProviders(); + method public java.util.List getInstalledProvidersForProfile(android.os.UserHandle); + method public static android.appwidget.AppWidgetManager getInstance(android.content.Context); + method public void notifyAppWidgetViewDataChanged(int[], int); + method public void notifyAppWidgetViewDataChanged(int, int); + method public void partiallyUpdateAppWidget(int[], android.widget.RemoteViews); + method public void partiallyUpdateAppWidget(int, android.widget.RemoteViews); + method public void updateAppWidget(int[], android.widget.RemoteViews); + method public void updateAppWidget(int, android.widget.RemoteViews); + method public void updateAppWidget(android.content.ComponentName, android.widget.RemoteViews); + method public void updateAppWidgetOptions(int, android.os.Bundle); + field public static final java.lang.String ACTION_APPWIDGET_BIND = "android.appwidget.action.APPWIDGET_BIND"; + field public static final java.lang.String ACTION_APPWIDGET_CONFIGURE = "android.appwidget.action.APPWIDGET_CONFIGURE"; + field public static final java.lang.String ACTION_APPWIDGET_DELETED = "android.appwidget.action.APPWIDGET_DELETED"; + field public static final java.lang.String ACTION_APPWIDGET_DISABLED = "android.appwidget.action.APPWIDGET_DISABLED"; + field public static final java.lang.String ACTION_APPWIDGET_ENABLED = "android.appwidget.action.APPWIDGET_ENABLED"; + field public static final java.lang.String ACTION_APPWIDGET_HOST_RESTORED = "android.appwidget.action.APPWIDGET_HOST_RESTORED"; + field public static final java.lang.String ACTION_APPWIDGET_OPTIONS_CHANGED = "android.appwidget.action.APPWIDGET_UPDATE_OPTIONS"; + field public static final java.lang.String ACTION_APPWIDGET_PICK = "android.appwidget.action.APPWIDGET_PICK"; + field public static final java.lang.String ACTION_APPWIDGET_RESTORED = "android.appwidget.action.APPWIDGET_RESTORED"; + field public static final java.lang.String ACTION_APPWIDGET_UPDATE = "android.appwidget.action.APPWIDGET_UPDATE"; + field public static final java.lang.String EXTRA_APPWIDGET_ID = "appWidgetId"; + field public static final java.lang.String EXTRA_APPWIDGET_IDS = "appWidgetIds"; + field public static final java.lang.String EXTRA_APPWIDGET_OLD_IDS = "appWidgetOldIds"; + field public static final java.lang.String EXTRA_APPWIDGET_OPTIONS = "appWidgetOptions"; + field public static final java.lang.String EXTRA_APPWIDGET_PROVIDER = "appWidgetProvider"; + field public static final java.lang.String EXTRA_APPWIDGET_PROVIDER_PROFILE = "appWidgetProviderProfile"; + field public static final java.lang.String EXTRA_CUSTOM_EXTRAS = "customExtras"; + field public static final java.lang.String EXTRA_CUSTOM_INFO = "customInfo"; + field public static final java.lang.String EXTRA_HOST_ID = "hostId"; + field public static final int INVALID_APPWIDGET_ID = 0; // 0x0 + field public static final java.lang.String META_DATA_APPWIDGET_PROVIDER = "android.appwidget.provider"; + field public static final java.lang.String OPTION_APPWIDGET_HOST_CATEGORY = "appWidgetCategory"; + field public static final java.lang.String OPTION_APPWIDGET_MAX_HEIGHT = "appWidgetMaxHeight"; + field public static final java.lang.String OPTION_APPWIDGET_MAX_WIDTH = "appWidgetMaxWidth"; + field public static final java.lang.String OPTION_APPWIDGET_MIN_HEIGHT = "appWidgetMinHeight"; + field public static final java.lang.String OPTION_APPWIDGET_MIN_WIDTH = "appWidgetMinWidth"; + } + + public class AppWidgetProvider extends android.content.BroadcastReceiver { + ctor public AppWidgetProvider(); + method public void onAppWidgetOptionsChanged(android.content.Context, android.appwidget.AppWidgetManager, int, android.os.Bundle); + method public void onDeleted(android.content.Context, int[]); + method public void onDisabled(android.content.Context); + method public void onEnabled(android.content.Context); + method public void onReceive(android.content.Context, android.content.Intent); + method public void onRestored(android.content.Context, int[], int[]); + method public void onUpdate(android.content.Context, android.appwidget.AppWidgetManager, int[]); + } + + public class AppWidgetProviderInfo implements android.os.Parcelable { + ctor public AppWidgetProviderInfo(); + ctor public AppWidgetProviderInfo(android.os.Parcel); + method public android.appwidget.AppWidgetProviderInfo clone(); + method public int describeContents(); + method public final android.os.UserHandle getProfile(); + method public final android.graphics.drawable.Drawable loadIcon(android.content.Context, int); + method public final java.lang.String loadLabel(android.content.pm.PackageManager); + method public final android.graphics.drawable.Drawable loadPreviewImage(android.content.Context, int); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int RESIZE_BOTH = 3; // 0x3 + field public static final int RESIZE_HORIZONTAL = 1; // 0x1 + field public static final int RESIZE_NONE = 0; // 0x0 + field public static final int RESIZE_VERTICAL = 2; // 0x2 + field public static final int WIDGET_CATEGORY_HOME_SCREEN = 1; // 0x1 + field public static final int WIDGET_CATEGORY_KEYGUARD = 2; // 0x2 + field public static final int WIDGET_CATEGORY_SEARCHBOX = 4; // 0x4 + field public int autoAdvanceViewId; + field public android.content.ComponentName configure; + field public int icon; + field public int initialKeyguardLayout; + field public int initialLayout; + field public deprecated java.lang.String label; + field public int minHeight; + field public int minResizeHeight; + field public int minResizeWidth; + field public int minWidth; + field public int previewImage; + field public android.content.ComponentName provider; + field public int resizeMode; + field public int updatePeriodMillis; + field public int widgetCategory; + } + +} + +package android.bluetooth { + + public final class BluetoothA2dp implements android.bluetooth.BluetoothProfile { + method public void finalize(); + method public java.util.List getConnectedDevices(); + method public int getConnectionState(android.bluetooth.BluetoothDevice); + method public java.util.List getDevicesMatchingConnectionStates(int[]); + method public boolean isA2dpPlaying(android.bluetooth.BluetoothDevice); + field public static final java.lang.String ACTION_CONNECTION_STATE_CHANGED = "android.bluetooth.a2dp.profile.action.CONNECTION_STATE_CHANGED"; + field public static final java.lang.String ACTION_PLAYING_STATE_CHANGED = "android.bluetooth.a2dp.profile.action.PLAYING_STATE_CHANGED"; + field public static final int STATE_NOT_PLAYING = 11; // 0xb + field public static final int STATE_PLAYING = 10; // 0xa + } + + public final class BluetoothAdapter { + method public boolean cancelDiscovery(); + method public static boolean checkBluetoothAddress(java.lang.String); + method public void closeProfileProxy(int, android.bluetooth.BluetoothProfile); + method public boolean disable(); + method public boolean enable(); + method public java.lang.String getAddress(); + method public android.bluetooth.le.BluetoothLeAdvertiser getBluetoothLeAdvertiser(); + method public android.bluetooth.le.BluetoothLeScanner getBluetoothLeScanner(); + method public java.util.Set getBondedDevices(); + method public static synchronized android.bluetooth.BluetoothAdapter getDefaultAdapter(); + method public java.lang.String getName(); + method public int getProfileConnectionState(int); + method public boolean getProfileProxy(android.content.Context, android.bluetooth.BluetoothProfile.ServiceListener, int); + method public android.bluetooth.BluetoothDevice getRemoteDevice(java.lang.String); + method public android.bluetooth.BluetoothDevice getRemoteDevice(byte[]); + method public int getScanMode(); + method public int getState(); + method public boolean isDiscovering(); + method public boolean isEnabled(); + method public boolean isMultipleAdvertisementSupported(); + method public boolean isOffloadedFilteringSupported(); + method public boolean isOffloadedScanBatchingSupported(); + method public android.bluetooth.BluetoothServerSocket listenUsingInsecureRfcommWithServiceRecord(java.lang.String, java.util.UUID) throws java.io.IOException; + method public android.bluetooth.BluetoothServerSocket listenUsingRfcommWithServiceRecord(java.lang.String, java.util.UUID) throws java.io.IOException; + method public boolean setName(java.lang.String); + method public boolean startDiscovery(); + method public deprecated boolean startLeScan(android.bluetooth.BluetoothAdapter.LeScanCallback); + method public deprecated boolean startLeScan(java.util.UUID[], android.bluetooth.BluetoothAdapter.LeScanCallback); + method public deprecated void stopLeScan(android.bluetooth.BluetoothAdapter.LeScanCallback); + field public static final java.lang.String ACTION_CONNECTION_STATE_CHANGED = "android.bluetooth.adapter.action.CONNECTION_STATE_CHANGED"; + field public static final java.lang.String ACTION_DISCOVERY_FINISHED = "android.bluetooth.adapter.action.DISCOVERY_FINISHED"; + field public static final java.lang.String ACTION_DISCOVERY_STARTED = "android.bluetooth.adapter.action.DISCOVERY_STARTED"; + field public static final java.lang.String ACTION_LOCAL_NAME_CHANGED = "android.bluetooth.adapter.action.LOCAL_NAME_CHANGED"; + field public static final java.lang.String ACTION_REQUEST_DISCOVERABLE = "android.bluetooth.adapter.action.REQUEST_DISCOVERABLE"; + field public static final java.lang.String ACTION_REQUEST_ENABLE = "android.bluetooth.adapter.action.REQUEST_ENABLE"; + field public static final java.lang.String ACTION_SCAN_MODE_CHANGED = "android.bluetooth.adapter.action.SCAN_MODE_CHANGED"; + field public static final java.lang.String ACTION_STATE_CHANGED = "android.bluetooth.adapter.action.STATE_CHANGED"; + field public static final int ERROR = -2147483648; // 0x80000000 + field public static final java.lang.String EXTRA_CONNECTION_STATE = "android.bluetooth.adapter.extra.CONNECTION_STATE"; + field public static final java.lang.String EXTRA_DISCOVERABLE_DURATION = "android.bluetooth.adapter.extra.DISCOVERABLE_DURATION"; + field public static final java.lang.String EXTRA_LOCAL_NAME = "android.bluetooth.adapter.extra.LOCAL_NAME"; + field public static final java.lang.String EXTRA_PREVIOUS_CONNECTION_STATE = "android.bluetooth.adapter.extra.PREVIOUS_CONNECTION_STATE"; + field public static final java.lang.String EXTRA_PREVIOUS_SCAN_MODE = "android.bluetooth.adapter.extra.PREVIOUS_SCAN_MODE"; + field public static final java.lang.String EXTRA_PREVIOUS_STATE = "android.bluetooth.adapter.extra.PREVIOUS_STATE"; + field public static final java.lang.String EXTRA_SCAN_MODE = "android.bluetooth.adapter.extra.SCAN_MODE"; + field public static final java.lang.String EXTRA_STATE = "android.bluetooth.adapter.extra.STATE"; + field public static final int SCAN_MODE_CONNECTABLE = 21; // 0x15 + field public static final int SCAN_MODE_CONNECTABLE_DISCOVERABLE = 23; // 0x17 + field public static final int SCAN_MODE_NONE = 20; // 0x14 + field public static final int STATE_CONNECTED = 2; // 0x2 + field public static final int STATE_CONNECTING = 1; // 0x1 + field public static final int STATE_DISCONNECTED = 0; // 0x0 + field public static final int STATE_DISCONNECTING = 3; // 0x3 + field public static final int STATE_OFF = 10; // 0xa + field public static final int STATE_ON = 12; // 0xc + field public static final int STATE_TURNING_OFF = 13; // 0xd + field public static final int STATE_TURNING_ON = 11; // 0xb + } + + public static abstract interface BluetoothAdapter.LeScanCallback { + method public abstract void onLeScan(android.bluetooth.BluetoothDevice, int, byte[]); + } + + public class BluetoothAssignedNumbers { + field public static final int AAMP_OF_AMERICA = 190; // 0xbe + field public static final int ACCEL_SEMICONDUCTOR = 74; // 0x4a + field public static final int ACE_SENSOR = 188; // 0xbc + field public static final int ADIDAS = 195; // 0xc3 + field public static final int ADVANCED_PANMOBIL_SYSTEMS = 145; // 0x91 + field public static final int AIROHA_TECHNOLOGY = 148; // 0x94 + field public static final int ALCATEL = 36; // 0x24 + field public static final int ALPWISE = 154; // 0x9a + field public static final int AMICCOM_ELECTRONICS = 192; // 0xc0 + field public static final int APLIX = 189; // 0xbd + field public static final int APPLE = 76; // 0x4c + field public static final int APT_LICENSING = 79; // 0x4f + field public static final int ARCHOS = 207; // 0xcf + field public static final int ARP_DEVICES = 168; // 0xa8 + field public static final int ATHEROS_COMMUNICATIONS = 69; // 0x45 + field public static final int ATMEL = 19; // 0x13 + field public static final int AUSTCO_COMMUNICATION_SYSTEMS = 213; // 0xd5 + field public static final int AUTONET_MOBILE = 127; // 0x7f + field public static final int AVAGO = 78; // 0x4e + field public static final int AVM_BERLIN = 31; // 0x1f + field public static final int A_AND_D_ENGINEERING = 105; // 0x69 + field public static final int A_AND_R_CAMBRIDGE = 124; // 0x7c + field public static final int BANDSPEED = 32; // 0x20 + field public static final int BAND_XI_INTERNATIONAL = 100; // 0x64 + field public static final int BDE_TECHNOLOGY = 180; // 0xb4 + field public static final int BEATS_ELECTRONICS = 204; // 0xcc + field public static final int BEAUTIFUL_ENTERPRISE = 108; // 0x6c + field public static final int BEKEY = 178; // 0xb2 + field public static final int BELKIN_INTERNATIONAL = 92; // 0x5c + field public static final int BINAURIC = 203; // 0xcb + field public static final int BIOSENTRONICS = 219; // 0xdb + field public static final int BLUEGIGA = 71; // 0x47 + field public static final int BLUERADIOS = 133; // 0x85 + field public static final int BLUETOOTH_SIG = 63; // 0x3f + field public static final int BLUETREK_TECHNOLOGIES = 151; // 0x97 + field public static final int BOSE = 158; // 0x9e + field public static final int BRIARTEK = 109; // 0x6d + field public static final int BROADCOM = 15; // 0xf + field public static final int CAEN_RFID = 170; // 0xaa + field public static final int CAMBRIDGE_SILICON_RADIO = 10; // 0xa + field public static final int CATC = 52; // 0x34 + field public static final int CINETIX = 175; // 0xaf + field public static final int CLARINOX_TECHNOLOGIES = 179; // 0xb3 + field public static final int COLORFY = 156; // 0x9c + field public static final int COMMIL = 51; // 0x33 + field public static final int CONEXANT_SYSTEMS = 28; // 0x1c + field public static final int CONNECTBLUE = 113; // 0x71 + field public static final int CONTINENTAL_AUTOMOTIVE = 75; // 0x4b + field public static final int CONWISE_TECHNOLOGY = 66; // 0x42 + field public static final int CREATIVE_TECHNOLOGY = 118; // 0x76 + field public static final int C_TECHNOLOGIES = 38; // 0x26 + field public static final int DANLERS = 225; // 0xe1 + field public static final int DELORME_PUBLISHING_COMPANY = 128; // 0x80 + field public static final int DEXCOM = 208; // 0xd0 + field public static final int DIALOG_SEMICONDUCTOR = 210; // 0xd2 + field public static final int DIGIANSWER = 12; // 0xc + field public static final int ECLIPSE = 53; // 0x35 + field public static final int ECOTEST = 136; // 0x88 + field public static final int ELGATO_SYSTEMS = 206; // 0xce + field public static final int EM_MICROELECTRONIC_MARIN = 90; // 0x5a + field public static final int EQUINOX_AG = 134; // 0x86 + field public static final int ERICSSON_TECHNOLOGY = 0; // 0x0 + field public static final int EVLUMA = 201; // 0xc9 + field public static final int FREE2MOVE = 83; // 0x53 + field public static final int FUNAI_ELECTRIC = 144; // 0x90 + field public static final int GARMIN_INTERNATIONAL = 135; // 0x87 + field public static final int GCT_SEMICONDUCTOR = 45; // 0x2d + field public static final int GELO = 200; // 0xc8 + field public static final int GENEQ = 194; // 0xc2 + field public static final int GENERAL_MOTORS = 104; // 0x68 + field public static final int GENNUM = 59; // 0x3b + field public static final int GEOFORCE = 157; // 0x9d + field public static final int GIBSON_GUITARS = 98; // 0x62 + field public static final int GN_NETCOM = 103; // 0x67 + field public static final int GN_RESOUND = 137; // 0x89 + field public static final int GOOGLE = 224; // 0xe0 + field public static final int GREEN_THROTTLE_GAMES = 172; // 0xac + field public static final int GROUP_SENSE = 115; // 0x73 + field public static final int HANLYNN_TECHNOLOGIES = 123; // 0x7b + field public static final int HARMAN_INTERNATIONAL = 87; // 0x57 + field public static final int HEWLETT_PACKARD = 101; // 0x65 + field public static final int HITACHI = 41; // 0x29 + field public static final int HOSIDEN = 221; // 0xdd + field public static final int IBM = 3; // 0x3 + field public static final int INFINEON_TECHNOLOGIES = 9; // 0x9 + field public static final int INGENIEUR_SYSTEMGRUPPE_ZAHN = 171; // 0xab + field public static final int INTEGRATED_SILICON_SOLUTION = 65; // 0x41 + field public static final int INTEGRATED_SYSTEM_SOLUTION = 57; // 0x39 + field public static final int INTEL = 2; // 0x2 + field public static final int INVENTEL = 30; // 0x1e + field public static final int IPEXTREME = 61; // 0x3d + field public static final int I_TECH_DYNAMIC_GLOBAL_DISTRIBUTION = 153; // 0x99 + field public static final int JAWBONE = 138; // 0x8a + field public static final int JIANGSU_TOPPOWER_AUTOMOTIVE_ELECTRONICS = 155; // 0x9b + field public static final int JOHNSON_CONTROLS = 185; // 0xb9 + field public static final int J_AND_M = 82; // 0x52 + field public static final int KAWANTECH = 212; // 0xd4 + field public static final int KC_TECHNOLOGY = 22; // 0x16 + field public static final int KENSINGTON_COMPUTER_PRODUCTS_GROUP = 160; // 0xa0 + field public static final int LAIRD_TECHNOLOGIES = 119; // 0x77 + field public static final int LESSWIRE = 121; // 0x79 + field public static final int LG_ELECTRONICS = 196; // 0xc4 + field public static final int LINAK = 164; // 0xa4 + field public static final int LUCENT = 7; // 0x7 + field public static final int LUDUS_HELSINKI = 132; // 0x84 + field public static final int MACRONIX = 44; // 0x2c + field public static final int MAGNETI_MARELLI = 169; // 0xa9 + field public static final int MANSELLA = 33; // 0x21 + field public static final int MARVELL = 72; // 0x48 + field public static final int MATSUSHITA_ELECTRIC = 58; // 0x3a + field public static final int MC10 = 202; // 0xca + field public static final int MEDIATEK = 70; // 0x46 + field public static final int MESO_INTERNATIONAL = 182; // 0xb6 + field public static final int META_WATCH = 163; // 0xa3 + field public static final int MEWTEL_TECHNOLOGY = 47; // 0x2f + field public static final int MICOMMAND = 99; // 0x63 + field public static final int MICROCHIP_TECHNOLOGY = 205; // 0xcd + field public static final int MICROSOFT = 6; // 0x6 + field public static final int MINDTREE = 106; // 0x6a + field public static final int MISFIT_WEARABLES = 223; // 0xdf + field public static final int MITEL_SEMICONDUCTOR = 16; // 0x10 + field public static final int MITSUBISHI_ELECTRIC = 20; // 0x14 + field public static final int MOBILIAN_CORPORATION = 55; // 0x37 + field public static final int MONSTER = 112; // 0x70 + field public static final int MOTOROLA = 8; // 0x8 + field public static final int MSTAR_SEMICONDUCTOR = 122; // 0x7a + field public static final int MUZIK = 222; // 0xde + field public static final int NEC = 34; // 0x22 + field public static final int NEC_LIGHTING = 149; // 0x95 + field public static final int NEWLOGIC = 23; // 0x17 + field public static final int NIKE = 120; // 0x78 + field public static final int NINE_SOLUTIONS = 102; // 0x66 + field public static final int NOKIA_MOBILE_PHONES = 1; // 0x1 + field public static final int NORDIC_SEMICONDUCTOR = 89; // 0x59 + field public static final int NORWOOD_SYSTEMS = 46; // 0x2e + field public static final int ODM_TECHNOLOGY = 150; // 0x96 + field public static final int OMEGAWAVE = 174; // 0xae + field public static final int ONSET_COMPUTER = 197; // 0xc5 + field public static final int OPEN_INTERFACE = 39; // 0x27 + field public static final int OTL_DYNAMICS = 165; // 0xa5 + field public static final int PANDA_OCEAN = 166; // 0xa6 + field public static final int PARROT = 67; // 0x43 + field public static final int PARTHUS_TECHNOLOGIES = 14; // 0xe + field public static final int PASSIF_SEMICONDUCTOR = 176; // 0xb0 + field public static final int PETER_SYSTEMTECHNIK = 173; // 0xad + field public static final int PHILIPS_SEMICONDUCTORS = 37; // 0x25 + field public static final int PLANTRONICS = 85; // 0x55 + field public static final int POLAR_ELECTRO = 107; // 0x6b + field public static final int POLAR_ELECTRO_EUROPE = 209; // 0xd1 + field public static final int PROCTER_AND_GAMBLE = 220; // 0xdc + field public static final int QUALCOMM = 29; // 0x1d + field public static final int QUALCOMM_CONNECTED_EXPERIENCES = 216; // 0xd8 + field public static final int QUALCOMM_INNOVATION_CENTER = 184; // 0xb8 + field public static final int QUALCOMM_LABS = 140; // 0x8c + field public static final int QUALCOMM_TECHNOLOGIES = 215; // 0xd7 + field public static final int QUINTIC = 142; // 0x8e + field public static final int QUUPPA = 199; // 0xc7 + field public static final int RALINK_TECHNOLOGY = 91; // 0x5b + field public static final int RDA_MICROELECTRONICS = 97; // 0x61 + field public static final int REALTEK_SEMICONDUCTOR = 93; // 0x5d + field public static final int RED_M = 50; // 0x32 + field public static final int RENESAS_TECHNOLOGY = 54; // 0x36 + field public static final int RESEARCH_IN_MOTION = 60; // 0x3c + field public static final int RF_MICRO_DEVICES = 40; // 0x28 + field public static final int RIVIERAWAVES = 96; // 0x60 + field public static final int ROHDE_AND_SCHWARZ = 25; // 0x19 + field public static final int RTX_TELECOM = 21; // 0x15 + field public static final int SAMSUNG_ELECTRONICS = 117; // 0x75 + field public static final int SARIS_CYCLING_GROUP = 177; // 0xb1 + field public static final int SEERS_TECHNOLOGY = 125; // 0x7d + field public static final int SEIKO_EPSON = 64; // 0x40 + field public static final int SELFLY = 198; // 0xc6 + field public static final int SEMILINK = 226; // 0xe2 + field public static final int SENNHEISER_COMMUNICATIONS = 130; // 0x82 + field public static final int SHANGHAI_SUPER_SMART_ELECTRONICS = 114; // 0x72 + field public static final int SHENZHEN_EXCELSECU_DATA_TECHNOLOGY = 193; // 0xc1 + field public static final int SIGNIA_TECHNOLOGIES = 27; // 0x1b + field public static final int SILICON_WAVE = 11; // 0xb + field public static final int SIRF_TECHNOLOGY = 80; // 0x50 + field public static final int SOCKET_MOBILE = 68; // 0x44 + field public static final int SONY_ERICSSON = 86; // 0x56 + field public static final int SOUND_ID = 111; // 0x6f + field public static final int SPORTS_TRACKING_TECHNOLOGIES = 126; // 0x7e + field public static final int SR_MEDIZINELEKTRONIK = 161; // 0xa1 + field public static final int STACCATO_COMMUNICATIONS = 77; // 0x4d + field public static final int STALMART_TECHNOLOGY = 191; // 0xbf + field public static final int STARKEY_LABORATORIES = 186; // 0xba + field public static final int STOLLMAN_E_PLUS_V = 143; // 0x8f + field public static final int STONESTREET_ONE = 94; // 0x5e + field public static final int ST_MICROELECTRONICS = 48; // 0x30 + field public static final int SUMMIT_DATA_COMMUNICATIONS = 110; // 0x6e + field public static final int SUUNTO = 159; // 0x9f + field public static final int SWIRL_NETWORKS = 181; // 0xb5 + field public static final int SYMBOL_TECHNOLOGIES = 42; // 0x2a + field public static final int SYNOPSYS = 49; // 0x31 + field public static final int SYSTEMS_AND_CHIPS = 62; // 0x3e + field public static final int S_POWER_ELECTRONICS = 187; // 0xbb + field public static final int TAIXINGBANG_TECHNOLOGY = 211; // 0xd3 + field public static final int TENOVIS = 43; // 0x2b + field public static final int TERAX = 56; // 0x38 + field public static final int TEXAS_INSTRUMENTS = 13; // 0xd + field public static final int THINKOPTICS = 146; // 0x92 + field public static final int THREECOM = 5; // 0x5 + field public static final int THREE_DIJOY = 84; // 0x54 + field public static final int THREE_DSP = 73; // 0x49 + field public static final int TIMEKEEPING_SYSTEMS = 131; // 0x83 + field public static final int TIMEX_GROUP_USA = 214; // 0xd6 + field public static final int TOPCORN_POSITIONING_SYSTEMS = 139; // 0x8b + field public static final int TOSHIBA = 4; // 0x4 + field public static final int TRANSILICA = 24; // 0x18 + field public static final int TRELAB = 183; // 0xb7 + field public static final int TTPCOM = 26; // 0x1a + field public static final int TXTR = 218; // 0xda + field public static final int TZERO_TECHNOLOGIES = 81; // 0x51 + field public static final int UNIVERSAL_ELECTRONICS = 147; // 0x93 + field public static final int VERTU = 162; // 0xa2 + field public static final int VISTEON = 167; // 0xa7 + field public static final int VIZIO = 88; // 0x58 + field public static final int VOYETRA_TURTLE_BEACH = 217; // 0xd9 + field public static final int WAVEPLUS_TECHNOLOGY = 35; // 0x23 + field public static final int WICENTRIC = 95; // 0x5f + field public static final int WIDCOMM = 17; // 0x11 + field public static final int WUXI_VIMICRO = 129; // 0x81 + field public static final int ZEEVO = 18; // 0x12 + field public static final int ZER01_TV = 152; // 0x98 + field public static final int ZOMM = 116; // 0x74 + field public static final int ZSCAN_SOFTWARE = 141; // 0x8d + } + + public final class BluetoothClass implements android.os.Parcelable { + method public int describeContents(); + method public int getDeviceClass(); + method public int getMajorDeviceClass(); + method public boolean hasService(int); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public static class BluetoothClass.Device { + ctor public BluetoothClass.Device(); + field public static final int AUDIO_VIDEO_CAMCORDER = 1076; // 0x434 + field public static final int AUDIO_VIDEO_CAR_AUDIO = 1056; // 0x420 + field public static final int AUDIO_VIDEO_HANDSFREE = 1032; // 0x408 + field public static final int AUDIO_VIDEO_HEADPHONES = 1048; // 0x418 + field public static final int AUDIO_VIDEO_HIFI_AUDIO = 1064; // 0x428 + field public static final int AUDIO_VIDEO_LOUDSPEAKER = 1044; // 0x414 + field public static final int AUDIO_VIDEO_MICROPHONE = 1040; // 0x410 + field public static final int AUDIO_VIDEO_PORTABLE_AUDIO = 1052; // 0x41c + field public static final int AUDIO_VIDEO_SET_TOP_BOX = 1060; // 0x424 + field public static final int AUDIO_VIDEO_UNCATEGORIZED = 1024; // 0x400 + field public static final int AUDIO_VIDEO_VCR = 1068; // 0x42c + field public static final int AUDIO_VIDEO_VIDEO_CAMERA = 1072; // 0x430 + field public static final int AUDIO_VIDEO_VIDEO_CONFERENCING = 1088; // 0x440 + field public static final int AUDIO_VIDEO_VIDEO_DISPLAY_AND_LOUDSPEAKER = 1084; // 0x43c + field public static final int AUDIO_VIDEO_VIDEO_GAMING_TOY = 1096; // 0x448 + field public static final int AUDIO_VIDEO_VIDEO_MONITOR = 1080; // 0x438 + field public static final int AUDIO_VIDEO_WEARABLE_HEADSET = 1028; // 0x404 + field public static final int COMPUTER_DESKTOP = 260; // 0x104 + field public static final int COMPUTER_HANDHELD_PC_PDA = 272; // 0x110 + field public static final int COMPUTER_LAPTOP = 268; // 0x10c + field public static final int COMPUTER_PALM_SIZE_PC_PDA = 276; // 0x114 + field public static final int COMPUTER_SERVER = 264; // 0x108 + field public static final int COMPUTER_UNCATEGORIZED = 256; // 0x100 + field public static final int COMPUTER_WEARABLE = 280; // 0x118 + field public static final int HEALTH_BLOOD_PRESSURE = 2308; // 0x904 + field public static final int HEALTH_DATA_DISPLAY = 2332; // 0x91c + field public static final int HEALTH_GLUCOSE = 2320; // 0x910 + field public static final int HEALTH_PULSE_OXIMETER = 2324; // 0x914 + field public static final int HEALTH_PULSE_RATE = 2328; // 0x918 + field public static final int HEALTH_THERMOMETER = 2312; // 0x908 + field public static final int HEALTH_UNCATEGORIZED = 2304; // 0x900 + field public static final int HEALTH_WEIGHING = 2316; // 0x90c + field public static final int PHONE_CELLULAR = 516; // 0x204 + field public static final int PHONE_CORDLESS = 520; // 0x208 + field public static final int PHONE_ISDN = 532; // 0x214 + field public static final int PHONE_MODEM_OR_GATEWAY = 528; // 0x210 + field public static final int PHONE_SMART = 524; // 0x20c + field public static final int PHONE_UNCATEGORIZED = 512; // 0x200 + field public static final int TOY_CONTROLLER = 2064; // 0x810 + field public static final int TOY_DOLL_ACTION_FIGURE = 2060; // 0x80c + field public static final int TOY_GAME = 2068; // 0x814 + field public static final int TOY_ROBOT = 2052; // 0x804 + field public static final int TOY_UNCATEGORIZED = 2048; // 0x800 + field public static final int TOY_VEHICLE = 2056; // 0x808 + field public static final int WEARABLE_GLASSES = 1812; // 0x714 + field public static final int WEARABLE_HELMET = 1808; // 0x710 + field public static final int WEARABLE_JACKET = 1804; // 0x70c + field public static final int WEARABLE_PAGER = 1800; // 0x708 + field public static final int WEARABLE_UNCATEGORIZED = 1792; // 0x700 + field public static final int WEARABLE_WRIST_WATCH = 1796; // 0x704 + } + + public static class BluetoothClass.Device.Major { + ctor public BluetoothClass.Device.Major(); + field public static final int AUDIO_VIDEO = 1024; // 0x400 + field public static final int COMPUTER = 256; // 0x100 + field public static final int HEALTH = 2304; // 0x900 + field public static final int IMAGING = 1536; // 0x600 + field public static final int MISC = 0; // 0x0 + field public static final int NETWORKING = 768; // 0x300 + field public static final int PERIPHERAL = 1280; // 0x500 + field public static final int PHONE = 512; // 0x200 + field public static final int TOY = 2048; // 0x800 + field public static final int UNCATEGORIZED = 7936; // 0x1f00 + field public static final int WEARABLE = 1792; // 0x700 + } + + public static final class BluetoothClass.Service { + ctor public BluetoothClass.Service(); + field public static final int AUDIO = 2097152; // 0x200000 + field public static final int CAPTURE = 524288; // 0x80000 + field public static final int INFORMATION = 8388608; // 0x800000 + field public static final int LIMITED_DISCOVERABILITY = 8192; // 0x2000 + field public static final int NETWORKING = 131072; // 0x20000 + field public static final int OBJECT_TRANSFER = 1048576; // 0x100000 + field public static final int POSITIONING = 65536; // 0x10000 + field public static final int RENDER = 262144; // 0x40000 + field public static final int TELEPHONY = 4194304; // 0x400000 + } + + public final class BluetoothDevice implements android.os.Parcelable { + method public android.bluetooth.BluetoothGatt connectGatt(android.content.Context, boolean, android.bluetooth.BluetoothGattCallback); + method public boolean createBond(); + method public android.bluetooth.BluetoothSocket createInsecureRfcommSocketToServiceRecord(java.util.UUID) throws java.io.IOException; + method public android.bluetooth.BluetoothSocket createRfcommSocketToServiceRecord(java.util.UUID) throws java.io.IOException; + method public int describeContents(); + method public boolean fetchUuidsWithSdp(); + method public java.lang.String getAddress(); + method public android.bluetooth.BluetoothClass getBluetoothClass(); + method public int getBondState(); + method public java.lang.String getName(); + method public int getType(); + method public android.os.ParcelUuid[] getUuids(); + method public boolean isConnected(); + method public boolean isEncrypted(); + method public boolean setPairingConfirmation(boolean); + method public boolean setPin(byte[]); + method public void writeToParcel(android.os.Parcel, int); + field public static final java.lang.String ACTION_ACL_CONNECTED = "android.bluetooth.device.action.ACL_CONNECTED"; + field public static final java.lang.String ACTION_ACL_DISCONNECTED = "android.bluetooth.device.action.ACL_DISCONNECTED"; + field public static final java.lang.String ACTION_ACL_DISCONNECT_REQUESTED = "android.bluetooth.device.action.ACL_DISCONNECT_REQUESTED"; + field public static final java.lang.String ACTION_BOND_STATE_CHANGED = "android.bluetooth.device.action.BOND_STATE_CHANGED"; + field public static final java.lang.String ACTION_CLASS_CHANGED = "android.bluetooth.device.action.CLASS_CHANGED"; + field public static final java.lang.String ACTION_FOUND = "android.bluetooth.device.action.FOUND"; + field public static final java.lang.String ACTION_NAME_CHANGED = "android.bluetooth.device.action.NAME_CHANGED"; + field public static final java.lang.String ACTION_PAIRING_REQUEST = "android.bluetooth.device.action.PAIRING_REQUEST"; + field public static final java.lang.String ACTION_UUID = "android.bluetooth.device.action.UUID"; + field public static final int BOND_BONDED = 12; // 0xc + field public static final int BOND_BONDING = 11; // 0xb + field public static final int BOND_NONE = 10; // 0xa + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int DEVICE_TYPE_CLASSIC = 1; // 0x1 + field public static final int DEVICE_TYPE_DUAL = 3; // 0x3 + field public static final int DEVICE_TYPE_LE = 2; // 0x2 + field public static final int DEVICE_TYPE_UNKNOWN = 0; // 0x0 + field public static final int ERROR = -2147483648; // 0x80000000 + field public static final java.lang.String EXTRA_BOND_STATE = "android.bluetooth.device.extra.BOND_STATE"; + field public static final java.lang.String EXTRA_CLASS = "android.bluetooth.device.extra.CLASS"; + field public static final java.lang.String EXTRA_DEVICE = "android.bluetooth.device.extra.DEVICE"; + field public static final java.lang.String EXTRA_NAME = "android.bluetooth.device.extra.NAME"; + field public static final java.lang.String EXTRA_PAIRING_KEY = "android.bluetooth.device.extra.PAIRING_KEY"; + field public static final java.lang.String EXTRA_PAIRING_VARIANT = "android.bluetooth.device.extra.PAIRING_VARIANT"; + field public static final java.lang.String EXTRA_PREVIOUS_BOND_STATE = "android.bluetooth.device.extra.PREVIOUS_BOND_STATE"; + field public static final java.lang.String EXTRA_RSSI = "android.bluetooth.device.extra.RSSI"; + field public static final java.lang.String EXTRA_UUID = "android.bluetooth.device.extra.UUID"; + field public static final int PAIRING_VARIANT_PASSKEY_CONFIRMATION = 2; // 0x2 + field public static final int PAIRING_VARIANT_PIN = 0; // 0x0 + } + + public final class BluetoothGatt implements android.bluetooth.BluetoothProfile { + method public void abortReliableWrite(); + method public deprecated void abortReliableWrite(android.bluetooth.BluetoothDevice); + method public boolean beginReliableWrite(); + method public void close(); + method public boolean connect(); + method public void disconnect(); + method public boolean discoverServices(); + method public boolean executeReliableWrite(); + method public java.util.List getConnectedDevices(); + method public int getConnectionState(android.bluetooth.BluetoothDevice); + method public android.bluetooth.BluetoothDevice getDevice(); + method public java.util.List getDevicesMatchingConnectionStates(int[]); + method public android.bluetooth.BluetoothGattService getService(java.util.UUID); + method public java.util.List getServices(); + method public boolean readCharacteristic(android.bluetooth.BluetoothGattCharacteristic); + method public boolean readDescriptor(android.bluetooth.BluetoothGattDescriptor); + method public boolean readRemoteRssi(); + method public boolean requestConnectionPriority(int); + method public boolean requestMtu(int); + method public boolean setCharacteristicNotification(android.bluetooth.BluetoothGattCharacteristic, boolean); + method public boolean writeCharacteristic(android.bluetooth.BluetoothGattCharacteristic); + method public boolean writeDescriptor(android.bluetooth.BluetoothGattDescriptor); + field public static final int CONNECTION_PRIORITY_BALANCED = 0; // 0x0 + field public static final int CONNECTION_PRIORITY_HIGH = 1; // 0x1 + field public static final int CONNECTION_PRIORITY_LOW_POWER = 2; // 0x2 + field public static final int GATT_CONNECTION_CONGESTED = 143; // 0x8f + field public static final int GATT_FAILURE = 257; // 0x101 + field public static final int GATT_INSUFFICIENT_AUTHENTICATION = 5; // 0x5 + field public static final int GATT_INSUFFICIENT_ENCRYPTION = 15; // 0xf + field public static final int GATT_INVALID_ATTRIBUTE_LENGTH = 13; // 0xd + field public static final int GATT_INVALID_OFFSET = 7; // 0x7 + field public static final int GATT_READ_NOT_PERMITTED = 2; // 0x2 + field public static final int GATT_REQUEST_NOT_SUPPORTED = 6; // 0x6 + field public static final int GATT_SUCCESS = 0; // 0x0 + field public static final int GATT_WRITE_NOT_PERMITTED = 3; // 0x3 + } + + public abstract class BluetoothGattCallback { + ctor public BluetoothGattCallback(); + method public void onCharacteristicChanged(android.bluetooth.BluetoothGatt, android.bluetooth.BluetoothGattCharacteristic); + method public void onCharacteristicRead(android.bluetooth.BluetoothGatt, android.bluetooth.BluetoothGattCharacteristic, int); + method public void onCharacteristicWrite(android.bluetooth.BluetoothGatt, android.bluetooth.BluetoothGattCharacteristic, int); + method public void onConnectionStateChange(android.bluetooth.BluetoothGatt, int, int); + method public void onDescriptorRead(android.bluetooth.BluetoothGatt, android.bluetooth.BluetoothGattDescriptor, int); + method public void onDescriptorWrite(android.bluetooth.BluetoothGatt, android.bluetooth.BluetoothGattDescriptor, int); + method public void onMtuChanged(android.bluetooth.BluetoothGatt, int, int); + method public void onReadRemoteRssi(android.bluetooth.BluetoothGatt, int, int); + method public void onReliableWriteCompleted(android.bluetooth.BluetoothGatt, int); + method public void onServicesDiscovered(android.bluetooth.BluetoothGatt, int); + } + + public class BluetoothGattCharacteristic { + ctor public BluetoothGattCharacteristic(java.util.UUID, int, int); + method public boolean addDescriptor(android.bluetooth.BluetoothGattDescriptor); + method public android.bluetooth.BluetoothGattDescriptor getDescriptor(java.util.UUID); + method public java.util.List getDescriptors(); + method public java.lang.Float getFloatValue(int, int); + method public int getInstanceId(); + method public java.lang.Integer getIntValue(int, int); + method public int getPermissions(); + method public int getProperties(); + method public android.bluetooth.BluetoothGattService getService(); + method public java.lang.String getStringValue(int); + method public java.util.UUID getUuid(); + method public byte[] getValue(); + method public int getWriteType(); + method public boolean setValue(byte[]); + method public boolean setValue(int, int, int); + method public boolean setValue(int, int, int, int); + method public boolean setValue(java.lang.String); + method public void setWriteType(int); + field public static final int FORMAT_FLOAT = 52; // 0x34 + field public static final int FORMAT_SFLOAT = 50; // 0x32 + field public static final int FORMAT_SINT16 = 34; // 0x22 + field public static final int FORMAT_SINT32 = 36; // 0x24 + field public static final int FORMAT_SINT8 = 33; // 0x21 + field public static final int FORMAT_UINT16 = 18; // 0x12 + field public static final int FORMAT_UINT32 = 20; // 0x14 + field public static final int FORMAT_UINT8 = 17; // 0x11 + field public static final int PERMISSION_READ = 1; // 0x1 + field public static final int PERMISSION_READ_ENCRYPTED = 2; // 0x2 + field public static final int PERMISSION_READ_ENCRYPTED_MITM = 4; // 0x4 + field public static final int PERMISSION_WRITE = 16; // 0x10 + field public static final int PERMISSION_WRITE_ENCRYPTED = 32; // 0x20 + field public static final int PERMISSION_WRITE_ENCRYPTED_MITM = 64; // 0x40 + field public static final int PERMISSION_WRITE_SIGNED = 128; // 0x80 + field public static final int PERMISSION_WRITE_SIGNED_MITM = 256; // 0x100 + field public static final int PROPERTY_BROADCAST = 1; // 0x1 + field public static final int PROPERTY_EXTENDED_PROPS = 128; // 0x80 + field public static final int PROPERTY_INDICATE = 32; // 0x20 + field public static final int PROPERTY_NOTIFY = 16; // 0x10 + field public static final int PROPERTY_READ = 2; // 0x2 + field public static final int PROPERTY_SIGNED_WRITE = 64; // 0x40 + field public static final int PROPERTY_WRITE = 8; // 0x8 + field public static final int PROPERTY_WRITE_NO_RESPONSE = 4; // 0x4 + field public static final int WRITE_TYPE_DEFAULT = 2; // 0x2 + field public static final int WRITE_TYPE_NO_RESPONSE = 1; // 0x1 + field public static final int WRITE_TYPE_SIGNED = 4; // 0x4 + field protected java.util.List mDescriptors; + } + + public class BluetoothGattDescriptor { + ctor public BluetoothGattDescriptor(java.util.UUID, int); + method public android.bluetooth.BluetoothGattCharacteristic getCharacteristic(); + method public int getPermissions(); + method public java.util.UUID getUuid(); + method public byte[] getValue(); + method public boolean setValue(byte[]); + field public static final byte[] DISABLE_NOTIFICATION_VALUE; + field public static final byte[] ENABLE_INDICATION_VALUE; + field public static final byte[] ENABLE_NOTIFICATION_VALUE; + field public static final int PERMISSION_READ = 1; // 0x1 + field public static final int PERMISSION_READ_ENCRYPTED = 2; // 0x2 + field public static final int PERMISSION_READ_ENCRYPTED_MITM = 4; // 0x4 + field public static final int PERMISSION_WRITE = 16; // 0x10 + field public static final int PERMISSION_WRITE_ENCRYPTED = 32; // 0x20 + field public static final int PERMISSION_WRITE_ENCRYPTED_MITM = 64; // 0x40 + field public static final int PERMISSION_WRITE_SIGNED = 128; // 0x80 + field public static final int PERMISSION_WRITE_SIGNED_MITM = 256; // 0x100 + } + + public final class BluetoothGattServer implements android.bluetooth.BluetoothProfile { + method public boolean addService(android.bluetooth.BluetoothGattService); + method public void cancelConnection(android.bluetooth.BluetoothDevice); + method public void clearServices(); + method public void close(); + method public boolean connect(android.bluetooth.BluetoothDevice, boolean); + method public java.util.List getConnectedDevices(); + method public int getConnectionState(android.bluetooth.BluetoothDevice); + method public java.util.List getDevicesMatchingConnectionStates(int[]); + method public android.bluetooth.BluetoothGattService getService(java.util.UUID); + method public java.util.List getServices(); + method public boolean notifyCharacteristicChanged(android.bluetooth.BluetoothDevice, android.bluetooth.BluetoothGattCharacteristic, boolean); + method public boolean removeService(android.bluetooth.BluetoothGattService); + method public boolean sendResponse(android.bluetooth.BluetoothDevice, int, int, int, byte[]); + } + + public abstract class BluetoothGattServerCallback { + ctor public BluetoothGattServerCallback(); + method public void onCharacteristicReadRequest(android.bluetooth.BluetoothDevice, int, int, android.bluetooth.BluetoothGattCharacteristic); + method public void onCharacteristicWriteRequest(android.bluetooth.BluetoothDevice, int, android.bluetooth.BluetoothGattCharacteristic, boolean, boolean, int, byte[]); + method public void onConnectionStateChange(android.bluetooth.BluetoothDevice, int, int); + method public void onDescriptorReadRequest(android.bluetooth.BluetoothDevice, int, int, android.bluetooth.BluetoothGattDescriptor); + method public void onDescriptorWriteRequest(android.bluetooth.BluetoothDevice, int, android.bluetooth.BluetoothGattDescriptor, boolean, boolean, int, byte[]); + method public void onExecuteWrite(android.bluetooth.BluetoothDevice, int, boolean); + method public void onMtuChanged(android.bluetooth.BluetoothDevice, int); + method public void onNotificationSent(android.bluetooth.BluetoothDevice, int); + method public void onServiceAdded(int, android.bluetooth.BluetoothGattService); + } + + public class BluetoothGattService { + ctor public BluetoothGattService(java.util.UUID, int); + method public boolean addCharacteristic(android.bluetooth.BluetoothGattCharacteristic); + method public boolean addService(android.bluetooth.BluetoothGattService); + method public android.bluetooth.BluetoothGattCharacteristic getCharacteristic(java.util.UUID); + method public java.util.List getCharacteristics(); + method public java.util.List getIncludedServices(); + method public int getInstanceId(); + method public int getType(); + method public java.util.UUID getUuid(); + field public static final int SERVICE_TYPE_PRIMARY = 0; // 0x0 + field public static final int SERVICE_TYPE_SECONDARY = 1; // 0x1 + field protected java.util.List mCharacteristics; + field protected java.util.List mIncludedServices; + } + + public final class BluetoothHeadset implements android.bluetooth.BluetoothProfile { + method public java.util.List getConnectedDevices(); + method public int getConnectionState(android.bluetooth.BluetoothDevice); + method public java.util.List getDevicesMatchingConnectionStates(int[]); + method public boolean isAudioConnected(android.bluetooth.BluetoothDevice); + method public boolean sendVendorSpecificResultCode(android.bluetooth.BluetoothDevice, java.lang.String, java.lang.String); + method public boolean startVoiceRecognition(android.bluetooth.BluetoothDevice); + method public boolean stopVoiceRecognition(android.bluetooth.BluetoothDevice); + field public static final java.lang.String ACTION_AUDIO_STATE_CHANGED = "android.bluetooth.headset.profile.action.AUDIO_STATE_CHANGED"; + field public static final java.lang.String ACTION_CONNECTION_STATE_CHANGED = "android.bluetooth.headset.profile.action.CONNECTION_STATE_CHANGED"; + field public static final java.lang.String ACTION_VENDOR_SPECIFIC_HEADSET_EVENT = "android.bluetooth.headset.action.VENDOR_SPECIFIC_HEADSET_EVENT"; + field public static final int AT_CMD_TYPE_ACTION = 4; // 0x4 + field public static final int AT_CMD_TYPE_BASIC = 3; // 0x3 + field public static final int AT_CMD_TYPE_READ = 0; // 0x0 + field public static final int AT_CMD_TYPE_SET = 2; // 0x2 + field public static final int AT_CMD_TYPE_TEST = 1; // 0x1 + field public static final java.lang.String EXTRA_VENDOR_SPECIFIC_HEADSET_EVENT_ARGS = "android.bluetooth.headset.extra.VENDOR_SPECIFIC_HEADSET_EVENT_ARGS"; + field public static final java.lang.String EXTRA_VENDOR_SPECIFIC_HEADSET_EVENT_CMD = "android.bluetooth.headset.extra.VENDOR_SPECIFIC_HEADSET_EVENT_CMD"; + field public static final java.lang.String EXTRA_VENDOR_SPECIFIC_HEADSET_EVENT_CMD_TYPE = "android.bluetooth.headset.extra.VENDOR_SPECIFIC_HEADSET_EVENT_CMD_TYPE"; + field public static final int STATE_AUDIO_CONNECTED = 12; // 0xc + field public static final int STATE_AUDIO_CONNECTING = 11; // 0xb + field public static final int STATE_AUDIO_DISCONNECTED = 10; // 0xa + field public static final java.lang.String VENDOR_RESULT_CODE_COMMAND_ANDROID = "+ANDROID"; + field public static final java.lang.String VENDOR_SPECIFIC_HEADSET_EVENT_COMPANY_ID_CATEGORY = "android.bluetooth.headset.intent.category.companyid"; + } + + public final class BluetoothHealth implements android.bluetooth.BluetoothProfile { + method public boolean connectChannelToSource(android.bluetooth.BluetoothDevice, android.bluetooth.BluetoothHealthAppConfiguration); + method public boolean disconnectChannel(android.bluetooth.BluetoothDevice, android.bluetooth.BluetoothHealthAppConfiguration, int); + method public java.util.List getConnectedDevices(); + method public int getConnectionState(android.bluetooth.BluetoothDevice); + method public java.util.List getDevicesMatchingConnectionStates(int[]); + method public android.os.ParcelFileDescriptor getMainChannelFd(android.bluetooth.BluetoothDevice, android.bluetooth.BluetoothHealthAppConfiguration); + method public boolean registerSinkAppConfiguration(java.lang.String, int, android.bluetooth.BluetoothHealthCallback); + method public boolean unregisterAppConfiguration(android.bluetooth.BluetoothHealthAppConfiguration); + field public static final int APP_CONFIG_REGISTRATION_FAILURE = 1; // 0x1 + field public static final int APP_CONFIG_REGISTRATION_SUCCESS = 0; // 0x0 + field public static final int APP_CONFIG_UNREGISTRATION_FAILURE = 3; // 0x3 + field public static final int APP_CONFIG_UNREGISTRATION_SUCCESS = 2; // 0x2 + field public static final int CHANNEL_TYPE_RELIABLE = 10; // 0xa + field public static final int CHANNEL_TYPE_STREAMING = 11; // 0xb + field public static final int SINK_ROLE = 2; // 0x2 + field public static final int SOURCE_ROLE = 1; // 0x1 + field public static final int STATE_CHANNEL_CONNECTED = 2; // 0x2 + field public static final int STATE_CHANNEL_CONNECTING = 1; // 0x1 + field public static final int STATE_CHANNEL_DISCONNECTED = 0; // 0x0 + field public static final int STATE_CHANNEL_DISCONNECTING = 3; // 0x3 + } + + public final class BluetoothHealthAppConfiguration implements android.os.Parcelable { + method public int describeContents(); + method public int getDataType(); + method public java.lang.String getName(); + method public int getRole(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public abstract class BluetoothHealthCallback { + ctor public BluetoothHealthCallback(); + method public void onHealthAppConfigurationStatusChange(android.bluetooth.BluetoothHealthAppConfiguration, int); + method public void onHealthChannelStateChange(android.bluetooth.BluetoothHealthAppConfiguration, android.bluetooth.BluetoothDevice, int, int, android.os.ParcelFileDescriptor, int); + } + + public final class BluetoothManager { + method public android.bluetooth.BluetoothAdapter getAdapter(); + method public java.util.List getConnectedDevices(int); + method public int getConnectionState(android.bluetooth.BluetoothDevice, int); + method public java.util.List getDevicesMatchingConnectionStates(int, int[]); + method public android.bluetooth.BluetoothGattServer openGattServer(android.content.Context, android.bluetooth.BluetoothGattServerCallback); + } + + public abstract interface BluetoothProfile { + method public abstract java.util.List getConnectedDevices(); + method public abstract int getConnectionState(android.bluetooth.BluetoothDevice); + method public abstract java.util.List getDevicesMatchingConnectionStates(int[]); + field public static final int A2DP = 2; // 0x2 + field public static final java.lang.String EXTRA_PREVIOUS_STATE = "android.bluetooth.profile.extra.PREVIOUS_STATE"; + field public static final java.lang.String EXTRA_STATE = "android.bluetooth.profile.extra.STATE"; + field public static final int GATT = 7; // 0x7 + field public static final int GATT_SERVER = 8; // 0x8 + field public static final int HEADSET = 1; // 0x1 + field public static final int HEALTH = 3; // 0x3 + field public static final int STATE_CONNECTED = 2; // 0x2 + field public static final int STATE_CONNECTING = 1; // 0x1 + field public static final int STATE_DISCONNECTED = 0; // 0x0 + field public static final int STATE_DISCONNECTING = 3; // 0x3 + } + + public static abstract interface BluetoothProfile.ServiceListener { + method public abstract void onServiceConnected(int, android.bluetooth.BluetoothProfile); + method public abstract void onServiceDisconnected(int); + } + + public final class BluetoothServerSocket implements java.io.Closeable { + method public android.bluetooth.BluetoothSocket accept() throws java.io.IOException; + method public android.bluetooth.BluetoothSocket accept(int) throws java.io.IOException; + method public void close() throws java.io.IOException; + } + + public final class BluetoothSocket implements java.io.Closeable { + method public void close() throws java.io.IOException; + method public void connect() throws java.io.IOException; + method public java.io.InputStream getInputStream() throws java.io.IOException; + method public java.io.OutputStream getOutputStream() throws java.io.IOException; + method public android.bluetooth.BluetoothDevice getRemoteDevice(); + method public boolean isConnected(); + } + +} + +package android.bluetooth.le { + + public abstract class AdvertiseCallback { + ctor public AdvertiseCallback(); + method public void onStartFailure(int); + method public void onStartSuccess(android.bluetooth.le.AdvertiseSettings); + field public static final int ADVERTISE_FAILED_ALREADY_STARTED = 3; // 0x3 + field public static final int ADVERTISE_FAILED_DATA_TOO_LARGE = 1; // 0x1 + field public static final int ADVERTISE_FAILED_FEATURE_UNSUPPORTED = 5; // 0x5 + field public static final int ADVERTISE_FAILED_INTERNAL_ERROR = 4; // 0x4 + field public static final int ADVERTISE_FAILED_TOO_MANY_ADVERTISERS = 2; // 0x2 + } + + public final class AdvertiseData implements android.os.Parcelable { + method public int describeContents(); + method public boolean getIncludeDeviceName(); + method public boolean getIncludeTxPowerLevel(); + method public android.util.SparseArray getManufacturerSpecificData(); + method public java.util.Map getServiceData(); + method public java.util.List getServiceUuids(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public static final class AdvertiseData.Builder { + ctor public AdvertiseData.Builder(); + method public android.bluetooth.le.AdvertiseData.Builder addManufacturerData(int, byte[]); + method public android.bluetooth.le.AdvertiseData.Builder addServiceData(android.os.ParcelUuid, byte[]); + method public android.bluetooth.le.AdvertiseData.Builder addServiceUuid(android.os.ParcelUuid); + method public android.bluetooth.le.AdvertiseData build(); + method public android.bluetooth.le.AdvertiseData.Builder setIncludeDeviceName(boolean); + method public android.bluetooth.le.AdvertiseData.Builder setIncludeTxPowerLevel(boolean); + } + + public final class AdvertiseSettings implements android.os.Parcelable { + method public int describeContents(); + method public int getMode(); + method public int getTimeout(); + method public int getTxPowerLevel(); + method public boolean isConnectable(); + method public void writeToParcel(android.os.Parcel, int); + field public static final int ADVERTISE_MODE_BALANCED = 1; // 0x1 + field public static final int ADVERTISE_MODE_LOW_LATENCY = 2; // 0x2 + field public static final int ADVERTISE_MODE_LOW_POWER = 0; // 0x0 + field public static final int ADVERTISE_TX_POWER_HIGH = 3; // 0x3 + field public static final int ADVERTISE_TX_POWER_LOW = 1; // 0x1 + field public static final int ADVERTISE_TX_POWER_MEDIUM = 2; // 0x2 + field public static final int ADVERTISE_TX_POWER_ULTRA_LOW = 0; // 0x0 + field public static final android.os.Parcelable.Creator CREATOR; + } + + public static final class AdvertiseSettings.Builder { + ctor public AdvertiseSettings.Builder(); + method public android.bluetooth.le.AdvertiseSettings build(); + method public android.bluetooth.le.AdvertiseSettings.Builder setAdvertiseMode(int); + method public android.bluetooth.le.AdvertiseSettings.Builder setConnectable(boolean); + method public android.bluetooth.le.AdvertiseSettings.Builder setTimeout(int); + method public android.bluetooth.le.AdvertiseSettings.Builder setTxPowerLevel(int); + } + + public final class BluetoothLeAdvertiser { + method public void startAdvertising(android.bluetooth.le.AdvertiseSettings, android.bluetooth.le.AdvertiseData, android.bluetooth.le.AdvertiseCallback); + method public void startAdvertising(android.bluetooth.le.AdvertiseSettings, android.bluetooth.le.AdvertiseData, android.bluetooth.le.AdvertiseData, android.bluetooth.le.AdvertiseCallback); + method public void stopAdvertising(android.bluetooth.le.AdvertiseCallback); + } + + public final class BluetoothLeScanner { + method public void flushPendingScanResults(android.bluetooth.le.ScanCallback); + method public void startScan(android.bluetooth.le.ScanCallback); + method public void startScan(java.util.List, android.bluetooth.le.ScanSettings, android.bluetooth.le.ScanCallback); + method public void startTruncatedScan(java.util.List, android.bluetooth.le.ScanSettings, android.bluetooth.le.ScanCallback); + method public void stopScan(android.bluetooth.le.ScanCallback); + } + + public final class ResultStorageDescriptor implements android.os.Parcelable { + ctor public ResultStorageDescriptor(int, int, int); + method public int describeContents(); + method public int getLength(); + method public int getOffset(); + method public int getType(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public abstract class ScanCallback { + ctor public ScanCallback(); + method public void onBatchScanResults(java.util.List); + method public void onScanFailed(int); + method public void onScanResult(int, android.bluetooth.le.ScanResult); + field public static final int SCAN_FAILED_ALREADY_STARTED = 1; // 0x1 + field public static final int SCAN_FAILED_APPLICATION_REGISTRATION_FAILED = 2; // 0x2 + field public static final int SCAN_FAILED_FEATURE_UNSUPPORTED = 4; // 0x4 + field public static final int SCAN_FAILED_INTERNAL_ERROR = 3; // 0x3 + } + + public final class ScanFilter implements android.os.Parcelable { + method public int describeContents(); + method public java.lang.String getDeviceAddress(); + method public java.lang.String getDeviceName(); + method public byte[] getManufacturerData(); + method public byte[] getManufacturerDataMask(); + method public int getManufacturerId(); + method public byte[] getServiceData(); + method public byte[] getServiceDataMask(); + method public android.os.ParcelUuid getServiceDataUuid(); + method public android.os.ParcelUuid getServiceUuid(); + method public android.os.ParcelUuid getServiceUuidMask(); + method public boolean matches(android.bluetooth.le.ScanResult); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public static final class ScanFilter.Builder { + ctor public ScanFilter.Builder(); + method public android.bluetooth.le.ScanFilter build(); + method public android.bluetooth.le.ScanFilter.Builder setDeviceAddress(java.lang.String); + method public android.bluetooth.le.ScanFilter.Builder setDeviceName(java.lang.String); + method public android.bluetooth.le.ScanFilter.Builder setManufacturerData(int, byte[]); + method public android.bluetooth.le.ScanFilter.Builder setManufacturerData(int, byte[], byte[]); + method public android.bluetooth.le.ScanFilter.Builder setServiceData(android.os.ParcelUuid, byte[]); + method public android.bluetooth.le.ScanFilter.Builder setServiceData(android.os.ParcelUuid, byte[], byte[]); + method public android.bluetooth.le.ScanFilter.Builder setServiceUuid(android.os.ParcelUuid); + method public android.bluetooth.le.ScanFilter.Builder setServiceUuid(android.os.ParcelUuid, android.os.ParcelUuid); + } + + public final class ScanRecord { + method public int getAdvertiseFlags(); + method public byte[] getBytes(); + method public java.lang.String getDeviceName(); + method public android.util.SparseArray getManufacturerSpecificData(); + method public byte[] getManufacturerSpecificData(int); + method public java.util.Map getServiceData(); + method public byte[] getServiceData(android.os.ParcelUuid); + method public java.util.List getServiceUuids(); + method public int getTxPowerLevel(); + } + + public final class ScanResult implements android.os.Parcelable { + ctor public ScanResult(android.bluetooth.BluetoothDevice, android.bluetooth.le.ScanRecord, int, long); + method public int describeContents(); + method public android.bluetooth.BluetoothDevice getDevice(); + method public int getRssi(); + method public android.bluetooth.le.ScanRecord getScanRecord(); + method public long getTimestampNanos(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public final class ScanSettings implements android.os.Parcelable { + method public int describeContents(); + method public int getCallbackType(); + method public long getReportDelayMillis(); + method public int getScanMode(); + method public int getScanResultType(); + method public void writeToParcel(android.os.Parcel, int); + field public static final int CALLBACK_TYPE_ALL_MATCHES = 1; // 0x1 + field public static final int CALLBACK_TYPE_FIRST_MATCH = 2; // 0x2 + field public static final int CALLBACK_TYPE_MATCH_LOST = 4; // 0x4 + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int SCAN_MODE_BALANCED = 1; // 0x1 + field public static final int SCAN_MODE_LOW_LATENCY = 2; // 0x2 + field public static final int SCAN_MODE_LOW_POWER = 0; // 0x0 + field public static final int SCAN_RESULT_TYPE_ABBREVIATED = 1; // 0x1 + field public static final int SCAN_RESULT_TYPE_FULL = 0; // 0x0 + } + + public static final class ScanSettings.Builder { + ctor public ScanSettings.Builder(); + method public android.bluetooth.le.ScanSettings build(); + method public android.bluetooth.le.ScanSettings.Builder setCallbackType(int); + method public android.bluetooth.le.ScanSettings.Builder setReportDelay(long); + method public android.bluetooth.le.ScanSettings.Builder setScanMode(int); + method public android.bluetooth.le.ScanSettings.Builder setScanResultType(int); + } + + public final class TruncatedFilter { + ctor public TruncatedFilter(android.bluetooth.le.ScanFilter, java.util.List); + method public android.bluetooth.le.ScanFilter getFilter(); + method public java.util.List getStorageDescriptors(); + } + +} + +package android.content { + + public abstract class AbstractThreadedSyncAdapter { + ctor public AbstractThreadedSyncAdapter(android.content.Context, boolean); + ctor public AbstractThreadedSyncAdapter(android.content.Context, boolean, boolean); + method public android.content.Context getContext(); + method public final android.os.IBinder getSyncAdapterBinder(); + method public abstract void onPerformSync(android.accounts.Account, android.os.Bundle, java.lang.String, android.content.ContentProviderClient, android.content.SyncResult); + method public void onSyncCanceled(); + method public void onSyncCanceled(java.lang.Thread); + field public static final deprecated int LOG_SYNC_DETAILS = 2743; // 0xab7 + } + + public class ActivityNotFoundException extends java.lang.RuntimeException { + ctor public ActivityNotFoundException(); + ctor public ActivityNotFoundException(java.lang.String); + } + + public abstract class AsyncQueryHandler extends android.os.Handler { + ctor public AsyncQueryHandler(android.content.ContentResolver); + method public final void cancelOperation(int); + method protected android.os.Handler createHandler(android.os.Looper); + method protected void onDeleteComplete(int, java.lang.Object, int); + method protected void onInsertComplete(int, java.lang.Object, android.net.Uri); + method protected void onQueryComplete(int, java.lang.Object, android.database.Cursor); + method protected void onUpdateComplete(int, java.lang.Object, int); + method public final void startDelete(int, java.lang.Object, android.net.Uri, java.lang.String, java.lang.String[]); + method public final void startInsert(int, java.lang.Object, android.net.Uri, android.content.ContentValues); + method public void startQuery(int, java.lang.Object, android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String); + method public final void startUpdate(int, java.lang.Object, android.net.Uri, android.content.ContentValues, java.lang.String, java.lang.String[]); + } + + protected static final class AsyncQueryHandler.WorkerArgs { + ctor protected AsyncQueryHandler.WorkerArgs(); + field public java.lang.Object cookie; + field public android.os.Handler handler; + field public java.lang.String orderBy; + field public java.lang.String[] projection; + field public java.lang.Object result; + field public java.lang.String selection; + field public java.lang.String[] selectionArgs; + field public android.net.Uri uri; + field public android.content.ContentValues values; + } + + protected class AsyncQueryHandler.WorkerHandler extends android.os.Handler { + ctor public AsyncQueryHandler.WorkerHandler(android.os.Looper); + } + + public abstract class AsyncTaskLoader extends android.content.Loader { + ctor public AsyncTaskLoader(android.content.Context); + method public void cancelLoadInBackground(); + method public boolean isLoadInBackgroundCanceled(); + method public abstract D loadInBackground(); + method public void onCanceled(D); + method protected D onLoadInBackground(); + method public void setUpdateThrottle(long); + } + + public abstract class BroadcastReceiver { + ctor public BroadcastReceiver(); + method public final void abortBroadcast(); + method public final void clearAbortBroadcast(); + method public final boolean getAbortBroadcast(); + method public final boolean getDebugUnregister(); + method public final int getResultCode(); + method public final java.lang.String getResultData(); + method public final android.os.Bundle getResultExtras(boolean); + method public final android.content.BroadcastReceiver.PendingResult goAsync(); + method public final boolean isInitialStickyBroadcast(); + method public final boolean isOrderedBroadcast(); + method public abstract void onReceive(android.content.Context, android.content.Intent); + method public android.os.IBinder peekService(android.content.Context, android.content.Intent); + method public final void setDebugUnregister(boolean); + method public final void setOrderedHint(boolean); + method public final void setResult(int, java.lang.String, android.os.Bundle); + method public final void setResultCode(int); + method public final void setResultData(java.lang.String); + method public final void setResultExtras(android.os.Bundle); + } + + public static class BroadcastReceiver.PendingResult { + method public final void abortBroadcast(); + method public final void clearAbortBroadcast(); + method public final void finish(); + method public final boolean getAbortBroadcast(); + method public final int getResultCode(); + method public final java.lang.String getResultData(); + method public final android.os.Bundle getResultExtras(boolean); + method public final void setResult(int, java.lang.String, android.os.Bundle); + method public final void setResultCode(int); + method public final void setResultData(java.lang.String); + method public final void setResultExtras(android.os.Bundle); + } + + public class ClipData implements android.os.Parcelable { + ctor public ClipData(java.lang.CharSequence, java.lang.String[], android.content.ClipData.Item); + ctor public ClipData(android.content.ClipDescription, android.content.ClipData.Item); + ctor public ClipData(android.content.ClipData); + method public void addItem(android.content.ClipData.Item); + method public int describeContents(); + method public android.content.ClipDescription getDescription(); + method public android.content.ClipData.Item getItemAt(int); + method public int getItemCount(); + method public static android.content.ClipData newHtmlText(java.lang.CharSequence, java.lang.CharSequence, java.lang.String); + method public static android.content.ClipData newIntent(java.lang.CharSequence, android.content.Intent); + method public static android.content.ClipData newPlainText(java.lang.CharSequence, java.lang.CharSequence); + method public static android.content.ClipData newRawUri(java.lang.CharSequence, android.net.Uri); + method public static android.content.ClipData newUri(android.content.ContentResolver, java.lang.CharSequence, android.net.Uri); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public static class ClipData.Item { + ctor public ClipData.Item(java.lang.CharSequence); + ctor public ClipData.Item(java.lang.CharSequence, java.lang.String); + ctor public ClipData.Item(android.content.Intent); + ctor public ClipData.Item(android.net.Uri); + ctor public ClipData.Item(java.lang.CharSequence, android.content.Intent, android.net.Uri); + ctor public ClipData.Item(java.lang.CharSequence, java.lang.String, android.content.Intent, android.net.Uri); + method public java.lang.String coerceToHtmlText(android.content.Context); + method public java.lang.CharSequence coerceToStyledText(android.content.Context); + method public java.lang.CharSequence coerceToText(android.content.Context); + method public java.lang.String getHtmlText(); + method public android.content.Intent getIntent(); + method public java.lang.CharSequence getText(); + method public android.net.Uri getUri(); + } + + public class ClipDescription implements android.os.Parcelable { + ctor public ClipDescription(java.lang.CharSequence, java.lang.String[]); + ctor public ClipDescription(android.content.ClipDescription); + method public static boolean compareMimeTypes(java.lang.String, java.lang.String); + method public int describeContents(); + method public java.lang.String[] filterMimeTypes(java.lang.String); + method public java.lang.CharSequence getLabel(); + method public java.lang.String getMimeType(int); + method public int getMimeTypeCount(); + method public boolean hasMimeType(java.lang.String); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final java.lang.String MIMETYPE_TEXT_HTML = "text/html"; + field public static final java.lang.String MIMETYPE_TEXT_INTENT = "text/vnd.android.intent"; + field public static final java.lang.String MIMETYPE_TEXT_PLAIN = "text/plain"; + field public static final java.lang.String MIMETYPE_TEXT_URILIST = "text/uri-list"; + } + + public class ClipboardManager extends android.text.ClipboardManager { + method public void addPrimaryClipChangedListener(android.content.ClipboardManager.OnPrimaryClipChangedListener); + method public android.content.ClipData getPrimaryClip(); + method public android.content.ClipDescription getPrimaryClipDescription(); + method public deprecated java.lang.CharSequence getText(); + method public boolean hasPrimaryClip(); + method public deprecated boolean hasText(); + method public void removePrimaryClipChangedListener(android.content.ClipboardManager.OnPrimaryClipChangedListener); + method public void setPrimaryClip(android.content.ClipData); + method public deprecated void setText(java.lang.CharSequence); + } + + public static abstract interface ClipboardManager.OnPrimaryClipChangedListener { + method public abstract void onPrimaryClipChanged(); + } + + public abstract interface ComponentCallbacks { + method public abstract void onConfigurationChanged(android.content.res.Configuration); + method public abstract void onLowMemory(); + } + + public abstract interface ComponentCallbacks2 implements android.content.ComponentCallbacks { + method public abstract void onTrimMemory(int); + field public static final int TRIM_MEMORY_BACKGROUND = 40; // 0x28 + field public static final int TRIM_MEMORY_COMPLETE = 80; // 0x50 + field public static final int TRIM_MEMORY_MODERATE = 60; // 0x3c + field public static final int TRIM_MEMORY_RUNNING_CRITICAL = 15; // 0xf + field public static final int TRIM_MEMORY_RUNNING_LOW = 10; // 0xa + field public static final int TRIM_MEMORY_RUNNING_MODERATE = 5; // 0x5 + field public static final int TRIM_MEMORY_UI_HIDDEN = 20; // 0x14 + } + + public final class ComponentName implements java.lang.Cloneable java.lang.Comparable android.os.Parcelable { + ctor public ComponentName(java.lang.String, java.lang.String); + ctor public ComponentName(android.content.Context, java.lang.String); + ctor public ComponentName(android.content.Context, java.lang.Class); + ctor public ComponentName(android.os.Parcel); + method public android.content.ComponentName clone(); + method public int compareTo(android.content.ComponentName); + method public int describeContents(); + method public java.lang.String flattenToShortString(); + method public java.lang.String flattenToString(); + method public java.lang.String getClassName(); + method public java.lang.String getPackageName(); + method public java.lang.String getShortClassName(); + method public static android.content.ComponentName readFromParcel(android.os.Parcel); + method public java.lang.String toShortString(); + method public static android.content.ComponentName unflattenFromString(java.lang.String); + method public void writeToParcel(android.os.Parcel, int); + method public static void writeToParcel(android.content.ComponentName, android.os.Parcel); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public abstract class ContentProvider implements android.content.ComponentCallbacks2 { + ctor public ContentProvider(); + method public android.content.ContentProviderResult[] applyBatch(java.util.ArrayList) throws android.content.OperationApplicationException; + method public void attachInfo(android.content.Context, android.content.pm.ProviderInfo); + method public int bulkInsert(android.net.Uri, android.content.ContentValues[]); + method public android.os.Bundle call(java.lang.String, java.lang.String, android.os.Bundle); + method public android.net.Uri canonicalize(android.net.Uri); + method public abstract int delete(android.net.Uri, java.lang.String, java.lang.String[]); + method public void dump(java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]); + method public final java.lang.String getCallingPackage(); + method public final android.content.Context getContext(); + method public final android.content.pm.PathPermission[] getPathPermissions(); + method public final java.lang.String getReadPermission(); + method public java.lang.String[] getStreamTypes(android.net.Uri, java.lang.String); + method public abstract java.lang.String getType(android.net.Uri); + method public final java.lang.String getWritePermission(); + method public abstract android.net.Uri insert(android.net.Uri, android.content.ContentValues); + method protected boolean isTemporary(); + method public void onConfigurationChanged(android.content.res.Configuration); + method public abstract boolean onCreate(); + method public void onLowMemory(); + method public void onTrimMemory(int); + method public android.content.res.AssetFileDescriptor openAssetFile(android.net.Uri, java.lang.String) throws java.io.FileNotFoundException; + method public android.content.res.AssetFileDescriptor openAssetFile(android.net.Uri, java.lang.String, android.os.CancellationSignal) throws java.io.FileNotFoundException; + method public android.os.ParcelFileDescriptor openFile(android.net.Uri, java.lang.String) throws java.io.FileNotFoundException; + method public android.os.ParcelFileDescriptor openFile(android.net.Uri, java.lang.String, android.os.CancellationSignal) throws java.io.FileNotFoundException; + method protected final android.os.ParcelFileDescriptor openFileHelper(android.net.Uri, java.lang.String) throws java.io.FileNotFoundException; + method public android.os.ParcelFileDescriptor openPipeHelper(android.net.Uri, java.lang.String, android.os.Bundle, T, android.content.ContentProvider.PipeDataWriter) throws java.io.FileNotFoundException; + method public android.content.res.AssetFileDescriptor openTypedAssetFile(android.net.Uri, java.lang.String, android.os.Bundle) throws java.io.FileNotFoundException; + method public android.content.res.AssetFileDescriptor openTypedAssetFile(android.net.Uri, java.lang.String, android.os.Bundle, android.os.CancellationSignal) throws java.io.FileNotFoundException; + method public abstract android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String); + method public android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, android.os.CancellationSignal); + method protected final void setPathPermissions(android.content.pm.PathPermission[]); + method protected final void setReadPermission(java.lang.String); + method protected final void setWritePermission(java.lang.String); + method public void shutdown(); + method public android.net.Uri uncanonicalize(android.net.Uri); + method public abstract int update(android.net.Uri, android.content.ContentValues, java.lang.String, java.lang.String[]); + } + + public static abstract interface ContentProvider.PipeDataWriter { + method public abstract void writeDataToPipe(android.os.ParcelFileDescriptor, android.net.Uri, java.lang.String, android.os.Bundle, T); + } + + public class ContentProviderClient { + method public android.content.ContentProviderResult[] applyBatch(java.util.ArrayList) throws android.content.OperationApplicationException, android.os.RemoteException; + method public int bulkInsert(android.net.Uri, android.content.ContentValues[]) throws android.os.RemoteException; + method public android.os.Bundle call(java.lang.String, java.lang.String, android.os.Bundle) throws android.os.RemoteException; + method public final android.net.Uri canonicalize(android.net.Uri) throws android.os.RemoteException; + method public int delete(android.net.Uri, java.lang.String, java.lang.String[]) throws android.os.RemoteException; + method public android.content.ContentProvider getLocalContentProvider(); + method public java.lang.String[] getStreamTypes(android.net.Uri, java.lang.String) throws android.os.RemoteException; + method public java.lang.String getType(android.net.Uri) throws android.os.RemoteException; + method public android.net.Uri insert(android.net.Uri, android.content.ContentValues) throws android.os.RemoteException; + method public android.content.res.AssetFileDescriptor openAssetFile(android.net.Uri, java.lang.String) throws java.io.FileNotFoundException, android.os.RemoteException; + method public android.content.res.AssetFileDescriptor openAssetFile(android.net.Uri, java.lang.String, android.os.CancellationSignal) throws java.io.FileNotFoundException, android.os.RemoteException; + method public android.os.ParcelFileDescriptor openFile(android.net.Uri, java.lang.String) throws java.io.FileNotFoundException, android.os.RemoteException; + method public android.os.ParcelFileDescriptor openFile(android.net.Uri, java.lang.String, android.os.CancellationSignal) throws java.io.FileNotFoundException, android.os.RemoteException; + method public final android.content.res.AssetFileDescriptor openTypedAssetFileDescriptor(android.net.Uri, java.lang.String, android.os.Bundle) throws java.io.FileNotFoundException, android.os.RemoteException; + method public final android.content.res.AssetFileDescriptor openTypedAssetFileDescriptor(android.net.Uri, java.lang.String, android.os.Bundle, android.os.CancellationSignal) throws java.io.FileNotFoundException, android.os.RemoteException; + method public android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String) throws android.os.RemoteException; + method public android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, android.os.CancellationSignal) throws android.os.RemoteException; + method public boolean release(); + method public final android.net.Uri uncanonicalize(android.net.Uri) throws android.os.RemoteException; + method public int update(android.net.Uri, android.content.ContentValues, java.lang.String, java.lang.String[]) throws android.os.RemoteException; + } + + public class ContentProviderOperation implements android.os.Parcelable { + method public android.content.ContentProviderResult apply(android.content.ContentProvider, android.content.ContentProviderResult[], int) throws android.content.OperationApplicationException; + method public int describeContents(); + method public android.net.Uri getUri(); + method public boolean isReadOperation(); + method public boolean isWriteOperation(); + method public boolean isYieldAllowed(); + method public static android.content.ContentProviderOperation.Builder newAssertQuery(android.net.Uri); + method public static android.content.ContentProviderOperation.Builder newDelete(android.net.Uri); + method public static android.content.ContentProviderOperation.Builder newInsert(android.net.Uri); + method public static android.content.ContentProviderOperation.Builder newUpdate(android.net.Uri); + method public java.lang.String[] resolveSelectionArgsBackReferences(android.content.ContentProviderResult[], int); + method public android.content.ContentValues resolveValueBackReferences(android.content.ContentProviderResult[], int); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public static class ContentProviderOperation.Builder { + method public android.content.ContentProviderOperation build(); + method public android.content.ContentProviderOperation.Builder withExpectedCount(int); + method public android.content.ContentProviderOperation.Builder withSelection(java.lang.String, java.lang.String[]); + method public android.content.ContentProviderOperation.Builder withSelectionBackReference(int, int); + method public android.content.ContentProviderOperation.Builder withValue(java.lang.String, java.lang.Object); + method public android.content.ContentProviderOperation.Builder withValueBackReference(java.lang.String, int); + method public android.content.ContentProviderOperation.Builder withValueBackReferences(android.content.ContentValues); + method public android.content.ContentProviderOperation.Builder withValues(android.content.ContentValues); + method public android.content.ContentProviderOperation.Builder withYieldAllowed(boolean); + } + + public class ContentProviderResult implements android.os.Parcelable { + ctor public ContentProviderResult(android.net.Uri); + ctor public ContentProviderResult(int); + ctor public ContentProviderResult(android.os.Parcel); + method public int describeContents(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public final java.lang.Integer count; + field public final android.net.Uri uri; + } + + public class ContentQueryMap extends java.util.Observable { + ctor public ContentQueryMap(android.database.Cursor, java.lang.String, boolean, android.os.Handler); + method public synchronized void close(); + method public synchronized java.util.Map getRows(); + method public synchronized android.content.ContentValues getValues(java.lang.String); + method public void requery(); + method public void setKeepUpdated(boolean); + } + + public abstract class ContentResolver { + ctor public ContentResolver(android.content.Context); + method public final android.content.ContentProviderClient acquireContentProviderClient(android.net.Uri); + method public final android.content.ContentProviderClient acquireContentProviderClient(java.lang.String); + method public final android.content.ContentProviderClient acquireUnstableContentProviderClient(android.net.Uri); + method public final android.content.ContentProviderClient acquireUnstableContentProviderClient(java.lang.String); + method public static void addPeriodicSync(android.accounts.Account, java.lang.String, android.os.Bundle, long); + method public static java.lang.Object addStatusChangeListener(int, android.content.SyncStatusObserver); + method public android.content.ContentProviderResult[] applyBatch(java.lang.String, java.util.ArrayList) throws android.content.OperationApplicationException, android.os.RemoteException; + method public final int bulkInsert(android.net.Uri, android.content.ContentValues[]); + method public final android.os.Bundle call(android.net.Uri, java.lang.String, java.lang.String, android.os.Bundle); + method public deprecated void cancelSync(android.net.Uri); + method public static void cancelSync(android.accounts.Account, java.lang.String); + method public static void cancelSync(android.content.SyncRequest); + method public final android.net.Uri canonicalize(android.net.Uri); + method public final int delete(android.net.Uri, java.lang.String, java.lang.String[]); + method public static deprecated android.content.SyncInfo getCurrentSync(); + method public static java.util.List getCurrentSyncs(); + method public static int getIsSyncable(android.accounts.Account, java.lang.String); + method public static boolean getMasterSyncAutomatically(); + method public java.util.List getOutgoingPersistedUriPermissions(); + method public static java.util.List getPeriodicSyncs(android.accounts.Account, java.lang.String); + method public java.util.List getPersistedUriPermissions(); + method public java.lang.String[] getStreamTypes(android.net.Uri, java.lang.String); + method public static android.content.SyncAdapterType[] getSyncAdapterTypes(); + method public static boolean getSyncAutomatically(android.accounts.Account, java.lang.String); + method public final java.lang.String getType(android.net.Uri); + method public final android.net.Uri insert(android.net.Uri, android.content.ContentValues); + method public static boolean isSyncActive(android.accounts.Account, java.lang.String); + method public static boolean isSyncPending(android.accounts.Account, java.lang.String); + method public void notifyChange(android.net.Uri, android.database.ContentObserver); + method public void notifyChange(android.net.Uri, android.database.ContentObserver, boolean); + method public final android.content.res.AssetFileDescriptor openAssetFileDescriptor(android.net.Uri, java.lang.String) throws java.io.FileNotFoundException; + method public final android.content.res.AssetFileDescriptor openAssetFileDescriptor(android.net.Uri, java.lang.String, android.os.CancellationSignal) throws java.io.FileNotFoundException; + method public final android.os.ParcelFileDescriptor openFileDescriptor(android.net.Uri, java.lang.String) throws java.io.FileNotFoundException; + method public final android.os.ParcelFileDescriptor openFileDescriptor(android.net.Uri, java.lang.String, android.os.CancellationSignal) throws java.io.FileNotFoundException; + method public final java.io.InputStream openInputStream(android.net.Uri) throws java.io.FileNotFoundException; + method public final java.io.OutputStream openOutputStream(android.net.Uri) throws java.io.FileNotFoundException; + method public final java.io.OutputStream openOutputStream(android.net.Uri, java.lang.String) throws java.io.FileNotFoundException; + method public final android.content.res.AssetFileDescriptor openTypedAssetFileDescriptor(android.net.Uri, java.lang.String, android.os.Bundle) throws java.io.FileNotFoundException; + method public final android.content.res.AssetFileDescriptor openTypedAssetFileDescriptor(android.net.Uri, java.lang.String, android.os.Bundle, android.os.CancellationSignal) throws java.io.FileNotFoundException; + method public final android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String); + method public final android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, android.os.CancellationSignal); + method public final void registerContentObserver(android.net.Uri, boolean, android.database.ContentObserver); + method public void releasePersistableUriPermission(android.net.Uri, int); + method public static void removePeriodicSync(android.accounts.Account, java.lang.String, android.os.Bundle); + method public static void removeStatusChangeListener(java.lang.Object); + method public static void requestSync(android.accounts.Account, java.lang.String, android.os.Bundle); + method public static void requestSync(android.content.SyncRequest); + method public static void setIsSyncable(android.accounts.Account, java.lang.String, int); + method public static void setMasterSyncAutomatically(boolean); + method public static void setSyncAutomatically(android.accounts.Account, java.lang.String, boolean); + method public deprecated void startSync(android.net.Uri, android.os.Bundle); + method public void takePersistableUriPermission(android.net.Uri, int); + method public final android.net.Uri uncanonicalize(android.net.Uri); + method public final void unregisterContentObserver(android.database.ContentObserver); + method public final int update(android.net.Uri, android.content.ContentValues, java.lang.String, java.lang.String[]); + method public static void validateSyncExtrasBundle(android.os.Bundle); + field public static final java.lang.String ANY_CURSOR_ITEM_TYPE = "vnd.android.cursor.item/*"; + field public static final java.lang.String CURSOR_DIR_BASE_TYPE = "vnd.android.cursor.dir"; + field public static final java.lang.String CURSOR_ITEM_BASE_TYPE = "vnd.android.cursor.item"; + field public static final java.lang.String EXTRA_SIZE = "android.content.extra.SIZE"; + field public static final java.lang.String SCHEME_ANDROID_RESOURCE = "android.resource"; + field public static final java.lang.String SCHEME_CONTENT = "content"; + field public static final java.lang.String SCHEME_FILE = "file"; + field public static final deprecated java.lang.String SYNC_EXTRAS_ACCOUNT = "account"; + field public static final java.lang.String SYNC_EXTRAS_DISCARD_LOCAL_DELETIONS = "discard_deletions"; + field public static final java.lang.String SYNC_EXTRAS_DO_NOT_RETRY = "do_not_retry"; + field public static final java.lang.String SYNC_EXTRAS_EXPEDITED = "expedited"; + field public static final deprecated java.lang.String SYNC_EXTRAS_FORCE = "force"; + field public static final java.lang.String SYNC_EXTRAS_IGNORE_BACKOFF = "ignore_backoff"; + field public static final java.lang.String SYNC_EXTRAS_IGNORE_SETTINGS = "ignore_settings"; + field public static final java.lang.String SYNC_EXTRAS_INITIALIZE = "initialize"; + field public static final java.lang.String SYNC_EXTRAS_MANUAL = "force"; + field public static final java.lang.String SYNC_EXTRAS_OVERRIDE_TOO_MANY_DELETIONS = "deletions_override"; + field public static final java.lang.String SYNC_EXTRAS_UPLOAD = "upload"; + field public static final int SYNC_OBSERVER_TYPE_ACTIVE = 4; // 0x4 + field public static final int SYNC_OBSERVER_TYPE_PENDING = 2; // 0x2 + field public static final int SYNC_OBSERVER_TYPE_SETTINGS = 1; // 0x1 + } + + public class ContentUris { + ctor public ContentUris(); + method public static android.net.Uri.Builder appendId(android.net.Uri.Builder, long); + method public static long parseId(android.net.Uri); + method public static android.net.Uri withAppendedId(android.net.Uri, long); + } + + public final class ContentValues implements android.os.Parcelable { + ctor public ContentValues(); + ctor public ContentValues(int); + ctor public ContentValues(android.content.ContentValues); + method public void clear(); + method public boolean containsKey(java.lang.String); + method public int describeContents(); + method public java.lang.Object get(java.lang.String); + method public java.lang.Boolean getAsBoolean(java.lang.String); + method public java.lang.Byte getAsByte(java.lang.String); + method public byte[] getAsByteArray(java.lang.String); + method public java.lang.Double getAsDouble(java.lang.String); + method public java.lang.Float getAsFloat(java.lang.String); + method public java.lang.Integer getAsInteger(java.lang.String); + method public java.lang.Long getAsLong(java.lang.String); + method public java.lang.Short getAsShort(java.lang.String); + method public java.lang.String getAsString(java.lang.String); + method public java.util.Set keySet(); + method public void put(java.lang.String, java.lang.String); + method public void put(java.lang.String, java.lang.Byte); + method public void put(java.lang.String, java.lang.Short); + method public void put(java.lang.String, java.lang.Integer); + method public void put(java.lang.String, java.lang.Long); + method public void put(java.lang.String, java.lang.Float); + method public void put(java.lang.String, java.lang.Double); + method public void put(java.lang.String, java.lang.Boolean); + method public void put(java.lang.String, byte[]); + method public void putAll(android.content.ContentValues); + method public void putNull(java.lang.String); + method public void remove(java.lang.String); + method public int size(); + method public java.util.Set> valueSet(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final java.lang.String TAG = "ContentValues"; + } + + public abstract class Context { + ctor public Context(); + method public abstract boolean bindService(android.content.Intent, android.content.ServiceConnection, int); + method public boolean bindServiceAsUser(android.content.Intent, android.content.ServiceConnection, int, android.os.UserHandle); + method public abstract int checkCallingOrSelfPermission(java.lang.String); + method public abstract int checkCallingOrSelfUriPermission(android.net.Uri, int); + method public abstract int checkCallingPermission(java.lang.String); + method public abstract int checkCallingUriPermission(android.net.Uri, int); + method public abstract int checkPermission(java.lang.String, int, int); + method public abstract int checkUriPermission(android.net.Uri, int, int, int); + method public abstract int checkUriPermission(android.net.Uri, java.lang.String, java.lang.String, int, int, int); + method public abstract deprecated void clearWallpaper() throws java.io.IOException; + method public abstract android.content.Context createConfigurationContext(android.content.res.Configuration); + method public abstract android.content.Context createDisplayContext(android.view.Display); + method public abstract android.content.Context createPackageContext(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException; + method public abstract java.lang.String[] databaseList(); + method public abstract boolean deleteDatabase(java.lang.String); + method public abstract boolean deleteFile(java.lang.String); + method public abstract void enforceCallingOrSelfPermission(java.lang.String, java.lang.String); + method public abstract void enforceCallingOrSelfUriPermission(android.net.Uri, int, java.lang.String); + method public abstract void enforceCallingPermission(java.lang.String, java.lang.String); + method public abstract void enforceCallingUriPermission(android.net.Uri, int, java.lang.String); + method public abstract void enforcePermission(java.lang.String, int, int, java.lang.String); + method public abstract void enforceUriPermission(android.net.Uri, int, int, int, java.lang.String); + method public abstract void enforceUriPermission(android.net.Uri, java.lang.String, java.lang.String, int, int, int, java.lang.String); + method public abstract java.lang.String[] fileList(); + method public abstract android.content.Context getApplicationContext(); + method public abstract android.content.pm.ApplicationInfo getApplicationInfo(); + method public abstract android.content.res.AssetManager getAssets(); + method public abstract java.io.File getCacheDir(); + method public abstract java.lang.ClassLoader getClassLoader(); + method public abstract java.io.File getCodeCacheDir(); + method public abstract android.content.ContentResolver getContentResolver(); + method public abstract java.io.File getDatabasePath(java.lang.String); + method public abstract java.io.File getDir(java.lang.String, int); + method public final android.graphics.drawable.Drawable getDrawable(int); + method public abstract java.io.File getExternalCacheDir(); + method public abstract java.io.File[] getExternalCacheDirs(); + method public abstract java.io.File getExternalFilesDir(java.lang.String); + method public abstract java.io.File[] getExternalFilesDirs(java.lang.String); + method public abstract java.io.File[] getExternalMediaDirs(); + method public abstract java.io.File getFileStreamPath(java.lang.String); + method public abstract java.io.File getFilesDir(); + method public abstract android.os.Looper getMainLooper(); + method public abstract java.io.File getNoBackupFilesDir(); + method public abstract java.io.File getObbDir(); + method public abstract java.io.File[] getObbDirs(); + method public abstract java.lang.String getPackageCodePath(); + method public abstract android.content.pm.PackageManager getPackageManager(); + method public abstract java.lang.String getPackageName(); + method public abstract java.lang.String getPackageResourcePath(); + method public abstract android.content.res.Resources getResources(); + method public abstract android.content.SharedPreferences getSharedPreferences(java.lang.String, int); + method public final java.lang.String getString(int); + method public final java.lang.String getString(int, java.lang.Object...); + method public abstract java.lang.Object getSystemService(java.lang.String); + method public final java.lang.CharSequence getText(int); + method public abstract android.content.res.Resources.Theme getTheme(); + method public abstract deprecated android.graphics.drawable.Drawable getWallpaper(); + method public abstract deprecated int getWallpaperDesiredMinimumHeight(); + method public abstract deprecated int getWallpaperDesiredMinimumWidth(); + method public abstract void grantUriPermission(java.lang.String, android.net.Uri, int); + method public boolean isRestricted(); + method public final android.content.res.TypedArray obtainStyledAttributes(int[]); + method public final android.content.res.TypedArray obtainStyledAttributes(int, int[]) throws android.content.res.Resources.NotFoundException; + method public final android.content.res.TypedArray obtainStyledAttributes(android.util.AttributeSet, int[]); + method public final android.content.res.TypedArray obtainStyledAttributes(android.util.AttributeSet, int[], int, int); + method public abstract java.io.FileInputStream openFileInput(java.lang.String) throws java.io.FileNotFoundException; + method public abstract java.io.FileOutputStream openFileOutput(java.lang.String, int) throws java.io.FileNotFoundException; + method public abstract android.database.sqlite.SQLiteDatabase openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase.CursorFactory); + method public abstract android.database.sqlite.SQLiteDatabase openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase.CursorFactory, android.database.DatabaseErrorHandler); + method public abstract deprecated android.graphics.drawable.Drawable peekWallpaper(); + method public void registerComponentCallbacks(android.content.ComponentCallbacks); + method public abstract android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter); + method public abstract android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, java.lang.String, android.os.Handler); + method public abstract deprecated void removeStickyBroadcast(android.content.Intent); + method public abstract deprecated void removeStickyBroadcastAsUser(android.content.Intent, android.os.UserHandle); + method public abstract void revokeUriPermission(android.net.Uri, int); + method public abstract void sendBroadcast(android.content.Intent); + method public abstract void sendBroadcast(android.content.Intent, java.lang.String); + method public abstract void sendBroadcastAsUser(android.content.Intent, android.os.UserHandle); + method public abstract void sendBroadcastAsUser(android.content.Intent, android.os.UserHandle, java.lang.String); + method public abstract void sendOrderedBroadcast(android.content.Intent, java.lang.String); + method public abstract void sendOrderedBroadcast(android.content.Intent, java.lang.String, android.content.BroadcastReceiver, android.os.Handler, int, java.lang.String, android.os.Bundle); + method public abstract void sendOrderedBroadcastAsUser(android.content.Intent, android.os.UserHandle, java.lang.String, android.content.BroadcastReceiver, android.os.Handler, int, java.lang.String, android.os.Bundle); + method public abstract deprecated void sendStickyBroadcast(android.content.Intent); + method public abstract deprecated void sendStickyBroadcastAsUser(android.content.Intent, android.os.UserHandle); + method public abstract deprecated void sendStickyOrderedBroadcast(android.content.Intent, android.content.BroadcastReceiver, android.os.Handler, int, java.lang.String, android.os.Bundle); + method public abstract deprecated void sendStickyOrderedBroadcastAsUser(android.content.Intent, android.os.UserHandle, android.content.BroadcastReceiver, android.os.Handler, int, java.lang.String, android.os.Bundle); + method public abstract void setTheme(int); + method public abstract deprecated void setWallpaper(android.graphics.Bitmap) throws java.io.IOException; + method public abstract deprecated void setWallpaper(java.io.InputStream) throws java.io.IOException; + method public abstract void startActivities(android.content.Intent[]); + method public abstract void startActivities(android.content.Intent[], android.os.Bundle); + method public abstract void startActivity(android.content.Intent); + method public abstract void startActivity(android.content.Intent, android.os.Bundle); + method public abstract boolean startInstrumentation(android.content.ComponentName, java.lang.String, android.os.Bundle); + method public abstract void startIntentSender(android.content.IntentSender, android.content.Intent, int, int, int) throws android.content.IntentSender.SendIntentException; + method public abstract void startIntentSender(android.content.IntentSender, android.content.Intent, int, int, int, android.os.Bundle) throws android.content.IntentSender.SendIntentException; + method public abstract android.content.ComponentName startService(android.content.Intent); + method public abstract boolean stopService(android.content.Intent); + method public abstract void unbindService(android.content.ServiceConnection); + method public void unregisterComponentCallbacks(android.content.ComponentCallbacks); + method public abstract void unregisterReceiver(android.content.BroadcastReceiver); + field public static final java.lang.String ACCESSIBILITY_SERVICE = "accessibility"; + field public static final java.lang.String ACCOUNT_SERVICE = "account"; + field public static final java.lang.String ACTIVITY_SERVICE = "activity"; + field public static final java.lang.String ALARM_SERVICE = "alarm"; + field public static final java.lang.String APPWIDGET_SERVICE = "appwidget"; + field public static final java.lang.String APP_OPS_SERVICE = "appops"; + field public static final java.lang.String AUDIO_SERVICE = "audio"; + field public static final java.lang.String BACKUP_SERVICE = "backup"; + field public static final java.lang.String BATTERY_SERVICE = "batterymanager"; + field public static final int BIND_ABOVE_CLIENT = 8; // 0x8 + field public static final int BIND_ADJUST_WITH_ACTIVITY = 128; // 0x80 + field public static final int BIND_ALLOW_OOM_MANAGEMENT = 16; // 0x10 + field public static final int BIND_AUTO_CREATE = 1; // 0x1 + field public static final int BIND_DEBUG_UNBIND = 2; // 0x2 + field public static final int BIND_IMPORTANT = 64; // 0x40 + field public static final int BIND_NOT_FOREGROUND = 4; // 0x4 + field public static final int BIND_WAIVE_PRIORITY = 32; // 0x20 + field public static final java.lang.String BLUETOOTH_SERVICE = "bluetooth"; + field public static final java.lang.String CAMERA_SERVICE = "camera"; + field public static final java.lang.String CAPTIONING_SERVICE = "captioning"; + field public static final java.lang.String CLIPBOARD_SERVICE = "clipboard"; + field public static final java.lang.String CONNECTIVITY_SERVICE = "connectivity"; + field public static final java.lang.String CONSUMER_IR_SERVICE = "consumer_ir"; + field public static final int CONTEXT_IGNORE_SECURITY = 2; // 0x2 + field public static final int CONTEXT_INCLUDE_CODE = 1; // 0x1 + field public static final int CONTEXT_RESTRICTED = 4; // 0x4 + field public static final java.lang.String DEVICE_POLICY_SERVICE = "device_policy"; + field public static final java.lang.String DISPLAY_SERVICE = "display"; + field public static final java.lang.String DOWNLOAD_SERVICE = "download"; + field public static final java.lang.String DROPBOX_SERVICE = "dropbox"; + field public static final java.lang.String HDMI_CONTROL_SERVICE = "hdmi_control"; + field public static final java.lang.String INPUT_METHOD_SERVICE = "input_method"; + field public static final java.lang.String INPUT_SERVICE = "input"; + field public static final java.lang.String JOB_SCHEDULER_SERVICE = "jobscheduler"; + field public static final java.lang.String KEYGUARD_SERVICE = "keyguard"; + field public static final java.lang.String LAUNCHER_APPS_SERVICE = "launcherapps"; + field public static final java.lang.String LAYOUT_INFLATER_SERVICE = "layout_inflater"; + field public static final java.lang.String LOCATION_SERVICE = "location"; + field public static final java.lang.String MEDIA_PROJECTION_SERVICE = "media_projection"; + field public static final java.lang.String MEDIA_ROUTER_SERVICE = "media_router"; + field public static final java.lang.String MEDIA_SESSION_SERVICE = "media_session"; + field public static final int MODE_APPEND = 32768; // 0x8000 + field public static final int MODE_ENABLE_WRITE_AHEAD_LOGGING = 8; // 0x8 + field public static final int MODE_MULTI_PROCESS = 4; // 0x4 + field public static final int MODE_PRIVATE = 0; // 0x0 + field public static final deprecated int MODE_WORLD_READABLE = 1; // 0x1 + field public static final deprecated int MODE_WORLD_WRITEABLE = 2; // 0x2 + field public static final java.lang.String NETWORK_SCORE_SERVICE = "network_score"; + field public static final java.lang.String NFC_SERVICE = "nfc"; + field public static final java.lang.String NOTIFICATION_SERVICE = "notification"; + field public static final java.lang.String NSD_SERVICE = "servicediscovery"; + field public static final java.lang.String PERSISTENT_DATA_BLOCK_SERVICE = "persistent_data_block"; + field public static final java.lang.String POWER_SERVICE = "power"; + field public static final java.lang.String PRINT_SERVICE = "print"; + field public static final java.lang.String RESTRICTIONS_SERVICE = "restrictions"; + field public static final java.lang.String SEARCH_SERVICE = "search"; + field public static final java.lang.String SENSOR_SERVICE = "sensor"; + field public static final java.lang.String STORAGE_SERVICE = "storage"; + field public static final java.lang.String TELECOM_SERVICE = "telecom"; + field public static final java.lang.String TELEPHONY_SERVICE = "phone"; + field public static final java.lang.String TELEPHONY_SUBSCRIPTION_SERVICE = "telephony_subscription_service"; + field public static final java.lang.String TEXT_SERVICES_MANAGER_SERVICE = "textservices"; + field public static final java.lang.String TV_INPUT_SERVICE = "tv_input"; + field public static final java.lang.String UI_MODE_SERVICE = "uimode"; + field public static final java.lang.String USAGE_STATS_SERVICE = "usagestats"; + field public static final java.lang.String USB_SERVICE = "usb"; + field public static final java.lang.String USER_SERVICE = "user"; + field public static final java.lang.String VIBRATOR_SERVICE = "vibrator"; + field public static final java.lang.String WALLPAPER_SERVICE = "wallpaper"; + field public static final java.lang.String WIFI_P2P_SERVICE = "wifip2p"; + field public static final java.lang.String WIFI_RTT_SERVICE = "rttmanager"; + field public static final java.lang.String WIFI_SCANNING_SERVICE = "wifiscanner"; + field public static final java.lang.String WIFI_SERVICE = "wifi"; + field public static final java.lang.String WINDOW_SERVICE = "window"; + } + + public class ContextWrapper extends android.content.Context { + ctor public ContextWrapper(android.content.Context); + method protected void attachBaseContext(android.content.Context); + method public boolean bindService(android.content.Intent, android.content.ServiceConnection, int); + method public int checkCallingOrSelfPermission(java.lang.String); + method public int checkCallingOrSelfUriPermission(android.net.Uri, int); + method public int checkCallingPermission(java.lang.String); + method public int checkCallingUriPermission(android.net.Uri, int); + method public int checkPermission(java.lang.String, int, int); + method public int checkUriPermission(android.net.Uri, int, int, int); + method public int checkUriPermission(android.net.Uri, java.lang.String, java.lang.String, int, int, int); + method public void clearWallpaper() throws java.io.IOException; + method public android.content.Context createConfigurationContext(android.content.res.Configuration); + method public android.content.Context createDisplayContext(android.view.Display); + method public android.content.Context createPackageContext(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException; + method public java.lang.String[] databaseList(); + method public boolean deleteDatabase(java.lang.String); + method public boolean deleteFile(java.lang.String); + method public void enforceCallingOrSelfPermission(java.lang.String, java.lang.String); + method public void enforceCallingOrSelfUriPermission(android.net.Uri, int, java.lang.String); + method public void enforceCallingPermission(java.lang.String, java.lang.String); + method public void enforceCallingUriPermission(android.net.Uri, int, java.lang.String); + method public void enforcePermission(java.lang.String, int, int, java.lang.String); + method public void enforceUriPermission(android.net.Uri, int, int, int, java.lang.String); + method public void enforceUriPermission(android.net.Uri, java.lang.String, java.lang.String, int, int, int, java.lang.String); + method public java.lang.String[] fileList(); + method public android.content.Context getApplicationContext(); + method public android.content.pm.ApplicationInfo getApplicationInfo(); + method public android.content.res.AssetManager getAssets(); + method public android.content.Context getBaseContext(); + method public java.io.File getCacheDir(); + method public java.lang.ClassLoader getClassLoader(); + method public java.io.File getCodeCacheDir(); + method public android.content.ContentResolver getContentResolver(); + method public java.io.File getDatabasePath(java.lang.String); + method public java.io.File getDir(java.lang.String, int); + method public java.io.File getExternalCacheDir(); + method public java.io.File[] getExternalCacheDirs(); + method public java.io.File getExternalFilesDir(java.lang.String); + method public java.io.File[] getExternalFilesDirs(java.lang.String); + method public java.io.File[] getExternalMediaDirs(); + method public java.io.File getFileStreamPath(java.lang.String); + method public java.io.File getFilesDir(); + method public android.os.Looper getMainLooper(); + method public java.io.File getNoBackupFilesDir(); + method public java.io.File getObbDir(); + method public java.io.File[] getObbDirs(); + method public java.lang.String getPackageCodePath(); + method public android.content.pm.PackageManager getPackageManager(); + method public java.lang.String getPackageName(); + method public java.lang.String getPackageResourcePath(); + method public android.content.res.Resources getResources(); + method public android.content.SharedPreferences getSharedPreferences(java.lang.String, int); + method public java.lang.Object getSystemService(java.lang.String); + method public android.content.res.Resources.Theme getTheme(); + method public android.graphics.drawable.Drawable getWallpaper(); + method public int getWallpaperDesiredMinimumHeight(); + method public int getWallpaperDesiredMinimumWidth(); + method public void grantUriPermission(java.lang.String, android.net.Uri, int); + method public java.io.FileInputStream openFileInput(java.lang.String) throws java.io.FileNotFoundException; + method public java.io.FileOutputStream openFileOutput(java.lang.String, int) throws java.io.FileNotFoundException; + method public android.database.sqlite.SQLiteDatabase openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase.CursorFactory); + method public android.database.sqlite.SQLiteDatabase openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase.CursorFactory, android.database.DatabaseErrorHandler); + method public android.graphics.drawable.Drawable peekWallpaper(); + method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter); + method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, java.lang.String, android.os.Handler); + method public void removeStickyBroadcast(android.content.Intent); + method public void removeStickyBroadcastAsUser(android.content.Intent, android.os.UserHandle); + method public void revokeUriPermission(android.net.Uri, int); + method public void sendBroadcast(android.content.Intent); + method public void sendBroadcast(android.content.Intent, java.lang.String); + method public void sendBroadcastAsUser(android.content.Intent, android.os.UserHandle); + method public void sendBroadcastAsUser(android.content.Intent, android.os.UserHandle, java.lang.String); + method public void sendOrderedBroadcast(android.content.Intent, java.lang.String); + method public void sendOrderedBroadcast(android.content.Intent, java.lang.String, android.content.BroadcastReceiver, android.os.Handler, int, java.lang.String, android.os.Bundle); + method public void sendOrderedBroadcastAsUser(android.content.Intent, android.os.UserHandle, java.lang.String, android.content.BroadcastReceiver, android.os.Handler, int, java.lang.String, android.os.Bundle); + method public void sendStickyBroadcast(android.content.Intent); + method public void sendStickyBroadcastAsUser(android.content.Intent, android.os.UserHandle); + method public void sendStickyOrderedBroadcast(android.content.Intent, android.content.BroadcastReceiver, android.os.Handler, int, java.lang.String, android.os.Bundle); + method public void sendStickyOrderedBroadcastAsUser(android.content.Intent, android.os.UserHandle, android.content.BroadcastReceiver, android.os.Handler, int, java.lang.String, android.os.Bundle); + method public void setTheme(int); + method public void setWallpaper(android.graphics.Bitmap) throws java.io.IOException; + method public void setWallpaper(java.io.InputStream) throws java.io.IOException; + method public void startActivities(android.content.Intent[]); + method public void startActivities(android.content.Intent[], android.os.Bundle); + method public void startActivity(android.content.Intent); + method public void startActivity(android.content.Intent, android.os.Bundle); + method public boolean startInstrumentation(android.content.ComponentName, java.lang.String, android.os.Bundle); + method public void startIntentSender(android.content.IntentSender, android.content.Intent, int, int, int) throws android.content.IntentSender.SendIntentException; + method public void startIntentSender(android.content.IntentSender, android.content.Intent, int, int, int, android.os.Bundle) throws android.content.IntentSender.SendIntentException; + method public android.content.ComponentName startService(android.content.Intent); + method public boolean stopService(android.content.Intent); + method public void unbindService(android.content.ServiceConnection); + method public void unregisterReceiver(android.content.BroadcastReceiver); + } + + public class CursorLoader extends android.content.AsyncTaskLoader { + ctor public CursorLoader(android.content.Context); + ctor public CursorLoader(android.content.Context, android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String); + method public void deliverResult(android.database.Cursor); + method public java.lang.String[] getProjection(); + method public java.lang.String getSelection(); + method public java.lang.String[] getSelectionArgs(); + method public java.lang.String getSortOrder(); + method public android.net.Uri getUri(); + method public android.database.Cursor loadInBackground(); + method public void onCanceled(android.database.Cursor); + method public void setProjection(java.lang.String[]); + method public void setSelection(java.lang.String); + method public void setSelectionArgs(java.lang.String[]); + method public void setSortOrder(java.lang.String); + method public void setUri(android.net.Uri); + } + + public abstract interface DialogInterface { + method public abstract void cancel(); + method public abstract void dismiss(); + field public static final deprecated int BUTTON1 = -1; // 0xffffffff + field public static final deprecated int BUTTON2 = -2; // 0xfffffffe + field public static final deprecated int BUTTON3 = -3; // 0xfffffffd + field public static final int BUTTON_NEGATIVE = -2; // 0xfffffffe + field public static final int BUTTON_NEUTRAL = -3; // 0xfffffffd + field public static final int BUTTON_POSITIVE = -1; // 0xffffffff + } + + public static abstract interface DialogInterface.OnCancelListener { + method public abstract void onCancel(android.content.DialogInterface); + } + + public static abstract interface DialogInterface.OnClickListener { + method public abstract void onClick(android.content.DialogInterface, int); + } + + public static abstract interface DialogInterface.OnDismissListener { + method public abstract void onDismiss(android.content.DialogInterface); + } + + public static abstract interface DialogInterface.OnKeyListener { + method public abstract boolean onKey(android.content.DialogInterface, int, android.view.KeyEvent); + } + + public static abstract interface DialogInterface.OnMultiChoiceClickListener { + method public abstract void onClick(android.content.DialogInterface, int, boolean); + } + + public static abstract interface DialogInterface.OnShowListener { + method public abstract void onShow(android.content.DialogInterface); + } + + public final class Entity { + ctor public Entity(android.content.ContentValues); + method public void addSubValue(android.net.Uri, android.content.ContentValues); + method public android.content.ContentValues getEntityValues(); + method public java.util.ArrayList getSubValues(); + } + + public static class Entity.NamedContentValues { + ctor public Entity.NamedContentValues(android.net.Uri, android.content.ContentValues); + field public final android.net.Uri uri; + field public final android.content.ContentValues values; + } + + public abstract interface EntityIterator implements java.util.Iterator { + method public abstract void close(); + method public abstract void reset(); + } + + public class Intent implements java.lang.Cloneable android.os.Parcelable { + ctor public Intent(); + ctor public Intent(android.content.Intent); + ctor public Intent(java.lang.String); + ctor public Intent(java.lang.String, android.net.Uri); + ctor public Intent(android.content.Context, java.lang.Class); + ctor public Intent(java.lang.String, android.net.Uri, android.content.Context, java.lang.Class); + method public android.content.Intent addCategory(java.lang.String); + method public android.content.Intent addFlags(int); + method public java.lang.Object clone(); + method public android.content.Intent cloneFilter(); + method public static android.content.Intent createChooser(android.content.Intent, java.lang.CharSequence); + method public static android.content.Intent createChooser(android.content.Intent, java.lang.CharSequence, android.content.IntentSender); + method public int describeContents(); + method public int fillIn(android.content.Intent, int); + method public boolean filterEquals(android.content.Intent); + method public int filterHashCode(); + method public java.lang.String getAction(); + method public boolean[] getBooleanArrayExtra(java.lang.String); + method public boolean getBooleanExtra(java.lang.String, boolean); + method public android.os.Bundle getBundleExtra(java.lang.String); + method public byte[] getByteArrayExtra(java.lang.String); + method public byte getByteExtra(java.lang.String, byte); + method public java.util.Set getCategories(); + method public char[] getCharArrayExtra(java.lang.String); + method public char getCharExtra(java.lang.String, char); + method public java.lang.CharSequence[] getCharSequenceArrayExtra(java.lang.String); + method public java.util.ArrayList getCharSequenceArrayListExtra(java.lang.String); + method public java.lang.CharSequence getCharSequenceExtra(java.lang.String); + method public android.content.ClipData getClipData(); + method public android.content.ComponentName getComponent(); + method public android.net.Uri getData(); + method public java.lang.String getDataString(); + method public double[] getDoubleArrayExtra(java.lang.String); + method public double getDoubleExtra(java.lang.String, double); + method public android.os.Bundle getExtras(); + method public int getFlags(); + method public float[] getFloatArrayExtra(java.lang.String); + method public float getFloatExtra(java.lang.String, float); + method public int[] getIntArrayExtra(java.lang.String); + method public int getIntExtra(java.lang.String, int); + method public java.util.ArrayList getIntegerArrayListExtra(java.lang.String); + method public static deprecated android.content.Intent getIntent(java.lang.String) throws java.net.URISyntaxException; + method public static android.content.Intent getIntentOld(java.lang.String) throws java.net.URISyntaxException; + method public long[] getLongArrayExtra(java.lang.String); + method public long getLongExtra(java.lang.String, long); + method public java.lang.String getPackage(); + method public android.os.Parcelable[] getParcelableArrayExtra(java.lang.String); + method public java.util.ArrayList getParcelableArrayListExtra(java.lang.String); + method public T getParcelableExtra(java.lang.String); + method public java.lang.String getScheme(); + method public android.content.Intent getSelector(); + method public java.io.Serializable getSerializableExtra(java.lang.String); + method public short[] getShortArrayExtra(java.lang.String); + method public short getShortExtra(java.lang.String, short); + method public android.graphics.Rect getSourceBounds(); + method public java.lang.String[] getStringArrayExtra(java.lang.String); + method public java.util.ArrayList getStringArrayListExtra(java.lang.String); + method public java.lang.String getStringExtra(java.lang.String); + method public java.lang.String getType(); + method public boolean hasCategory(java.lang.String); + method public boolean hasExtra(java.lang.String); + method public boolean hasFileDescriptors(); + method public static android.content.Intent makeMainActivity(android.content.ComponentName); + method public static android.content.Intent makeMainSelectorActivity(java.lang.String, java.lang.String); + method public static android.content.Intent makeRestartActivityTask(android.content.ComponentName); + method public static java.lang.String normalizeMimeType(java.lang.String); + method public static android.content.Intent parseIntent(android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException; + method public static android.content.Intent parseUri(java.lang.String, int) throws java.net.URISyntaxException; + method public android.content.Intent putCharSequenceArrayListExtra(java.lang.String, java.util.ArrayList); + method public android.content.Intent putExtra(java.lang.String, boolean); + method public android.content.Intent putExtra(java.lang.String, byte); + method public android.content.Intent putExtra(java.lang.String, char); + method public android.content.Intent putExtra(java.lang.String, short); + method public android.content.Intent putExtra(java.lang.String, int); + method public android.content.Intent putExtra(java.lang.String, long); + method public android.content.Intent putExtra(java.lang.String, float); + method public android.content.Intent putExtra(java.lang.String, double); + method public android.content.Intent putExtra(java.lang.String, java.lang.String); + method public android.content.Intent putExtra(java.lang.String, java.lang.CharSequence); + method public android.content.Intent putExtra(java.lang.String, android.os.Parcelable); + method public android.content.Intent putExtra(java.lang.String, android.os.Parcelable[]); + method public android.content.Intent putExtra(java.lang.String, java.io.Serializable); + method public android.content.Intent putExtra(java.lang.String, boolean[]); + method public android.content.Intent putExtra(java.lang.String, byte[]); + method public android.content.Intent putExtra(java.lang.String, short[]); + method public android.content.Intent putExtra(java.lang.String, char[]); + method public android.content.Intent putExtra(java.lang.String, int[]); + method public android.content.Intent putExtra(java.lang.String, long[]); + method public android.content.Intent putExtra(java.lang.String, float[]); + method public android.content.Intent putExtra(java.lang.String, double[]); + method public android.content.Intent putExtra(java.lang.String, java.lang.String[]); + method public android.content.Intent putExtra(java.lang.String, java.lang.CharSequence[]); + method public android.content.Intent putExtra(java.lang.String, android.os.Bundle); + method public android.content.Intent putExtras(android.content.Intent); + method public android.content.Intent putExtras(android.os.Bundle); + method public android.content.Intent putIntegerArrayListExtra(java.lang.String, java.util.ArrayList); + method public android.content.Intent putParcelableArrayListExtra(java.lang.String, java.util.ArrayList); + method public android.content.Intent putStringArrayListExtra(java.lang.String, java.util.ArrayList); + method public void readFromParcel(android.os.Parcel); + method public void removeCategory(java.lang.String); + method public void removeExtra(java.lang.String); + method public android.content.Intent replaceExtras(android.content.Intent); + method public android.content.Intent replaceExtras(android.os.Bundle); + method public android.content.ComponentName resolveActivity(android.content.pm.PackageManager); + method public android.content.pm.ActivityInfo resolveActivityInfo(android.content.pm.PackageManager, int); + method public java.lang.String resolveType(android.content.Context); + method public java.lang.String resolveType(android.content.ContentResolver); + method public java.lang.String resolveTypeIfNeeded(android.content.ContentResolver); + method public android.content.Intent setAction(java.lang.String); + method public android.content.Intent setClass(android.content.Context, java.lang.Class); + method public android.content.Intent setClassName(android.content.Context, java.lang.String); + method public android.content.Intent setClassName(java.lang.String, java.lang.String); + method public void setClipData(android.content.ClipData); + method public android.content.Intent setComponent(android.content.ComponentName); + method public android.content.Intent setData(android.net.Uri); + method public android.content.Intent setDataAndNormalize(android.net.Uri); + method public android.content.Intent setDataAndType(android.net.Uri, java.lang.String); + method public android.content.Intent setDataAndTypeAndNormalize(android.net.Uri, java.lang.String); + method public void setExtrasClassLoader(java.lang.ClassLoader); + method public android.content.Intent setFlags(int); + method public android.content.Intent setPackage(java.lang.String); + method public void setSelector(android.content.Intent); + method public void setSourceBounds(android.graphics.Rect); + method public android.content.Intent setType(java.lang.String); + method public android.content.Intent setTypeAndNormalize(java.lang.String); + method public deprecated java.lang.String toURI(); + method public java.lang.String toUri(int); + method public void writeToParcel(android.os.Parcel, int); + field public static final java.lang.String ACTION_AIRPLANE_MODE_CHANGED = "android.intent.action.AIRPLANE_MODE"; + field public static final java.lang.String ACTION_ALL_APPS = "android.intent.action.ALL_APPS"; + field public static final java.lang.String ACTION_ANSWER = "android.intent.action.ANSWER"; + field public static final java.lang.String ACTION_APPLICATION_RESTRICTIONS_CHANGED = "android.intent.action.APPLICATION_RESTRICTIONS_CHANGED"; + field public static final java.lang.String ACTION_APP_ERROR = "android.intent.action.APP_ERROR"; + field public static final java.lang.String ACTION_ASSIST = "android.intent.action.ASSIST"; + field public static final java.lang.String ACTION_ATTACH_DATA = "android.intent.action.ATTACH_DATA"; + field public static final java.lang.String ACTION_BATTERY_CHANGED = "android.intent.action.BATTERY_CHANGED"; + field public static final java.lang.String ACTION_BATTERY_LOW = "android.intent.action.BATTERY_LOW"; + field public static final java.lang.String ACTION_BATTERY_OKAY = "android.intent.action.BATTERY_OKAY"; + field public static final java.lang.String ACTION_BOOT_COMPLETED = "android.intent.action.BOOT_COMPLETED"; + field public static final java.lang.String ACTION_BUG_REPORT = "android.intent.action.BUG_REPORT"; + field public static final java.lang.String ACTION_CALL = "android.intent.action.CALL"; + field public static final java.lang.String ACTION_CALL_BUTTON = "android.intent.action.CALL_BUTTON"; + field public static final java.lang.String ACTION_CAMERA_BUTTON = "android.intent.action.CAMERA_BUTTON"; + field public static final java.lang.String ACTION_CHOOSER = "android.intent.action.CHOOSER"; + field public static final java.lang.String ACTION_CLOSE_SYSTEM_DIALOGS = "android.intent.action.CLOSE_SYSTEM_DIALOGS"; + field public static final java.lang.String ACTION_CONFIGURATION_CHANGED = "android.intent.action.CONFIGURATION_CHANGED"; + field public static final java.lang.String ACTION_CREATE_DOCUMENT = "android.intent.action.CREATE_DOCUMENT"; + field public static final java.lang.String ACTION_CREATE_SHORTCUT = "android.intent.action.CREATE_SHORTCUT"; + field public static final java.lang.String ACTION_DATE_CHANGED = "android.intent.action.DATE_CHANGED"; + field public static final java.lang.String ACTION_DEFAULT = "android.intent.action.VIEW"; + field public static final java.lang.String ACTION_DELETE = "android.intent.action.DELETE"; + field public static final java.lang.String ACTION_DEVICE_STORAGE_LOW = "android.intent.action.DEVICE_STORAGE_LOW"; + field public static final java.lang.String ACTION_DEVICE_STORAGE_OK = "android.intent.action.DEVICE_STORAGE_OK"; + field public static final java.lang.String ACTION_DIAL = "android.intent.action.DIAL"; + field public static final java.lang.String ACTION_DOCK_EVENT = "android.intent.action.DOCK_EVENT"; + field public static final java.lang.String ACTION_DREAMING_STARTED = "android.intent.action.DREAMING_STARTED"; + field public static final java.lang.String ACTION_DREAMING_STOPPED = "android.intent.action.DREAMING_STOPPED"; + field public static final java.lang.String ACTION_EDIT = "android.intent.action.EDIT"; + field public static final java.lang.String ACTION_EXTERNAL_APPLICATIONS_AVAILABLE = "android.intent.action.EXTERNAL_APPLICATIONS_AVAILABLE"; + field public static final java.lang.String ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE = "android.intent.action.EXTERNAL_APPLICATIONS_UNAVAILABLE"; + field public static final java.lang.String ACTION_FACTORY_TEST = "android.intent.action.FACTORY_TEST"; + field public static final java.lang.String ACTION_GET_CONTENT = "android.intent.action.GET_CONTENT"; + field public static final java.lang.String ACTION_GET_RESTRICTION_ENTRIES = "android.intent.action.GET_RESTRICTION_ENTRIES"; + field public static final java.lang.String ACTION_GTALK_SERVICE_CONNECTED = "android.intent.action.GTALK_CONNECTED"; + field public static final java.lang.String ACTION_GTALK_SERVICE_DISCONNECTED = "android.intent.action.GTALK_DISCONNECTED"; + field public static final java.lang.String ACTION_HEADSET_PLUG = "android.intent.action.HEADSET_PLUG"; + field public static final java.lang.String ACTION_INPUT_METHOD_CHANGED = "android.intent.action.INPUT_METHOD_CHANGED"; + field public static final java.lang.String ACTION_INSERT = "android.intent.action.INSERT"; + field public static final java.lang.String ACTION_INSERT_OR_EDIT = "android.intent.action.INSERT_OR_EDIT"; + field public static final java.lang.String ACTION_INSTALL_PACKAGE = "android.intent.action.INSTALL_PACKAGE"; + field public static final java.lang.String ACTION_LOCALE_CHANGED = "android.intent.action.LOCALE_CHANGED"; + field public static final java.lang.String ACTION_MAIN = "android.intent.action.MAIN"; + field public static final java.lang.String ACTION_MANAGED_PROFILE_ADDED = "android.intent.action.MANAGED_PROFILE_ADDED"; + field public static final java.lang.String ACTION_MANAGED_PROFILE_REMOVED = "android.intent.action.MANAGED_PROFILE_REMOVED"; + field public static final java.lang.String ACTION_MANAGE_NETWORK_USAGE = "android.intent.action.MANAGE_NETWORK_USAGE"; + field public static final java.lang.String ACTION_MANAGE_PACKAGE_STORAGE = "android.intent.action.MANAGE_PACKAGE_STORAGE"; + field public static final java.lang.String ACTION_MEDIA_BAD_REMOVAL = "android.intent.action.MEDIA_BAD_REMOVAL"; + field public static final java.lang.String ACTION_MEDIA_BUTTON = "android.intent.action.MEDIA_BUTTON"; + field public static final java.lang.String ACTION_MEDIA_CHECKING = "android.intent.action.MEDIA_CHECKING"; + field public static final java.lang.String ACTION_MEDIA_EJECT = "android.intent.action.MEDIA_EJECT"; + field public static final java.lang.String ACTION_MEDIA_MOUNTED = "android.intent.action.MEDIA_MOUNTED"; + field public static final java.lang.String ACTION_MEDIA_NOFS = "android.intent.action.MEDIA_NOFS"; + field public static final java.lang.String ACTION_MEDIA_REMOVED = "android.intent.action.MEDIA_REMOVED"; + field public static final java.lang.String ACTION_MEDIA_SCANNER_FINISHED = "android.intent.action.MEDIA_SCANNER_FINISHED"; + field public static final java.lang.String ACTION_MEDIA_SCANNER_SCAN_FILE = "android.intent.action.MEDIA_SCANNER_SCAN_FILE"; + field public static final java.lang.String ACTION_MEDIA_SCANNER_STARTED = "android.intent.action.MEDIA_SCANNER_STARTED"; + field public static final java.lang.String ACTION_MEDIA_SHARED = "android.intent.action.MEDIA_SHARED"; + field public static final java.lang.String ACTION_MEDIA_UNMOUNTABLE = "android.intent.action.MEDIA_UNMOUNTABLE"; + field public static final java.lang.String ACTION_MEDIA_UNMOUNTED = "android.intent.action.MEDIA_UNMOUNTED"; + field public static final java.lang.String ACTION_MY_PACKAGE_REPLACED = "android.intent.action.MY_PACKAGE_REPLACED"; + field public static final java.lang.String ACTION_NEW_OUTGOING_CALL = "android.intent.action.NEW_OUTGOING_CALL"; + field public static final java.lang.String ACTION_OPEN_DOCUMENT = "android.intent.action.OPEN_DOCUMENT"; + field public static final java.lang.String ACTION_OPEN_DOCUMENT_TREE = "android.intent.action.OPEN_DOCUMENT_TREE"; + field public static final java.lang.String ACTION_PACKAGE_ADDED = "android.intent.action.PACKAGE_ADDED"; + field public static final java.lang.String ACTION_PACKAGE_CHANGED = "android.intent.action.PACKAGE_CHANGED"; + field public static final java.lang.String ACTION_PACKAGE_DATA_CLEARED = "android.intent.action.PACKAGE_DATA_CLEARED"; + field public static final java.lang.String ACTION_PACKAGE_FIRST_LAUNCH = "android.intent.action.PACKAGE_FIRST_LAUNCH"; + field public static final java.lang.String ACTION_PACKAGE_FULLY_REMOVED = "android.intent.action.PACKAGE_FULLY_REMOVED"; + field public static final deprecated java.lang.String ACTION_PACKAGE_INSTALL = "android.intent.action.PACKAGE_INSTALL"; + field public static final java.lang.String ACTION_PACKAGE_NEEDS_VERIFICATION = "android.intent.action.PACKAGE_NEEDS_VERIFICATION"; + field public static final java.lang.String ACTION_PACKAGE_REMOVED = "android.intent.action.PACKAGE_REMOVED"; + field public static final java.lang.String ACTION_PACKAGE_REPLACED = "android.intent.action.PACKAGE_REPLACED"; + field public static final java.lang.String ACTION_PACKAGE_RESTARTED = "android.intent.action.PACKAGE_RESTARTED"; + field public static final java.lang.String ACTION_PACKAGE_VERIFIED = "android.intent.action.PACKAGE_VERIFIED"; + field public static final java.lang.String ACTION_PASTE = "android.intent.action.PASTE"; + field public static final java.lang.String ACTION_PICK = "android.intent.action.PICK"; + field public static final java.lang.String ACTION_PICK_ACTIVITY = "android.intent.action.PICK_ACTIVITY"; + field public static final java.lang.String ACTION_POWER_CONNECTED = "android.intent.action.ACTION_POWER_CONNECTED"; + field public static final java.lang.String ACTION_POWER_DISCONNECTED = "android.intent.action.ACTION_POWER_DISCONNECTED"; + field public static final java.lang.String ACTION_POWER_USAGE_SUMMARY = "android.intent.action.POWER_USAGE_SUMMARY"; + field public static final java.lang.String ACTION_PROVIDER_CHANGED = "android.intent.action.PROVIDER_CHANGED"; + field public static final java.lang.String ACTION_QUICK_CLOCK = "android.intent.action.QUICK_CLOCK"; + field public static final java.lang.String ACTION_REBOOT = "android.intent.action.REBOOT"; + field public static final java.lang.String ACTION_RUN = "android.intent.action.RUN"; + field public static final java.lang.String ACTION_SCREEN_OFF = "android.intent.action.SCREEN_OFF"; + field public static final java.lang.String ACTION_SCREEN_ON = "android.intent.action.SCREEN_ON"; + field public static final java.lang.String ACTION_SEARCH = "android.intent.action.SEARCH"; + field public static final java.lang.String ACTION_SEARCH_LONG_PRESS = "android.intent.action.SEARCH_LONG_PRESS"; + field public static final java.lang.String ACTION_SEND = "android.intent.action.SEND"; + field public static final java.lang.String ACTION_SENDTO = "android.intent.action.SENDTO"; + field public static final java.lang.String ACTION_SEND_MULTIPLE = "android.intent.action.SEND_MULTIPLE"; + field public static final java.lang.String ACTION_SET_WALLPAPER = "android.intent.action.SET_WALLPAPER"; + field public static final java.lang.String ACTION_SHUTDOWN = "android.intent.action.ACTION_SHUTDOWN"; + field public static final java.lang.String ACTION_SYNC = "android.intent.action.SYNC"; + field public static final java.lang.String ACTION_SYSTEM_TUTORIAL = "android.intent.action.SYSTEM_TUTORIAL"; + field public static final java.lang.String ACTION_TIMEZONE_CHANGED = "android.intent.action.TIMEZONE_CHANGED"; + field public static final java.lang.String ACTION_TIME_CHANGED = "android.intent.action.TIME_SET"; + field public static final java.lang.String ACTION_TIME_TICK = "android.intent.action.TIME_TICK"; + field public static final java.lang.String ACTION_UID_REMOVED = "android.intent.action.UID_REMOVED"; + field public static final deprecated java.lang.String ACTION_UMS_CONNECTED = "android.intent.action.UMS_CONNECTED"; + field public static final deprecated java.lang.String ACTION_UMS_DISCONNECTED = "android.intent.action.UMS_DISCONNECTED"; + field public static final java.lang.String ACTION_UNINSTALL_PACKAGE = "android.intent.action.UNINSTALL_PACKAGE"; + field public static final java.lang.String ACTION_USER_BACKGROUND = "android.intent.action.USER_BACKGROUND"; + field public static final java.lang.String ACTION_USER_FOREGROUND = "android.intent.action.USER_FOREGROUND"; + field public static final java.lang.String ACTION_USER_INITIALIZE = "android.intent.action.USER_INITIALIZE"; + field public static final java.lang.String ACTION_USER_PRESENT = "android.intent.action.USER_PRESENT"; + field public static final java.lang.String ACTION_VIEW = "android.intent.action.VIEW"; + field public static final java.lang.String ACTION_VOICE_COMMAND = "android.intent.action.VOICE_COMMAND"; + field public static final deprecated java.lang.String ACTION_WALLPAPER_CHANGED = "android.intent.action.WALLPAPER_CHANGED"; + field public static final java.lang.String ACTION_WEB_SEARCH = "android.intent.action.WEB_SEARCH"; + field public static final java.lang.String CATEGORY_ALTERNATIVE = "android.intent.category.ALTERNATIVE"; + field public static final java.lang.String CATEGORY_APP_BROWSER = "android.intent.category.APP_BROWSER"; + field public static final java.lang.String CATEGORY_APP_CALCULATOR = "android.intent.category.APP_CALCULATOR"; + field public static final java.lang.String CATEGORY_APP_CALENDAR = "android.intent.category.APP_CALENDAR"; + field public static final java.lang.String CATEGORY_APP_CONTACTS = "android.intent.category.APP_CONTACTS"; + field public static final java.lang.String CATEGORY_APP_EMAIL = "android.intent.category.APP_EMAIL"; + field public static final java.lang.String CATEGORY_APP_GALLERY = "android.intent.category.APP_GALLERY"; + field public static final java.lang.String CATEGORY_APP_MAPS = "android.intent.category.APP_MAPS"; + field public static final java.lang.String CATEGORY_APP_MARKET = "android.intent.category.APP_MARKET"; + field public static final java.lang.String CATEGORY_APP_MESSAGING = "android.intent.category.APP_MESSAGING"; + field public static final java.lang.String CATEGORY_APP_MUSIC = "android.intent.category.APP_MUSIC"; + field public static final java.lang.String CATEGORY_BROWSABLE = "android.intent.category.BROWSABLE"; + field public static final java.lang.String CATEGORY_CAR_DOCK = "android.intent.category.CAR_DOCK"; + field public static final java.lang.String CATEGORY_CAR_MODE = "android.intent.category.CAR_MODE"; + field public static final java.lang.String CATEGORY_DEFAULT = "android.intent.category.DEFAULT"; + field public static final java.lang.String CATEGORY_DESK_DOCK = "android.intent.category.DESK_DOCK"; + field public static final java.lang.String CATEGORY_DEVELOPMENT_PREFERENCE = "android.intent.category.DEVELOPMENT_PREFERENCE"; + field public static final java.lang.String CATEGORY_EMBED = "android.intent.category.EMBED"; + field public static final java.lang.String CATEGORY_FRAMEWORK_INSTRUMENTATION_TEST = "android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST"; + field public static final java.lang.String CATEGORY_HE_DESK_DOCK = "android.intent.category.HE_DESK_DOCK"; + field public static final java.lang.String CATEGORY_HOME = "android.intent.category.HOME"; + field public static final java.lang.String CATEGORY_INFO = "android.intent.category.INFO"; + field public static final java.lang.String CATEGORY_LAUNCHER = "android.intent.category.LAUNCHER"; + field public static final java.lang.String CATEGORY_LEANBACK_LAUNCHER = "android.intent.category.LEANBACK_LAUNCHER"; + field public static final java.lang.String CATEGORY_LEANBACK_SETTINGS = "android.intent.category.LEANBACK_SETTINGS"; + field public static final java.lang.String CATEGORY_LE_DESK_DOCK = "android.intent.category.LE_DESK_DOCK"; + field public static final java.lang.String CATEGORY_MONKEY = "android.intent.category.MONKEY"; + field public static final java.lang.String CATEGORY_OPENABLE = "android.intent.category.OPENABLE"; + field public static final java.lang.String CATEGORY_PREFERENCE = "android.intent.category.PREFERENCE"; + field public static final java.lang.String CATEGORY_SAMPLE_CODE = "android.intent.category.SAMPLE_CODE"; + field public static final java.lang.String CATEGORY_SELECTED_ALTERNATIVE = "android.intent.category.SELECTED_ALTERNATIVE"; + field public static final java.lang.String CATEGORY_TAB = "android.intent.category.TAB"; + field public static final java.lang.String CATEGORY_TEST = "android.intent.category.TEST"; + field public static final java.lang.String CATEGORY_UNIT_TEST = "android.intent.category.UNIT_TEST"; + field public static final java.lang.String CATEGORY_VOICE = "android.intent.category.VOICE"; + field public static final android.os.Parcelable.Creator CREATOR; + field public static final java.lang.String EXTRA_ALARM_COUNT = "android.intent.extra.ALARM_COUNT"; + field public static final java.lang.String EXTRA_ALLOW_MULTIPLE = "android.intent.extra.ALLOW_MULTIPLE"; + field public static final deprecated java.lang.String EXTRA_ALLOW_REPLACE = "android.intent.extra.ALLOW_REPLACE"; + field public static final java.lang.String EXTRA_ASSIST_CONTEXT = "android.intent.extra.ASSIST_CONTEXT"; + field public static final java.lang.String EXTRA_ASSIST_INPUT_HINT_KEYBOARD = "android.intent.extra.ASSIST_INPUT_HINT_KEYBOARD"; + field public static final java.lang.String EXTRA_ASSIST_PACKAGE = "android.intent.extra.ASSIST_PACKAGE"; + field public static final java.lang.String EXTRA_BCC = "android.intent.extra.BCC"; + field public static final java.lang.String EXTRA_BUG_REPORT = "android.intent.extra.BUG_REPORT"; + field public static final java.lang.String EXTRA_CC = "android.intent.extra.CC"; + field public static final deprecated java.lang.String EXTRA_CHANGED_COMPONENT_NAME = "android.intent.extra.changed_component_name"; + field public static final java.lang.String EXTRA_CHANGED_COMPONENT_NAME_LIST = "android.intent.extra.changed_component_name_list"; + field public static final java.lang.String EXTRA_CHANGED_PACKAGE_LIST = "android.intent.extra.changed_package_list"; + field public static final java.lang.String EXTRA_CHANGED_UID_LIST = "android.intent.extra.changed_uid_list"; + field public static final java.lang.String EXTRA_CHOSEN_COMPONENT = "android.intent.extra.CHOSEN_COMPONENT"; + field public static final java.lang.String EXTRA_CHOSEN_COMPONENT_INTENT_SENDER = "android.intent.extra.CHOSEN_COMPONENT_INTENT_SENDER"; + field public static final java.lang.String EXTRA_DATA_REMOVED = "android.intent.extra.DATA_REMOVED"; + field public static final java.lang.String EXTRA_DOCK_STATE = "android.intent.extra.DOCK_STATE"; + field public static final int EXTRA_DOCK_STATE_CAR = 2; // 0x2 + field public static final int EXTRA_DOCK_STATE_DESK = 1; // 0x1 + field public static final int EXTRA_DOCK_STATE_HE_DESK = 4; // 0x4 + field public static final int EXTRA_DOCK_STATE_LE_DESK = 3; // 0x3 + field public static final int EXTRA_DOCK_STATE_UNDOCKED = 0; // 0x0 + field public static final java.lang.String EXTRA_DONT_KILL_APP = "android.intent.extra.DONT_KILL_APP"; + field public static final java.lang.String EXTRA_EMAIL = "android.intent.extra.EMAIL"; + field public static final java.lang.String EXTRA_HTML_TEXT = "android.intent.extra.HTML_TEXT"; + field public static final java.lang.String EXTRA_INITIAL_INTENTS = "android.intent.extra.INITIAL_INTENTS"; + field public static final java.lang.String EXTRA_INSTALLER_PACKAGE_NAME = "android.intent.extra.INSTALLER_PACKAGE_NAME"; + field public static final java.lang.String EXTRA_INTENT = "android.intent.extra.INTENT"; + field public static final java.lang.String EXTRA_KEY_EVENT = "android.intent.extra.KEY_EVENT"; + field public static final java.lang.String EXTRA_LOCAL_ONLY = "android.intent.extra.LOCAL_ONLY"; + field public static final java.lang.String EXTRA_MIME_TYPES = "android.intent.extra.MIME_TYPES"; + field public static final java.lang.String EXTRA_NOT_UNKNOWN_SOURCE = "android.intent.extra.NOT_UNKNOWN_SOURCE"; + field public static final java.lang.String EXTRA_ORIGINATING_URI = "android.intent.extra.ORIGINATING_URI"; + field public static final java.lang.String EXTRA_PHONE_NUMBER = "android.intent.extra.PHONE_NUMBER"; + field public static final java.lang.String EXTRA_REFERRER = "android.intent.extra.REFERRER"; + field public static final java.lang.String EXTRA_REFERRER_NAME = "android.intent.extra.REFERRER_NAME"; + field public static final java.lang.String EXTRA_REMOTE_INTENT_TOKEN = "android.intent.extra.remote_intent_token"; + field public static final java.lang.String EXTRA_REPLACEMENT_EXTRAS = "android.intent.extra.REPLACEMENT_EXTRAS"; + field public static final java.lang.String EXTRA_REPLACING = "android.intent.extra.REPLACING"; + field public static final java.lang.String EXTRA_RESTRICTIONS_BUNDLE = "android.intent.extra.restrictions_bundle"; + field public static final java.lang.String EXTRA_RESTRICTIONS_INTENT = "android.intent.extra.restrictions_intent"; + field public static final java.lang.String EXTRA_RESTRICTIONS_LIST = "android.intent.extra.restrictions_list"; + field public static final java.lang.String EXTRA_RETURN_RESULT = "android.intent.extra.RETURN_RESULT"; + field public static final java.lang.String EXTRA_SHORTCUT_ICON = "android.intent.extra.shortcut.ICON"; + field public static final java.lang.String EXTRA_SHORTCUT_ICON_RESOURCE = "android.intent.extra.shortcut.ICON_RESOURCE"; + field public static final java.lang.String EXTRA_SHORTCUT_INTENT = "android.intent.extra.shortcut.INTENT"; + field public static final java.lang.String EXTRA_SHORTCUT_NAME = "android.intent.extra.shortcut.NAME"; + field public static final java.lang.String EXTRA_SHUTDOWN_USERSPACE_ONLY = "android.intent.extra.SHUTDOWN_USERSPACE_ONLY"; + field public static final java.lang.String EXTRA_STREAM = "android.intent.extra.STREAM"; + field public static final java.lang.String EXTRA_SUBJECT = "android.intent.extra.SUBJECT"; + field public static final java.lang.String EXTRA_TEMPLATE = "android.intent.extra.TEMPLATE"; + field public static final java.lang.String EXTRA_TEXT = "android.intent.extra.TEXT"; + field public static final java.lang.String EXTRA_TITLE = "android.intent.extra.TITLE"; + field public static final java.lang.String EXTRA_UID = "android.intent.extra.UID"; + field public static final java.lang.String EXTRA_USER = "android.intent.extra.USER"; + field public static final int FILL_IN_ACTION = 1; // 0x1 + field public static final int FILL_IN_CATEGORIES = 4; // 0x4 + field public static final int FILL_IN_CLIP_DATA = 128; // 0x80 + field public static final int FILL_IN_COMPONENT = 8; // 0x8 + field public static final int FILL_IN_DATA = 2; // 0x2 + field public static final int FILL_IN_PACKAGE = 16; // 0x10 + field public static final int FILL_IN_SELECTOR = 64; // 0x40 + field public static final int FILL_IN_SOURCE_BOUNDS = 32; // 0x20 + field public static final int FLAG_ACTIVITY_BROUGHT_TO_FRONT = 4194304; // 0x400000 + field public static final int FLAG_ACTIVITY_CLEAR_TASK = 32768; // 0x8000 + field public static final int FLAG_ACTIVITY_CLEAR_TOP = 67108864; // 0x4000000 + field public static final deprecated int FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET = 524288; // 0x80000 + field public static final int FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS = 8388608; // 0x800000 + field public static final int FLAG_ACTIVITY_FORWARD_RESULT = 33554432; // 0x2000000 + field public static final int FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY = 1048576; // 0x100000 + field public static final int FLAG_ACTIVITY_MULTIPLE_TASK = 134217728; // 0x8000000 + field public static final int FLAG_ACTIVITY_NEW_DOCUMENT = 524288; // 0x80000 + field public static final int FLAG_ACTIVITY_NEW_TASK = 268435456; // 0x10000000 + field public static final int FLAG_ACTIVITY_NO_ANIMATION = 65536; // 0x10000 + field public static final int FLAG_ACTIVITY_NO_HISTORY = 1073741824; // 0x40000000 + field public static final int FLAG_ACTIVITY_NO_USER_ACTION = 262144; // 0x40000 + field public static final int FLAG_ACTIVITY_PREVIOUS_IS_TOP = 16777216; // 0x1000000 + field public static final int FLAG_ACTIVITY_REORDER_TO_FRONT = 131072; // 0x20000 + field public static final int FLAG_ACTIVITY_RESET_TASK_IF_NEEDED = 2097152; // 0x200000 + field public static final int FLAG_ACTIVITY_RETAIN_IN_RECENTS = 8192; // 0x2000 + field public static final int FLAG_ACTIVITY_SINGLE_TOP = 536870912; // 0x20000000 + field public static final int FLAG_ACTIVITY_TASK_ON_HOME = 16384; // 0x4000 + field public static final int FLAG_DEBUG_LOG_RESOLUTION = 8; // 0x8 + field public static final int FLAG_EXCLUDE_STOPPED_PACKAGES = 16; // 0x10 + field public static final int FLAG_FROM_BACKGROUND = 4; // 0x4 + field public static final int FLAG_GRANT_PERSISTABLE_URI_PERMISSION = 64; // 0x40 + field public static final int FLAG_GRANT_PREFIX_URI_PERMISSION = 128; // 0x80 + field public static final int FLAG_GRANT_READ_URI_PERMISSION = 1; // 0x1 + field public static final int FLAG_GRANT_WRITE_URI_PERMISSION = 2; // 0x2 + field public static final int FLAG_INCLUDE_STOPPED_PACKAGES = 32; // 0x20 + field public static final int FLAG_RECEIVER_FOREGROUND = 268435456; // 0x10000000 + field public static final int FLAG_RECEIVER_NO_ABORT = 134217728; // 0x8000000 + field public static final int FLAG_RECEIVER_REGISTERED_ONLY = 1073741824; // 0x40000000 + field public static final int FLAG_RECEIVER_REPLACE_PENDING = 536870912; // 0x20000000 + field public static final java.lang.String METADATA_DOCK_HOME = "android.dock_home"; + field public static final int URI_ALLOW_UNSAFE = 4; // 0x4 + field public static final int URI_ANDROID_APP_SCHEME = 2; // 0x2 + field public static final int URI_INTENT_SCHEME = 1; // 0x1 + } + + public static final class Intent.FilterComparison { + ctor public Intent.FilterComparison(android.content.Intent); + method public android.content.Intent getIntent(); + } + + public static class Intent.ShortcutIconResource implements android.os.Parcelable { + ctor public Intent.ShortcutIconResource(); + method public int describeContents(); + method public static android.content.Intent.ShortcutIconResource fromContext(android.content.Context, int); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public java.lang.String packageName; + field public java.lang.String resourceName; + } + + public class IntentFilter implements android.os.Parcelable { + ctor public IntentFilter(); + ctor public IntentFilter(java.lang.String); + ctor public IntentFilter(java.lang.String, java.lang.String) throws android.content.IntentFilter.MalformedMimeTypeException; + ctor public IntentFilter(android.content.IntentFilter); + method public final java.util.Iterator actionsIterator(); + method public final void addAction(java.lang.String); + method public final void addCategory(java.lang.String); + method public final void addDataAuthority(java.lang.String, java.lang.String); + method public final void addDataPath(java.lang.String, int); + method public final void addDataScheme(java.lang.String); + method public final void addDataSchemeSpecificPart(java.lang.String, int); + method public final void addDataType(java.lang.String) throws android.content.IntentFilter.MalformedMimeTypeException; + method public final java.util.Iterator authoritiesIterator(); + method public final java.util.Iterator categoriesIterator(); + method public final int countActions(); + method public final int countCategories(); + method public final int countDataAuthorities(); + method public final int countDataPaths(); + method public final int countDataSchemeSpecificParts(); + method public final int countDataSchemes(); + method public final int countDataTypes(); + method public static android.content.IntentFilter create(java.lang.String, java.lang.String); + method public final int describeContents(); + method public void dump(android.util.Printer, java.lang.String); + method public final java.lang.String getAction(int); + method public final java.lang.String getCategory(int); + method public final android.content.IntentFilter.AuthorityEntry getDataAuthority(int); + method public final android.os.PatternMatcher getDataPath(int); + method public final java.lang.String getDataScheme(int); + method public final android.os.PatternMatcher getDataSchemeSpecificPart(int); + method public final java.lang.String getDataType(int); + method public final int getPriority(); + method public final boolean hasAction(java.lang.String); + method public final boolean hasCategory(java.lang.String); + method public final boolean hasDataAuthority(android.net.Uri); + method public final boolean hasDataPath(java.lang.String); + method public final boolean hasDataScheme(java.lang.String); + method public final boolean hasDataSchemeSpecificPart(java.lang.String); + method public final boolean hasDataType(java.lang.String); + method public final int match(android.content.ContentResolver, android.content.Intent, boolean, java.lang.String); + method public final int match(java.lang.String, java.lang.String, java.lang.String, android.net.Uri, java.util.Set, java.lang.String); + method public final boolean matchAction(java.lang.String); + method public final java.lang.String matchCategories(java.util.Set); + method public final int matchData(java.lang.String, java.lang.String, android.net.Uri); + method public final int matchDataAuthority(android.net.Uri); + method public final java.util.Iterator pathsIterator(); + method public void readFromXml(org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException; + method public final java.util.Iterator schemeSpecificPartsIterator(); + method public final java.util.Iterator schemesIterator(); + method public final void setPriority(int); + method public final java.util.Iterator typesIterator(); + method public final void writeToParcel(android.os.Parcel, int); + method public void writeToXml(org.xmlpull.v1.XmlSerializer) throws java.io.IOException; + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int MATCH_ADJUSTMENT_MASK = 65535; // 0xffff + field public static final int MATCH_ADJUSTMENT_NORMAL = 32768; // 0x8000 + field public static final int MATCH_CATEGORY_EMPTY = 1048576; // 0x100000 + field public static final int MATCH_CATEGORY_HOST = 3145728; // 0x300000 + field public static final int MATCH_CATEGORY_MASK = 268369920; // 0xfff0000 + field public static final int MATCH_CATEGORY_PATH = 5242880; // 0x500000 + field public static final int MATCH_CATEGORY_PORT = 4194304; // 0x400000 + field public static final int MATCH_CATEGORY_SCHEME = 2097152; // 0x200000 + field public static final int MATCH_CATEGORY_SCHEME_SPECIFIC_PART = 5767168; // 0x580000 + field public static final int MATCH_CATEGORY_TYPE = 6291456; // 0x600000 + field public static final int NO_MATCH_ACTION = -3; // 0xfffffffd + field public static final int NO_MATCH_CATEGORY = -4; // 0xfffffffc + field public static final int NO_MATCH_DATA = -2; // 0xfffffffe + field public static final int NO_MATCH_TYPE = -1; // 0xffffffff + field public static final int SYSTEM_HIGH_PRIORITY = 1000; // 0x3e8 + field public static final int SYSTEM_LOW_PRIORITY = -1000; // 0xfffffc18 + } + + public static final class IntentFilter.AuthorityEntry { + ctor public IntentFilter.AuthorityEntry(java.lang.String, java.lang.String); + method public java.lang.String getHost(); + method public int getPort(); + method public int match(android.net.Uri); + } + + public static class IntentFilter.MalformedMimeTypeException extends android.util.AndroidException { + ctor public IntentFilter.MalformedMimeTypeException(); + ctor public IntentFilter.MalformedMimeTypeException(java.lang.String); + } + + public class IntentSender implements android.os.Parcelable { + method public int describeContents(); + method public java.lang.String getCreatorPackage(); + method public int getCreatorUid(); + method public android.os.UserHandle getCreatorUserHandle(); + method public deprecated java.lang.String getTargetPackage(); + method public static android.content.IntentSender readIntentSenderOrNullFromParcel(android.os.Parcel); + method public void sendIntent(android.content.Context, int, android.content.Intent, android.content.IntentSender.OnFinished, android.os.Handler) throws android.content.IntentSender.SendIntentException; + method public void sendIntent(android.content.Context, int, android.content.Intent, android.content.IntentSender.OnFinished, android.os.Handler, java.lang.String) throws android.content.IntentSender.SendIntentException; + method public static void writeIntentSenderOrNullToParcel(android.content.IntentSender, android.os.Parcel); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public static abstract interface IntentSender.OnFinished { + method public abstract void onSendFinished(android.content.IntentSender, android.content.Intent, int, java.lang.String, android.os.Bundle); + } + + public static class IntentSender.SendIntentException extends android.util.AndroidException { + ctor public IntentSender.SendIntentException(); + ctor public IntentSender.SendIntentException(java.lang.String); + ctor public IntentSender.SendIntentException(java.lang.Exception); + } + + public class Loader { + ctor public Loader(android.content.Context); + method public void abandon(); + method public boolean cancelLoad(); + method public void commitContentChanged(); + method public java.lang.String dataToString(D); + method public void deliverCancellation(); + method public void deliverResult(D); + method public void dump(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]); + method public void forceLoad(); + method public android.content.Context getContext(); + method public int getId(); + method public boolean isAbandoned(); + method public boolean isReset(); + method public boolean isStarted(); + method protected void onAbandon(); + method protected boolean onCancelLoad(); + method public void onContentChanged(); + method protected void onForceLoad(); + method protected void onReset(); + method protected void onStartLoading(); + method protected void onStopLoading(); + method public void registerListener(int, android.content.Loader.OnLoadCompleteListener); + method public void registerOnLoadCanceledListener(android.content.Loader.OnLoadCanceledListener); + method public void reset(); + method public void rollbackContentChanged(); + method public final void startLoading(); + method public void stopLoading(); + method public boolean takeContentChanged(); + method public void unregisterListener(android.content.Loader.OnLoadCompleteListener); + method public void unregisterOnLoadCanceledListener(android.content.Loader.OnLoadCanceledListener); + } + + public final class Loader.ForceLoadContentObserver extends android.database.ContentObserver { + ctor public Loader.ForceLoadContentObserver(); + } + + public static abstract interface Loader.OnLoadCanceledListener { + method public abstract void onLoadCanceled(android.content.Loader); + } + + public static abstract interface Loader.OnLoadCompleteListener { + method public abstract void onLoadComplete(android.content.Loader, D); + } + + public class MutableContextWrapper extends android.content.ContextWrapper { + ctor public MutableContextWrapper(android.content.Context); + method public void setBaseContext(android.content.Context); + } + + public class OperationApplicationException extends java.lang.Exception { + ctor public OperationApplicationException(); + ctor public OperationApplicationException(java.lang.String); + ctor public OperationApplicationException(java.lang.String, java.lang.Throwable); + ctor public OperationApplicationException(java.lang.Throwable); + ctor public OperationApplicationException(int); + ctor public OperationApplicationException(java.lang.String, int); + method public int getNumSuccessfulYieldPoints(); + } + + public class PeriodicSync implements android.os.Parcelable { + ctor public PeriodicSync(android.accounts.Account, java.lang.String, android.os.Bundle, long); + method public int describeContents(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public final android.accounts.Account account; + field public final java.lang.String authority; + field public final android.os.Bundle extras; + field public final long period; + } + + public class ReceiverCallNotAllowedException extends android.util.AndroidRuntimeException { + ctor public ReceiverCallNotAllowedException(java.lang.String); + } + + public class RestrictionEntry implements android.os.Parcelable { + ctor public RestrictionEntry(int, java.lang.String); + ctor public RestrictionEntry(java.lang.String, java.lang.String); + ctor public RestrictionEntry(java.lang.String, boolean); + ctor public RestrictionEntry(java.lang.String, java.lang.String[]); + ctor public RestrictionEntry(java.lang.String, int); + ctor public RestrictionEntry(android.os.Parcel); + method public int describeContents(); + method public java.lang.String[] getAllSelectedStrings(); + method public java.lang.String[] getChoiceEntries(); + method public java.lang.String[] getChoiceValues(); + method public java.lang.String getDescription(); + method public int getIntValue(); + method public java.lang.String getKey(); + method public boolean getSelectedState(); + method public java.lang.String getSelectedString(); + method public java.lang.String getTitle(); + method public int getType(); + method public void setAllSelectedStrings(java.lang.String[]); + method public void setChoiceEntries(java.lang.String[]); + method public void setChoiceEntries(android.content.Context, int); + method public void setChoiceValues(java.lang.String[]); + method public void setChoiceValues(android.content.Context, int); + method public void setDescription(java.lang.String); + method public void setIntValue(int); + method public void setSelectedState(boolean); + method public void setSelectedString(java.lang.String); + method public void setTitle(java.lang.String); + method public void setType(int); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int TYPE_BOOLEAN = 1; // 0x1 + field public static final int TYPE_CHOICE = 2; // 0x2 + field public static final int TYPE_INTEGER = 5; // 0x5 + field public static final int TYPE_MULTI_SELECT = 4; // 0x4 + field public static final int TYPE_NULL = 0; // 0x0 + field public static final int TYPE_STRING = 6; // 0x6 + } + + public class RestrictionsManager { + method public android.content.Intent createLocalApprovalIntent(); + method public android.os.Bundle getApplicationRestrictions(); + method public java.util.List getManifestRestrictions(java.lang.String); + method public boolean hasRestrictionsProvider(); + method public void notifyPermissionResponse(java.lang.String, android.os.PersistableBundle); + method public void requestPermission(java.lang.String, java.lang.String, android.os.PersistableBundle); + field public static final java.lang.String ACTION_PERMISSION_RESPONSE_RECEIVED = "android.content.action.PERMISSION_RESPONSE_RECEIVED"; + field public static final java.lang.String ACTION_REQUEST_LOCAL_APPROVAL = "android.content.action.REQUEST_LOCAL_APPROVAL"; + field public static final java.lang.String ACTION_REQUEST_PERMISSION = "android.content.action.REQUEST_PERMISSION"; + field public static final java.lang.String EXTRA_PACKAGE_NAME = "android.content.extra.PACKAGE_NAME"; + field public static final java.lang.String EXTRA_REQUEST_BUNDLE = "android.content.extra.REQUEST_BUNDLE"; + field public static final java.lang.String EXTRA_REQUEST_ID = "android.content.extra.REQUEST_ID"; + field public static final java.lang.String EXTRA_REQUEST_TYPE = "android.content.extra.REQUEST_TYPE"; + field public static final java.lang.String EXTRA_RESPONSE_BUNDLE = "android.content.extra.RESPONSE_BUNDLE"; + field public static final java.lang.String META_DATA_APP_RESTRICTIONS = "android.content.APP_RESTRICTIONS"; + field public static final java.lang.String REQUEST_KEY_APPROVE_LABEL = "android.request.approve_label"; + field public static final java.lang.String REQUEST_KEY_DATA = "android.request.data"; + field public static final java.lang.String REQUEST_KEY_DENY_LABEL = "android.request.deny_label"; + field public static final java.lang.String REQUEST_KEY_ICON = "android.request.icon"; + field public static final java.lang.String REQUEST_KEY_ID = "android.request.id"; + field public static final java.lang.String REQUEST_KEY_MESSAGE = "android.request.mesg"; + field public static final java.lang.String REQUEST_KEY_NEW_REQUEST = "android.request.new_request"; + field public static final java.lang.String REQUEST_KEY_TITLE = "android.request.title"; + field public static final java.lang.String REQUEST_TYPE_APPROVAL = "android.request.type.approval"; + field public static final java.lang.String RESPONSE_KEY_ERROR_CODE = "android.response.errorcode"; + field public static final java.lang.String RESPONSE_KEY_MESSAGE = "android.response.msg"; + field public static final java.lang.String RESPONSE_KEY_RESPONSE_TIMESTAMP = "android.response.timestamp"; + field public static final java.lang.String RESPONSE_KEY_RESULT = "android.response.result"; + field public static final int RESULT_APPROVED = 1; // 0x1 + field public static final int RESULT_DENIED = 2; // 0x2 + field public static final int RESULT_ERROR = 5; // 0x5 + field public static final int RESULT_ERROR_BAD_REQUEST = 1; // 0x1 + field public static final int RESULT_ERROR_INTERNAL = 3; // 0x3 + field public static final int RESULT_ERROR_NETWORK = 2; // 0x2 + field public static final int RESULT_NO_RESPONSE = 3; // 0x3 + field public static final int RESULT_UNKNOWN_REQUEST = 4; // 0x4 + } + + public class SearchRecentSuggestionsProvider extends android.content.ContentProvider { + ctor public SearchRecentSuggestionsProvider(); + method public int delete(android.net.Uri, java.lang.String, java.lang.String[]); + method public java.lang.String getType(android.net.Uri); + method public android.net.Uri insert(android.net.Uri, android.content.ContentValues); + method public boolean onCreate(); + method public android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String); + method protected void setupSuggestions(java.lang.String, int); + method public int update(android.net.Uri, android.content.ContentValues, java.lang.String, java.lang.String[]); + field public static final int DATABASE_MODE_2LINES = 2; // 0x2 + field public static final int DATABASE_MODE_QUERIES = 1; // 0x1 + } + + public abstract interface ServiceConnection { + method public abstract void onServiceConnected(android.content.ComponentName, android.os.IBinder); + method public abstract void onServiceDisconnected(android.content.ComponentName); + } + + public abstract interface SharedPreferences { + method public abstract boolean contains(java.lang.String); + method public abstract android.content.SharedPreferences.Editor edit(); + method public abstract java.util.Map getAll(); + method public abstract boolean getBoolean(java.lang.String, boolean); + method public abstract float getFloat(java.lang.String, float); + method public abstract int getInt(java.lang.String, int); + method public abstract long getLong(java.lang.String, long); + method public abstract java.lang.String getString(java.lang.String, java.lang.String); + method public abstract java.util.Set getStringSet(java.lang.String, java.util.Set); + method public abstract void registerOnSharedPreferenceChangeListener(android.content.SharedPreferences.OnSharedPreferenceChangeListener); + method public abstract void unregisterOnSharedPreferenceChangeListener(android.content.SharedPreferences.OnSharedPreferenceChangeListener); + } + + public static abstract interface SharedPreferences.Editor { + method public abstract void apply(); + method public abstract android.content.SharedPreferences.Editor clear(); + method public abstract boolean commit(); + method public abstract android.content.SharedPreferences.Editor putBoolean(java.lang.String, boolean); + method public abstract android.content.SharedPreferences.Editor putFloat(java.lang.String, float); + method public abstract android.content.SharedPreferences.Editor putInt(java.lang.String, int); + method public abstract android.content.SharedPreferences.Editor putLong(java.lang.String, long); + method public abstract android.content.SharedPreferences.Editor putString(java.lang.String, java.lang.String); + method public abstract android.content.SharedPreferences.Editor putStringSet(java.lang.String, java.util.Set); + method public abstract android.content.SharedPreferences.Editor remove(java.lang.String); + } + + public static abstract interface SharedPreferences.OnSharedPreferenceChangeListener { + method public abstract void onSharedPreferenceChanged(android.content.SharedPreferences, java.lang.String); + } + + public class SyncAdapterType implements android.os.Parcelable { + ctor public SyncAdapterType(java.lang.String, java.lang.String, boolean, boolean); + ctor public SyncAdapterType(android.os.Parcel); + method public boolean allowParallelSyncs(); + method public int describeContents(); + method public java.lang.String getSettingsActivity(); + method public boolean isAlwaysSyncable(); + method public boolean isUserVisible(); + method public static android.content.SyncAdapterType newKey(java.lang.String, java.lang.String); + method public boolean supportsUploading(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public final java.lang.String accountType; + field public final java.lang.String authority; + field public final boolean isKey; + } + + public class SyncContext { + method public android.os.IBinder getSyncContextBinder(); + method public void onFinished(android.content.SyncResult); + } + + public class SyncInfo implements android.os.Parcelable { + method public int describeContents(); + method public void writeToParcel(android.os.Parcel, int); + field public final android.accounts.Account account; + field public final java.lang.String authority; + field public final long startTime; + } + + public class SyncRequest implements android.os.Parcelable { + method public int describeContents(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public static class SyncRequest.Builder { + ctor public SyncRequest.Builder(); + method public android.content.SyncRequest build(); + method public android.content.SyncRequest.Builder setDisallowMetered(boolean); + method public android.content.SyncRequest.Builder setExpedited(boolean); + method public android.content.SyncRequest.Builder setExtras(android.os.Bundle); + method public android.content.SyncRequest.Builder setIgnoreBackoff(boolean); + method public android.content.SyncRequest.Builder setIgnoreSettings(boolean); + method public android.content.SyncRequest.Builder setManual(boolean); + method public android.content.SyncRequest.Builder setNoRetry(boolean); + method public android.content.SyncRequest.Builder setSyncAdapter(android.accounts.Account, java.lang.String); + method public android.content.SyncRequest.Builder syncOnce(); + method public android.content.SyncRequest.Builder syncPeriodic(long, long); + } + + public final class SyncResult implements android.os.Parcelable { + ctor public SyncResult(); + method public void clear(); + method public int describeContents(); + method public boolean hasError(); + method public boolean hasHardError(); + method public boolean hasSoftError(); + method public boolean madeSomeProgress(); + method public java.lang.String toDebugString(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.content.SyncResult ALREADY_IN_PROGRESS; + field public static final android.os.Parcelable.Creator CREATOR; + field public boolean databaseError; + field public long delayUntil; + field public boolean fullSyncRequested; + field public boolean moreRecordsToGet; + field public boolean partialSyncUnavailable; + field public final android.content.SyncStats stats; + field public final boolean syncAlreadyInProgress; + field public boolean tooManyDeletions; + field public boolean tooManyRetries; + } + + public class SyncStats implements android.os.Parcelable { + ctor public SyncStats(); + ctor public SyncStats(android.os.Parcel); + method public void clear(); + method public int describeContents(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public long numAuthExceptions; + field public long numConflictDetectedExceptions; + field public long numDeletes; + field public long numEntries; + field public long numInserts; + field public long numIoExceptions; + field public long numParseExceptions; + field public long numSkippedEntries; + field public long numUpdates; + } + + public abstract interface SyncStatusObserver { + method public abstract void onStatusChanged(int); + } + + public class UriMatcher { + ctor public UriMatcher(int); + method public void addURI(java.lang.String, java.lang.String, int); + method public int match(android.net.Uri); + field public static final int NO_MATCH = -1; // 0xffffffff + } + + public final class UriPermission implements android.os.Parcelable { + method public int describeContents(); + method public long getPersistedTime(); + method public android.net.Uri getUri(); + method public boolean isReadPermission(); + method public boolean isWritePermission(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final long INVALID_TIME = -9223372036854775808L; // 0x8000000000000000L + } + +} + +package android.content.pm { + + public class ActivityInfo extends android.content.pm.ComponentInfo implements android.os.Parcelable { + ctor public ActivityInfo(); + ctor public ActivityInfo(android.content.pm.ActivityInfo); + method public int describeContents(); + method public void dump(android.util.Printer, java.lang.String); + method public final int getThemeResource(); + field public static final int CONFIG_DENSITY = 4096; // 0x1000 + field public static final int CONFIG_FONT_SCALE = 1073741824; // 0x40000000 + field public static final int CONFIG_KEYBOARD = 16; // 0x10 + field public static final int CONFIG_KEYBOARD_HIDDEN = 32; // 0x20 + field public static final int CONFIG_LAYOUT_DIRECTION = 8192; // 0x2000 + field public static final int CONFIG_LOCALE = 4; // 0x4 + field public static final int CONFIG_MCC = 1; // 0x1 + field public static final int CONFIG_MNC = 2; // 0x2 + field public static final int CONFIG_NAVIGATION = 64; // 0x40 + field public static final int CONFIG_ORIENTATION = 128; // 0x80 + field public static final int CONFIG_SCREEN_LAYOUT = 256; // 0x100 + field public static final int CONFIG_SCREEN_SIZE = 1024; // 0x400 + field public static final int CONFIG_SMALLEST_SCREEN_SIZE = 2048; // 0x800 + field public static final int CONFIG_TOUCHSCREEN = 8; // 0x8 + field public static final int CONFIG_UI_MODE = 512; // 0x200 + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int DOCUMENT_LAUNCH_ALWAYS = 2; // 0x2 + field public static final int DOCUMENT_LAUNCH_INTO_EXISTING = 1; // 0x1 + field public static final int DOCUMENT_LAUNCH_NEVER = 3; // 0x3 + field public static final int DOCUMENT_LAUNCH_NONE = 0; // 0x0 + field public static final int FLAG_ALLOW_TASK_REPARENTING = 64; // 0x40 + field public static final int FLAG_ALWAYS_RETAIN_TASK_STATE = 8; // 0x8 + field public static final int FLAG_AUTO_REMOVE_FROM_RECENTS = 8192; // 0x2000 + field public static final int FLAG_CLEAR_TASK_ON_LAUNCH = 4; // 0x4 + field public static final int FLAG_EXCLUDE_FROM_RECENTS = 32; // 0x20 + field public static final int FLAG_FINISH_ON_CLOSE_SYSTEM_DIALOGS = 256; // 0x100 + field public static final int FLAG_FINISH_ON_TASK_LAUNCH = 2; // 0x2 + field public static final int FLAG_HARDWARE_ACCELERATED = 512; // 0x200 + field public static final int FLAG_IMMERSIVE = 2048; // 0x800 + field public static final int FLAG_MULTIPROCESS = 1; // 0x1 + field public static final int FLAG_NO_HISTORY = 128; // 0x80 + field public static final int FLAG_RELINQUISH_TASK_IDENTITY = 4096; // 0x1000 + field public static final int FLAG_RESUME_WHILE_PAUSING = 16384; // 0x4000 + field public static final int FLAG_SINGLE_USER = 1073741824; // 0x40000000 + field public static final int FLAG_STATE_NOT_NEEDED = 16; // 0x10 + field public static final int LAUNCH_MULTIPLE = 0; // 0x0 + field public static final int LAUNCH_SINGLE_INSTANCE = 3; // 0x3 + field public static final int LAUNCH_SINGLE_TASK = 2; // 0x2 + field public static final int LAUNCH_SINGLE_TOP = 1; // 0x1 + field public static final int PERSIST_ACROSS_REBOOTS = 2; // 0x2 + field public static final int PERSIST_NEVER = 1; // 0x1 + field public static final int PERSIST_ROOT_ONLY = 0; // 0x0 + field public static final int SCREEN_ORIENTATION_BEHIND = 3; // 0x3 + field public static final int SCREEN_ORIENTATION_FULL_SENSOR = 10; // 0xa + field public static final int SCREEN_ORIENTATION_FULL_USER = 13; // 0xd + field public static final int SCREEN_ORIENTATION_LANDSCAPE = 0; // 0x0 + field public static final int SCREEN_ORIENTATION_LOCKED = 14; // 0xe + field public static final int SCREEN_ORIENTATION_NOSENSOR = 5; // 0x5 + field public static final int SCREEN_ORIENTATION_PORTRAIT = 1; // 0x1 + field public static final int SCREEN_ORIENTATION_REVERSE_LANDSCAPE = 8; // 0x8 + field public static final int SCREEN_ORIENTATION_REVERSE_PORTRAIT = 9; // 0x9 + field public static final int SCREEN_ORIENTATION_SENSOR = 4; // 0x4 + field public static final int SCREEN_ORIENTATION_SENSOR_LANDSCAPE = 6; // 0x6 + field public static final int SCREEN_ORIENTATION_SENSOR_PORTRAIT = 7; // 0x7 + field public static final int SCREEN_ORIENTATION_UNSPECIFIED = -1; // 0xffffffff + field public static final int SCREEN_ORIENTATION_USER = 2; // 0x2 + field public static final int SCREEN_ORIENTATION_USER_LANDSCAPE = 11; // 0xb + field public static final int SCREEN_ORIENTATION_USER_PORTRAIT = 12; // 0xc + field public static final int UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW = 1; // 0x1 + field public int configChanges; + field public int documentLaunchMode; + field public int flags; + field public int launchMode; + field public int maxRecents; + field public java.lang.String parentActivityName; + field public java.lang.String permission; + field public int persistableMode; + field public int screenOrientation; + field public int softInputMode; + field public java.lang.String targetActivity; + field public java.lang.String taskAffinity; + field public int theme; + field public int uiOptions; + } + + public class ApplicationInfo extends android.content.pm.PackageItemInfo implements android.os.Parcelable { + ctor public ApplicationInfo(); + ctor public ApplicationInfo(android.content.pm.ApplicationInfo); + method public int describeContents(); + method public void dump(android.util.Printer, java.lang.String); + method public java.lang.CharSequence loadDescription(android.content.pm.PackageManager); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int FLAG_ALLOW_BACKUP = 32768; // 0x8000 + field public static final int FLAG_ALLOW_CLEAR_USER_DATA = 64; // 0x40 + field public static final int FLAG_ALLOW_TASK_REPARENTING = 32; // 0x20 + field public static final int FLAG_DEBUGGABLE = 2; // 0x2 + field public static final int FLAG_EXTERNAL_STORAGE = 262144; // 0x40000 + field public static final int FLAG_FACTORY_TEST = 16; // 0x10 + field public static final int FLAG_FULL_BACKUP_ONLY = 67108864; // 0x4000000 + field public static final int FLAG_HAS_CODE = 4; // 0x4 + field public static final int FLAG_INSTALLED = 8388608; // 0x800000 + field public static final int FLAG_IS_DATA_ONLY = 16777216; // 0x1000000 + field public static final int FLAG_IS_GAME = 33554432; // 0x2000000 + field public static final int FLAG_KILL_AFTER_RESTORE = 65536; // 0x10000 + field public static final int FLAG_LARGE_HEAP = 1048576; // 0x100000 + field public static final int FLAG_MULTIARCH = -2147483648; // 0x80000000 + field public static final int FLAG_PERSISTENT = 8; // 0x8 + field public static final int FLAG_RESIZEABLE_FOR_SCREENS = 4096; // 0x1000 + field public static final int FLAG_RESTORE_ANY_VERSION = 131072; // 0x20000 + field public static final int FLAG_STOPPED = 2097152; // 0x200000 + field public static final int FLAG_SUPPORTS_LARGE_SCREENS = 2048; // 0x800 + field public static final int FLAG_SUPPORTS_NORMAL_SCREENS = 1024; // 0x400 + field public static final int FLAG_SUPPORTS_RTL = 4194304; // 0x400000 + field public static final int FLAG_SUPPORTS_SCREEN_DENSITIES = 8192; // 0x2000 + field public static final int FLAG_SUPPORTS_SMALL_SCREENS = 512; // 0x200 + field public static final int FLAG_SUPPORTS_XLARGE_SCREENS = 524288; // 0x80000 + field public static final int FLAG_SYSTEM = 1; // 0x1 + field public static final int FLAG_TEST_ONLY = 256; // 0x100 + field public static final int FLAG_UPDATED_SYSTEM_APP = 128; // 0x80 + field public static final int FLAG_VM_SAFE_MODE = 16384; // 0x4000 + field public java.lang.String backupAgentName; + field public java.lang.String className; + field public int compatibleWidthLimitDp; + field public java.lang.String dataDir; + field public int descriptionRes; + field public boolean enabled; + field public int flags; + field public int largestWidthLimitDp; + field public java.lang.String manageSpaceActivityName; + field public java.lang.String nativeLibraryDir; + field public java.lang.String permission; + field public java.lang.String processName; + field public java.lang.String publicSourceDir; + field public int requiresSmallestWidthDp; + field public java.lang.String[] sharedLibraryFiles; + field public java.lang.String sourceDir; + field public java.lang.String[] splitPublicSourceDirs; + field public java.lang.String[] splitSourceDirs; + field public int targetSdkVersion; + field public java.lang.String taskAffinity; + field public int theme; + field public int uiOptions; + field public int uid; + } + + public static class ApplicationInfo.DisplayNameComparator implements java.util.Comparator { + ctor public ApplicationInfo.DisplayNameComparator(android.content.pm.PackageManager); + method public final int compare(android.content.pm.ApplicationInfo, android.content.pm.ApplicationInfo); + } + + public class ComponentInfo extends android.content.pm.PackageItemInfo { + ctor public ComponentInfo(); + ctor public ComponentInfo(android.content.pm.ComponentInfo); + ctor protected ComponentInfo(android.os.Parcel); + method public final int getBannerResource(); + method public final int getIconResource(); + method public final int getLogoResource(); + method public boolean isEnabled(); + field public android.content.pm.ApplicationInfo applicationInfo; + field public int descriptionRes; + field public boolean enabled; + field public boolean exported; + field public java.lang.String processName; + } + + public class ConfigurationInfo implements android.os.Parcelable { + ctor public ConfigurationInfo(); + ctor public ConfigurationInfo(android.content.pm.ConfigurationInfo); + method public int describeContents(); + method public java.lang.String getGlEsVersion(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int GL_ES_VERSION_UNDEFINED = 0; // 0x0 + field public static final int INPUT_FEATURE_FIVE_WAY_NAV = 2; // 0x2 + field public static final int INPUT_FEATURE_HARD_KEYBOARD = 1; // 0x1 + field public int reqGlEsVersion; + field public int reqInputFeatures; + field public int reqKeyboardType; + field public int reqNavigation; + field public int reqTouchScreen; + } + + public deprecated class ContainerEncryptionParams implements android.os.Parcelable { + ctor public ContainerEncryptionParams(java.lang.String, java.security.spec.AlgorithmParameterSpec, javax.crypto.SecretKey) throws java.security.InvalidAlgorithmParameterException; + ctor public ContainerEncryptionParams(java.lang.String, java.security.spec.AlgorithmParameterSpec, javax.crypto.SecretKey, java.lang.String, java.security.spec.AlgorithmParameterSpec, javax.crypto.SecretKey, byte[], long, long, long) throws java.security.InvalidAlgorithmParameterException; + method public int describeContents(); + method public long getAuthenticatedDataStart(); + method public long getDataEnd(); + method public long getEncryptedDataStart(); + method public java.lang.String getEncryptionAlgorithm(); + method public javax.crypto.SecretKey getEncryptionKey(); + method public java.security.spec.AlgorithmParameterSpec getEncryptionSpec(); + method public java.lang.String getMacAlgorithm(); + method public javax.crypto.SecretKey getMacKey(); + method public java.security.spec.AlgorithmParameterSpec getMacSpec(); + method public byte[] getMacTag(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field protected static final java.lang.String TAG = "ContainerEncryptionParams"; + } + + public final class FeatureGroupInfo implements android.os.Parcelable { + ctor public FeatureGroupInfo(); + ctor public FeatureGroupInfo(android.content.pm.FeatureGroupInfo); + method public int describeContents(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public android.content.pm.FeatureInfo[] features; + } + + public class FeatureInfo implements android.os.Parcelable { + ctor public FeatureInfo(); + ctor public FeatureInfo(android.content.pm.FeatureInfo); + method public int describeContents(); + method public java.lang.String getGlEsVersion(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int FLAG_REQUIRED = 1; // 0x1 + field public static final int GL_ES_VERSION_UNDEFINED = 0; // 0x0 + field public int flags; + field public java.lang.String name; + field public int reqGlEsVersion; + } + + public class InstrumentationInfo extends android.content.pm.PackageItemInfo implements android.os.Parcelable { + ctor public InstrumentationInfo(); + ctor public InstrumentationInfo(android.content.pm.InstrumentationInfo); + method public int describeContents(); + field public static final android.os.Parcelable.Creator CREATOR; + field public java.lang.String dataDir; + field public boolean functionalTest; + field public boolean handleProfiling; + field public java.lang.String publicSourceDir; + field public java.lang.String sourceDir; + field public java.lang.String[] splitPublicSourceDirs; + field public java.lang.String[] splitSourceDirs; + field public java.lang.String targetPackage; + } + + public class LabeledIntent extends android.content.Intent { + ctor public LabeledIntent(android.content.Intent, java.lang.String, int, int); + ctor public LabeledIntent(android.content.Intent, java.lang.String, java.lang.CharSequence, int); + ctor public LabeledIntent(java.lang.String, int, int); + ctor public LabeledIntent(java.lang.String, java.lang.CharSequence, int); + method public int getIconResource(); + method public int getLabelResource(); + method public java.lang.CharSequence getNonLocalizedLabel(); + method public java.lang.String getSourcePackage(); + method public android.graphics.drawable.Drawable loadIcon(android.content.pm.PackageManager); + method public java.lang.CharSequence loadLabel(android.content.pm.PackageManager); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public class LauncherActivityInfo { + method public android.content.pm.ApplicationInfo getApplicationInfo(); + method public android.graphics.drawable.Drawable getBadgedIcon(int); + method public android.content.ComponentName getComponentName(); + method public long getFirstInstallTime(); + method public android.graphics.drawable.Drawable getIcon(int); + method public java.lang.CharSequence getLabel(); + method public java.lang.String getName(); + method public android.os.UserHandle getUser(); + } + + public class LauncherApps { + method public java.util.List getActivityList(java.lang.String, android.os.UserHandle); + method public boolean isActivityEnabled(android.content.ComponentName, android.os.UserHandle); + method public boolean isPackageEnabled(java.lang.String, android.os.UserHandle); + method public void registerCallback(android.content.pm.LauncherApps.Callback); + method public void registerCallback(android.content.pm.LauncherApps.Callback, android.os.Handler); + method public android.content.pm.LauncherActivityInfo resolveActivity(android.content.Intent, android.os.UserHandle); + method public void startAppDetailsActivity(android.content.ComponentName, android.os.UserHandle, android.graphics.Rect, android.os.Bundle); + method public void startMainActivity(android.content.ComponentName, android.os.UserHandle, android.graphics.Rect, android.os.Bundle); + method public void unregisterCallback(android.content.pm.LauncherApps.Callback); + } + + public static abstract class LauncherApps.Callback { + ctor public LauncherApps.Callback(); + method public abstract void onPackageAdded(java.lang.String, android.os.UserHandle); + method public abstract void onPackageChanged(java.lang.String, android.os.UserHandle); + method public abstract void onPackageRemoved(java.lang.String, android.os.UserHandle); + method public abstract void onPackagesAvailable(java.lang.String[], android.os.UserHandle, boolean); + method public abstract void onPackagesUnavailable(java.lang.String[], android.os.UserHandle, boolean); + } + + public class ManifestDigest implements android.os.Parcelable { + method public int describeContents(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public class PackageInfo implements android.os.Parcelable { + ctor public PackageInfo(); + method public int describeContents(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int INSTALL_LOCATION_AUTO = 0; // 0x0 + field public static final int INSTALL_LOCATION_INTERNAL_ONLY = 1; // 0x1 + field public static final int INSTALL_LOCATION_PREFER_EXTERNAL = 2; // 0x2 + field public static final int REQUESTED_PERMISSION_GRANTED = 2; // 0x2 + field public static final int REQUESTED_PERMISSION_REQUIRED = 1; // 0x1 + field public android.content.pm.ActivityInfo[] activities; + field public android.content.pm.ApplicationInfo applicationInfo; + field public int baseRevisionCode; + field public android.content.pm.ConfigurationInfo[] configPreferences; + field public android.content.pm.FeatureGroupInfo[] featureGroups; + field public long firstInstallTime; + field public int[] gids; + field public int installLocation; + field public android.content.pm.InstrumentationInfo[] instrumentation; + field public long lastUpdateTime; + field public java.lang.String packageName; + field public android.content.pm.PermissionInfo[] permissions; + field public android.content.pm.ProviderInfo[] providers; + field public android.content.pm.ActivityInfo[] receivers; + field public android.content.pm.FeatureInfo[] reqFeatures; + field public java.lang.String[] requestedPermissions; + field public int[] requestedPermissionsFlags; + field public android.content.pm.ServiceInfo[] services; + field public java.lang.String sharedUserId; + field public int sharedUserLabel; + field public android.content.pm.Signature[] signatures; + field public java.lang.String[] splitNames; + field public int[] splitRevisionCodes; + field public int versionCode; + field public java.lang.String versionName; + } + + public class PackageInstaller { + method public void abandonSession(int); + method public int createSession(android.content.pm.PackageInstaller.SessionParams) throws java.io.IOException; + method public java.util.List getAllSessions(); + method public java.util.List getMySessions(); + method public android.content.pm.PackageInstaller.SessionInfo getSessionInfo(int); + method public android.content.pm.PackageInstaller.Session openSession(int) throws java.io.IOException; + method public void registerSessionCallback(android.content.pm.PackageInstaller.SessionCallback); + method public void registerSessionCallback(android.content.pm.PackageInstaller.SessionCallback, android.os.Handler); + method public void uninstall(java.lang.String, android.content.IntentSender); + method public void unregisterSessionCallback(android.content.pm.PackageInstaller.SessionCallback); + method public void updateSessionAppIcon(int, android.graphics.Bitmap); + method public void updateSessionAppLabel(int, java.lang.CharSequence); + field public static final java.lang.String ACTION_SESSION_DETAILS = "android.content.pm.action.SESSION_DETAILS"; + field public static final java.lang.String EXTRA_OTHER_PACKAGE_NAME = "android.content.pm.extra.OTHER_PACKAGE_NAME"; + field public static final java.lang.String EXTRA_PACKAGE_NAME = "android.content.pm.extra.PACKAGE_NAME"; + field public static final java.lang.String EXTRA_SESSION_ID = "android.content.pm.extra.SESSION_ID"; + field public static final java.lang.String EXTRA_STATUS = "android.content.pm.extra.STATUS"; + field public static final java.lang.String EXTRA_STATUS_MESSAGE = "android.content.pm.extra.STATUS_MESSAGE"; + field public static final java.lang.String EXTRA_STORAGE_PATH = "android.content.pm.extra.STORAGE_PATH"; + field public static final int STATUS_FAILURE = 1; // 0x1 + field public static final int STATUS_FAILURE_ABORTED = 3; // 0x3 + field public static final int STATUS_FAILURE_BLOCKED = 2; // 0x2 + field public static final int STATUS_FAILURE_CONFLICT = 5; // 0x5 + field public static final int STATUS_FAILURE_INCOMPATIBLE = 7; // 0x7 + field public static final int STATUS_FAILURE_INVALID = 4; // 0x4 + field public static final int STATUS_FAILURE_STORAGE = 6; // 0x6 + field public static final int STATUS_PENDING_USER_ACTION = -1; // 0xffffffff + field public static final int STATUS_SUCCESS = 0; // 0x0 + } + + public static class PackageInstaller.Session implements java.io.Closeable { + method public void abandon(); + method public void close(); + method public void commit(android.content.IntentSender); + method public void fsync(java.io.OutputStream) throws java.io.IOException; + method public java.lang.String[] getNames() throws java.io.IOException; + method public java.io.InputStream openRead(java.lang.String) throws java.io.IOException; + method public java.io.OutputStream openWrite(java.lang.String, long, long) throws java.io.IOException; + method public void setStagingProgress(float); + } + + public static abstract class PackageInstaller.SessionCallback { + ctor public PackageInstaller.SessionCallback(); + method public abstract void onActiveChanged(int, boolean); + method public abstract void onBadgingChanged(int); + method public abstract void onCreated(int); + method public abstract void onFinished(int, boolean); + method public abstract void onProgressChanged(int, float); + } + + public static class PackageInstaller.SessionInfo implements android.os.Parcelable { + method public android.content.Intent createDetailsIntent(); + method public int describeContents(); + method public android.graphics.Bitmap getAppIcon(); + method public java.lang.CharSequence getAppLabel(); + method public java.lang.String getAppPackageName(); + method public java.lang.String getInstallerPackageName(); + method public float getProgress(); + method public int getSessionId(); + method public boolean isActive(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public static class PackageInstaller.SessionParams implements android.os.Parcelable { + ctor public PackageInstaller.SessionParams(int); + method public int describeContents(); + method public void setAppIcon(android.graphics.Bitmap); + method public void setAppLabel(java.lang.CharSequence); + method public void setAppPackageName(java.lang.String); + method public void setInstallLocation(int); + method public void setOriginatingUri(android.net.Uri); + method public void setReferrerUri(android.net.Uri); + method public void setSize(long); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int MODE_FULL_INSTALL = 1; // 0x1 + field public static final int MODE_INHERIT_EXISTING = 2; // 0x2 + } + + public class PackageItemInfo { + ctor public PackageItemInfo(); + ctor public PackageItemInfo(android.content.pm.PackageItemInfo); + ctor protected PackageItemInfo(android.os.Parcel); + method protected void dumpBack(android.util.Printer, java.lang.String); + method protected void dumpFront(android.util.Printer, java.lang.String); + method public android.graphics.drawable.Drawable loadBanner(android.content.pm.PackageManager); + method public android.graphics.drawable.Drawable loadIcon(android.content.pm.PackageManager); + method public java.lang.CharSequence loadLabel(android.content.pm.PackageManager); + method public android.graphics.drawable.Drawable loadLogo(android.content.pm.PackageManager); + method public android.graphics.drawable.Drawable loadUnbadgedIcon(android.content.pm.PackageManager); + method public android.content.res.XmlResourceParser loadXmlMetaData(android.content.pm.PackageManager, java.lang.String); + method public void writeToParcel(android.os.Parcel, int); + field public int banner; + field public int icon; + field public int labelRes; + field public int logo; + field public android.os.Bundle metaData; + field public java.lang.String name; + field public java.lang.CharSequence nonLocalizedLabel; + field public java.lang.String packageName; + } + + public static class PackageItemInfo.DisplayNameComparator implements java.util.Comparator { + ctor public PackageItemInfo.DisplayNameComparator(android.content.pm.PackageManager); + method public final int compare(android.content.pm.PackageItemInfo, android.content.pm.PackageItemInfo); + } + + public abstract class PackageManager { + ctor public PackageManager(); + method public abstract deprecated void addPackageToPreferred(java.lang.String); + method public abstract boolean addPermission(android.content.pm.PermissionInfo); + method public abstract boolean addPermissionAsync(android.content.pm.PermissionInfo); + method public abstract deprecated void addPreferredActivity(android.content.IntentFilter, int, android.content.ComponentName[], android.content.ComponentName); + method public abstract java.lang.String[] canonicalToCurrentPackageNames(java.lang.String[]); + method public abstract int checkPermission(java.lang.String, java.lang.String); + method public abstract int checkSignatures(java.lang.String, java.lang.String); + method public abstract int checkSignatures(int, int); + method public abstract void clearPackagePreferredActivities(java.lang.String); + method public abstract java.lang.String[] currentToCanonicalPackageNames(java.lang.String[]); + method public abstract void extendVerificationTimeout(int, int, long); + method public abstract android.graphics.drawable.Drawable getActivityBanner(android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException; + method public abstract android.graphics.drawable.Drawable getActivityBanner(android.content.Intent) throws android.content.pm.PackageManager.NameNotFoundException; + method public abstract android.graphics.drawable.Drawable getActivityIcon(android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException; + method public abstract android.graphics.drawable.Drawable getActivityIcon(android.content.Intent) throws android.content.pm.PackageManager.NameNotFoundException; + method public abstract android.content.pm.ActivityInfo getActivityInfo(android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException; + method public abstract android.graphics.drawable.Drawable getActivityLogo(android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException; + method public abstract android.graphics.drawable.Drawable getActivityLogo(android.content.Intent) throws android.content.pm.PackageManager.NameNotFoundException; + method public abstract java.util.List getAllPermissionGroups(int); + method public abstract android.graphics.drawable.Drawable getApplicationBanner(android.content.pm.ApplicationInfo); + method public abstract android.graphics.drawable.Drawable getApplicationBanner(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException; + method public abstract int getApplicationEnabledSetting(java.lang.String); + method public abstract android.graphics.drawable.Drawable getApplicationIcon(android.content.pm.ApplicationInfo); + method public abstract android.graphics.drawable.Drawable getApplicationIcon(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException; + method public abstract android.content.pm.ApplicationInfo getApplicationInfo(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException; + method public abstract java.lang.CharSequence getApplicationLabel(android.content.pm.ApplicationInfo); + method public abstract android.graphics.drawable.Drawable getApplicationLogo(android.content.pm.ApplicationInfo); + method public abstract android.graphics.drawable.Drawable getApplicationLogo(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException; + method public abstract int getComponentEnabledSetting(android.content.ComponentName); + method public abstract android.graphics.drawable.Drawable getDefaultActivityIcon(); + method public abstract android.graphics.drawable.Drawable getDrawable(java.lang.String, int, android.content.pm.ApplicationInfo); + method public abstract java.util.List getInstalledApplications(int); + method public abstract java.util.List getInstalledPackages(int); + method public abstract java.lang.String getInstallerPackageName(java.lang.String); + method public abstract android.content.pm.InstrumentationInfo getInstrumentationInfo(android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException; + method public abstract android.content.Intent getLaunchIntentForPackage(java.lang.String); + method public abstract android.content.Intent getLeanbackLaunchIntentForPackage(java.lang.String); + method public abstract java.lang.String getNameForUid(int); + method public android.content.pm.PackageInfo getPackageArchiveInfo(java.lang.String, int); + method public abstract int[] getPackageGids(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException; + method public abstract android.content.pm.PackageInfo getPackageInfo(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException; + method public abstract android.content.pm.PackageInstaller getPackageInstaller(); + method public abstract java.lang.String[] getPackagesForUid(int); + method public abstract java.util.List getPackagesHoldingPermissions(java.lang.String[], int); + method public abstract android.content.pm.PermissionGroupInfo getPermissionGroupInfo(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException; + method public abstract android.content.pm.PermissionInfo getPermissionInfo(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException; + method public abstract int getPreferredActivities(java.util.List, java.util.List, java.lang.String); + method public abstract java.util.List getPreferredPackages(int); + method public abstract android.content.pm.ProviderInfo getProviderInfo(android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException; + method public abstract android.content.pm.ActivityInfo getReceiverInfo(android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException; + method public abstract android.content.res.Resources getResourcesForActivity(android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException; + method public abstract android.content.res.Resources getResourcesForApplication(android.content.pm.ApplicationInfo) throws android.content.pm.PackageManager.NameNotFoundException; + method public abstract android.content.res.Resources getResourcesForApplication(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException; + method public abstract android.content.pm.ServiceInfo getServiceInfo(android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException; + method public abstract android.content.pm.FeatureInfo[] getSystemAvailableFeatures(); + method public abstract java.lang.String[] getSystemSharedLibraryNames(); + method public abstract java.lang.CharSequence getText(java.lang.String, int, android.content.pm.ApplicationInfo); + method public abstract android.graphics.drawable.Drawable getUserBadgedDrawableForDensity(android.graphics.drawable.Drawable, android.os.UserHandle, android.graphics.Rect, int); + method public abstract android.graphics.drawable.Drawable getUserBadgedIcon(android.graphics.drawable.Drawable, android.os.UserHandle); + method public abstract java.lang.CharSequence getUserBadgedLabel(java.lang.CharSequence, android.os.UserHandle); + method public abstract android.content.res.XmlResourceParser getXml(java.lang.String, int, android.content.pm.ApplicationInfo); + method public abstract boolean hasSystemFeature(java.lang.String); + method public abstract boolean isSafeMode(); + method public abstract java.util.List queryBroadcastReceivers(android.content.Intent, int); + method public abstract java.util.List queryContentProviders(java.lang.String, int, int); + method public abstract java.util.List queryInstrumentation(java.lang.String, int); + method public abstract java.util.List queryIntentActivities(android.content.Intent, int); + method public abstract java.util.List queryIntentActivityOptions(android.content.ComponentName, android.content.Intent[], android.content.Intent, int); + method public abstract java.util.List queryIntentContentProviders(android.content.Intent, int); + method public abstract java.util.List queryIntentServices(android.content.Intent, int); + method public abstract java.util.List queryPermissionsByGroup(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException; + method public abstract deprecated void removePackageFromPreferred(java.lang.String); + method public abstract void removePermission(java.lang.String); + method public abstract android.content.pm.ResolveInfo resolveActivity(android.content.Intent, int); + method public abstract android.content.pm.ProviderInfo resolveContentProvider(java.lang.String, int); + method public abstract android.content.pm.ResolveInfo resolveService(android.content.Intent, int); + method public abstract void setApplicationEnabledSetting(java.lang.String, int, int); + method public abstract void setComponentEnabledSetting(android.content.ComponentName, int, int); + method public abstract void setInstallerPackageName(java.lang.String, java.lang.String); + method public abstract void verifyPendingInstall(int, int); + field public static final int COMPONENT_ENABLED_STATE_DEFAULT = 0; // 0x0 + field public static final int COMPONENT_ENABLED_STATE_DISABLED = 2; // 0x2 + field public static final int COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED = 4; // 0x4 + field public static final int COMPONENT_ENABLED_STATE_DISABLED_USER = 3; // 0x3 + field public static final int COMPONENT_ENABLED_STATE_ENABLED = 1; // 0x1 + field public static final int DONT_KILL_APP = 1; // 0x1 + field public static final java.lang.String EXTRA_VERIFICATION_ID = "android.content.pm.extra.VERIFICATION_ID"; + field public static final java.lang.String EXTRA_VERIFICATION_RESULT = "android.content.pm.extra.VERIFICATION_RESULT"; + field public static final java.lang.String FEATURE_APP_WIDGETS = "android.software.app_widgets"; + field public static final java.lang.String FEATURE_AUDIO_LOW_LATENCY = "android.hardware.audio.low_latency"; + field public static final java.lang.String FEATURE_AUDIO_OUTPUT = "android.hardware.audio.output"; + field public static final java.lang.String FEATURE_BACKUP = "android.software.backup"; + field public static final java.lang.String FEATURE_BLUETOOTH = "android.hardware.bluetooth"; + field public static final java.lang.String FEATURE_BLUETOOTH_LE = "android.hardware.bluetooth_le"; + field public static final java.lang.String FEATURE_CAMERA = "android.hardware.camera"; + field public static final java.lang.String FEATURE_CAMERA_ANY = "android.hardware.camera.any"; + field public static final java.lang.String FEATURE_CAMERA_AUTOFOCUS = "android.hardware.camera.autofocus"; + field public static final java.lang.String FEATURE_CAMERA_CAPABILITY_MANUAL_POST_PROCESSING = "android.hardware.camera.capability.manual_post_processing"; + field public static final java.lang.String FEATURE_CAMERA_CAPABILITY_MANUAL_SENSOR = "android.hardware.camera.capability.manual_sensor"; + field public static final java.lang.String FEATURE_CAMERA_CAPABILITY_RAW = "android.hardware.camera.capability.raw"; + field public static final java.lang.String FEATURE_CAMERA_EXTERNAL = "android.hardware.camera.external"; + field public static final java.lang.String FEATURE_CAMERA_FLASH = "android.hardware.camera.flash"; + field public static final java.lang.String FEATURE_CAMERA_FRONT = "android.hardware.camera.front"; + field public static final java.lang.String FEATURE_CAMERA_LEVEL_FULL = "android.hardware.camera.level.full"; + field public static final java.lang.String FEATURE_CONNECTION_SERVICE = "android.software.connectionservice"; + field public static final java.lang.String FEATURE_CONSUMER_IR = "android.hardware.consumerir"; + field public static final java.lang.String FEATURE_DEVICE_ADMIN = "android.software.device_admin"; + field public static final java.lang.String FEATURE_FAKETOUCH = "android.hardware.faketouch"; + field public static final java.lang.String FEATURE_FAKETOUCH_MULTITOUCH_DISTINCT = "android.hardware.faketouch.multitouch.distinct"; + field public static final java.lang.String FEATURE_FAKETOUCH_MULTITOUCH_JAZZHAND = "android.hardware.faketouch.multitouch.jazzhand"; + field public static final java.lang.String FEATURE_GAMEPAD = "android.hardware.gamepad"; + field public static final java.lang.String FEATURE_HOME_SCREEN = "android.software.home_screen"; + field public static final java.lang.String FEATURE_INPUT_METHODS = "android.software.input_methods"; + field public static final java.lang.String FEATURE_LEANBACK = "android.software.leanback"; + field public static final java.lang.String FEATURE_LIVE_TV = "android.software.live_tv"; + field public static final java.lang.String FEATURE_LIVE_WALLPAPER = "android.software.live_wallpaper"; + field public static final java.lang.String FEATURE_LOCATION = "android.hardware.location"; + field public static final java.lang.String FEATURE_LOCATION_GPS = "android.hardware.location.gps"; + field public static final java.lang.String FEATURE_LOCATION_NETWORK = "android.hardware.location.network"; + field public static final java.lang.String FEATURE_MANAGED_USERS = "android.software.managed_users"; + field public static final java.lang.String FEATURE_MICROPHONE = "android.hardware.microphone"; + field public static final java.lang.String FEATURE_NFC = "android.hardware.nfc"; + field public static final java.lang.String FEATURE_NFC_HOST_CARD_EMULATION = "android.hardware.nfc.hce"; + field public static final java.lang.String FEATURE_OPENGLES_EXTENSION_PACK = "android.hardware.opengles.aep"; + field public static final java.lang.String FEATURE_PRINTING = "android.software.print"; + field public static final java.lang.String FEATURE_SCREEN_LANDSCAPE = "android.hardware.screen.landscape"; + field public static final java.lang.String FEATURE_SCREEN_PORTRAIT = "android.hardware.screen.portrait"; + field public static final java.lang.String FEATURE_SECURELY_REMOVES_USERS = "android.software.securely_removes_users"; + field public static final java.lang.String FEATURE_SENSOR_ACCELEROMETER = "android.hardware.sensor.accelerometer"; + field public static final java.lang.String FEATURE_SENSOR_AMBIENT_TEMPERATURE = "android.hardware.sensor.ambient_temperature"; + field public static final java.lang.String FEATURE_SENSOR_BAROMETER = "android.hardware.sensor.barometer"; + field public static final java.lang.String FEATURE_SENSOR_COMPASS = "android.hardware.sensor.compass"; + field public static final java.lang.String FEATURE_SENSOR_GYROSCOPE = "android.hardware.sensor.gyroscope"; + field public static final java.lang.String FEATURE_SENSOR_HEART_RATE = "android.hardware.sensor.heartrate"; + field public static final java.lang.String FEATURE_SENSOR_HEART_RATE_ECG = "android.hardware.sensor.heartrate.ecg"; + field public static final java.lang.String FEATURE_SENSOR_LIGHT = "android.hardware.sensor.light"; + field public static final java.lang.String FEATURE_SENSOR_PROXIMITY = "android.hardware.sensor.proximity"; + field public static final java.lang.String FEATURE_SENSOR_RELATIVE_HUMIDITY = "android.hardware.sensor.relative_humidity"; + field public static final java.lang.String FEATURE_SENSOR_STEP_COUNTER = "android.hardware.sensor.stepcounter"; + field public static final java.lang.String FEATURE_SENSOR_STEP_DETECTOR = "android.hardware.sensor.stepdetector"; + field public static final java.lang.String FEATURE_SIP = "android.software.sip"; + field public static final java.lang.String FEATURE_SIP_VOIP = "android.software.sip.voip"; + field public static final java.lang.String FEATURE_TELEPHONY = "android.hardware.telephony"; + field public static final java.lang.String FEATURE_TELEPHONY_CDMA = "android.hardware.telephony.cdma"; + field public static final java.lang.String FEATURE_TELEPHONY_GSM = "android.hardware.telephony.gsm"; + field public static final deprecated java.lang.String FEATURE_TELEVISION = "android.hardware.type.television"; + field public static final java.lang.String FEATURE_TOUCHSCREEN = "android.hardware.touchscreen"; + field public static final java.lang.String FEATURE_TOUCHSCREEN_MULTITOUCH = "android.hardware.touchscreen.multitouch"; + field public static final java.lang.String FEATURE_TOUCHSCREEN_MULTITOUCH_DISTINCT = "android.hardware.touchscreen.multitouch.distinct"; + field public static final java.lang.String FEATURE_TOUCHSCREEN_MULTITOUCH_JAZZHAND = "android.hardware.touchscreen.multitouch.jazzhand"; + field public static final java.lang.String FEATURE_USB_ACCESSORY = "android.hardware.usb.accessory"; + field public static final java.lang.String FEATURE_USB_HOST = "android.hardware.usb.host"; + field public static final java.lang.String FEATURE_VERIFIED_BOOT = "android.software.verified_boot"; + field public static final java.lang.String FEATURE_WATCH = "android.hardware.type.watch"; + field public static final java.lang.String FEATURE_WEBVIEW = "android.software.webview"; + field public static final java.lang.String FEATURE_WIFI = "android.hardware.wifi"; + field public static final java.lang.String FEATURE_WIFI_DIRECT = "android.hardware.wifi.direct"; + field public static final int GET_ACTIVITIES = 1; // 0x1 + field public static final int GET_CONFIGURATIONS = 16384; // 0x4000 + field public static final int GET_DISABLED_COMPONENTS = 512; // 0x200 + field public static final int GET_DISABLED_UNTIL_USED_COMPONENTS = 32768; // 0x8000 + field public static final int GET_GIDS = 256; // 0x100 + field public static final int GET_INSTRUMENTATION = 16; // 0x10 + field public static final int GET_INTENT_FILTERS = 32; // 0x20 + field public static final int GET_META_DATA = 128; // 0x80 + field public static final int GET_PERMISSIONS = 4096; // 0x1000 + field public static final int GET_PROVIDERS = 8; // 0x8 + field public static final int GET_RECEIVERS = 2; // 0x2 + field public static final int GET_RESOLVED_FILTER = 64; // 0x40 + field public static final int GET_SERVICES = 4; // 0x4 + field public static final int GET_SHARED_LIBRARY_FILES = 1024; // 0x400 + field public static final int GET_SIGNATURES = 64; // 0x40 + field public static final int GET_UNINSTALLED_PACKAGES = 8192; // 0x2000 + field public static final int GET_URI_PERMISSION_PATTERNS = 2048; // 0x800 + field public static final int INSTALL_FAILED_ALREADY_EXISTS = -1; // 0xffffffff + field public static final int INSTALL_FAILED_CONFLICTING_PROVIDER = -13; // 0xfffffff3 + field public static final int INSTALL_FAILED_CONTAINER_ERROR = -18; // 0xffffffee + field public static final int INSTALL_FAILED_CPU_ABI_INCOMPATIBLE = -16; // 0xfffffff0 + field public static final int INSTALL_FAILED_DEXOPT = -11; // 0xfffffff5 + field public static final int INSTALL_FAILED_DUPLICATE_PACKAGE = -5; // 0xfffffffb + field public static final int INSTALL_FAILED_INSUFFICIENT_STORAGE = -4; // 0xfffffffc + field public static final int INSTALL_FAILED_INTERNAL_ERROR = -110; // 0xffffff92 + field public static final int INSTALL_FAILED_INVALID_APK = -2; // 0xfffffffe + field public static final int INSTALL_FAILED_INVALID_INSTALL_LOCATION = -19; // 0xffffffed + field public static final int INSTALL_FAILED_INVALID_URI = -3; // 0xfffffffd + field public static final int INSTALL_FAILED_MEDIA_UNAVAILABLE = -20; // 0xffffffec + field public static final int INSTALL_FAILED_MISSING_FEATURE = -17; // 0xffffffef + field public static final int INSTALL_FAILED_MISSING_SHARED_LIBRARY = -9; // 0xfffffff7 + field public static final int INSTALL_FAILED_NEWER_SDK = -14; // 0xfffffff2 + field public static final int INSTALL_FAILED_NO_SHARED_USER = -6; // 0xfffffffa + field public static final int INSTALL_FAILED_OLDER_SDK = -12; // 0xfffffff4 + field public static final int INSTALL_FAILED_PACKAGE_CHANGED = -23; // 0xffffffe9 + field public static final int INSTALL_FAILED_REPLACE_COULDNT_DELETE = -10; // 0xfffffff6 + field public static final int INSTALL_FAILED_SHARED_USER_INCOMPATIBLE = -8; // 0xfffffff8 + field public static final int INSTALL_FAILED_TEST_ONLY = -15; // 0xfffffff1 + field public static final int INSTALL_FAILED_UPDATE_INCOMPATIBLE = -7; // 0xfffffff9 + field public static final int INSTALL_FAILED_VERIFICATION_FAILURE = -22; // 0xffffffea + field public static final int INSTALL_FAILED_VERIFICATION_TIMEOUT = -21; // 0xffffffeb + field public static final int INSTALL_PARSE_FAILED_BAD_MANIFEST = -101; // 0xffffff9b + field public static final int INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME = -106; // 0xffffff96 + field public static final int INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID = -107; // 0xffffff95 + field public static final int INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING = -105; // 0xffffff97 + field public static final int INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES = -104; // 0xffffff98 + field public static final int INSTALL_PARSE_FAILED_MANIFEST_EMPTY = -109; // 0xffffff93 + field public static final int INSTALL_PARSE_FAILED_MANIFEST_MALFORMED = -108; // 0xffffff94 + field public static final int INSTALL_PARSE_FAILED_NOT_APK = -100; // 0xffffff9c + field public static final int INSTALL_PARSE_FAILED_NO_CERTIFICATES = -103; // 0xffffff99 + field public static final int INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION = -102; // 0xffffff9a + field public static final int INSTALL_SUCCEEDED = 1; // 0x1 + field public static final int MATCH_DEFAULT_ONLY = 65536; // 0x10000 + field public static final long MAXIMUM_VERIFICATION_TIMEOUT = 3600000L; // 0x36ee80L + field public static final int PERMISSION_DENIED = -1; // 0xffffffff + field public static final int PERMISSION_GRANTED = 0; // 0x0 + field public static final int SIGNATURE_FIRST_NOT_SIGNED = -1; // 0xffffffff + field public static final int SIGNATURE_MATCH = 0; // 0x0 + field public static final int SIGNATURE_NEITHER_SIGNED = 1; // 0x1 + field public static final int SIGNATURE_NO_MATCH = -3; // 0xfffffffd + field public static final int SIGNATURE_SECOND_NOT_SIGNED = -2; // 0xfffffffe + field public static final int SIGNATURE_UNKNOWN_PACKAGE = -4; // 0xfffffffc + field public static final int VERIFICATION_ALLOW = 1; // 0x1 + field public static final int VERIFICATION_REJECT = -1; // 0xffffffff + } + + public static class PackageManager.NameNotFoundException extends android.util.AndroidException { + ctor public PackageManager.NameNotFoundException(); + ctor public PackageManager.NameNotFoundException(java.lang.String); + } + + public class PackageStats implements android.os.Parcelable { + ctor public PackageStats(java.lang.String); + ctor public PackageStats(android.os.Parcel); + ctor public PackageStats(android.content.pm.PackageStats); + method public int describeContents(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public long cacheSize; + field public long codeSize; + field public long dataSize; + field public long externalCacheSize; + field public long externalCodeSize; + field public long externalDataSize; + field public long externalMediaSize; + field public long externalObbSize; + field public java.lang.String packageName; + } + + public class PathPermission extends android.os.PatternMatcher { + ctor public PathPermission(java.lang.String, int, java.lang.String, java.lang.String); + ctor public PathPermission(android.os.Parcel); + method public java.lang.String getReadPermission(); + method public java.lang.String getWritePermission(); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public class PermissionGroupInfo extends android.content.pm.PackageItemInfo implements android.os.Parcelable { + ctor public PermissionGroupInfo(); + ctor public PermissionGroupInfo(android.content.pm.PermissionGroupInfo); + method public int describeContents(); + method public java.lang.CharSequence loadDescription(android.content.pm.PackageManager); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int FLAG_PERSONAL_INFO = 1; // 0x1 + field public int descriptionRes; + field public int flags; + field public java.lang.CharSequence nonLocalizedDescription; + field public int priority; + } + + public class PermissionInfo extends android.content.pm.PackageItemInfo implements android.os.Parcelable { + ctor public PermissionInfo(); + ctor public PermissionInfo(android.content.pm.PermissionInfo); + method public int describeContents(); + method public java.lang.CharSequence loadDescription(android.content.pm.PackageManager); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int FLAG_COSTS_MONEY = 1; // 0x1 + field public static final int PROTECTION_DANGEROUS = 1; // 0x1 + field public static final int PROTECTION_FLAG_APPOP = 64; // 0x40 + field public static final int PROTECTION_FLAG_DEVELOPMENT = 32; // 0x20 + field public static final int PROTECTION_FLAG_SYSTEM = 16; // 0x10 + field public static final int PROTECTION_MASK_BASE = 15; // 0xf + field public static final int PROTECTION_MASK_FLAGS = 240; // 0xf0 + field public static final int PROTECTION_NORMAL = 0; // 0x0 + field public static final int PROTECTION_SIGNATURE = 2; // 0x2 + field public static final int PROTECTION_SIGNATURE_OR_SYSTEM = 3; // 0x3 + field public int descriptionRes; + field public int flags; + field public java.lang.String group; + field public java.lang.CharSequence nonLocalizedDescription; + field public int protectionLevel; + } + + public final class ProviderInfo extends android.content.pm.ComponentInfo implements android.os.Parcelable { + ctor public ProviderInfo(); + ctor public ProviderInfo(android.content.pm.ProviderInfo); + method public int describeContents(); + method public void dump(android.util.Printer, java.lang.String); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int FLAG_SINGLE_USER = 1073741824; // 0x40000000 + field public java.lang.String authority; + field public int flags; + field public boolean grantUriPermissions; + field public int initOrder; + field public deprecated boolean isSyncable; + field public boolean multiprocess; + field public android.content.pm.PathPermission[] pathPermissions; + field public java.lang.String readPermission; + field public android.os.PatternMatcher[] uriPermissionPatterns; + field public java.lang.String writePermission; + } + + public class ResolveInfo implements android.os.Parcelable { + ctor public ResolveInfo(); + ctor public ResolveInfo(android.content.pm.ResolveInfo); + method public int describeContents(); + method public void dump(android.util.Printer, java.lang.String); + method public final int getIconResource(); + method public android.graphics.drawable.Drawable loadIcon(android.content.pm.PackageManager); + method public java.lang.CharSequence loadLabel(android.content.pm.PackageManager); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public android.content.pm.ActivityInfo activityInfo; + field public android.content.IntentFilter filter; + field public int icon; + field public boolean isDefault; + field public int labelRes; + field public int match; + field public java.lang.CharSequence nonLocalizedLabel; + field public int preferredOrder; + field public int priority; + field public android.content.pm.ProviderInfo providerInfo; + field public java.lang.String resolvePackageName; + field public android.content.pm.ServiceInfo serviceInfo; + field public int specificIndex; + } + + public static class ResolveInfo.DisplayNameComparator implements java.util.Comparator { + ctor public ResolveInfo.DisplayNameComparator(android.content.pm.PackageManager); + method public final int compare(android.content.pm.ResolveInfo, android.content.pm.ResolveInfo); + } + + public class ServiceInfo extends android.content.pm.ComponentInfo implements android.os.Parcelable { + ctor public ServiceInfo(); + ctor public ServiceInfo(android.content.pm.ServiceInfo); + method public int describeContents(); + method public void dump(android.util.Printer, java.lang.String); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int FLAG_ISOLATED_PROCESS = 2; // 0x2 + field public static final int FLAG_SINGLE_USER = 1073741824; // 0x40000000 + field public static final int FLAG_STOP_WITH_TASK = 1; // 0x1 + field public int flags; + field public java.lang.String permission; + } + + public class Signature implements android.os.Parcelable { + ctor public Signature(byte[]); + ctor public Signature(java.lang.String); + method public int describeContents(); + method public byte[] toByteArray(); + method public char[] toChars(); + method public char[] toChars(char[], int[]); + method public java.lang.String toCharsString(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + +} + +package android.content.res { + + public class AssetFileDescriptor implements java.io.Closeable android.os.Parcelable { + ctor public AssetFileDescriptor(android.os.ParcelFileDescriptor, long, long); + ctor public AssetFileDescriptor(android.os.ParcelFileDescriptor, long, long, android.os.Bundle); + method public void close() throws java.io.IOException; + method public java.io.FileInputStream createInputStream() throws java.io.IOException; + method public java.io.FileOutputStream createOutputStream() throws java.io.IOException; + method public int describeContents(); + method public long getDeclaredLength(); + method public android.os.Bundle getExtras(); + method public java.io.FileDescriptor getFileDescriptor(); + method public long getLength(); + method public android.os.ParcelFileDescriptor getParcelFileDescriptor(); + method public long getStartOffset(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final long UNKNOWN_LENGTH = -1L; // 0xffffffffffffffffL + } + + public static class AssetFileDescriptor.AutoCloseInputStream extends android.os.ParcelFileDescriptor.AutoCloseInputStream { + ctor public AssetFileDescriptor.AutoCloseInputStream(android.content.res.AssetFileDescriptor) throws java.io.IOException; + } + + public static class AssetFileDescriptor.AutoCloseOutputStream extends android.os.ParcelFileDescriptor.AutoCloseOutputStream { + ctor public AssetFileDescriptor.AutoCloseOutputStream(android.content.res.AssetFileDescriptor) throws java.io.IOException; + } + + public final class AssetManager implements java.lang.AutoCloseable { + method public void close(); + method public final java.lang.String[] getLocales(); + method public final java.lang.String[] list(java.lang.String) throws java.io.IOException; + method public final java.io.InputStream open(java.lang.String) throws java.io.IOException; + method public final java.io.InputStream open(java.lang.String, int) throws java.io.IOException; + method public final android.content.res.AssetFileDescriptor openFd(java.lang.String) throws java.io.IOException; + method public final android.content.res.AssetFileDescriptor openNonAssetFd(java.lang.String) throws java.io.IOException; + method public final android.content.res.AssetFileDescriptor openNonAssetFd(int, java.lang.String) throws java.io.IOException; + method public final android.content.res.XmlResourceParser openXmlResourceParser(java.lang.String) throws java.io.IOException; + method public final android.content.res.XmlResourceParser openXmlResourceParser(int, java.lang.String) throws java.io.IOException; + field public static final int ACCESS_BUFFER = 3; // 0x3 + field public static final int ACCESS_RANDOM = 1; // 0x1 + field public static final int ACCESS_STREAMING = 2; // 0x2 + field public static final int ACCESS_UNKNOWN = 0; // 0x0 + } + + public final class AssetManager.AssetInputStream extends java.io.InputStream { + method public final int available() throws java.io.IOException; + method public final void close() throws java.io.IOException; + method public final void mark(int); + method public final boolean markSupported(); + method public final int read() throws java.io.IOException; + method public final int read(byte[]) throws java.io.IOException; + method public final int read(byte[], int, int) throws java.io.IOException; + method public final void reset() throws java.io.IOException; + method public final long skip(long) throws java.io.IOException; + } + + public class ColorStateList implements android.os.Parcelable { + ctor public ColorStateList(int[][], int[]); + method public static android.content.res.ColorStateList createFromXml(android.content.res.Resources, org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException; + method public int describeContents(); + method public int getColorForState(int[], int); + method public int getDefaultColor(); + method public boolean isOpaque(); + method public boolean isStateful(); + method public static android.content.res.ColorStateList valueOf(int); + method public android.content.res.ColorStateList withAlpha(int); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public final class Configuration implements java.lang.Comparable android.os.Parcelable { + ctor public Configuration(); + ctor public Configuration(android.content.res.Configuration); + method public int compareTo(android.content.res.Configuration); + method public int describeContents(); + method public int diff(android.content.res.Configuration); + method public boolean equals(android.content.res.Configuration); + method public int getLayoutDirection(); + method public boolean isLayoutSizeAtLeast(int); + method public static boolean needNewResources(int, int); + method public void readFromParcel(android.os.Parcel); + method public void setLayoutDirection(java.util.Locale); + method public void setLocale(java.util.Locale); + method public void setTo(android.content.res.Configuration); + method public void setToDefaults(); + method public int updateFrom(android.content.res.Configuration); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int DENSITY_DPI_UNDEFINED = 0; // 0x0 + field public static final int HARDKEYBOARDHIDDEN_NO = 1; // 0x1 + field public static final int HARDKEYBOARDHIDDEN_UNDEFINED = 0; // 0x0 + field public static final int HARDKEYBOARDHIDDEN_YES = 2; // 0x2 + field public static final int KEYBOARDHIDDEN_NO = 1; // 0x1 + field public static final int KEYBOARDHIDDEN_UNDEFINED = 0; // 0x0 + field public static final int KEYBOARDHIDDEN_YES = 2; // 0x2 + field public static final int KEYBOARD_12KEY = 3; // 0x3 + field public static final int KEYBOARD_NOKEYS = 1; // 0x1 + field public static final int KEYBOARD_QWERTY = 2; // 0x2 + field public static final int KEYBOARD_UNDEFINED = 0; // 0x0 + field public static final int MNC_ZERO = 65535; // 0xffff + field public static final int NAVIGATIONHIDDEN_NO = 1; // 0x1 + field public static final int NAVIGATIONHIDDEN_UNDEFINED = 0; // 0x0 + field public static final int NAVIGATIONHIDDEN_YES = 2; // 0x2 + field public static final int NAVIGATION_DPAD = 2; // 0x2 + field public static final int NAVIGATION_NONAV = 1; // 0x1 + field public static final int NAVIGATION_TRACKBALL = 3; // 0x3 + field public static final int NAVIGATION_UNDEFINED = 0; // 0x0 + field public static final int NAVIGATION_WHEEL = 4; // 0x4 + field public static final int ORIENTATION_LANDSCAPE = 2; // 0x2 + field public static final int ORIENTATION_PORTRAIT = 1; // 0x1 + field public static final deprecated int ORIENTATION_SQUARE = 3; // 0x3 + field public static final int ORIENTATION_UNDEFINED = 0; // 0x0 + field public static final int SCREENLAYOUT_LAYOUTDIR_LTR = 64; // 0x40 + field public static final int SCREENLAYOUT_LAYOUTDIR_MASK = 192; // 0xc0 + field public static final int SCREENLAYOUT_LAYOUTDIR_RTL = 128; // 0x80 + field public static final int SCREENLAYOUT_LAYOUTDIR_SHIFT = 6; // 0x6 + field public static final int SCREENLAYOUT_LAYOUTDIR_UNDEFINED = 0; // 0x0 + field public static final int SCREENLAYOUT_LONG_MASK = 48; // 0x30 + field public static final int SCREENLAYOUT_LONG_NO = 16; // 0x10 + field public static final int SCREENLAYOUT_LONG_UNDEFINED = 0; // 0x0 + field public static final int SCREENLAYOUT_LONG_YES = 32; // 0x20 + field public static final int SCREENLAYOUT_SIZE_LARGE = 3; // 0x3 + field public static final int SCREENLAYOUT_SIZE_MASK = 15; // 0xf + field public static final int SCREENLAYOUT_SIZE_NORMAL = 2; // 0x2 + field public static final int SCREENLAYOUT_SIZE_SMALL = 1; // 0x1 + field public static final int SCREENLAYOUT_SIZE_UNDEFINED = 0; // 0x0 + field public static final int SCREENLAYOUT_SIZE_XLARGE = 4; // 0x4 + field public static final int SCREENLAYOUT_UNDEFINED = 0; // 0x0 + field public static final int SCREEN_HEIGHT_DP_UNDEFINED = 0; // 0x0 + field public static final int SCREEN_WIDTH_DP_UNDEFINED = 0; // 0x0 + field public static final int SMALLEST_SCREEN_WIDTH_DP_UNDEFINED = 0; // 0x0 + field public static final int TOUCHSCREEN_FINGER = 3; // 0x3 + field public static final int TOUCHSCREEN_NOTOUCH = 1; // 0x1 + field public static final deprecated int TOUCHSCREEN_STYLUS = 2; // 0x2 + field public static final int TOUCHSCREEN_UNDEFINED = 0; // 0x0 + field public static final int UI_MODE_NIGHT_MASK = 48; // 0x30 + field public static final int UI_MODE_NIGHT_NO = 16; // 0x10 + field public static final int UI_MODE_NIGHT_UNDEFINED = 0; // 0x0 + field public static final int UI_MODE_NIGHT_YES = 32; // 0x20 + field public static final int UI_MODE_TYPE_APPLIANCE = 5; // 0x5 + field public static final int UI_MODE_TYPE_CAR = 3; // 0x3 + field public static final int UI_MODE_TYPE_DESK = 2; // 0x2 + field public static final int UI_MODE_TYPE_MASK = 15; // 0xf + field public static final int UI_MODE_TYPE_NORMAL = 1; // 0x1 + field public static final int UI_MODE_TYPE_TELEVISION = 4; // 0x4 + field public static final int UI_MODE_TYPE_UNDEFINED = 0; // 0x0 + field public static final int UI_MODE_TYPE_WATCH = 6; // 0x6 + field public int densityDpi; + field public float fontScale; + field public int hardKeyboardHidden; + field public int keyboard; + field public int keyboardHidden; + field public java.util.Locale locale; + field public int mcc; + field public int mnc; + field public int navigation; + field public int navigationHidden; + field public int orientation; + field public int screenHeightDp; + field public int screenLayout; + field public int screenWidthDp; + field public int smallestScreenWidthDp; + field public int touchscreen; + field public int uiMode; + } + + public class ObbInfo implements android.os.Parcelable { + method public int describeContents(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int OBB_OVERLAY = 1; // 0x1 + field public java.lang.String filename; + field public int flags; + field public java.lang.String packageName; + field public int version; + } + + public class ObbScanner { + method public static android.content.res.ObbInfo getObbInfo(java.lang.String) throws java.io.IOException; + } + + public class Resources { + ctor public Resources(android.content.res.AssetManager, android.util.DisplayMetrics, android.content.res.Configuration); + method public final void finishPreloading(); + method public final void flushLayoutCache(); + method public android.content.res.XmlResourceParser getAnimation(int) throws android.content.res.Resources.NotFoundException; + method public final android.content.res.AssetManager getAssets(); + method public boolean getBoolean(int) throws android.content.res.Resources.NotFoundException; + method public int getColor(int) throws android.content.res.Resources.NotFoundException; + method public android.content.res.ColorStateList getColorStateList(int) throws android.content.res.Resources.NotFoundException; + method public android.content.res.Configuration getConfiguration(); + method public float getDimension(int) throws android.content.res.Resources.NotFoundException; + method public int getDimensionPixelOffset(int) throws android.content.res.Resources.NotFoundException; + method public int getDimensionPixelSize(int) throws android.content.res.Resources.NotFoundException; + method public android.util.DisplayMetrics getDisplayMetrics(); + method public deprecated android.graphics.drawable.Drawable getDrawable(int) throws android.content.res.Resources.NotFoundException; + method public android.graphics.drawable.Drawable getDrawable(int, android.content.res.Resources.Theme) throws android.content.res.Resources.NotFoundException; + method public deprecated android.graphics.drawable.Drawable getDrawableForDensity(int, int) throws android.content.res.Resources.NotFoundException; + method public android.graphics.drawable.Drawable getDrawableForDensity(int, int, android.content.res.Resources.Theme); + method public float getFraction(int, int, int); + method public int getIdentifier(java.lang.String, java.lang.String, java.lang.String); + method public int[] getIntArray(int) throws android.content.res.Resources.NotFoundException; + method public int getInteger(int) throws android.content.res.Resources.NotFoundException; + method public android.content.res.XmlResourceParser getLayout(int) throws android.content.res.Resources.NotFoundException; + method public android.graphics.Movie getMovie(int) throws android.content.res.Resources.NotFoundException; + method public java.lang.String getQuantityString(int, int, java.lang.Object...) throws android.content.res.Resources.NotFoundException; + method public java.lang.String getQuantityString(int, int) throws android.content.res.Resources.NotFoundException; + method public java.lang.CharSequence getQuantityText(int, int) throws android.content.res.Resources.NotFoundException; + method public java.lang.String getResourceEntryName(int) throws android.content.res.Resources.NotFoundException; + method public java.lang.String getResourceName(int) throws android.content.res.Resources.NotFoundException; + method public java.lang.String getResourcePackageName(int) throws android.content.res.Resources.NotFoundException; + method public java.lang.String getResourceTypeName(int) throws android.content.res.Resources.NotFoundException; + method public java.lang.String getString(int) throws android.content.res.Resources.NotFoundException; + method public java.lang.String getString(int, java.lang.Object...) throws android.content.res.Resources.NotFoundException; + method public java.lang.String[] getStringArray(int) throws android.content.res.Resources.NotFoundException; + method public static android.content.res.Resources getSystem(); + method public java.lang.CharSequence getText(int) throws android.content.res.Resources.NotFoundException; + method public java.lang.CharSequence getText(int, java.lang.CharSequence); + method public java.lang.CharSequence[] getTextArray(int) throws android.content.res.Resources.NotFoundException; + method public void getValue(int, android.util.TypedValue, boolean) throws android.content.res.Resources.NotFoundException; + method public void getValue(java.lang.String, android.util.TypedValue, boolean) throws android.content.res.Resources.NotFoundException; + method public void getValueForDensity(int, int, android.util.TypedValue, boolean) throws android.content.res.Resources.NotFoundException; + method public android.content.res.XmlResourceParser getXml(int) throws android.content.res.Resources.NotFoundException; + method public final android.content.res.Resources.Theme newTheme(); + method public android.content.res.TypedArray obtainAttributes(android.util.AttributeSet, int[]); + method public android.content.res.TypedArray obtainTypedArray(int) throws android.content.res.Resources.NotFoundException; + method public java.io.InputStream openRawResource(int) throws android.content.res.Resources.NotFoundException; + method public java.io.InputStream openRawResource(int, android.util.TypedValue) throws android.content.res.Resources.NotFoundException; + method public android.content.res.AssetFileDescriptor openRawResourceFd(int) throws android.content.res.Resources.NotFoundException; + method public void parseBundleExtra(java.lang.String, android.util.AttributeSet, android.os.Bundle) throws org.xmlpull.v1.XmlPullParserException; + method public void parseBundleExtras(android.content.res.XmlResourceParser, android.os.Bundle) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException; + method public void updateConfiguration(android.content.res.Configuration, android.util.DisplayMetrics); + } + + public static class Resources.NotFoundException extends java.lang.RuntimeException { + ctor public Resources.NotFoundException(); + ctor public Resources.NotFoundException(java.lang.String); + } + + public final class Resources.Theme { + method public void applyStyle(int, boolean); + method public void dump(int, java.lang.String, java.lang.String); + method public android.graphics.drawable.Drawable getDrawable(int) throws android.content.res.Resources.NotFoundException; + method public android.content.res.Resources getResources(); + method public android.content.res.TypedArray obtainStyledAttributes(int[]); + method public android.content.res.TypedArray obtainStyledAttributes(int, int[]) throws android.content.res.Resources.NotFoundException; + method public android.content.res.TypedArray obtainStyledAttributes(android.util.AttributeSet, int[], int, int); + method public boolean resolveAttribute(int, android.util.TypedValue, boolean); + method public void setTo(android.content.res.Resources.Theme); + } + + public class TypedArray { + method public boolean getBoolean(int, boolean); + method public int getChangingConfigurations(); + method public int getColor(int, int); + method public android.content.res.ColorStateList getColorStateList(int); + method public float getDimension(int, float); + method public int getDimensionPixelOffset(int, int); + method public int getDimensionPixelSize(int, int); + method public android.graphics.drawable.Drawable getDrawable(int); + method public float getFloat(int, float); + method public float getFraction(int, int, int, float); + method public int getIndex(int); + method public int getIndexCount(); + method public int getInt(int, int); + method public int getInteger(int, int); + method public int getLayoutDimension(int, java.lang.String); + method public int getLayoutDimension(int, int); + method public java.lang.String getNonResourceString(int); + method public java.lang.String getPositionDescription(); + method public int getResourceId(int, int); + method public android.content.res.Resources getResources(); + method public java.lang.String getString(int); + method public java.lang.CharSequence getText(int); + method public java.lang.CharSequence[] getTextArray(int); + method public int getType(int); + method public boolean getValue(int, android.util.TypedValue); + method public boolean hasValue(int); + method public boolean hasValueOrEmpty(int); + method public int length(); + method public android.util.TypedValue peekValue(int); + method public void recycle(); + } + + public abstract interface XmlResourceParser implements android.util.AttributeSet java.lang.AutoCloseable org.xmlpull.v1.XmlPullParser { + method public abstract void close(); + } + +} + +package android.database { + + public abstract class AbstractCursor implements android.database.CrossProcessCursor { + ctor public AbstractCursor(); + method protected void checkPosition(); + method public void close(); + method public void copyStringToBuffer(int, android.database.CharArrayBuffer); + method public void deactivate(); + method public void fillWindow(int, android.database.CursorWindow); + method public byte[] getBlob(int); + method public int getColumnCount(); + method public int getColumnIndex(java.lang.String); + method public int getColumnIndexOrThrow(java.lang.String); + method public java.lang.String getColumnName(int); + method public abstract java.lang.String[] getColumnNames(); + method public abstract int getCount(); + method public abstract double getDouble(int); + method public android.os.Bundle getExtras(); + method public abstract float getFloat(int); + method public abstract int getInt(int); + method public abstract long getLong(int); + method public android.net.Uri getNotificationUri(); + method public final int getPosition(); + method public abstract short getShort(int); + method public abstract java.lang.String getString(int); + method public int getType(int); + method protected deprecated java.lang.Object getUpdatedField(int); + method public boolean getWantsAllOnMoveCalls(); + method public android.database.CursorWindow getWindow(); + method public final boolean isAfterLast(); + method public final boolean isBeforeFirst(); + method public boolean isClosed(); + method protected deprecated boolean isFieldUpdated(int); + method public final boolean isFirst(); + method public final boolean isLast(); + method public abstract boolean isNull(int); + method public final boolean move(int); + method public final boolean moveToFirst(); + method public final boolean moveToLast(); + method public final boolean moveToNext(); + method public final boolean moveToPosition(int); + method public final boolean moveToPrevious(); + method protected void onChange(boolean); + method public boolean onMove(int, int); + method public void registerContentObserver(android.database.ContentObserver); + method public void registerDataSetObserver(android.database.DataSetObserver); + method public boolean requery(); + method public android.os.Bundle respond(android.os.Bundle); + method public void setNotificationUri(android.content.ContentResolver, android.net.Uri); + method public void unregisterContentObserver(android.database.ContentObserver); + method public void unregisterDataSetObserver(android.database.DataSetObserver); + field protected boolean mClosed; + field protected android.content.ContentResolver mContentResolver; + field protected deprecated java.lang.Long mCurrentRowID; + field protected int mPos; + field protected deprecated int mRowIdColumnIndex; + field protected deprecated java.util.HashMap> mUpdatedRows; + } + + protected static class AbstractCursor.SelfContentObserver extends android.database.ContentObserver { + ctor public AbstractCursor.SelfContentObserver(android.database.AbstractCursor); + } + + public abstract class AbstractWindowedCursor extends android.database.AbstractCursor { + ctor public AbstractWindowedCursor(); + method public double getDouble(int); + method public float getFloat(int); + method public int getInt(int); + method public long getLong(int); + method public short getShort(int); + method public java.lang.String getString(int); + method public boolean hasWindow(); + method public deprecated boolean isBlob(int); + method public deprecated boolean isFloat(int); + method public deprecated boolean isLong(int); + method public boolean isNull(int); + method public deprecated boolean isString(int); + method public void setWindow(android.database.CursorWindow); + field protected android.database.CursorWindow mWindow; + } + + public final class CharArrayBuffer { + ctor public CharArrayBuffer(int); + ctor public CharArrayBuffer(char[]); + field public char[] data; + field public int sizeCopied; + } + + public class ContentObservable extends android.database.Observable { + ctor public ContentObservable(); + method public deprecated void dispatchChange(boolean); + method public void dispatchChange(boolean, android.net.Uri); + method public deprecated void notifyChange(boolean); + method public void registerObserver(android.database.ContentObserver); + } + + public abstract class ContentObserver { + ctor public ContentObserver(android.os.Handler); + method public boolean deliverSelfNotifications(); + method public final deprecated void dispatchChange(boolean); + method public final void dispatchChange(boolean, android.net.Uri); + method public void onChange(boolean); + method public void onChange(boolean, android.net.Uri); + } + + public abstract interface CrossProcessCursor implements android.database.Cursor { + method public abstract void fillWindow(int, android.database.CursorWindow); + method public abstract android.database.CursorWindow getWindow(); + method public abstract boolean onMove(int, int); + } + + public class CrossProcessCursorWrapper extends android.database.CursorWrapper implements android.database.CrossProcessCursor { + ctor public CrossProcessCursorWrapper(android.database.Cursor); + method public void fillWindow(int, android.database.CursorWindow); + method public android.database.CursorWindow getWindow(); + method public boolean onMove(int, int); + } + + public abstract interface Cursor implements java.io.Closeable { + method public abstract void close(); + method public abstract void copyStringToBuffer(int, android.database.CharArrayBuffer); + method public abstract deprecated void deactivate(); + method public abstract byte[] getBlob(int); + method public abstract int getColumnCount(); + method public abstract int getColumnIndex(java.lang.String); + method public abstract int getColumnIndexOrThrow(java.lang.String) throws java.lang.IllegalArgumentException; + method public abstract java.lang.String getColumnName(int); + method public abstract java.lang.String[] getColumnNames(); + method public abstract int getCount(); + method public abstract double getDouble(int); + method public abstract android.os.Bundle getExtras(); + method public abstract float getFloat(int); + method public abstract int getInt(int); + method public abstract long getLong(int); + method public abstract android.net.Uri getNotificationUri(); + method public abstract int getPosition(); + method public abstract short getShort(int); + method public abstract java.lang.String getString(int); + method public abstract int getType(int); + method public abstract boolean getWantsAllOnMoveCalls(); + method public abstract boolean isAfterLast(); + method public abstract boolean isBeforeFirst(); + method public abstract boolean isClosed(); + method public abstract boolean isFirst(); + method public abstract boolean isLast(); + method public abstract boolean isNull(int); + method public abstract boolean move(int); + method public abstract boolean moveToFirst(); + method public abstract boolean moveToLast(); + method public abstract boolean moveToNext(); + method public abstract boolean moveToPosition(int); + method public abstract boolean moveToPrevious(); + method public abstract void registerContentObserver(android.database.ContentObserver); + method public abstract void registerDataSetObserver(android.database.DataSetObserver); + method public abstract deprecated boolean requery(); + method public abstract android.os.Bundle respond(android.os.Bundle); + method public abstract void setNotificationUri(android.content.ContentResolver, android.net.Uri); + method public abstract void unregisterContentObserver(android.database.ContentObserver); + method public abstract void unregisterDataSetObserver(android.database.DataSetObserver); + field public static final int FIELD_TYPE_BLOB = 4; // 0x4 + field public static final int FIELD_TYPE_FLOAT = 2; // 0x2 + field public static final int FIELD_TYPE_INTEGER = 1; // 0x1 + field public static final int FIELD_TYPE_NULL = 0; // 0x0 + field public static final int FIELD_TYPE_STRING = 3; // 0x3 + } + + public class CursorIndexOutOfBoundsException extends java.lang.IndexOutOfBoundsException { + ctor public CursorIndexOutOfBoundsException(int, int); + ctor public CursorIndexOutOfBoundsException(java.lang.String); + } + + public final class CursorJoiner implements java.lang.Iterable java.util.Iterator { + ctor public CursorJoiner(android.database.Cursor, java.lang.String[], android.database.Cursor, java.lang.String[]); + method public boolean hasNext(); + method public java.util.Iterator iterator(); + method public android.database.CursorJoiner.Result next(); + method public void remove(); + } + + public static final class CursorJoiner.Result extends java.lang.Enum { + method public static android.database.CursorJoiner.Result valueOf(java.lang.String); + method public static final android.database.CursorJoiner.Result[] values(); + enum_constant public static final android.database.CursorJoiner.Result BOTH; + enum_constant public static final android.database.CursorJoiner.Result LEFT; + enum_constant public static final android.database.CursorJoiner.Result RIGHT; + } + + public class CursorWindow extends android.database.sqlite.SQLiteClosable implements android.os.Parcelable { + ctor public CursorWindow(java.lang.String); + ctor public deprecated CursorWindow(boolean); + method public boolean allocRow(); + method public void clear(); + method public void copyStringToBuffer(int, int, android.database.CharArrayBuffer); + method public int describeContents(); + method public void freeLastRow(); + method public byte[] getBlob(int, int); + method public double getDouble(int, int); + method public float getFloat(int, int); + method public int getInt(int, int); + method public long getLong(int, int); + method public int getNumRows(); + method public short getShort(int, int); + method public int getStartPosition(); + method public java.lang.String getString(int, int); + method public int getType(int, int); + method public deprecated boolean isBlob(int, int); + method public deprecated boolean isFloat(int, int); + method public deprecated boolean isLong(int, int); + method public deprecated boolean isNull(int, int); + method public deprecated boolean isString(int, int); + method public static android.database.CursorWindow newFromParcel(android.os.Parcel); + method protected void onAllReferencesReleased(); + method public boolean putBlob(byte[], int, int); + method public boolean putDouble(double, int, int); + method public boolean putLong(long, int, int); + method public boolean putNull(int, int); + method public boolean putString(java.lang.String, int, int); + method public boolean setNumColumns(int); + method public void setStartPosition(int); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public class CursorWrapper implements android.database.Cursor { + ctor public CursorWrapper(android.database.Cursor); + method public void close(); + method public void copyStringToBuffer(int, android.database.CharArrayBuffer); + method public void deactivate(); + method public byte[] getBlob(int); + method public int getColumnCount(); + method public int getColumnIndex(java.lang.String); + method public int getColumnIndexOrThrow(java.lang.String) throws java.lang.IllegalArgumentException; + method public java.lang.String getColumnName(int); + method public java.lang.String[] getColumnNames(); + method public int getCount(); + method public double getDouble(int); + method public android.os.Bundle getExtras(); + method public float getFloat(int); + method public int getInt(int); + method public long getLong(int); + method public android.net.Uri getNotificationUri(); + method public int getPosition(); + method public short getShort(int); + method public java.lang.String getString(int); + method public int getType(int); + method public boolean getWantsAllOnMoveCalls(); + method public android.database.Cursor getWrappedCursor(); + method public boolean isAfterLast(); + method public boolean isBeforeFirst(); + method public boolean isClosed(); + method public boolean isFirst(); + method public boolean isLast(); + method public boolean isNull(int); + method public boolean move(int); + method public boolean moveToFirst(); + method public boolean moveToLast(); + method public boolean moveToNext(); + method public boolean moveToPosition(int); + method public boolean moveToPrevious(); + method public void registerContentObserver(android.database.ContentObserver); + method public void registerDataSetObserver(android.database.DataSetObserver); + method public boolean requery(); + method public android.os.Bundle respond(android.os.Bundle); + method public void setNotificationUri(android.content.ContentResolver, android.net.Uri); + method public void unregisterContentObserver(android.database.ContentObserver); + method public void unregisterDataSetObserver(android.database.DataSetObserver); + } + + public class DataSetObservable extends android.database.Observable { + ctor public DataSetObservable(); + method public void notifyChanged(); + method public void notifyInvalidated(); + } + + public abstract class DataSetObserver { + ctor public DataSetObserver(); + method public void onChanged(); + method public void onInvalidated(); + } + + public abstract interface DatabaseErrorHandler { + method public abstract void onCorruption(android.database.sqlite.SQLiteDatabase); + } + + public class DatabaseUtils { + ctor public DatabaseUtils(); + method public static void appendEscapedSQLString(java.lang.StringBuilder, java.lang.String); + method public static java.lang.String[] appendSelectionArgs(java.lang.String[], java.lang.String[]); + method public static final void appendValueToSql(java.lang.StringBuilder, java.lang.Object); + method public static void bindObjectToProgram(android.database.sqlite.SQLiteProgram, int, java.lang.Object); + method public static android.os.ParcelFileDescriptor blobFileDescriptorForQuery(android.database.sqlite.SQLiteDatabase, java.lang.String, java.lang.String[]); + method public static android.os.ParcelFileDescriptor blobFileDescriptorForQuery(android.database.sqlite.SQLiteStatement, java.lang.String[]); + method public static java.lang.String concatenateWhere(java.lang.String, java.lang.String); + method public static void createDbFromSqlStatements(android.content.Context, java.lang.String, int, java.lang.String); + method public static void cursorDoubleToContentValues(android.database.Cursor, java.lang.String, android.content.ContentValues, java.lang.String); + method public static void cursorDoubleToContentValuesIfPresent(android.database.Cursor, android.content.ContentValues, java.lang.String); + method public static void cursorDoubleToCursorValues(android.database.Cursor, java.lang.String, android.content.ContentValues); + method public static void cursorFloatToContentValuesIfPresent(android.database.Cursor, android.content.ContentValues, java.lang.String); + method public static void cursorIntToContentValues(android.database.Cursor, java.lang.String, android.content.ContentValues); + method public static void cursorIntToContentValues(android.database.Cursor, java.lang.String, android.content.ContentValues, java.lang.String); + method public static void cursorIntToContentValuesIfPresent(android.database.Cursor, android.content.ContentValues, java.lang.String); + method public static void cursorLongToContentValues(android.database.Cursor, java.lang.String, android.content.ContentValues); + method public static void cursorLongToContentValues(android.database.Cursor, java.lang.String, android.content.ContentValues, java.lang.String); + method public static void cursorLongToContentValuesIfPresent(android.database.Cursor, android.content.ContentValues, java.lang.String); + method public static void cursorRowToContentValues(android.database.Cursor, android.content.ContentValues); + method public static void cursorShortToContentValuesIfPresent(android.database.Cursor, android.content.ContentValues, java.lang.String); + method public static void cursorStringToContentValues(android.database.Cursor, java.lang.String, android.content.ContentValues); + method public static void cursorStringToContentValues(android.database.Cursor, java.lang.String, android.content.ContentValues, java.lang.String); + method public static void cursorStringToContentValuesIfPresent(android.database.Cursor, android.content.ContentValues, java.lang.String); + method public static void cursorStringToInsertHelper(android.database.Cursor, java.lang.String, android.database.DatabaseUtils.InsertHelper, int); + method public static void dumpCurrentRow(android.database.Cursor); + method public static void dumpCurrentRow(android.database.Cursor, java.io.PrintStream); + method public static void dumpCurrentRow(android.database.Cursor, java.lang.StringBuilder); + method public static java.lang.String dumpCurrentRowToString(android.database.Cursor); + method public static void dumpCursor(android.database.Cursor); + method public static void dumpCursor(android.database.Cursor, java.io.PrintStream); + method public static void dumpCursor(android.database.Cursor, java.lang.StringBuilder); + method public static java.lang.String dumpCursorToString(android.database.Cursor); + method public static java.lang.String getCollationKey(java.lang.String); + method public static java.lang.String getHexCollationKey(java.lang.String); + method public static int getSqlStatementType(java.lang.String); + method public static long longForQuery(android.database.sqlite.SQLiteDatabase, java.lang.String, java.lang.String[]); + method public static long longForQuery(android.database.sqlite.SQLiteStatement, java.lang.String[]); + method public static long queryNumEntries(android.database.sqlite.SQLiteDatabase, java.lang.String); + method public static long queryNumEntries(android.database.sqlite.SQLiteDatabase, java.lang.String, java.lang.String); + method public static long queryNumEntries(android.database.sqlite.SQLiteDatabase, java.lang.String, java.lang.String, java.lang.String[]); + method public static final void readExceptionFromParcel(android.os.Parcel); + method public static void readExceptionWithFileNotFoundExceptionFromParcel(android.os.Parcel) throws java.io.FileNotFoundException; + method public static void readExceptionWithOperationApplicationExceptionFromParcel(android.os.Parcel) throws android.content.OperationApplicationException; + method public static java.lang.String sqlEscapeString(java.lang.String); + method public static java.lang.String stringForQuery(android.database.sqlite.SQLiteDatabase, java.lang.String, java.lang.String[]); + method public static java.lang.String stringForQuery(android.database.sqlite.SQLiteStatement, java.lang.String[]); + method public static final void writeExceptionToParcel(android.os.Parcel, java.lang.Exception); + field public static final int STATEMENT_ABORT = 6; // 0x6 + field public static final int STATEMENT_ATTACH = 3; // 0x3 + field public static final int STATEMENT_BEGIN = 4; // 0x4 + field public static final int STATEMENT_COMMIT = 5; // 0x5 + field public static final int STATEMENT_DDL = 8; // 0x8 + field public static final int STATEMENT_OTHER = 99; // 0x63 + field public static final int STATEMENT_PRAGMA = 7; // 0x7 + field public static final int STATEMENT_SELECT = 1; // 0x1 + field public static final int STATEMENT_UNPREPARED = 9; // 0x9 + field public static final int STATEMENT_UPDATE = 2; // 0x2 + } + + public static deprecated class DatabaseUtils.InsertHelper { + ctor public DatabaseUtils.InsertHelper(android.database.sqlite.SQLiteDatabase, java.lang.String); + method public void bind(int, double); + method public void bind(int, float); + method public void bind(int, long); + method public void bind(int, int); + method public void bind(int, boolean); + method public void bind(int, byte[]); + method public void bind(int, java.lang.String); + method public void bindNull(int); + method public void close(); + method public long execute(); + method public int getColumnIndex(java.lang.String); + method public long insert(android.content.ContentValues); + method public void prepareForInsert(); + method public void prepareForReplace(); + method public long replace(android.content.ContentValues); + } + + public final class DefaultDatabaseErrorHandler implements android.database.DatabaseErrorHandler { + ctor public DefaultDatabaseErrorHandler(); + method public void onCorruption(android.database.sqlite.SQLiteDatabase); + } + + public class MatrixCursor extends android.database.AbstractCursor { + ctor public MatrixCursor(java.lang.String[], int); + ctor public MatrixCursor(java.lang.String[]); + method public void addRow(java.lang.Object[]); + method public void addRow(java.lang.Iterable); + method public java.lang.String[] getColumnNames(); + method public int getCount(); + method public double getDouble(int); + method public float getFloat(int); + method public int getInt(int); + method public long getLong(int); + method public short getShort(int); + method public java.lang.String getString(int); + method public boolean isNull(int); + method public android.database.MatrixCursor.RowBuilder newRow(); + } + + public class MatrixCursor.RowBuilder { + method public android.database.MatrixCursor.RowBuilder add(java.lang.Object); + method public android.database.MatrixCursor.RowBuilder add(java.lang.String, java.lang.Object); + } + + public class MergeCursor extends android.database.AbstractCursor { + ctor public MergeCursor(android.database.Cursor[]); + method public java.lang.String[] getColumnNames(); + method public int getCount(); + method public double getDouble(int); + method public float getFloat(int); + method public int getInt(int); + method public long getLong(int); + method public short getShort(int); + method public java.lang.String getString(int); + method public boolean isNull(int); + } + + public abstract class Observable { + ctor public Observable(); + method public void registerObserver(T); + method public void unregisterAll(); + method public void unregisterObserver(T); + field protected final java.util.ArrayList mObservers; + } + + public class SQLException extends java.lang.RuntimeException { + ctor public SQLException(); + ctor public SQLException(java.lang.String); + ctor public SQLException(java.lang.String, java.lang.Throwable); + } + + public class StaleDataException extends java.lang.RuntimeException { + ctor public StaleDataException(); + ctor public StaleDataException(java.lang.String); + } + +} + +package android.database.sqlite { + + public class SQLiteAbortException extends android.database.sqlite.SQLiteException { + ctor public SQLiteAbortException(); + ctor public SQLiteAbortException(java.lang.String); + } + + public class SQLiteAccessPermException extends android.database.sqlite.SQLiteException { + ctor public SQLiteAccessPermException(); + ctor public SQLiteAccessPermException(java.lang.String); + } + + public class SQLiteBindOrColumnIndexOutOfRangeException extends android.database.sqlite.SQLiteException { + ctor public SQLiteBindOrColumnIndexOutOfRangeException(); + ctor public SQLiteBindOrColumnIndexOutOfRangeException(java.lang.String); + } + + public class SQLiteBlobTooBigException extends android.database.sqlite.SQLiteException { + ctor public SQLiteBlobTooBigException(); + ctor public SQLiteBlobTooBigException(java.lang.String); + } + + public class SQLiteCantOpenDatabaseException extends android.database.sqlite.SQLiteException { + ctor public SQLiteCantOpenDatabaseException(); + ctor public SQLiteCantOpenDatabaseException(java.lang.String); + } + + public abstract class SQLiteClosable implements java.io.Closeable { + ctor public SQLiteClosable(); + method public void acquireReference(); + method public void close(); + method protected abstract void onAllReferencesReleased(); + method protected deprecated void onAllReferencesReleasedFromContainer(); + method public void releaseReference(); + method public deprecated void releaseReferenceFromContainer(); + } + + public class SQLiteConstraintException extends android.database.sqlite.SQLiteException { + ctor public SQLiteConstraintException(); + ctor public SQLiteConstraintException(java.lang.String); + } + + public class SQLiteCursor extends android.database.AbstractWindowedCursor { + ctor public deprecated SQLiteCursor(android.database.sqlite.SQLiteDatabase, android.database.sqlite.SQLiteCursorDriver, java.lang.String, android.database.sqlite.SQLiteQuery); + ctor public SQLiteCursor(android.database.sqlite.SQLiteCursorDriver, java.lang.String, android.database.sqlite.SQLiteQuery); + method public java.lang.String[] getColumnNames(); + method public int getCount(); + method public android.database.sqlite.SQLiteDatabase getDatabase(); + method public void setSelectionArguments(java.lang.String[]); + } + + public abstract interface SQLiteCursorDriver { + method public abstract void cursorClosed(); + method public abstract void cursorDeactivated(); + method public abstract void cursorRequeried(android.database.Cursor); + method public abstract android.database.Cursor query(android.database.sqlite.SQLiteDatabase.CursorFactory, java.lang.String[]); + method public abstract void setBindArguments(java.lang.String[]); + } + + public final class SQLiteDatabase extends android.database.sqlite.SQLiteClosable { + method public void beginTransaction(); + method public void beginTransactionNonExclusive(); + method public void beginTransactionWithListener(android.database.sqlite.SQLiteTransactionListener); + method public void beginTransactionWithListenerNonExclusive(android.database.sqlite.SQLiteTransactionListener); + method public android.database.sqlite.SQLiteStatement compileStatement(java.lang.String) throws android.database.SQLException; + method public static android.database.sqlite.SQLiteDatabase create(android.database.sqlite.SQLiteDatabase.CursorFactory); + method public int delete(java.lang.String, java.lang.String, java.lang.String[]); + method public static boolean deleteDatabase(java.io.File); + method public void disableWriteAheadLogging(); + method public boolean enableWriteAheadLogging(); + method public void endTransaction(); + method public void execSQL(java.lang.String) throws android.database.SQLException; + method public void execSQL(java.lang.String, java.lang.Object[]) throws android.database.SQLException; + method public static java.lang.String findEditTable(java.lang.String); + method public java.util.List> getAttachedDbs(); + method public long getMaximumSize(); + method public long getPageSize(); + method public final java.lang.String getPath(); + method public deprecated java.util.Map getSyncedTables(); + method public int getVersion(); + method public boolean inTransaction(); + method public long insert(java.lang.String, java.lang.String, android.content.ContentValues); + method public long insertOrThrow(java.lang.String, java.lang.String, android.content.ContentValues) throws android.database.SQLException; + method public long insertWithOnConflict(java.lang.String, java.lang.String, android.content.ContentValues, int); + method public boolean isDatabaseIntegrityOk(); + method public boolean isDbLockedByCurrentThread(); + method public deprecated boolean isDbLockedByOtherThreads(); + method public boolean isOpen(); + method public boolean isReadOnly(); + method public boolean isWriteAheadLoggingEnabled(); + method public deprecated void markTableSyncable(java.lang.String, java.lang.String); + method public deprecated void markTableSyncable(java.lang.String, java.lang.String, java.lang.String); + method public boolean needUpgrade(int); + method protected void onAllReferencesReleased(); + method public static android.database.sqlite.SQLiteDatabase openDatabase(java.lang.String, android.database.sqlite.SQLiteDatabase.CursorFactory, int); + method public static android.database.sqlite.SQLiteDatabase openDatabase(java.lang.String, android.database.sqlite.SQLiteDatabase.CursorFactory, int, android.database.DatabaseErrorHandler); + method public static android.database.sqlite.SQLiteDatabase openOrCreateDatabase(java.io.File, android.database.sqlite.SQLiteDatabase.CursorFactory); + method public static android.database.sqlite.SQLiteDatabase openOrCreateDatabase(java.lang.String, android.database.sqlite.SQLiteDatabase.CursorFactory); + method public static android.database.sqlite.SQLiteDatabase openOrCreateDatabase(java.lang.String, android.database.sqlite.SQLiteDatabase.CursorFactory, android.database.DatabaseErrorHandler); + method public android.database.Cursor query(boolean, java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String, java.lang.String); + method public android.database.Cursor query(boolean, java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String, java.lang.String, android.os.CancellationSignal); + method public android.database.Cursor query(java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String); + method public android.database.Cursor query(java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String, java.lang.String); + method public android.database.Cursor queryWithFactory(android.database.sqlite.SQLiteDatabase.CursorFactory, boolean, java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String, java.lang.String); + method public android.database.Cursor queryWithFactory(android.database.sqlite.SQLiteDatabase.CursorFactory, boolean, java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String, java.lang.String, android.os.CancellationSignal); + method public android.database.Cursor rawQuery(java.lang.String, java.lang.String[]); + method public android.database.Cursor rawQuery(java.lang.String, java.lang.String[], android.os.CancellationSignal); + method public android.database.Cursor rawQueryWithFactory(android.database.sqlite.SQLiteDatabase.CursorFactory, java.lang.String, java.lang.String[], java.lang.String); + method public android.database.Cursor rawQueryWithFactory(android.database.sqlite.SQLiteDatabase.CursorFactory, java.lang.String, java.lang.String[], java.lang.String, android.os.CancellationSignal); + method public static int releaseMemory(); + method public long replace(java.lang.String, java.lang.String, android.content.ContentValues); + method public long replaceOrThrow(java.lang.String, java.lang.String, android.content.ContentValues) throws android.database.SQLException; + method public void setForeignKeyConstraintsEnabled(boolean); + method public void setLocale(java.util.Locale); + method public deprecated void setLockingEnabled(boolean); + method public void setMaxSqlCacheSize(int); + method public long setMaximumSize(long); + method public void setPageSize(long); + method public void setTransactionSuccessful(); + method public void setVersion(int); + method public int update(java.lang.String, android.content.ContentValues, java.lang.String, java.lang.String[]); + method public int updateWithOnConflict(java.lang.String, android.content.ContentValues, java.lang.String, java.lang.String[], int); + method public deprecated boolean yieldIfContended(); + method public boolean yieldIfContendedSafely(); + method public boolean yieldIfContendedSafely(long); + field public static final int CONFLICT_ABORT = 2; // 0x2 + field public static final int CONFLICT_FAIL = 3; // 0x3 + field public static final int CONFLICT_IGNORE = 4; // 0x4 + field public static final int CONFLICT_NONE = 0; // 0x0 + field public static final int CONFLICT_REPLACE = 5; // 0x5 + field public static final int CONFLICT_ROLLBACK = 1; // 0x1 + field public static final int CREATE_IF_NECESSARY = 268435456; // 0x10000000 + field public static final int ENABLE_WRITE_AHEAD_LOGGING = 536870912; // 0x20000000 + field public static final int MAX_SQL_CACHE_SIZE = 100; // 0x64 + field public static final int NO_LOCALIZED_COLLATORS = 16; // 0x10 + field public static final int OPEN_READONLY = 1; // 0x1 + field public static final int OPEN_READWRITE = 0; // 0x0 + field public static final int SQLITE_MAX_LIKE_PATTERN_LENGTH = 50000; // 0xc350 + } + + public static abstract interface SQLiteDatabase.CursorFactory { + method public abstract android.database.Cursor newCursor(android.database.sqlite.SQLiteDatabase, android.database.sqlite.SQLiteCursorDriver, java.lang.String, android.database.sqlite.SQLiteQuery); + } + + public class SQLiteDatabaseCorruptException extends android.database.sqlite.SQLiteException { + ctor public SQLiteDatabaseCorruptException(); + ctor public SQLiteDatabaseCorruptException(java.lang.String); + } + + public class SQLiteDatabaseLockedException extends android.database.sqlite.SQLiteException { + ctor public SQLiteDatabaseLockedException(); + ctor public SQLiteDatabaseLockedException(java.lang.String); + } + + public class SQLiteDatatypeMismatchException extends android.database.sqlite.SQLiteException { + ctor public SQLiteDatatypeMismatchException(); + ctor public SQLiteDatatypeMismatchException(java.lang.String); + } + + public class SQLiteDiskIOException extends android.database.sqlite.SQLiteException { + ctor public SQLiteDiskIOException(); + ctor public SQLiteDiskIOException(java.lang.String); + } + + public class SQLiteDoneException extends android.database.sqlite.SQLiteException { + ctor public SQLiteDoneException(); + ctor public SQLiteDoneException(java.lang.String); + } + + public class SQLiteException extends android.database.SQLException { + ctor public SQLiteException(); + ctor public SQLiteException(java.lang.String); + ctor public SQLiteException(java.lang.String, java.lang.Throwable); + } + + public class SQLiteFullException extends android.database.sqlite.SQLiteException { + ctor public SQLiteFullException(); + ctor public SQLiteFullException(java.lang.String); + } + + public class SQLiteMisuseException extends android.database.sqlite.SQLiteException { + ctor public SQLiteMisuseException(); + ctor public SQLiteMisuseException(java.lang.String); + } + + public abstract class SQLiteOpenHelper { + ctor public SQLiteOpenHelper(android.content.Context, java.lang.String, android.database.sqlite.SQLiteDatabase.CursorFactory, int); + ctor public SQLiteOpenHelper(android.content.Context, java.lang.String, android.database.sqlite.SQLiteDatabase.CursorFactory, int, android.database.DatabaseErrorHandler); + method public synchronized void close(); + method public java.lang.String getDatabaseName(); + method public android.database.sqlite.SQLiteDatabase getReadableDatabase(); + method public android.database.sqlite.SQLiteDatabase getWritableDatabase(); + method public void onConfigure(android.database.sqlite.SQLiteDatabase); + method public abstract void onCreate(android.database.sqlite.SQLiteDatabase); + method public void onDowngrade(android.database.sqlite.SQLiteDatabase, int, int); + method public void onOpen(android.database.sqlite.SQLiteDatabase); + method public abstract void onUpgrade(android.database.sqlite.SQLiteDatabase, int, int); + method public void setWriteAheadLoggingEnabled(boolean); + } + + public class SQLiteOutOfMemoryException extends android.database.sqlite.SQLiteException { + ctor public SQLiteOutOfMemoryException(); + ctor public SQLiteOutOfMemoryException(java.lang.String); + } + + public abstract class SQLiteProgram extends android.database.sqlite.SQLiteClosable { + method public void bindAllArgsAsStrings(java.lang.String[]); + method public void bindBlob(int, byte[]); + method public void bindDouble(int, double); + method public void bindLong(int, long); + method public void bindNull(int); + method public void bindString(int, java.lang.String); + method public void clearBindings(); + method public final deprecated int getUniqueId(); + method protected void onAllReferencesReleased(); + } + + public final class SQLiteQuery extends android.database.sqlite.SQLiteProgram { + } + + public class SQLiteQueryBuilder { + ctor public SQLiteQueryBuilder(); + method public static void appendColumns(java.lang.StringBuilder, java.lang.String[]); + method public void appendWhere(java.lang.CharSequence); + method public void appendWhereEscapeString(java.lang.String); + method public java.lang.String buildQuery(java.lang.String[], java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String); + method public deprecated java.lang.String buildQuery(java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String, java.lang.String); + method public static java.lang.String buildQueryString(boolean, java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String); + method public java.lang.String buildUnionQuery(java.lang.String[], java.lang.String, java.lang.String); + method public java.lang.String buildUnionSubQuery(java.lang.String, java.lang.String[], java.util.Set, int, java.lang.String, java.lang.String, java.lang.String, java.lang.String); + method public deprecated java.lang.String buildUnionSubQuery(java.lang.String, java.lang.String[], java.util.Set, int, java.lang.String, java.lang.String, java.lang.String[], java.lang.String, java.lang.String); + method public java.lang.String getTables(); + method public android.database.Cursor query(android.database.sqlite.SQLiteDatabase, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String); + method public android.database.Cursor query(android.database.sqlite.SQLiteDatabase, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String, java.lang.String); + method public android.database.Cursor query(android.database.sqlite.SQLiteDatabase, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String, java.lang.String, android.os.CancellationSignal); + method public void setCursorFactory(android.database.sqlite.SQLiteDatabase.CursorFactory); + method public void setDistinct(boolean); + method public void setProjectionMap(java.util.Map); + method public void setStrict(boolean); + method public void setTables(java.lang.String); + } + + public class SQLiteReadOnlyDatabaseException extends android.database.sqlite.SQLiteException { + ctor public SQLiteReadOnlyDatabaseException(); + ctor public SQLiteReadOnlyDatabaseException(java.lang.String); + } + + public final class SQLiteStatement extends android.database.sqlite.SQLiteProgram { + method public void execute(); + method public long executeInsert(); + method public int executeUpdateDelete(); + method public android.os.ParcelFileDescriptor simpleQueryForBlobFileDescriptor(); + method public long simpleQueryForLong(); + method public java.lang.String simpleQueryForString(); + } + + public class SQLiteTableLockedException extends android.database.sqlite.SQLiteException { + ctor public SQLiteTableLockedException(); + ctor public SQLiteTableLockedException(java.lang.String); + } + + public abstract interface SQLiteTransactionListener { + method public abstract void onBegin(); + method public abstract void onCommit(); + method public abstract void onRollback(); + } + +} + +package android.drm { + + public class DrmConvertedStatus { + ctor public DrmConvertedStatus(int, byte[], int); + field public static final int STATUS_ERROR = 3; // 0x3 + field public static final int STATUS_INPUTDATA_ERROR = 2; // 0x2 + field public static final int STATUS_OK = 1; // 0x1 + field public final byte[] convertedData; + field public final int offset; + field public final int statusCode; + } + + public class DrmErrorEvent extends android.drm.DrmEvent { + ctor public DrmErrorEvent(int, int, java.lang.String); + ctor public DrmErrorEvent(int, int, java.lang.String, java.util.HashMap); + field public static final int TYPE_ACQUIRE_DRM_INFO_FAILED = 2008; // 0x7d8 + field public static final int TYPE_NOT_SUPPORTED = 2003; // 0x7d3 + field public static final int TYPE_NO_INTERNET_CONNECTION = 2005; // 0x7d5 + field public static final int TYPE_OUT_OF_MEMORY = 2004; // 0x7d4 + field public static final int TYPE_PROCESS_DRM_INFO_FAILED = 2006; // 0x7d6 + field public static final int TYPE_REMOVE_ALL_RIGHTS_FAILED = 2007; // 0x7d7 + field public static final int TYPE_RIGHTS_NOT_INSTALLED = 2001; // 0x7d1 + field public static final int TYPE_RIGHTS_RENEWAL_NOT_ALLOWED = 2002; // 0x7d2 + } + + public class DrmEvent { + ctor protected DrmEvent(int, int, java.lang.String, java.util.HashMap); + ctor protected DrmEvent(int, int, java.lang.String); + method public java.lang.Object getAttribute(java.lang.String); + method public java.lang.String getMessage(); + method public int getType(); + method public int getUniqueId(); + field public static final java.lang.String DRM_INFO_OBJECT = "drm_info_object"; + field public static final java.lang.String DRM_INFO_STATUS_OBJECT = "drm_info_status_object"; + field public static final int TYPE_ALL_RIGHTS_REMOVED = 1001; // 0x3e9 + field public static final int TYPE_DRM_INFO_PROCESSED = 1002; // 0x3ea + } + + public class DrmInfo { + ctor public DrmInfo(int, byte[], java.lang.String); + ctor public DrmInfo(int, java.lang.String, java.lang.String); + method public java.lang.Object get(java.lang.String); + method public byte[] getData(); + method public int getInfoType(); + method public java.lang.String getMimeType(); + method public java.util.Iterator iterator(); + method public java.util.Iterator keyIterator(); + method public void put(java.lang.String, java.lang.Object); + } + + public class DrmInfoEvent extends android.drm.DrmEvent { + ctor public DrmInfoEvent(int, int, java.lang.String); + ctor public DrmInfoEvent(int, int, java.lang.String, java.util.HashMap); + field public static final int TYPE_ACCOUNT_ALREADY_REGISTERED = 5; // 0x5 + field public static final int TYPE_ALREADY_REGISTERED_BY_ANOTHER_ACCOUNT = 1; // 0x1 + field public static final int TYPE_REMOVE_RIGHTS = 2; // 0x2 + field public static final int TYPE_RIGHTS_INSTALLED = 3; // 0x3 + field public static final int TYPE_RIGHTS_REMOVED = 6; // 0x6 + field public static final int TYPE_WAIT_FOR_RIGHTS = 4; // 0x4 + } + + public class DrmInfoRequest { + ctor public DrmInfoRequest(int, java.lang.String); + method public java.lang.Object get(java.lang.String); + method public int getInfoType(); + method public java.lang.String getMimeType(); + method public java.util.Iterator iterator(); + method public java.util.Iterator keyIterator(); + method public void put(java.lang.String, java.lang.Object); + field public static final java.lang.String ACCOUNT_ID = "account_id"; + field public static final java.lang.String SUBSCRIPTION_ID = "subscription_id"; + field public static final int TYPE_REGISTRATION_INFO = 1; // 0x1 + field public static final int TYPE_RIGHTS_ACQUISITION_INFO = 3; // 0x3 + field public static final int TYPE_RIGHTS_ACQUISITION_PROGRESS_INFO = 4; // 0x4 + field public static final int TYPE_UNREGISTRATION_INFO = 2; // 0x2 + } + + public class DrmInfoStatus { + ctor public DrmInfoStatus(int, int, android.drm.ProcessedData, java.lang.String); + field public static final int STATUS_ERROR = 2; // 0x2 + field public static final int STATUS_OK = 1; // 0x1 + field public final android.drm.ProcessedData data; + field public final int infoType; + field public final java.lang.String mimeType; + field public final int statusCode; + } + + public class DrmManagerClient { + ctor public DrmManagerClient(android.content.Context); + method public android.drm.DrmInfo acquireDrmInfo(android.drm.DrmInfoRequest); + method public int acquireRights(android.drm.DrmInfoRequest); + method public boolean canHandle(java.lang.String, java.lang.String); + method public boolean canHandle(android.net.Uri, java.lang.String); + method public int checkRightsStatus(java.lang.String); + method public int checkRightsStatus(android.net.Uri); + method public int checkRightsStatus(java.lang.String, int); + method public int checkRightsStatus(android.net.Uri, int); + method public android.drm.DrmConvertedStatus closeConvertSession(int); + method public android.drm.DrmConvertedStatus convertData(int, byte[]); + method public java.lang.String[] getAvailableDrmEngines(); + method public android.content.ContentValues getConstraints(java.lang.String, int); + method public android.content.ContentValues getConstraints(android.net.Uri, int); + method public int getDrmObjectType(java.lang.String, java.lang.String); + method public int getDrmObjectType(android.net.Uri, java.lang.String); + method public android.content.ContentValues getMetadata(java.lang.String); + method public android.content.ContentValues getMetadata(android.net.Uri); + method public java.lang.String getOriginalMimeType(java.lang.String); + method public java.lang.String getOriginalMimeType(android.net.Uri); + method public int openConvertSession(java.lang.String); + method public int processDrmInfo(android.drm.DrmInfo); + method public void release(); + method public int removeAllRights(); + method public int removeRights(java.lang.String); + method public int removeRights(android.net.Uri); + method public int saveRights(android.drm.DrmRights, java.lang.String, java.lang.String) throws java.io.IOException; + method public synchronized void setOnErrorListener(android.drm.DrmManagerClient.OnErrorListener); + method public synchronized void setOnEventListener(android.drm.DrmManagerClient.OnEventListener); + method public synchronized void setOnInfoListener(android.drm.DrmManagerClient.OnInfoListener); + field public static final int ERROR_NONE = 0; // 0x0 + field public static final int ERROR_UNKNOWN = -2000; // 0xfffff830 + } + + public static abstract interface DrmManagerClient.OnErrorListener { + method public abstract void onError(android.drm.DrmManagerClient, android.drm.DrmErrorEvent); + } + + public static abstract interface DrmManagerClient.OnEventListener { + method public abstract void onEvent(android.drm.DrmManagerClient, android.drm.DrmEvent); + } + + public static abstract interface DrmManagerClient.OnInfoListener { + method public abstract void onInfo(android.drm.DrmManagerClient, android.drm.DrmInfoEvent); + } + + public class DrmRights { + ctor public DrmRights(java.lang.String, java.lang.String); + ctor public DrmRights(java.lang.String, java.lang.String, java.lang.String); + ctor public DrmRights(java.lang.String, java.lang.String, java.lang.String, java.lang.String); + ctor public DrmRights(java.io.File, java.lang.String); + ctor public DrmRights(android.drm.ProcessedData, java.lang.String); + method public java.lang.String getAccountId(); + method public byte[] getData(); + method public java.lang.String getMimeType(); + method public java.lang.String getSubscriptionId(); + } + + public class DrmStore { + ctor public deprecated DrmStore(); + } + + public static class DrmStore.Action { + ctor public deprecated DrmStore.Action(); + field public static final int DEFAULT = 0; // 0x0 + field public static final int DISPLAY = 7; // 0x7 + field public static final int EXECUTE = 6; // 0x6 + field public static final int OUTPUT = 4; // 0x4 + field public static final int PLAY = 1; // 0x1 + field public static final int PREVIEW = 5; // 0x5 + field public static final int RINGTONE = 2; // 0x2 + field public static final int TRANSFER = 3; // 0x3 + } + + public static abstract interface DrmStore.ConstraintsColumns { + field public static final java.lang.String EXTENDED_METADATA = "extended_metadata"; + field public static final java.lang.String LICENSE_AVAILABLE_TIME = "license_available_time"; + field public static final java.lang.String LICENSE_EXPIRY_TIME = "license_expiry_time"; + field public static final java.lang.String LICENSE_START_TIME = "license_start_time"; + field public static final java.lang.String MAX_REPEAT_COUNT = "max_repeat_count"; + field public static final java.lang.String REMAINING_REPEAT_COUNT = "remaining_repeat_count"; + } + + public static class DrmStore.DrmObjectType { + ctor public deprecated DrmStore.DrmObjectType(); + field public static final int CONTENT = 1; // 0x1 + field public static final int RIGHTS_OBJECT = 2; // 0x2 + field public static final int TRIGGER_OBJECT = 3; // 0x3 + field public static final int UNKNOWN = 0; // 0x0 + } + + public static class DrmStore.Playback { + ctor public deprecated DrmStore.Playback(); + field public static final int PAUSE = 2; // 0x2 + field public static final int RESUME = 3; // 0x3 + field public static final int START = 0; // 0x0 + field public static final int STOP = 1; // 0x1 + } + + public static class DrmStore.RightsStatus { + ctor public deprecated DrmStore.RightsStatus(); + field public static final int RIGHTS_EXPIRED = 2; // 0x2 + field public static final int RIGHTS_INVALID = 1; // 0x1 + field public static final int RIGHTS_NOT_ACQUIRED = 3; // 0x3 + field public static final int RIGHTS_VALID = 0; // 0x0 + } + + public class DrmSupportInfo { + ctor public DrmSupportInfo(); + method public void addFileSuffix(java.lang.String); + method public void addMimeType(java.lang.String); + method public deprecated java.lang.String getDescriprition(); + method public java.lang.String getDescription(); + method public java.util.Iterator getFileSuffixIterator(); + method public java.util.Iterator getMimeTypeIterator(); + method public void setDescription(java.lang.String); + } + + public class DrmUtils { + ctor public DrmUtils(); + method public static android.drm.DrmUtils.ExtendedMetadataParser getExtendedMetadataParser(byte[]); + } + + public static class DrmUtils.ExtendedMetadataParser { + method public java.lang.String get(java.lang.String); + method public java.util.Iterator iterator(); + method public java.util.Iterator keyIterator(); + } + + public class ProcessedData { + method public java.lang.String getAccountId(); + method public byte[] getData(); + method public java.lang.String getSubscriptionId(); + } + +} + +package android.gesture { + + public class Gesture implements android.os.Parcelable { + ctor public Gesture(); + method public void addStroke(android.gesture.GestureStroke); + method public java.lang.Object clone(); + method public int describeContents(); + method public android.graphics.RectF getBoundingBox(); + method public long getID(); + method public float getLength(); + method public java.util.ArrayList getStrokes(); + method public int getStrokesCount(); + method public android.graphics.Bitmap toBitmap(int, int, int, int, int); + method public android.graphics.Bitmap toBitmap(int, int, int, int); + method public android.graphics.Path toPath(); + method public android.graphics.Path toPath(android.graphics.Path); + method public android.graphics.Path toPath(int, int, int, int); + method public android.graphics.Path toPath(android.graphics.Path, int, int, int, int); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public final class GestureLibraries { + method public static android.gesture.GestureLibrary fromFile(java.lang.String); + method public static android.gesture.GestureLibrary fromFile(java.io.File); + method public static android.gesture.GestureLibrary fromPrivateFile(android.content.Context, java.lang.String); + method public static android.gesture.GestureLibrary fromRawResource(android.content.Context, int); + } + + public abstract class GestureLibrary { + ctor protected GestureLibrary(); + method public void addGesture(java.lang.String, android.gesture.Gesture); + method public java.util.Set getGestureEntries(); + method public java.util.ArrayList getGestures(java.lang.String); + method public int getOrientationStyle(); + method public int getSequenceType(); + method public boolean isReadOnly(); + method public abstract boolean load(); + method public java.util.ArrayList recognize(android.gesture.Gesture); + method public void removeEntry(java.lang.String); + method public void removeGesture(java.lang.String, android.gesture.Gesture); + method public abstract boolean save(); + method public void setOrientationStyle(int); + method public void setSequenceType(int); + field protected final android.gesture.GestureStore mStore; + } + + public class GestureOverlayView extends android.widget.FrameLayout { + ctor public GestureOverlayView(android.content.Context); + ctor public GestureOverlayView(android.content.Context, android.util.AttributeSet); + ctor public GestureOverlayView(android.content.Context, android.util.AttributeSet, int); + ctor public GestureOverlayView(android.content.Context, android.util.AttributeSet, int, int); + method public void addOnGestureListener(android.gesture.GestureOverlayView.OnGestureListener); + method public void addOnGesturePerformedListener(android.gesture.GestureOverlayView.OnGesturePerformedListener); + method public void addOnGesturingListener(android.gesture.GestureOverlayView.OnGesturingListener); + method public void cancelClearAnimation(); + method public void cancelGesture(); + method public void clear(boolean); + method public java.util.ArrayList getCurrentStroke(); + method public long getFadeOffset(); + method public android.gesture.Gesture getGesture(); + method public int getGestureColor(); + method public android.graphics.Path getGesturePath(); + method public android.graphics.Path getGesturePath(android.graphics.Path); + method public float getGestureStrokeAngleThreshold(); + method public float getGestureStrokeLengthThreshold(); + method public float getGestureStrokeSquarenessTreshold(); + method public int getGestureStrokeType(); + method public float getGestureStrokeWidth(); + method public int getOrientation(); + method public int getUncertainGestureColor(); + method public boolean isEventsInterceptionEnabled(); + method public boolean isFadeEnabled(); + method public boolean isGestureVisible(); + method public boolean isGesturing(); + method public void removeAllOnGestureListeners(); + method public void removeAllOnGesturePerformedListeners(); + method public void removeAllOnGesturingListeners(); + method public void removeOnGestureListener(android.gesture.GestureOverlayView.OnGestureListener); + method public void removeOnGesturePerformedListener(android.gesture.GestureOverlayView.OnGesturePerformedListener); + method public void removeOnGesturingListener(android.gesture.GestureOverlayView.OnGesturingListener); + method public void setEventsInterceptionEnabled(boolean); + method public void setFadeEnabled(boolean); + method public void setFadeOffset(long); + method public void setGesture(android.gesture.Gesture); + method public void setGestureColor(int); + method public void setGestureStrokeAngleThreshold(float); + method public void setGestureStrokeLengthThreshold(float); + method public void setGestureStrokeSquarenessTreshold(float); + method public void setGestureStrokeType(int); + method public void setGestureStrokeWidth(float); + method public void setGestureVisible(boolean); + method public void setOrientation(int); + method public void setUncertainGestureColor(int); + field public static final int GESTURE_STROKE_TYPE_MULTIPLE = 1; // 0x1 + field public static final int GESTURE_STROKE_TYPE_SINGLE = 0; // 0x0 + field public static final int ORIENTATION_HORIZONTAL = 0; // 0x0 + field public static final int ORIENTATION_VERTICAL = 1; // 0x1 + } + + public static abstract interface GestureOverlayView.OnGestureListener { + method public abstract void onGesture(android.gesture.GestureOverlayView, android.view.MotionEvent); + method public abstract void onGestureCancelled(android.gesture.GestureOverlayView, android.view.MotionEvent); + method public abstract void onGestureEnded(android.gesture.GestureOverlayView, android.view.MotionEvent); + method public abstract void onGestureStarted(android.gesture.GestureOverlayView, android.view.MotionEvent); + } + + public static abstract interface GestureOverlayView.OnGesturePerformedListener { + method public abstract void onGesturePerformed(android.gesture.GestureOverlayView, android.gesture.Gesture); + } + + public static abstract interface GestureOverlayView.OnGesturingListener { + method public abstract void onGesturingEnded(android.gesture.GestureOverlayView); + method public abstract void onGesturingStarted(android.gesture.GestureOverlayView); + } + + public class GesturePoint { + ctor public GesturePoint(float, float, long); + method public java.lang.Object clone(); + field public final long timestamp; + field public final float x; + field public final float y; + } + + public class GestureStore { + ctor public GestureStore(); + method public void addGesture(java.lang.String, android.gesture.Gesture); + method public java.util.Set getGestureEntries(); + method public java.util.ArrayList getGestures(java.lang.String); + method public int getOrientationStyle(); + method public int getSequenceType(); + method public boolean hasChanged(); + method public void load(java.io.InputStream) throws java.io.IOException; + method public void load(java.io.InputStream, boolean) throws java.io.IOException; + method public java.util.ArrayList recognize(android.gesture.Gesture); + method public void removeEntry(java.lang.String); + method public void removeGesture(java.lang.String, android.gesture.Gesture); + method public void save(java.io.OutputStream) throws java.io.IOException; + method public void save(java.io.OutputStream, boolean) throws java.io.IOException; + method public void setOrientationStyle(int); + method public void setSequenceType(int); + field public static final int ORIENTATION_INVARIANT = 1; // 0x1 + field public static final int ORIENTATION_SENSITIVE = 2; // 0x2 + field public static final int SEQUENCE_INVARIANT = 1; // 0x1 + field public static final int SEQUENCE_SENSITIVE = 2; // 0x2 + } + + public class GestureStroke { + ctor public GestureStroke(java.util.ArrayList); + method public void clearPath(); + method public java.lang.Object clone(); + method public android.gesture.OrientedBoundingBox computeOrientedBoundingBox(); + method public android.graphics.Path getPath(); + method public android.graphics.Path toPath(float, float, int); + field public final android.graphics.RectF boundingBox; + field public final float length; + field public final float[] points; + } + + public final class GestureUtils { + method public static android.gesture.OrientedBoundingBox computeOrientedBoundingBox(java.util.ArrayList); + method public static android.gesture.OrientedBoundingBox computeOrientedBoundingBox(float[]); + method public static float[] spatialSampling(android.gesture.Gesture, int); + method public static float[] spatialSampling(android.gesture.Gesture, int, boolean); + method public static float[] temporalSampling(android.gesture.GestureStroke, int); + } + + public class OrientedBoundingBox { + field public final float centerX; + field public final float centerY; + field public final float height; + field public final float orientation; + field public final float squareness; + field public final float width; + } + + public class Prediction { + field public final java.lang.String name; + field public double score; + } + +} + +package android.graphics { + + public deprecated class AvoidXfermode extends android.graphics.Xfermode { + ctor public AvoidXfermode(int, int, android.graphics.AvoidXfermode.Mode); + } + + public static final class AvoidXfermode.Mode extends java.lang.Enum { + method public static android.graphics.AvoidXfermode.Mode valueOf(java.lang.String); + method public static final android.graphics.AvoidXfermode.Mode[] values(); + enum_constant public static final android.graphics.AvoidXfermode.Mode AVOID; + enum_constant public static final android.graphics.AvoidXfermode.Mode TARGET; + } + + public final class Bitmap implements android.os.Parcelable { + method public boolean compress(android.graphics.Bitmap.CompressFormat, int, java.io.OutputStream); + method public android.graphics.Bitmap copy(android.graphics.Bitmap.Config, boolean); + method public void copyPixelsFromBuffer(java.nio.Buffer); + method public void copyPixelsToBuffer(java.nio.Buffer); + method public static android.graphics.Bitmap createBitmap(android.graphics.Bitmap); + method public static android.graphics.Bitmap createBitmap(android.graphics.Bitmap, int, int, int, int); + method public static android.graphics.Bitmap createBitmap(android.graphics.Bitmap, int, int, int, int, android.graphics.Matrix, boolean); + method public static android.graphics.Bitmap createBitmap(int, int, android.graphics.Bitmap.Config); + method public static android.graphics.Bitmap createBitmap(android.util.DisplayMetrics, int, int, android.graphics.Bitmap.Config); + method public static android.graphics.Bitmap createBitmap(int[], int, int, int, int, android.graphics.Bitmap.Config); + method public static android.graphics.Bitmap createBitmap(android.util.DisplayMetrics, int[], int, int, int, int, android.graphics.Bitmap.Config); + method public static android.graphics.Bitmap createBitmap(int[], int, int, android.graphics.Bitmap.Config); + method public static android.graphics.Bitmap createBitmap(android.util.DisplayMetrics, int[], int, int, android.graphics.Bitmap.Config); + method public static android.graphics.Bitmap createScaledBitmap(android.graphics.Bitmap, int, int, boolean); + method public int describeContents(); + method public void eraseColor(int); + method public android.graphics.Bitmap extractAlpha(); + method public android.graphics.Bitmap extractAlpha(android.graphics.Paint, int[]); + method public final int getAllocationByteCount(); + method public final int getByteCount(); + method public final android.graphics.Bitmap.Config getConfig(); + method public int getDensity(); + method public int getGenerationId(); + method public final int getHeight(); + method public byte[] getNinePatchChunk(); + method public int getPixel(int, int); + method public void getPixels(int[], int, int, int, int, int, int); + method public final int getRowBytes(); + method public int getScaledHeight(android.graphics.Canvas); + method public int getScaledHeight(android.util.DisplayMetrics); + method public int getScaledHeight(int); + method public int getScaledWidth(android.graphics.Canvas); + method public int getScaledWidth(android.util.DisplayMetrics); + method public int getScaledWidth(int); + method public final int getWidth(); + method public final boolean hasAlpha(); + method public final boolean hasMipMap(); + method public final boolean isMutable(); + method public final boolean isPremultiplied(); + method public final boolean isRecycled(); + method public void prepareToDraw(); + method public void reconfigure(int, int, android.graphics.Bitmap.Config); + method public void recycle(); + method public boolean sameAs(android.graphics.Bitmap); + method public void setConfig(android.graphics.Bitmap.Config); + method public void setDensity(int); + method public void setHasAlpha(boolean); + method public final void setHasMipMap(boolean); + method public void setHeight(int); + method public void setPixel(int, int, int); + method public void setPixels(int[], int, int, int, int, int, int); + method public final void setPremultiplied(boolean); + method public void setWidth(int); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int DENSITY_NONE = 0; // 0x0 + } + + public static final class Bitmap.CompressFormat extends java.lang.Enum { + method public static android.graphics.Bitmap.CompressFormat valueOf(java.lang.String); + method public static final android.graphics.Bitmap.CompressFormat[] values(); + enum_constant public static final android.graphics.Bitmap.CompressFormat JPEG; + enum_constant public static final android.graphics.Bitmap.CompressFormat PNG; + enum_constant public static final android.graphics.Bitmap.CompressFormat WEBP; + } + + public static final class Bitmap.Config extends java.lang.Enum { + method public static android.graphics.Bitmap.Config valueOf(java.lang.String); + method public static final android.graphics.Bitmap.Config[] values(); + enum_constant public static final android.graphics.Bitmap.Config ALPHA_8; + enum_constant public static final deprecated android.graphics.Bitmap.Config ARGB_4444; + enum_constant public static final android.graphics.Bitmap.Config ARGB_8888; + enum_constant public static final android.graphics.Bitmap.Config RGB_565; + } + + public class BitmapFactory { + ctor public BitmapFactory(); + method public static android.graphics.Bitmap decodeByteArray(byte[], int, int, android.graphics.BitmapFactory.Options); + method public static android.graphics.Bitmap decodeByteArray(byte[], int, int); + method public static android.graphics.Bitmap decodeFile(java.lang.String, android.graphics.BitmapFactory.Options); + method public static android.graphics.Bitmap decodeFile(java.lang.String); + method public static android.graphics.Bitmap decodeFileDescriptor(java.io.FileDescriptor, android.graphics.Rect, android.graphics.BitmapFactory.Options); + method public static android.graphics.Bitmap decodeFileDescriptor(java.io.FileDescriptor); + method public static android.graphics.Bitmap decodeResource(android.content.res.Resources, int, android.graphics.BitmapFactory.Options); + method public static android.graphics.Bitmap decodeResource(android.content.res.Resources, int); + method public static android.graphics.Bitmap decodeResourceStream(android.content.res.Resources, android.util.TypedValue, java.io.InputStream, android.graphics.Rect, android.graphics.BitmapFactory.Options); + method public static android.graphics.Bitmap decodeStream(java.io.InputStream, android.graphics.Rect, android.graphics.BitmapFactory.Options); + method public static android.graphics.Bitmap decodeStream(java.io.InputStream); + } + + public static class BitmapFactory.Options { + ctor public BitmapFactory.Options(); + method public void requestCancelDecode(); + field public android.graphics.Bitmap inBitmap; + field public int inDensity; + field public boolean inDither; + field public deprecated boolean inInputShareable; + field public boolean inJustDecodeBounds; + field public boolean inMutable; + field public boolean inPreferQualityOverSpeed; + field public android.graphics.Bitmap.Config inPreferredConfig; + field public boolean inPremultiplied; + field public deprecated boolean inPurgeable; + field public int inSampleSize; + field public boolean inScaled; + field public int inScreenDensity; + field public int inTargetDensity; + field public byte[] inTempStorage; + field public boolean mCancel; + field public int outHeight; + field public java.lang.String outMimeType; + field public int outWidth; + } + + public final class BitmapRegionDecoder { + method public android.graphics.Bitmap decodeRegion(android.graphics.Rect, android.graphics.BitmapFactory.Options); + method public int getHeight(); + method public int getWidth(); + method public final boolean isRecycled(); + method public static android.graphics.BitmapRegionDecoder newInstance(byte[], int, int, boolean) throws java.io.IOException; + method public static android.graphics.BitmapRegionDecoder newInstance(java.io.FileDescriptor, boolean) throws java.io.IOException; + method public static android.graphics.BitmapRegionDecoder newInstance(java.io.InputStream, boolean) throws java.io.IOException; + method public static android.graphics.BitmapRegionDecoder newInstance(java.lang.String, boolean) throws java.io.IOException; + method public void recycle(); + } + + public class BitmapShader extends android.graphics.Shader { + ctor public BitmapShader(android.graphics.Bitmap, android.graphics.Shader.TileMode, android.graphics.Shader.TileMode); + } + + public class BlurMaskFilter extends android.graphics.MaskFilter { + ctor public BlurMaskFilter(float, android.graphics.BlurMaskFilter.Blur); + } + + public static final class BlurMaskFilter.Blur extends java.lang.Enum { + method public static android.graphics.BlurMaskFilter.Blur valueOf(java.lang.String); + method public static final android.graphics.BlurMaskFilter.Blur[] values(); + enum_constant public static final android.graphics.BlurMaskFilter.Blur INNER; + enum_constant public static final android.graphics.BlurMaskFilter.Blur NORMAL; + enum_constant public static final android.graphics.BlurMaskFilter.Blur OUTER; + enum_constant public static final android.graphics.BlurMaskFilter.Blur SOLID; + } + + public class Camera { + ctor public Camera(); + method public void applyToCanvas(android.graphics.Canvas); + method public float dotWithNormal(float, float, float); + method public float getLocationX(); + method public float getLocationY(); + method public float getLocationZ(); + method public void getMatrix(android.graphics.Matrix); + method public void restore(); + method public void rotate(float, float, float); + method public void rotateX(float); + method public void rotateY(float); + method public void rotateZ(float); + method public void save(); + method public void setLocation(float, float, float); + method public void translate(float, float, float); + } + + public class Canvas { + ctor public Canvas(); + ctor public Canvas(android.graphics.Bitmap); + method public boolean clipPath(android.graphics.Path, android.graphics.Region.Op); + method public boolean clipPath(android.graphics.Path); + method public boolean clipRect(android.graphics.RectF, android.graphics.Region.Op); + method public boolean clipRect(android.graphics.Rect, android.graphics.Region.Op); + method public boolean clipRect(android.graphics.RectF); + method public boolean clipRect(android.graphics.Rect); + method public boolean clipRect(float, float, float, float, android.graphics.Region.Op); + method public boolean clipRect(float, float, float, float); + method public boolean clipRect(int, int, int, int); + method public deprecated boolean clipRegion(android.graphics.Region, android.graphics.Region.Op); + method public deprecated boolean clipRegion(android.graphics.Region); + method public void concat(android.graphics.Matrix); + method public void drawARGB(int, int, int, int); + method public void drawArc(android.graphics.RectF, float, float, boolean, android.graphics.Paint); + method public void drawArc(float, float, float, float, float, float, boolean, android.graphics.Paint); + method public void drawBitmap(android.graphics.Bitmap, float, float, android.graphics.Paint); + method public void drawBitmap(android.graphics.Bitmap, android.graphics.Rect, android.graphics.RectF, android.graphics.Paint); + method public void drawBitmap(android.graphics.Bitmap, android.graphics.Rect, android.graphics.Rect, android.graphics.Paint); + method public deprecated void drawBitmap(int[], int, int, float, float, int, int, boolean, android.graphics.Paint); + method public deprecated void drawBitmap(int[], int, int, int, int, int, int, boolean, android.graphics.Paint); + method public void drawBitmap(android.graphics.Bitmap, android.graphics.Matrix, android.graphics.Paint); + method public void drawBitmapMesh(android.graphics.Bitmap, int, int, float[], int, int[], int, android.graphics.Paint); + method public void drawCircle(float, float, float, android.graphics.Paint); + method public void drawColor(int); + method public void drawColor(int, android.graphics.PorterDuff.Mode); + method public void drawLine(float, float, float, float, android.graphics.Paint); + method public void drawLines(float[], int, int, android.graphics.Paint); + method public void drawLines(float[], android.graphics.Paint); + method public void drawOval(android.graphics.RectF, android.graphics.Paint); + method public void drawOval(float, float, float, float, android.graphics.Paint); + method public void drawPaint(android.graphics.Paint); + method public void drawPath(android.graphics.Path, android.graphics.Paint); + method public void drawPicture(android.graphics.Picture); + method public void drawPicture(android.graphics.Picture, android.graphics.RectF); + method public void drawPicture(android.graphics.Picture, android.graphics.Rect); + method public void drawPoint(float, float, android.graphics.Paint); + method public void drawPoints(float[], int, int, android.graphics.Paint); + method public void drawPoints(float[], android.graphics.Paint); + method public deprecated void drawPosText(char[], int, int, float[], android.graphics.Paint); + method public deprecated void drawPosText(java.lang.String, float[], android.graphics.Paint); + method public void drawRGB(int, int, int); + method public void drawRect(android.graphics.RectF, android.graphics.Paint); + method public void drawRect(android.graphics.Rect, android.graphics.Paint); + method public void drawRect(float, float, float, float, android.graphics.Paint); + method public void drawRoundRect(android.graphics.RectF, float, float, android.graphics.Paint); + method public void drawRoundRect(float, float, float, float, float, float, android.graphics.Paint); + method public void drawText(char[], int, int, float, float, android.graphics.Paint); + method public void drawText(java.lang.String, float, float, android.graphics.Paint); + method public void drawText(java.lang.String, int, int, float, float, android.graphics.Paint); + method public void drawText(java.lang.CharSequence, int, int, float, float, android.graphics.Paint); + method public void drawTextOnPath(char[], int, int, android.graphics.Path, float, float, android.graphics.Paint); + method public void drawTextOnPath(java.lang.String, android.graphics.Path, float, float, android.graphics.Paint); + method public void drawVertices(android.graphics.Canvas.VertexMode, int, float[], int, float[], int, int[], int, short[], int, int, android.graphics.Paint); + method public boolean getClipBounds(android.graphics.Rect); + method public final android.graphics.Rect getClipBounds(); + method public int getDensity(); + method public android.graphics.DrawFilter getDrawFilter(); + method public int getHeight(); + method public deprecated void getMatrix(android.graphics.Matrix); + method public final deprecated android.graphics.Matrix getMatrix(); + method public int getMaximumBitmapHeight(); + method public int getMaximumBitmapWidth(); + method public int getSaveCount(); + method public int getWidth(); + method public boolean isHardwareAccelerated(); + method public boolean isOpaque(); + method public boolean quickReject(android.graphics.RectF, android.graphics.Canvas.EdgeType); + method public boolean quickReject(android.graphics.Path, android.graphics.Canvas.EdgeType); + method public boolean quickReject(float, float, float, float, android.graphics.Canvas.EdgeType); + method public void restore(); + method public void restoreToCount(int); + method public void rotate(float); + method public final void rotate(float, float, float); + method public int save(); + method public int save(int); + method public int saveLayer(android.graphics.RectF, android.graphics.Paint, int); + method public int saveLayer(android.graphics.RectF, android.graphics.Paint); + method public int saveLayer(float, float, float, float, android.graphics.Paint, int); + method public int saveLayer(float, float, float, float, android.graphics.Paint); + method public int saveLayerAlpha(android.graphics.RectF, int, int); + method public int saveLayerAlpha(android.graphics.RectF, int); + method public int saveLayerAlpha(float, float, float, float, int, int); + method public int saveLayerAlpha(float, float, float, float, int); + method public void scale(float, float); + method public final void scale(float, float, float, float); + method public void setBitmap(android.graphics.Bitmap); + method public void setDensity(int); + method public void setDrawFilter(android.graphics.DrawFilter); + method public void setMatrix(android.graphics.Matrix); + method public void skew(float, float); + method public void translate(float, float); + field public static final int ALL_SAVE_FLAG = 31; // 0x1f + field public static final int CLIP_SAVE_FLAG = 2; // 0x2 + field public static final int CLIP_TO_LAYER_SAVE_FLAG = 16; // 0x10 + field public static final int FULL_COLOR_LAYER_SAVE_FLAG = 8; // 0x8 + field public static final int HAS_ALPHA_LAYER_SAVE_FLAG = 4; // 0x4 + field public static final int MATRIX_SAVE_FLAG = 1; // 0x1 + } + + public static final class Canvas.EdgeType extends java.lang.Enum { + method public static android.graphics.Canvas.EdgeType valueOf(java.lang.String); + method public static final android.graphics.Canvas.EdgeType[] values(); + enum_constant public static final android.graphics.Canvas.EdgeType AA; + enum_constant public static final android.graphics.Canvas.EdgeType BW; + } + + public static final class Canvas.VertexMode extends java.lang.Enum { + method public static android.graphics.Canvas.VertexMode valueOf(java.lang.String); + method public static final android.graphics.Canvas.VertexMode[] values(); + enum_constant public static final android.graphics.Canvas.VertexMode TRIANGLES; + enum_constant public static final android.graphics.Canvas.VertexMode TRIANGLE_FAN; + enum_constant public static final android.graphics.Canvas.VertexMode TRIANGLE_STRIP; + } + + public class Color { + ctor public Color(); + method public static int HSVToColor(float[]); + method public static int HSVToColor(int, float[]); + method public static void RGBToHSV(int, int, int, float[]); + method public static int alpha(int); + method public static int argb(int, int, int, int); + method public static int blue(int); + method public static void colorToHSV(int, float[]); + method public static int green(int); + method public static int parseColor(java.lang.String); + method public static int red(int); + method public static int rgb(int, int, int); + field public static final int BLACK = -16777216; // 0xff000000 + field public static final int BLUE = -16776961; // 0xff0000ff + field public static final int CYAN = -16711681; // 0xff00ffff + field public static final int DKGRAY = -12303292; // 0xff444444 + field public static final int GRAY = -7829368; // 0xff888888 + field public static final int GREEN = -16711936; // 0xff00ff00 + field public static final int LTGRAY = -3355444; // 0xffcccccc + field public static final int MAGENTA = -65281; // 0xffff00ff + field public static final int RED = -65536; // 0xffff0000 + field public static final int TRANSPARENT = 0; // 0x0 + field public static final int WHITE = -1; // 0xffffffff + field public static final int YELLOW = -256; // 0xffffff00 + } + + public class ColorFilter { + ctor public ColorFilter(); + } + + public class ColorMatrix { + ctor public ColorMatrix(); + ctor public ColorMatrix(float[]); + ctor public ColorMatrix(android.graphics.ColorMatrix); + method public final float[] getArray(); + method public void postConcat(android.graphics.ColorMatrix); + method public void preConcat(android.graphics.ColorMatrix); + method public void reset(); + method public void set(android.graphics.ColorMatrix); + method public void set(float[]); + method public void setConcat(android.graphics.ColorMatrix, android.graphics.ColorMatrix); + method public void setRGB2YUV(); + method public void setRotate(int, float); + method public void setSaturation(float); + method public void setScale(float, float, float, float); + method public void setYUV2RGB(); + } + + public class ColorMatrixColorFilter extends android.graphics.ColorFilter { + ctor public ColorMatrixColorFilter(android.graphics.ColorMatrix); + ctor public ColorMatrixColorFilter(float[]); + } + + public class ComposePathEffect extends android.graphics.PathEffect { + ctor public ComposePathEffect(android.graphics.PathEffect, android.graphics.PathEffect); + } + + public class ComposeShader extends android.graphics.Shader { + ctor public ComposeShader(android.graphics.Shader, android.graphics.Shader, android.graphics.Xfermode); + ctor public ComposeShader(android.graphics.Shader, android.graphics.Shader, android.graphics.PorterDuff.Mode); + } + + public class CornerPathEffect extends android.graphics.PathEffect { + ctor public CornerPathEffect(float); + } + + public class DashPathEffect extends android.graphics.PathEffect { + ctor public DashPathEffect(float[], float); + } + + public class DiscretePathEffect extends android.graphics.PathEffect { + ctor public DiscretePathEffect(float, float); + } + + public class DrawFilter { + ctor public DrawFilter(); + } + + public class EmbossMaskFilter extends android.graphics.MaskFilter { + ctor public EmbossMaskFilter(float[], float, float, float); + } + + public class ImageFormat { + ctor public ImageFormat(); + method public static int getBitsPerPixel(int); + field public static final int JPEG = 256; // 0x100 + field public static final int NV16 = 16; // 0x10 + field public static final int NV21 = 17; // 0x11 + field public static final int RAW10 = 37; // 0x25 + field public static final int RAW_SENSOR = 32; // 0x20 + field public static final int RGB_565 = 4; // 0x4 + field public static final int UNKNOWN = 0; // 0x0 + field public static final int YUV_420_888 = 35; // 0x23 + field public static final int YUY2 = 20; // 0x14 + field public static final int YV12 = 842094169; // 0x32315659 + } + + public class Interpolator { + ctor public Interpolator(int); + ctor public Interpolator(int, int); + method public final int getKeyFrameCount(); + method public final int getValueCount(); + method public void reset(int); + method public void reset(int, int); + method public void setKeyFrame(int, int, float[]); + method public void setKeyFrame(int, int, float[], float[]); + method public void setRepeatMirror(float, boolean); + method public android.graphics.Interpolator.Result timeToValues(float[]); + method public android.graphics.Interpolator.Result timeToValues(int, float[]); + } + + public static final class Interpolator.Result extends java.lang.Enum { + method public static android.graphics.Interpolator.Result valueOf(java.lang.String); + method public static final android.graphics.Interpolator.Result[] values(); + enum_constant public static final android.graphics.Interpolator.Result FREEZE_END; + enum_constant public static final android.graphics.Interpolator.Result FREEZE_START; + enum_constant public static final android.graphics.Interpolator.Result NORMAL; + } + + public deprecated class LayerRasterizer extends android.graphics.Rasterizer { + ctor public LayerRasterizer(); + method public void addLayer(android.graphics.Paint, float, float); + method public void addLayer(android.graphics.Paint); + } + + public class LightingColorFilter extends android.graphics.ColorFilter { + ctor public LightingColorFilter(int, int); + } + + public class LinearGradient extends android.graphics.Shader { + ctor public LinearGradient(float, float, float, float, int[], float[], android.graphics.Shader.TileMode); + ctor public LinearGradient(float, float, float, float, int, int, android.graphics.Shader.TileMode); + } + + public class MaskFilter { + ctor public MaskFilter(); + } + + public class Matrix { + ctor public Matrix(); + ctor public Matrix(android.graphics.Matrix); + method public void getValues(float[]); + method public boolean invert(android.graphics.Matrix); + method public boolean isAffine(); + method public boolean isIdentity(); + method public void mapPoints(float[], int, float[], int, int); + method public void mapPoints(float[], float[]); + method public void mapPoints(float[]); + method public float mapRadius(float); + method public boolean mapRect(android.graphics.RectF, android.graphics.RectF); + method public boolean mapRect(android.graphics.RectF); + method public void mapVectors(float[], int, float[], int, int); + method public void mapVectors(float[], float[]); + method public void mapVectors(float[]); + method public boolean postConcat(android.graphics.Matrix); + method public boolean postRotate(float, float, float); + method public boolean postRotate(float); + method public boolean postScale(float, float, float, float); + method public boolean postScale(float, float); + method public boolean postSkew(float, float, float, float); + method public boolean postSkew(float, float); + method public boolean postTranslate(float, float); + method public boolean preConcat(android.graphics.Matrix); + method public boolean preRotate(float, float, float); + method public boolean preRotate(float); + method public boolean preScale(float, float, float, float); + method public boolean preScale(float, float); + method public boolean preSkew(float, float, float, float); + method public boolean preSkew(float, float); + method public boolean preTranslate(float, float); + method public boolean rectStaysRect(); + method public void reset(); + method public void set(android.graphics.Matrix); + method public boolean setConcat(android.graphics.Matrix, android.graphics.Matrix); + method public boolean setPolyToPoly(float[], int, float[], int, int); + method public boolean setRectToRect(android.graphics.RectF, android.graphics.RectF, android.graphics.Matrix.ScaleToFit); + method public void setRotate(float, float, float); + method public void setRotate(float); + method public void setScale(float, float, float, float); + method public void setScale(float, float); + method public void setSinCos(float, float, float, float); + method public void setSinCos(float, float); + method public void setSkew(float, float, float, float); + method public void setSkew(float, float); + method public void setTranslate(float, float); + method public void setValues(float[]); + method public java.lang.String toShortString(); + field public static final int MPERSP_0 = 6; // 0x6 + field public static final int MPERSP_1 = 7; // 0x7 + field public static final int MPERSP_2 = 8; // 0x8 + field public static final int MSCALE_X = 0; // 0x0 + field public static final int MSCALE_Y = 4; // 0x4 + field public static final int MSKEW_X = 1; // 0x1 + field public static final int MSKEW_Y = 3; // 0x3 + field public static final int MTRANS_X = 2; // 0x2 + field public static final int MTRANS_Y = 5; // 0x5 + } + + public static final class Matrix.ScaleToFit extends java.lang.Enum { + method public static android.graphics.Matrix.ScaleToFit valueOf(java.lang.String); + method public static final android.graphics.Matrix.ScaleToFit[] values(); + enum_constant public static final android.graphics.Matrix.ScaleToFit CENTER; + enum_constant public static final android.graphics.Matrix.ScaleToFit END; + enum_constant public static final android.graphics.Matrix.ScaleToFit FILL; + enum_constant public static final android.graphics.Matrix.ScaleToFit START; + } + + public class Movie { + method public static android.graphics.Movie decodeByteArray(byte[], int, int); + method public static android.graphics.Movie decodeFile(java.lang.String); + method public static android.graphics.Movie decodeStream(java.io.InputStream); + method public void draw(android.graphics.Canvas, float, float, android.graphics.Paint); + method public void draw(android.graphics.Canvas, float, float); + method public int duration(); + method public int height(); + method public boolean isOpaque(); + method public boolean setTime(int); + method public int width(); + } + + public class NinePatch { + ctor public NinePatch(android.graphics.Bitmap, byte[]); + ctor public NinePatch(android.graphics.Bitmap, byte[], java.lang.String); + method public void draw(android.graphics.Canvas, android.graphics.RectF); + method public void draw(android.graphics.Canvas, android.graphics.Rect); + method public void draw(android.graphics.Canvas, android.graphics.Rect, android.graphics.Paint); + method public android.graphics.Bitmap getBitmap(); + method public int getDensity(); + method public int getHeight(); + method public java.lang.String getName(); + method public android.graphics.Paint getPaint(); + method public final android.graphics.Region getTransparentRegion(android.graphics.Rect); + method public int getWidth(); + method public final boolean hasAlpha(); + method public static boolean isNinePatchChunk(byte[]); + method public void setPaint(android.graphics.Paint); + } + + public final class Outline { + ctor public Outline(); + ctor public Outline(android.graphics.Outline); + method public boolean canClip(); + method public float getAlpha(); + method public boolean isEmpty(); + method public void offset(int, int); + method public void set(android.graphics.Outline); + method public void setAlpha(float); + method public void setConvexPath(android.graphics.Path); + method public void setEmpty(); + method public void setOval(int, int, int, int); + method public void setOval(android.graphics.Rect); + method public void setRect(int, int, int, int); + method public void setRect(android.graphics.Rect); + method public void setRoundRect(int, int, int, int, float); + method public void setRoundRect(android.graphics.Rect, float); + } + + public class Paint { + ctor public Paint(); + ctor public Paint(int); + ctor public Paint(android.graphics.Paint); + method public float ascent(); + method public int breakText(char[], int, int, float, float[]); + method public int breakText(java.lang.CharSequence, int, int, boolean, float, float[]); + method public int breakText(java.lang.String, boolean, float, float[]); + method public void clearShadowLayer(); + method public float descent(); + method public int getAlpha(); + method public int getColor(); + method public android.graphics.ColorFilter getColorFilter(); + method public boolean getFillPath(android.graphics.Path, android.graphics.Path); + method public int getFlags(); + method public java.lang.String getFontFeatureSettings(); + method public float getFontMetrics(android.graphics.Paint.FontMetrics); + method public android.graphics.Paint.FontMetrics getFontMetrics(); + method public int getFontMetricsInt(android.graphics.Paint.FontMetricsInt); + method public android.graphics.Paint.FontMetricsInt getFontMetricsInt(); + method public float getFontSpacing(); + method public int getHinting(); + method public float getLetterSpacing(); + method public android.graphics.MaskFilter getMaskFilter(); + method public android.graphics.PathEffect getPathEffect(); + method public deprecated android.graphics.Rasterizer getRasterizer(); + method public android.graphics.Shader getShader(); + method public android.graphics.Paint.Cap getStrokeCap(); + method public android.graphics.Paint.Join getStrokeJoin(); + method public float getStrokeMiter(); + method public float getStrokeWidth(); + method public android.graphics.Paint.Style getStyle(); + method public android.graphics.Paint.Align getTextAlign(); + method public void getTextBounds(java.lang.String, int, int, android.graphics.Rect); + method public void getTextBounds(char[], int, int, android.graphics.Rect); + method public java.util.Locale getTextLocale(); + method public void getTextPath(char[], int, int, float, float, android.graphics.Path); + method public void getTextPath(java.lang.String, int, int, float, float, android.graphics.Path); + method public float getTextScaleX(); + method public float getTextSize(); + method public float getTextSkewX(); + method public int getTextWidths(char[], int, int, float[]); + method public int getTextWidths(java.lang.CharSequence, int, int, float[]); + method public int getTextWidths(java.lang.String, int, int, float[]); + method public int getTextWidths(java.lang.String, float[]); + method public android.graphics.Typeface getTypeface(); + method public android.graphics.Xfermode getXfermode(); + method public final boolean isAntiAlias(); + method public final boolean isDither(); + method public boolean isElegantTextHeight(); + method public final boolean isFakeBoldText(); + method public final boolean isFilterBitmap(); + method public final boolean isLinearText(); + method public final boolean isStrikeThruText(); + method public final boolean isSubpixelText(); + method public final boolean isUnderlineText(); + method public float measureText(char[], int, int); + method public float measureText(java.lang.String, int, int); + method public float measureText(java.lang.String); + method public float measureText(java.lang.CharSequence, int, int); + method public void reset(); + method public void set(android.graphics.Paint); + method public void setARGB(int, int, int, int); + method public void setAlpha(int); + method public void setAntiAlias(boolean); + method public void setColor(int); + method public android.graphics.ColorFilter setColorFilter(android.graphics.ColorFilter); + method public void setDither(boolean); + method public void setElegantTextHeight(boolean); + method public void setFakeBoldText(boolean); + method public void setFilterBitmap(boolean); + method public void setFlags(int); + method public void setFontFeatureSettings(java.lang.String); + method public void setHinting(int); + method public void setLetterSpacing(float); + method public void setLinearText(boolean); + method public android.graphics.MaskFilter setMaskFilter(android.graphics.MaskFilter); + method public android.graphics.PathEffect setPathEffect(android.graphics.PathEffect); + method public deprecated android.graphics.Rasterizer setRasterizer(android.graphics.Rasterizer); + method public android.graphics.Shader setShader(android.graphics.Shader); + method public void setShadowLayer(float, float, float, int); + method public void setStrikeThruText(boolean); + method public void setStrokeCap(android.graphics.Paint.Cap); + method public void setStrokeJoin(android.graphics.Paint.Join); + method public void setStrokeMiter(float); + method public void setStrokeWidth(float); + method public void setStyle(android.graphics.Paint.Style); + method public void setSubpixelText(boolean); + method public void setTextAlign(android.graphics.Paint.Align); + method public void setTextLocale(java.util.Locale); + method public void setTextScaleX(float); + method public void setTextSize(float); + method public void setTextSkewX(float); + method public android.graphics.Typeface setTypeface(android.graphics.Typeface); + method public void setUnderlineText(boolean); + method public android.graphics.Xfermode setXfermode(android.graphics.Xfermode); + field public static final int ANTI_ALIAS_FLAG = 1; // 0x1 + field public static final int DEV_KERN_TEXT_FLAG = 256; // 0x100 + field public static final int DITHER_FLAG = 4; // 0x4 + field public static final int EMBEDDED_BITMAP_TEXT_FLAG = 1024; // 0x400 + field public static final int FAKE_BOLD_TEXT_FLAG = 32; // 0x20 + field public static final int FILTER_BITMAP_FLAG = 2; // 0x2 + field public static final int HINTING_OFF = 0; // 0x0 + field public static final int HINTING_ON = 1; // 0x1 + field public static final int LINEAR_TEXT_FLAG = 64; // 0x40 + field public static final int STRIKE_THRU_TEXT_FLAG = 16; // 0x10 + field public static final int SUBPIXEL_TEXT_FLAG = 128; // 0x80 + field public static final int UNDERLINE_TEXT_FLAG = 8; // 0x8 + } + + public static final class Paint.Align extends java.lang.Enum { + method public static android.graphics.Paint.Align valueOf(java.lang.String); + method public static final android.graphics.Paint.Align[] values(); + enum_constant public static final android.graphics.Paint.Align CENTER; + enum_constant public static final android.graphics.Paint.Align LEFT; + enum_constant public static final android.graphics.Paint.Align RIGHT; + } + + public static final class Paint.Cap extends java.lang.Enum { + method public static android.graphics.Paint.Cap valueOf(java.lang.String); + method public static final android.graphics.Paint.Cap[] values(); + enum_constant public static final android.graphics.Paint.Cap BUTT; + enum_constant public static final android.graphics.Paint.Cap ROUND; + enum_constant public static final android.graphics.Paint.Cap SQUARE; + } + + public static class Paint.FontMetrics { + ctor public Paint.FontMetrics(); + field public float ascent; + field public float bottom; + field public float descent; + field public float leading; + field public float top; + } + + public static class Paint.FontMetricsInt { + ctor public Paint.FontMetricsInt(); + field public int ascent; + field public int bottom; + field public int descent; + field public int leading; + field public int top; + } + + public static final class Paint.Join extends java.lang.Enum { + method public static android.graphics.Paint.Join valueOf(java.lang.String); + method public static final android.graphics.Paint.Join[] values(); + enum_constant public static final android.graphics.Paint.Join BEVEL; + enum_constant public static final android.graphics.Paint.Join MITER; + enum_constant public static final android.graphics.Paint.Join ROUND; + } + + public static final class Paint.Style extends java.lang.Enum { + method public static android.graphics.Paint.Style valueOf(java.lang.String); + method public static final android.graphics.Paint.Style[] values(); + enum_constant public static final android.graphics.Paint.Style FILL; + enum_constant public static final android.graphics.Paint.Style FILL_AND_STROKE; + enum_constant public static final android.graphics.Paint.Style STROKE; + } + + public class PaintFlagsDrawFilter extends android.graphics.DrawFilter { + ctor public PaintFlagsDrawFilter(int, int); + } + + public class Path { + ctor public Path(); + ctor public Path(android.graphics.Path); + method public void addArc(android.graphics.RectF, float, float); + method public void addArc(float, float, float, float, float, float); + method public void addCircle(float, float, float, android.graphics.Path.Direction); + method public void addOval(android.graphics.RectF, android.graphics.Path.Direction); + method public void addOval(float, float, float, float, android.graphics.Path.Direction); + method public void addPath(android.graphics.Path, float, float); + method public void addPath(android.graphics.Path); + method public void addPath(android.graphics.Path, android.graphics.Matrix); + method public void addRect(android.graphics.RectF, android.graphics.Path.Direction); + method public void addRect(float, float, float, float, android.graphics.Path.Direction); + method public void addRoundRect(android.graphics.RectF, float, float, android.graphics.Path.Direction); + method public void addRoundRect(float, float, float, float, float, float, android.graphics.Path.Direction); + method public void addRoundRect(android.graphics.RectF, float[], android.graphics.Path.Direction); + method public void addRoundRect(float, float, float, float, float[], android.graphics.Path.Direction); + method public void arcTo(android.graphics.RectF, float, float, boolean); + method public void arcTo(android.graphics.RectF, float, float); + method public void arcTo(float, float, float, float, float, float, boolean); + method public void close(); + method public void computeBounds(android.graphics.RectF, boolean); + method public void cubicTo(float, float, float, float, float, float); + method public android.graphics.Path.FillType getFillType(); + method public void incReserve(int); + method public boolean isConvex(); + method public boolean isEmpty(); + method public boolean isInverseFillType(); + method public boolean isRect(android.graphics.RectF); + method public void lineTo(float, float); + method public void moveTo(float, float); + method public void offset(float, float, android.graphics.Path); + method public void offset(float, float); + method public boolean op(android.graphics.Path, android.graphics.Path.Op); + method public boolean op(android.graphics.Path, android.graphics.Path, android.graphics.Path.Op); + method public void quadTo(float, float, float, float); + method public void rCubicTo(float, float, float, float, float, float); + method public void rLineTo(float, float); + method public void rMoveTo(float, float); + method public void rQuadTo(float, float, float, float); + method public void reset(); + method public void rewind(); + method public void set(android.graphics.Path); + method public void setFillType(android.graphics.Path.FillType); + method public void setLastPoint(float, float); + method public void toggleInverseFillType(); + method public void transform(android.graphics.Matrix, android.graphics.Path); + method public void transform(android.graphics.Matrix); + } + + public static final class Path.Direction extends java.lang.Enum { + method public static android.graphics.Path.Direction valueOf(java.lang.String); + method public static final android.graphics.Path.Direction[] values(); + enum_constant public static final android.graphics.Path.Direction CCW; + enum_constant public static final android.graphics.Path.Direction CW; + } + + public static final class Path.FillType extends java.lang.Enum { + method public static android.graphics.Path.FillType valueOf(java.lang.String); + method public static final android.graphics.Path.FillType[] values(); + enum_constant public static final android.graphics.Path.FillType EVEN_ODD; + enum_constant public static final android.graphics.Path.FillType INVERSE_EVEN_ODD; + enum_constant public static final android.graphics.Path.FillType INVERSE_WINDING; + enum_constant public static final android.graphics.Path.FillType WINDING; + } + + public static final class Path.Op extends java.lang.Enum { + method public static android.graphics.Path.Op valueOf(java.lang.String); + method public static final android.graphics.Path.Op[] values(); + enum_constant public static final android.graphics.Path.Op DIFFERENCE; + enum_constant public static final android.graphics.Path.Op INTERSECT; + enum_constant public static final android.graphics.Path.Op REVERSE_DIFFERENCE; + enum_constant public static final android.graphics.Path.Op UNION; + enum_constant public static final android.graphics.Path.Op XOR; + } + + public class PathDashPathEffect extends android.graphics.PathEffect { + ctor public PathDashPathEffect(android.graphics.Path, float, float, android.graphics.PathDashPathEffect.Style); + } + + public static final class PathDashPathEffect.Style extends java.lang.Enum { + method public static android.graphics.PathDashPathEffect.Style valueOf(java.lang.String); + method public static final android.graphics.PathDashPathEffect.Style[] values(); + enum_constant public static final android.graphics.PathDashPathEffect.Style MORPH; + enum_constant public static final android.graphics.PathDashPathEffect.Style ROTATE; + enum_constant public static final android.graphics.PathDashPathEffect.Style TRANSLATE; + } + + public class PathEffect { + ctor public PathEffect(); + } + + public class PathMeasure { + ctor public PathMeasure(); + ctor public PathMeasure(android.graphics.Path, boolean); + method public float getLength(); + method public boolean getMatrix(float, android.graphics.Matrix, int); + method public boolean getPosTan(float, float[], float[]); + method public boolean getSegment(float, float, android.graphics.Path, boolean); + method public boolean isClosed(); + method public boolean nextContour(); + method public void setPath(android.graphics.Path, boolean); + field public static final int POSITION_MATRIX_FLAG = 1; // 0x1 + field public static final int TANGENT_MATRIX_FLAG = 2; // 0x2 + } + + public class Picture { + ctor public Picture(); + ctor public Picture(android.graphics.Picture); + method public android.graphics.Canvas beginRecording(int, int); + method public static deprecated android.graphics.Picture createFromStream(java.io.InputStream); + method public void draw(android.graphics.Canvas); + method public void endRecording(); + method public int getHeight(); + method public int getWidth(); + method public deprecated void writeToStream(java.io.OutputStream); + } + + public class PixelFormat { + ctor public PixelFormat(); + method public static boolean formatHasAlpha(int); + method public static void getPixelFormatInfo(int, android.graphics.PixelFormat); + field public static final deprecated int A_8 = 8; // 0x8 + field public static final deprecated int JPEG = 256; // 0x100 + field public static final deprecated int LA_88 = 10; // 0xa + field public static final deprecated int L_8 = 9; // 0x9 + field public static final int OPAQUE = -1; // 0xffffffff + field public static final deprecated int RGBA_4444 = 7; // 0x7 + field public static final deprecated int RGBA_5551 = 6; // 0x6 + field public static final int RGBA_8888 = 1; // 0x1 + field public static final int RGBX_8888 = 2; // 0x2 + field public static final deprecated int RGB_332 = 11; // 0xb + field public static final int RGB_565 = 4; // 0x4 + field public static final int RGB_888 = 3; // 0x3 + field public static final int TRANSLUCENT = -3; // 0xfffffffd + field public static final int TRANSPARENT = -2; // 0xfffffffe + field public static final int UNKNOWN = 0; // 0x0 + field public static final deprecated int YCbCr_420_SP = 17; // 0x11 + field public static final deprecated int YCbCr_422_I = 20; // 0x14 + field public static final deprecated int YCbCr_422_SP = 16; // 0x10 + field public int bitsPerPixel; + field public int bytesPerPixel; + } + + public deprecated class PixelXorXfermode extends android.graphics.Xfermode { + ctor public PixelXorXfermode(int); + } + + public class Point implements android.os.Parcelable { + ctor public Point(); + ctor public Point(int, int); + ctor public Point(android.graphics.Point); + method public int describeContents(); + method public final boolean equals(int, int); + method public final void negate(); + method public final void offset(int, int); + method public void readFromParcel(android.os.Parcel); + method public void set(int, int); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public int x; + field public int y; + } + + public class PointF implements android.os.Parcelable { + ctor public PointF(); + ctor public PointF(float, float); + ctor public PointF(android.graphics.Point); + method public int describeContents(); + method public final boolean equals(float, float); + method public final float length(); + method public static float length(float, float); + method public final void negate(); + method public final void offset(float, float); + method public void readFromParcel(android.os.Parcel); + method public final void set(float, float); + method public final void set(android.graphics.PointF); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public float x; + field public float y; + } + + public class PorterDuff { + ctor public PorterDuff(); + } + + public static final class PorterDuff.Mode extends java.lang.Enum { + method public static android.graphics.PorterDuff.Mode valueOf(java.lang.String); + method public static final android.graphics.PorterDuff.Mode[] values(); + enum_constant public static final android.graphics.PorterDuff.Mode ADD; + enum_constant public static final android.graphics.PorterDuff.Mode CLEAR; + enum_constant public static final android.graphics.PorterDuff.Mode DARKEN; + enum_constant public static final android.graphics.PorterDuff.Mode DST; + enum_constant public static final android.graphics.PorterDuff.Mode DST_ATOP; + enum_constant public static final android.graphics.PorterDuff.Mode DST_IN; + enum_constant public static final android.graphics.PorterDuff.Mode DST_OUT; + enum_constant public static final android.graphics.PorterDuff.Mode DST_OVER; + enum_constant public static final android.graphics.PorterDuff.Mode LIGHTEN; + enum_constant public static final android.graphics.PorterDuff.Mode MULTIPLY; + enum_constant public static final android.graphics.PorterDuff.Mode OVERLAY; + enum_constant public static final android.graphics.PorterDuff.Mode SCREEN; + enum_constant public static final android.graphics.PorterDuff.Mode SRC; + enum_constant public static final android.graphics.PorterDuff.Mode SRC_ATOP; + enum_constant public static final android.graphics.PorterDuff.Mode SRC_IN; + enum_constant public static final android.graphics.PorterDuff.Mode SRC_OUT; + enum_constant public static final android.graphics.PorterDuff.Mode SRC_OVER; + enum_constant public static final android.graphics.PorterDuff.Mode XOR; + } + + public class PorterDuffColorFilter extends android.graphics.ColorFilter { + ctor public PorterDuffColorFilter(int, android.graphics.PorterDuff.Mode); + } + + public class PorterDuffXfermode extends android.graphics.Xfermode { + ctor public PorterDuffXfermode(android.graphics.PorterDuff.Mode); + } + + public class RadialGradient extends android.graphics.Shader { + ctor public RadialGradient(float, float, float, int[], float[], android.graphics.Shader.TileMode); + ctor public RadialGradient(float, float, float, int, int, android.graphics.Shader.TileMode); + } + + public deprecated class Rasterizer { + ctor public Rasterizer(); + } + + public final class Rect implements android.os.Parcelable { + ctor public Rect(); + ctor public Rect(int, int, int, int); + ctor public Rect(android.graphics.Rect); + method public final int centerX(); + method public final int centerY(); + method public boolean contains(int, int); + method public boolean contains(int, int, int, int); + method public boolean contains(android.graphics.Rect); + method public int describeContents(); + method public final float exactCenterX(); + method public final float exactCenterY(); + method public java.lang.String flattenToString(); + method public final int height(); + method public void inset(int, int); + method public boolean intersect(int, int, int, int); + method public boolean intersect(android.graphics.Rect); + method public boolean intersects(int, int, int, int); + method public static boolean intersects(android.graphics.Rect, android.graphics.Rect); + method public final boolean isEmpty(); + method public void offset(int, int); + method public void offsetTo(int, int); + method public void readFromParcel(android.os.Parcel); + method public void set(int, int, int, int); + method public void set(android.graphics.Rect); + method public void setEmpty(); + method public boolean setIntersect(android.graphics.Rect, android.graphics.Rect); + method public void sort(); + method public java.lang.String toShortString(); + method public static android.graphics.Rect unflattenFromString(java.lang.String); + method public void union(int, int, int, int); + method public void union(android.graphics.Rect); + method public void union(int, int); + method public final int width(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public int bottom; + field public int left; + field public int right; + field public int top; + } + + public class RectF implements android.os.Parcelable { + ctor public RectF(); + ctor public RectF(float, float, float, float); + ctor public RectF(android.graphics.RectF); + ctor public RectF(android.graphics.Rect); + method public final float centerX(); + method public final float centerY(); + method public boolean contains(float, float); + method public boolean contains(float, float, float, float); + method public boolean contains(android.graphics.RectF); + method public int describeContents(); + method public final float height(); + method public void inset(float, float); + method public boolean intersect(float, float, float, float); + method public boolean intersect(android.graphics.RectF); + method public boolean intersects(float, float, float, float); + method public static boolean intersects(android.graphics.RectF, android.graphics.RectF); + method public final boolean isEmpty(); + method public void offset(float, float); + method public void offsetTo(float, float); + method public void readFromParcel(android.os.Parcel); + method public void round(android.graphics.Rect); + method public void roundOut(android.graphics.Rect); + method public void set(float, float, float, float); + method public void set(android.graphics.RectF); + method public void set(android.graphics.Rect); + method public void setEmpty(); + method public boolean setIntersect(android.graphics.RectF, android.graphics.RectF); + method public void sort(); + method public java.lang.String toShortString(); + method public void union(float, float, float, float); + method public void union(android.graphics.RectF); + method public void union(float, float); + method public final float width(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public float bottom; + field public float left; + field public float right; + field public float top; + } + + public class Region implements android.os.Parcelable { + ctor public Region(); + ctor public Region(android.graphics.Region); + ctor public Region(android.graphics.Rect); + ctor public Region(int, int, int, int); + method public boolean contains(int, int); + method public int describeContents(); + method public android.graphics.Path getBoundaryPath(); + method public boolean getBoundaryPath(android.graphics.Path); + method public android.graphics.Rect getBounds(); + method public boolean getBounds(android.graphics.Rect); + method public boolean isComplex(); + method public boolean isEmpty(); + method public boolean isRect(); + method public boolean op(android.graphics.Rect, android.graphics.Region.Op); + method public boolean op(int, int, int, int, android.graphics.Region.Op); + method public boolean op(android.graphics.Region, android.graphics.Region.Op); + method public boolean op(android.graphics.Rect, android.graphics.Region, android.graphics.Region.Op); + method public boolean op(android.graphics.Region, android.graphics.Region, android.graphics.Region.Op); + method public boolean quickContains(android.graphics.Rect); + method public boolean quickContains(int, int, int, int); + method public boolean quickReject(android.graphics.Rect); + method public boolean quickReject(int, int, int, int); + method public boolean quickReject(android.graphics.Region); + method public boolean set(android.graphics.Region); + method public boolean set(android.graphics.Rect); + method public boolean set(int, int, int, int); + method public void setEmpty(); + method public boolean setPath(android.graphics.Path, android.graphics.Region); + method public void translate(int, int); + method public void translate(int, int, android.graphics.Region); + method public final boolean union(android.graphics.Rect); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public static final class Region.Op extends java.lang.Enum { + method public static android.graphics.Region.Op valueOf(java.lang.String); + method public static final android.graphics.Region.Op[] values(); + enum_constant public static final android.graphics.Region.Op DIFFERENCE; + enum_constant public static final android.graphics.Region.Op INTERSECT; + enum_constant public static final android.graphics.Region.Op REPLACE; + enum_constant public static final android.graphics.Region.Op REVERSE_DIFFERENCE; + enum_constant public static final android.graphics.Region.Op UNION; + enum_constant public static final android.graphics.Region.Op XOR; + } + + public class RegionIterator { + ctor public RegionIterator(android.graphics.Region); + method public final boolean next(android.graphics.Rect); + } + + public class Shader { + ctor public Shader(); + method public boolean getLocalMatrix(android.graphics.Matrix); + method public void setLocalMatrix(android.graphics.Matrix); + } + + public static final class Shader.TileMode extends java.lang.Enum { + method public static android.graphics.Shader.TileMode valueOf(java.lang.String); + method public static final android.graphics.Shader.TileMode[] values(); + enum_constant public static final android.graphics.Shader.TileMode CLAMP; + enum_constant public static final android.graphics.Shader.TileMode MIRROR; + enum_constant public static final android.graphics.Shader.TileMode REPEAT; + } + + public class SumPathEffect extends android.graphics.PathEffect { + ctor public SumPathEffect(android.graphics.PathEffect, android.graphics.PathEffect); + } + + public class SurfaceTexture { + ctor public SurfaceTexture(int); + ctor public SurfaceTexture(int, boolean); + method public void attachToGLContext(int); + method public void detachFromGLContext(); + method public long getTimestamp(); + method public void getTransformMatrix(float[]); + method public void release(); + method public void releaseTexImage(); + method public void setDefaultBufferSize(int, int); + method public void setOnFrameAvailableListener(android.graphics.SurfaceTexture.OnFrameAvailableListener); + method public void setOnFrameAvailableListener(android.graphics.SurfaceTexture.OnFrameAvailableListener, android.os.Handler); + method public void updateTexImage(); + } + + public static abstract interface SurfaceTexture.OnFrameAvailableListener { + method public abstract void onFrameAvailable(android.graphics.SurfaceTexture); + } + + public static deprecated class SurfaceTexture.OutOfResourcesException extends java.lang.Exception { + ctor public SurfaceTexture.OutOfResourcesException(); + ctor public SurfaceTexture.OutOfResourcesException(java.lang.String); + } + + public class SweepGradient extends android.graphics.Shader { + ctor public SweepGradient(float, float, int[], float[]); + ctor public SweepGradient(float, float, int, int); + } + + public class Typeface { + method public static android.graphics.Typeface create(java.lang.String, int); + method public static android.graphics.Typeface create(android.graphics.Typeface, int); + method public static android.graphics.Typeface createFromAsset(android.content.res.AssetManager, java.lang.String); + method public static android.graphics.Typeface createFromFile(java.io.File); + method public static android.graphics.Typeface createFromFile(java.lang.String); + method public static android.graphics.Typeface defaultFromStyle(int); + method public int getStyle(); + method public final boolean isBold(); + method public final boolean isItalic(); + field public static final int BOLD = 1; // 0x1 + field public static final int BOLD_ITALIC = 3; // 0x3 + field public static final android.graphics.Typeface DEFAULT; + field public static final android.graphics.Typeface DEFAULT_BOLD; + field public static final int ITALIC = 2; // 0x2 + field public static final android.graphics.Typeface MONOSPACE; + field public static final int NORMAL = 0; // 0x0 + field public static final android.graphics.Typeface SANS_SERIF; + field public static final android.graphics.Typeface SERIF; + } + + public class Xfermode { + ctor public Xfermode(); + } + + public class YuvImage { + ctor public YuvImage(byte[], int, int, int, int[]); + method public boolean compressToJpeg(android.graphics.Rect, int, java.io.OutputStream); + method public int getHeight(); + method public int[] getStrides(); + method public int getWidth(); + method public byte[] getYuvData(); + method public int getYuvFormat(); + } + +} + +package android.graphics.drawable { + + public abstract interface Animatable { + method public abstract boolean isRunning(); + method public abstract void start(); + method public abstract void stop(); + } + + public class AnimatedStateListDrawable extends android.graphics.drawable.StateListDrawable { + ctor public AnimatedStateListDrawable(); + method public void addState(int[], android.graphics.drawable.Drawable, int); + method public void addTransition(int, int, T, boolean); + } + + public class AnimatedVectorDrawable extends android.graphics.drawable.Drawable implements android.graphics.drawable.Animatable { + ctor public AnimatedVectorDrawable(); + method public void draw(android.graphics.Canvas); + method public int getOpacity(); + method public boolean isRunning(); + method public void setAlpha(int); + method public void setColorFilter(android.graphics.ColorFilter); + method public void start(); + method public void stop(); + } + + public class AnimationDrawable extends android.graphics.drawable.DrawableContainer implements android.graphics.drawable.Animatable java.lang.Runnable { + ctor public AnimationDrawable(); + method public void addFrame(android.graphics.drawable.Drawable, int); + method public int getDuration(int); + method public android.graphics.drawable.Drawable getFrame(int); + method public int getNumberOfFrames(); + method public boolean isOneShot(); + method public boolean isRunning(); + method public void run(); + method public void setOneShot(boolean); + method public void start(); + method public void stop(); + } + + public class BitmapDrawable extends android.graphics.drawable.Drawable { + ctor public deprecated BitmapDrawable(); + ctor public deprecated BitmapDrawable(android.content.res.Resources); + ctor public deprecated BitmapDrawable(android.graphics.Bitmap); + ctor public BitmapDrawable(android.content.res.Resources, android.graphics.Bitmap); + ctor public deprecated BitmapDrawable(java.lang.String); + ctor public BitmapDrawable(android.content.res.Resources, java.lang.String); + ctor public deprecated BitmapDrawable(java.io.InputStream); + ctor public BitmapDrawable(android.content.res.Resources, java.io.InputStream); + method public void draw(android.graphics.Canvas); + method public final android.graphics.Bitmap getBitmap(); + method public final android.graphics.drawable.Drawable.ConstantState getConstantState(); + method public int getGravity(); + method public int getOpacity(); + method public final android.graphics.Paint getPaint(); + method public android.graphics.Shader.TileMode getTileModeX(); + method public android.graphics.Shader.TileMode getTileModeY(); + method public boolean hasAntiAlias(); + method public boolean hasMipMap(); + method public final boolean isAutoMirrored(); + method public void setAlpha(int); + method public void setAntiAlias(boolean); + method public void setColorFilter(android.graphics.ColorFilter); + method public void setGravity(int); + method public void setMipMap(boolean); + method public void setTargetDensity(android.graphics.Canvas); + method public void setTargetDensity(android.util.DisplayMetrics); + method public void setTargetDensity(int); + method public void setTileModeX(android.graphics.Shader.TileMode); + method public void setTileModeXY(android.graphics.Shader.TileMode, android.graphics.Shader.TileMode); + method public final void setTileModeY(android.graphics.Shader.TileMode); + } + + public class ClipDrawable extends android.graphics.drawable.Drawable implements android.graphics.drawable.Drawable.Callback { + ctor public ClipDrawable(android.graphics.drawable.Drawable, int, int); + method public void draw(android.graphics.Canvas); + method public int getOpacity(); + method public void invalidateDrawable(android.graphics.drawable.Drawable); + method public void scheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable, long); + method public void setAlpha(int); + method public void setColorFilter(android.graphics.ColorFilter); + method public void unscheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable); + field public static final int HORIZONTAL = 1; // 0x1 + field public static final int VERTICAL = 2; // 0x2 + } + + public class ColorDrawable extends android.graphics.drawable.Drawable { + ctor public ColorDrawable(); + ctor public ColorDrawable(int); + method public void draw(android.graphics.Canvas); + method public int getColor(); + method public int getOpacity(); + method public void setAlpha(int); + method public void setColor(int); + method public void setColorFilter(android.graphics.ColorFilter); + } + + public abstract class Drawable { + ctor public Drawable(); + method public void applyTheme(android.content.res.Resources.Theme); + method public boolean canApplyTheme(); + method public void clearColorFilter(); + method public final void copyBounds(android.graphics.Rect); + method public final android.graphics.Rect copyBounds(); + method public static android.graphics.drawable.Drawable createFromPath(java.lang.String); + method public static android.graphics.drawable.Drawable createFromResourceStream(android.content.res.Resources, android.util.TypedValue, java.io.InputStream, java.lang.String); + method public static android.graphics.drawable.Drawable createFromResourceStream(android.content.res.Resources, android.util.TypedValue, java.io.InputStream, java.lang.String, android.graphics.BitmapFactory.Options); + method public static android.graphics.drawable.Drawable createFromStream(java.io.InputStream, java.lang.String); + method public static android.graphics.drawable.Drawable createFromXml(android.content.res.Resources, org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException; + method public static android.graphics.drawable.Drawable createFromXml(android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.content.res.Resources.Theme) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException; + method public static android.graphics.drawable.Drawable createFromXmlInner(android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException; + method public static android.graphics.drawable.Drawable createFromXmlInner(android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet, android.content.res.Resources.Theme) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException; + method public abstract void draw(android.graphics.Canvas); + method public int getAlpha(); + method public final android.graphics.Rect getBounds(); + method public android.graphics.drawable.Drawable.Callback getCallback(); + method public int getChangingConfigurations(); + method public android.graphics.ColorFilter getColorFilter(); + method public android.graphics.drawable.Drawable.ConstantState getConstantState(); + method public android.graphics.drawable.Drawable getCurrent(); + method public android.graphics.Rect getDirtyBounds(); + method public int getIntrinsicHeight(); + method public int getIntrinsicWidth(); + method public final int getLevel(); + method public int getMinimumHeight(); + method public int getMinimumWidth(); + method public abstract int getOpacity(); + method public void getOutline(android.graphics.Outline); + method public boolean getPadding(android.graphics.Rect); + method public int[] getState(); + method public android.graphics.Region getTransparentRegion(); + method public void inflate(android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException; + method public void inflate(android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet, android.content.res.Resources.Theme) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException; + method public void invalidateSelf(); + method public boolean isAutoMirrored(); + method public boolean isStateful(); + method public final boolean isVisible(); + method public void jumpToCurrentState(); + method public android.graphics.drawable.Drawable mutate(); + method protected void onBoundsChange(android.graphics.Rect); + method protected boolean onLevelChange(int); + method protected boolean onStateChange(int[]); + method public static int resolveOpacity(int, int); + method public void scheduleSelf(java.lang.Runnable, long); + method public abstract void setAlpha(int); + method public void setAutoMirrored(boolean); + method public void setBounds(int, int, int, int); + method public void setBounds(android.graphics.Rect); + method public final void setCallback(android.graphics.drawable.Drawable.Callback); + method public void setChangingConfigurations(int); + method public abstract void setColorFilter(android.graphics.ColorFilter); + method public void setColorFilter(int, android.graphics.PorterDuff.Mode); + method public void setDither(boolean); + method public void setFilterBitmap(boolean); + method public void setHotspot(float, float); + method public void setHotspotBounds(int, int, int, int); + method public final boolean setLevel(int); + method public boolean setState(int[]); + method public void setTint(int); + method public void setTintList(android.content.res.ColorStateList); + method public void setTintMode(android.graphics.PorterDuff.Mode); + method public boolean setVisible(boolean, boolean); + method public void unscheduleSelf(java.lang.Runnable); + } + + public static abstract interface Drawable.Callback { + method public abstract void invalidateDrawable(android.graphics.drawable.Drawable); + method public abstract void scheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable, long); + method public abstract void unscheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable); + } + + public static abstract class Drawable.ConstantState { + ctor public Drawable.ConstantState(); + method public boolean canApplyTheme(); + method public abstract int getChangingConfigurations(); + method public abstract android.graphics.drawable.Drawable newDrawable(); + method public android.graphics.drawable.Drawable newDrawable(android.content.res.Resources); + method public android.graphics.drawable.Drawable newDrawable(android.content.res.Resources, android.content.res.Resources.Theme); + } + + public class DrawableContainer extends android.graphics.drawable.Drawable implements android.graphics.drawable.Drawable.Callback { + ctor public DrawableContainer(); + method public void draw(android.graphics.Canvas); + method public int getOpacity(); + method public void invalidateDrawable(android.graphics.drawable.Drawable); + method public void scheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable, long); + method public boolean selectDrawable(int); + method public void setAlpha(int); + method public void setColorFilter(android.graphics.ColorFilter); + method protected void setConstantState(android.graphics.drawable.DrawableContainer.DrawableContainerState); + method public void setEnterFadeDuration(int); + method public void setExitFadeDuration(int); + method public void unscheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable); + } + + public static abstract class DrawableContainer.DrawableContainerState extends android.graphics.drawable.Drawable.ConstantState { + method public final int addChild(android.graphics.drawable.Drawable); + method public synchronized boolean canConstantState(); + method protected void computeConstantSize(); + method public int getChangingConfigurations(); + method public final android.graphics.drawable.Drawable getChild(int); + method public final int getChildCount(); + method public final android.graphics.drawable.Drawable[] getChildren(); + method public final int getConstantHeight(); + method public final int getConstantMinimumHeight(); + method public final int getConstantMinimumWidth(); + method public final android.graphics.Rect getConstantPadding(); + method public final int getConstantWidth(); + method public final int getEnterFadeDuration(); + method public final int getExitFadeDuration(); + method public final int getOpacity(); + method public void growArray(int, int); + method public final boolean isConstantSize(); + method public final boolean isStateful(); + method public final void setConstantSize(boolean); + method public final void setEnterFadeDuration(int); + method public final void setExitFadeDuration(int); + method public final void setVariablePadding(boolean); + } + + public class GradientDrawable extends android.graphics.drawable.Drawable { + ctor public GradientDrawable(); + ctor public GradientDrawable(android.graphics.drawable.GradientDrawable.Orientation, int[]); + method public void draw(android.graphics.Canvas); + method public float getGradientRadius(); + method public int getOpacity(); + method public android.graphics.drawable.GradientDrawable.Orientation getOrientation(); + method public void setAlpha(int); + method public void setColor(int); + method public void setColor(android.content.res.ColorStateList); + method public void setColorFilter(android.graphics.ColorFilter); + method public void setColors(int[]); + method public void setCornerRadii(float[]); + method public void setCornerRadius(float); + method public void setGradientCenter(float, float); + method public void setGradientRadius(float); + method public void setGradientType(int); + method public void setOrientation(android.graphics.drawable.GradientDrawable.Orientation); + method public void setShape(int); + method public void setSize(int, int); + method public void setStroke(int, int); + method public void setStroke(int, android.content.res.ColorStateList); + method public void setStroke(int, int, float, float); + method public void setStroke(int, android.content.res.ColorStateList, float, float); + method public void setUseLevel(boolean); + field public static final int LINE = 2; // 0x2 + field public static final int LINEAR_GRADIENT = 0; // 0x0 + field public static final int OVAL = 1; // 0x1 + field public static final int RADIAL_GRADIENT = 1; // 0x1 + field public static final int RECTANGLE = 0; // 0x0 + field public static final int RING = 3; // 0x3 + field public static final int SWEEP_GRADIENT = 2; // 0x2 + } + + public static final class GradientDrawable.Orientation extends java.lang.Enum { + method public static android.graphics.drawable.GradientDrawable.Orientation valueOf(java.lang.String); + method public static final android.graphics.drawable.GradientDrawable.Orientation[] values(); + enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation BL_TR; + enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation BOTTOM_TOP; + enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation BR_TL; + enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation LEFT_RIGHT; + enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation RIGHT_LEFT; + enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation TL_BR; + enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation TOP_BOTTOM; + enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation TR_BL; + } + + public class InsetDrawable extends android.graphics.drawable.Drawable implements android.graphics.drawable.Drawable.Callback { + ctor public InsetDrawable(android.graphics.drawable.Drawable, int); + ctor public InsetDrawable(android.graphics.drawable.Drawable, int, int, int, int); + method public void draw(android.graphics.Canvas); + method public android.graphics.drawable.Drawable getDrawable(); + method public int getOpacity(); + method public void invalidateDrawable(android.graphics.drawable.Drawable); + method public void scheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable, long); + method public void setAlpha(int); + method public void setColorFilter(android.graphics.ColorFilter); + method public void unscheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable); + } + + public class LayerDrawable extends android.graphics.drawable.Drawable implements android.graphics.drawable.Drawable.Callback { + ctor public LayerDrawable(android.graphics.drawable.Drawable[]); + method public void draw(android.graphics.Canvas); + method public android.graphics.drawable.Drawable findDrawableByLayerId(int); + method public android.graphics.drawable.Drawable getDrawable(int); + method public int getId(int); + method public int getNumberOfLayers(); + method public int getOpacity(); + method public int getPaddingMode(); + method public void invalidateDrawable(android.graphics.drawable.Drawable); + method public void scheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable, long); + method public void setAlpha(int); + method public void setColorFilter(android.graphics.ColorFilter); + method public boolean setDrawableByLayerId(int, android.graphics.drawable.Drawable); + method public void setId(int, int); + method public void setLayerInset(int, int, int, int, int); + method public void setOpacity(int); + method public void setPaddingMode(int); + method public void unscheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable); + field public static final int PADDING_MODE_NEST = 0; // 0x0 + field public static final int PADDING_MODE_STACK = 1; // 0x1 + } + + public class LevelListDrawable extends android.graphics.drawable.DrawableContainer { + ctor public LevelListDrawable(); + method public void addLevel(int, int, android.graphics.drawable.Drawable); + } + + public class NinePatchDrawable extends android.graphics.drawable.Drawable { + ctor public deprecated NinePatchDrawable(android.graphics.Bitmap, byte[], android.graphics.Rect, java.lang.String); + ctor public NinePatchDrawable(android.content.res.Resources, android.graphics.Bitmap, byte[], android.graphics.Rect, java.lang.String); + ctor public deprecated NinePatchDrawable(android.graphics.NinePatch); + ctor public NinePatchDrawable(android.content.res.Resources, android.graphics.NinePatch); + method public void draw(android.graphics.Canvas); + method public int getOpacity(); + method public android.graphics.Paint getPaint(); + method public void setAlpha(int); + method public void setColorFilter(android.graphics.ColorFilter); + method public void setTargetDensity(android.graphics.Canvas); + method public void setTargetDensity(android.util.DisplayMetrics); + method public void setTargetDensity(int); + } + + public class PaintDrawable extends android.graphics.drawable.ShapeDrawable { + ctor public PaintDrawable(); + ctor public PaintDrawable(int); + method public void setCornerRadii(float[]); + method public void setCornerRadius(float); + } + + public class PictureDrawable extends android.graphics.drawable.Drawable { + ctor public PictureDrawable(android.graphics.Picture); + method public void draw(android.graphics.Canvas); + method public int getOpacity(); + method public android.graphics.Picture getPicture(); + method public void setAlpha(int); + method public void setColorFilter(android.graphics.ColorFilter); + method public void setPicture(android.graphics.Picture); + } + + public class RippleDrawable extends android.graphics.drawable.LayerDrawable { + ctor public RippleDrawable(android.content.res.ColorStateList, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable); + method public void setColor(android.content.res.ColorStateList); + } + + public class RotateDrawable extends android.graphics.drawable.Drawable implements android.graphics.drawable.Drawable.Callback { + ctor public RotateDrawable(); + method public void draw(android.graphics.Canvas); + method public android.graphics.drawable.Drawable getDrawable(); + method public float getFromDegrees(); + method public int getOpacity(); + method public float getPivotX(); + method public float getPivotY(); + method public float getToDegrees(); + method public void invalidateDrawable(android.graphics.drawable.Drawable); + method public boolean isPivotXRelative(); + method public boolean isPivotYRelative(); + method public void scheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable, long); + method public void setAlpha(int); + method public void setColorFilter(android.graphics.ColorFilter); + method public void setDrawable(android.graphics.drawable.Drawable); + method public void setFromDegrees(float); + method public void setPivotX(float); + method public void setPivotXRelative(boolean); + method public void setPivotY(float); + method public void setPivotYRelative(boolean); + method public void setToDegrees(float); + method public void unscheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable); + } + + public class ScaleDrawable extends android.graphics.drawable.Drawable implements android.graphics.drawable.Drawable.Callback { + ctor public ScaleDrawable(android.graphics.drawable.Drawable, int, float, float); + method public void draw(android.graphics.Canvas); + method public android.graphics.drawable.Drawable getDrawable(); + method public int getOpacity(); + method public void invalidateDrawable(android.graphics.drawable.Drawable); + method public void scheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable, long); + method public void setAlpha(int); + method public void setColorFilter(android.graphics.ColorFilter); + method public void unscheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable); + } + + public class ShapeDrawable extends android.graphics.drawable.Drawable { + ctor public ShapeDrawable(); + ctor public ShapeDrawable(android.graphics.drawable.shapes.Shape); + method public void draw(android.graphics.Canvas); + method public int getOpacity(); + method public android.graphics.Paint getPaint(); + method public android.graphics.drawable.ShapeDrawable.ShaderFactory getShaderFactory(); + method public android.graphics.drawable.shapes.Shape getShape(); + method protected boolean inflateTag(java.lang.String, android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet); + method protected void onDraw(android.graphics.drawable.shapes.Shape, android.graphics.Canvas, android.graphics.Paint); + method public void setAlpha(int); + method public void setColorFilter(android.graphics.ColorFilter); + method public void setIntrinsicHeight(int); + method public void setIntrinsicWidth(int); + method public void setPadding(int, int, int, int); + method public void setPadding(android.graphics.Rect); + method public void setShaderFactory(android.graphics.drawable.ShapeDrawable.ShaderFactory); + method public void setShape(android.graphics.drawable.shapes.Shape); + } + + public static abstract class ShapeDrawable.ShaderFactory { + ctor public ShapeDrawable.ShaderFactory(); + method public abstract android.graphics.Shader resize(int, int); + } + + public class StateListDrawable extends android.graphics.drawable.DrawableContainer { + ctor public StateListDrawable(); + method public void addState(int[], android.graphics.drawable.Drawable); + } + + public class TransitionDrawable extends android.graphics.drawable.LayerDrawable implements android.graphics.drawable.Drawable.Callback { + ctor public TransitionDrawable(android.graphics.drawable.Drawable[]); + method public boolean isCrossFadeEnabled(); + method public void resetTransition(); + method public void reverseTransition(int); + method public void setCrossFadeEnabled(boolean); + method public void startTransition(int); + } + + public class VectorDrawable extends android.graphics.drawable.Drawable { + ctor public VectorDrawable(); + method public void draw(android.graphics.Canvas); + method public int getOpacity(); + method public void setAlpha(int); + method public void setColorFilter(android.graphics.ColorFilter); + } + +} + +package android.graphics.drawable.shapes { + + public class ArcShape extends android.graphics.drawable.shapes.RectShape { + ctor public ArcShape(float, float); + } + + public class OvalShape extends android.graphics.drawable.shapes.RectShape { + ctor public OvalShape(); + } + + public class PathShape extends android.graphics.drawable.shapes.Shape { + ctor public PathShape(android.graphics.Path, float, float); + method public void draw(android.graphics.Canvas, android.graphics.Paint); + } + + public class RectShape extends android.graphics.drawable.shapes.Shape { + ctor public RectShape(); + method public void draw(android.graphics.Canvas, android.graphics.Paint); + method protected final android.graphics.RectF rect(); + } + + public class RoundRectShape extends android.graphics.drawable.shapes.RectShape { + ctor public RoundRectShape(float[], android.graphics.RectF, float[]); + } + + public abstract class Shape implements java.lang.Cloneable { + ctor public Shape(); + method public android.graphics.drawable.shapes.Shape clone() throws java.lang.CloneNotSupportedException; + method public abstract void draw(android.graphics.Canvas, android.graphics.Paint); + method public final float getHeight(); + method public void getOutline(android.graphics.Outline); + method public final float getWidth(); + method public boolean hasAlpha(); + method protected void onResize(float, float); + method public final void resize(float, float); + } + +} + +package android.graphics.pdf { + + public class PdfDocument { + ctor public PdfDocument(); + method public void close(); + method public void finishPage(android.graphics.pdf.PdfDocument.Page); + method public java.util.List getPages(); + method public android.graphics.pdf.PdfDocument.Page startPage(android.graphics.pdf.PdfDocument.PageInfo); + method public void writeTo(java.io.OutputStream) throws java.io.IOException; + } + + public static final class PdfDocument.Page { + method public android.graphics.Canvas getCanvas(); + method public android.graphics.pdf.PdfDocument.PageInfo getInfo(); + } + + public static final class PdfDocument.PageInfo { + method public android.graphics.Rect getContentRect(); + method public int getPageHeight(); + method public int getPageNumber(); + method public int getPageWidth(); + } + + public static final class PdfDocument.PageInfo.Builder { + ctor public PdfDocument.PageInfo.Builder(int, int, int); + method public android.graphics.pdf.PdfDocument.PageInfo create(); + method public android.graphics.pdf.PdfDocument.PageInfo.Builder setContentRect(android.graphics.Rect); + } + + public final class PdfRenderer implements java.lang.AutoCloseable { + ctor public PdfRenderer(android.os.ParcelFileDescriptor) throws java.io.IOException; + method public void close(); + method public int getPageCount(); + method public android.graphics.pdf.PdfRenderer.Page openPage(int); + method public boolean shouldScaleForPrinting(); + } + + public final class PdfRenderer.Page implements java.lang.AutoCloseable { + method public void close(); + method public int getHeight(); + method public int getIndex(); + method public int getWidth(); + method public void render(android.graphics.Bitmap, android.graphics.Rect, android.graphics.Matrix, int); + field public static final int RENDER_MODE_FOR_DISPLAY = 1; // 0x1 + field public static final int RENDER_MODE_FOR_PRINT = 2; // 0x2 + } + +} + +package android.hardware { + + public deprecated class Camera { + method public final void addCallbackBuffer(byte[]); + method public final void autoFocus(android.hardware.Camera.AutoFocusCallback); + method public final void cancelAutoFocus(); + method public final boolean enableShutterSound(boolean); + method public static void getCameraInfo(int, android.hardware.Camera.CameraInfo); + method public static int getNumberOfCameras(); + method public android.hardware.Camera.Parameters getParameters(); + method public final void lock(); + method public static android.hardware.Camera open(int); + method public static android.hardware.Camera open(); + method public final void reconnect() throws java.io.IOException; + method public final void release(); + method public void setAutoFocusMoveCallback(android.hardware.Camera.AutoFocusMoveCallback); + method public final void setDisplayOrientation(int); + method public final void setErrorCallback(android.hardware.Camera.ErrorCallback); + method public final void setFaceDetectionListener(android.hardware.Camera.FaceDetectionListener); + method public final void setOneShotPreviewCallback(android.hardware.Camera.PreviewCallback); + method public void setParameters(android.hardware.Camera.Parameters); + method public final void setPreviewCallback(android.hardware.Camera.PreviewCallback); + method public final void setPreviewCallbackWithBuffer(android.hardware.Camera.PreviewCallback); + method public final void setPreviewDisplay(android.view.SurfaceHolder) throws java.io.IOException; + method public final void setPreviewTexture(android.graphics.SurfaceTexture) throws java.io.IOException; + method public final void setZoomChangeListener(android.hardware.Camera.OnZoomChangeListener); + method public final void startFaceDetection(); + method public final void startPreview(); + method public final void startSmoothZoom(int); + method public final void stopFaceDetection(); + method public final void stopPreview(); + method public final void stopSmoothZoom(); + method public final void takePicture(android.hardware.Camera.ShutterCallback, android.hardware.Camera.PictureCallback, android.hardware.Camera.PictureCallback); + method public final void takePicture(android.hardware.Camera.ShutterCallback, android.hardware.Camera.PictureCallback, android.hardware.Camera.PictureCallback, android.hardware.Camera.PictureCallback); + method public final void unlock(); + field public static final java.lang.String ACTION_NEW_PICTURE = "android.hardware.action.NEW_PICTURE"; + field public static final java.lang.String ACTION_NEW_VIDEO = "android.hardware.action.NEW_VIDEO"; + field public static final int CAMERA_ERROR_SERVER_DIED = 100; // 0x64 + field public static final int CAMERA_ERROR_UNKNOWN = 1; // 0x1 + } + + public static deprecated class Camera.Area { + ctor public Camera.Area(android.graphics.Rect, int); + field public android.graphics.Rect rect; + field public int weight; + } + + public static abstract deprecated interface Camera.AutoFocusCallback { + method public abstract void onAutoFocus(boolean, android.hardware.Camera); + } + + public static abstract deprecated interface Camera.AutoFocusMoveCallback { + method public abstract void onAutoFocusMoving(boolean, android.hardware.Camera); + } + + public static deprecated class Camera.CameraInfo { + ctor public Camera.CameraInfo(); + field public static final int CAMERA_FACING_BACK = 0; // 0x0 + field public static final int CAMERA_FACING_FRONT = 1; // 0x1 + field public boolean canDisableShutterSound; + field public int facing; + field public int orientation; + } + + public static abstract deprecated interface Camera.ErrorCallback { + method public abstract void onError(int, android.hardware.Camera); + } + + public static deprecated class Camera.Face { + ctor public Camera.Face(); + field public int id; + field public android.graphics.Point leftEye; + field public android.graphics.Point mouth; + field public android.graphics.Rect rect; + field public android.graphics.Point rightEye; + field public int score; + } + + public static abstract deprecated interface Camera.FaceDetectionListener { + method public abstract void onFaceDetection(android.hardware.Camera.Face[], android.hardware.Camera); + } + + public static abstract deprecated interface Camera.OnZoomChangeListener { + method public abstract void onZoomChange(int, boolean, android.hardware.Camera); + } + + public deprecated class Camera.Parameters { + method public java.lang.String flatten(); + method public java.lang.String get(java.lang.String); + method public java.lang.String getAntibanding(); + method public boolean getAutoExposureLock(); + method public boolean getAutoWhiteBalanceLock(); + method public java.lang.String getColorEffect(); + method public int getExposureCompensation(); + method public float getExposureCompensationStep(); + method public java.lang.String getFlashMode(); + method public float getFocalLength(); + method public java.util.List getFocusAreas(); + method public void getFocusDistances(float[]); + method public java.lang.String getFocusMode(); + method public float getHorizontalViewAngle(); + method public int getInt(java.lang.String); + method public int getJpegQuality(); + method public int getJpegThumbnailQuality(); + method public android.hardware.Camera.Size getJpegThumbnailSize(); + method public int getMaxExposureCompensation(); + method public int getMaxNumDetectedFaces(); + method public int getMaxNumFocusAreas(); + method public int getMaxNumMeteringAreas(); + method public int getMaxZoom(); + method public java.util.List getMeteringAreas(); + method public int getMinExposureCompensation(); + method public int getPictureFormat(); + method public android.hardware.Camera.Size getPictureSize(); + method public android.hardware.Camera.Size getPreferredPreviewSizeForVideo(); + method public int getPreviewFormat(); + method public void getPreviewFpsRange(int[]); + method public deprecated int getPreviewFrameRate(); + method public android.hardware.Camera.Size getPreviewSize(); + method public java.lang.String getSceneMode(); + method public java.util.List getSupportedAntibanding(); + method public java.util.List getSupportedColorEffects(); + method public java.util.List getSupportedFlashModes(); + method public java.util.List getSupportedFocusModes(); + method public java.util.List getSupportedJpegThumbnailSizes(); + method public java.util.List getSupportedPictureFormats(); + method public java.util.List getSupportedPictureSizes(); + method public java.util.List getSupportedPreviewFormats(); + method public java.util.List getSupportedPreviewFpsRange(); + method public deprecated java.util.List getSupportedPreviewFrameRates(); + method public java.util.List getSupportedPreviewSizes(); + method public java.util.List getSupportedSceneModes(); + method public java.util.List getSupportedVideoSizes(); + method public java.util.List getSupportedWhiteBalance(); + method public float getVerticalViewAngle(); + method public boolean getVideoStabilization(); + method public java.lang.String getWhiteBalance(); + method public int getZoom(); + method public java.util.List getZoomRatios(); + method public boolean isAutoExposureLockSupported(); + method public boolean isAutoWhiteBalanceLockSupported(); + method public boolean isSmoothZoomSupported(); + method public boolean isVideoSnapshotSupported(); + method public boolean isVideoStabilizationSupported(); + method public boolean isZoomSupported(); + method public void remove(java.lang.String); + method public void removeGpsData(); + method public void set(java.lang.String, java.lang.String); + method public void set(java.lang.String, int); + method public void setAntibanding(java.lang.String); + method public void setAutoExposureLock(boolean); + method public void setAutoWhiteBalanceLock(boolean); + method public void setColorEffect(java.lang.String); + method public void setExposureCompensation(int); + method public void setFlashMode(java.lang.String); + method public void setFocusAreas(java.util.List); + method public void setFocusMode(java.lang.String); + method public void setGpsAltitude(double); + method public void setGpsLatitude(double); + method public void setGpsLongitude(double); + method public void setGpsProcessingMethod(java.lang.String); + method public void setGpsTimestamp(long); + method public void setJpegQuality(int); + method public void setJpegThumbnailQuality(int); + method public void setJpegThumbnailSize(int, int); + method public void setMeteringAreas(java.util.List); + method public void setPictureFormat(int); + method public void setPictureSize(int, int); + method public void setPreviewFormat(int); + method public void setPreviewFpsRange(int, int); + method public deprecated void setPreviewFrameRate(int); + method public void setPreviewSize(int, int); + method public void setRecordingHint(boolean); + method public void setRotation(int); + method public void setSceneMode(java.lang.String); + method public void setVideoStabilization(boolean); + method public void setWhiteBalance(java.lang.String); + method public void setZoom(int); + method public void unflatten(java.lang.String); + field public static final java.lang.String ANTIBANDING_50HZ = "50hz"; + field public static final java.lang.String ANTIBANDING_60HZ = "60hz"; + field public static final java.lang.String ANTIBANDING_AUTO = "auto"; + field public static final java.lang.String ANTIBANDING_OFF = "off"; + field public static final java.lang.String EFFECT_AQUA = "aqua"; + field public static final java.lang.String EFFECT_BLACKBOARD = "blackboard"; + field public static final java.lang.String EFFECT_MONO = "mono"; + field public static final java.lang.String EFFECT_NEGATIVE = "negative"; + field public static final java.lang.String EFFECT_NONE = "none"; + field public static final java.lang.String EFFECT_POSTERIZE = "posterize"; + field public static final java.lang.String EFFECT_SEPIA = "sepia"; + field public static final java.lang.String EFFECT_SOLARIZE = "solarize"; + field public static final java.lang.String EFFECT_WHITEBOARD = "whiteboard"; + field public static final java.lang.String FLASH_MODE_AUTO = "auto"; + field public static final java.lang.String FLASH_MODE_OFF = "off"; + field public static final java.lang.String FLASH_MODE_ON = "on"; + field public static final java.lang.String FLASH_MODE_RED_EYE = "red-eye"; + field public static final java.lang.String FLASH_MODE_TORCH = "torch"; + field public static final int FOCUS_DISTANCE_FAR_INDEX = 2; // 0x2 + field public static final int FOCUS_DISTANCE_NEAR_INDEX = 0; // 0x0 + field public static final int FOCUS_DISTANCE_OPTIMAL_INDEX = 1; // 0x1 + field public static final java.lang.String FOCUS_MODE_AUTO = "auto"; + field public static final java.lang.String FOCUS_MODE_CONTINUOUS_PICTURE = "continuous-picture"; + field public static final java.lang.String FOCUS_MODE_CONTINUOUS_VIDEO = "continuous-video"; + field public static final java.lang.String FOCUS_MODE_EDOF = "edof"; + field public static final java.lang.String FOCUS_MODE_FIXED = "fixed"; + field public static final java.lang.String FOCUS_MODE_INFINITY = "infinity"; + field public static final java.lang.String FOCUS_MODE_MACRO = "macro"; + field public static final int PREVIEW_FPS_MAX_INDEX = 1; // 0x1 + field public static final int PREVIEW_FPS_MIN_INDEX = 0; // 0x0 + field public static final java.lang.String SCENE_MODE_ACTION = "action"; + field public static final java.lang.String SCENE_MODE_AUTO = "auto"; + field public static final java.lang.String SCENE_MODE_BARCODE = "barcode"; + field public static final java.lang.String SCENE_MODE_BEACH = "beach"; + field public static final java.lang.String SCENE_MODE_CANDLELIGHT = "candlelight"; + field public static final java.lang.String SCENE_MODE_FIREWORKS = "fireworks"; + field public static final java.lang.String SCENE_MODE_HDR = "hdr"; + field public static final java.lang.String SCENE_MODE_LANDSCAPE = "landscape"; + field public static final java.lang.String SCENE_MODE_NIGHT = "night"; + field public static final java.lang.String SCENE_MODE_NIGHT_PORTRAIT = "night-portrait"; + field public static final java.lang.String SCENE_MODE_PARTY = "party"; + field public static final java.lang.String SCENE_MODE_PORTRAIT = "portrait"; + field public static final java.lang.String SCENE_MODE_SNOW = "snow"; + field public static final java.lang.String SCENE_MODE_SPORTS = "sports"; + field public static final java.lang.String SCENE_MODE_STEADYPHOTO = "steadyphoto"; + field public static final java.lang.String SCENE_MODE_SUNSET = "sunset"; + field public static final java.lang.String SCENE_MODE_THEATRE = "theatre"; + field public static final java.lang.String WHITE_BALANCE_AUTO = "auto"; + field public static final java.lang.String WHITE_BALANCE_CLOUDY_DAYLIGHT = "cloudy-daylight"; + field public static final java.lang.String WHITE_BALANCE_DAYLIGHT = "daylight"; + field public static final java.lang.String WHITE_BALANCE_FLUORESCENT = "fluorescent"; + field public static final java.lang.String WHITE_BALANCE_INCANDESCENT = "incandescent"; + field public static final java.lang.String WHITE_BALANCE_SHADE = "shade"; + field public static final java.lang.String WHITE_BALANCE_TWILIGHT = "twilight"; + field public static final java.lang.String WHITE_BALANCE_WARM_FLUORESCENT = "warm-fluorescent"; + } + + public static abstract deprecated interface Camera.PictureCallback { + method public abstract void onPictureTaken(byte[], android.hardware.Camera); + } + + public static abstract deprecated interface Camera.PreviewCallback { + method public abstract void onPreviewFrame(byte[], android.hardware.Camera); + } + + public static abstract deprecated interface Camera.ShutterCallback { + method public abstract void onShutter(); + } + + public deprecated class Camera.Size { + ctor public Camera.Size(int, int); + field public int height; + field public int width; + } + + public final class ConsumerIrManager { + method public android.hardware.ConsumerIrManager.CarrierFrequencyRange[] getCarrierFrequencies(); + method public boolean hasIrEmitter(); + method public void transmit(int, int[]); + } + + public final class ConsumerIrManager.CarrierFrequencyRange { + ctor public ConsumerIrManager.CarrierFrequencyRange(int, int); + method public int getMaxFrequency(); + method public int getMinFrequency(); + } + + public class GeomagneticField { + ctor public GeomagneticField(float, float, float, long); + method public float getDeclination(); + method public float getFieldStrength(); + method public float getHorizontalStrength(); + method public float getInclination(); + method public float getX(); + method public float getY(); + method public float getZ(); + } + + public final class Sensor { + method public int getFifoMaxEventCount(); + method public int getFifoReservedEventCount(); + method public int getMaxDelay(); + method public float getMaximumRange(); + method public int getMinDelay(); + method public java.lang.String getName(); + method public float getPower(); + method public int getReportingMode(); + method public float getResolution(); + method public java.lang.String getStringType(); + method public int getType(); + method public java.lang.String getVendor(); + method public int getVersion(); + method public boolean isWakeUpSensor(); + field public static final int REPORTING_MODE_CONTINUOUS = 0; // 0x0 + field public static final int REPORTING_MODE_ONE_SHOT = 2; // 0x2 + field public static final int REPORTING_MODE_ON_CHANGE = 1; // 0x1 + field public static final int REPORTING_MODE_SPECIAL_TRIGGER = 3; // 0x3 + field public static final java.lang.String STRING_TYPE_ACCELEROMETER = "android.sensor.accelerometer"; + field public static final java.lang.String STRING_TYPE_AMBIENT_TEMPERATURE = "android.sensor.ambient_temperature"; + field public static final java.lang.String STRING_TYPE_GAME_ROTATION_VECTOR = "android.sensor.game_rotation_vector"; + field public static final java.lang.String STRING_TYPE_GEOMAGNETIC_ROTATION_VECTOR = "android.sensor.geomagnetic_rotation_vector"; + field public static final java.lang.String STRING_TYPE_GRAVITY = "android.sensor.gravity"; + field public static final java.lang.String STRING_TYPE_GYROSCOPE = "android.sensor.gyroscope"; + field public static final java.lang.String STRING_TYPE_GYROSCOPE_UNCALIBRATED = "android.sensor.gyroscope_uncalibrated"; + field public static final java.lang.String STRING_TYPE_HEART_RATE = "android.sensor.heart_rate"; + field public static final java.lang.String STRING_TYPE_LIGHT = "android.sensor.light"; + field public static final java.lang.String STRING_TYPE_LINEAR_ACCELERATION = "android.sensor.linear_acceleration"; + field public static final java.lang.String STRING_TYPE_MAGNETIC_FIELD = "android.sensor.magnetic_field"; + field public static final java.lang.String STRING_TYPE_MAGNETIC_FIELD_UNCALIBRATED = "android.sensor.magnetic_field_uncalibrated"; + field public static final deprecated java.lang.String STRING_TYPE_ORIENTATION = "android.sensor.orientation"; + field public static final java.lang.String STRING_TYPE_PRESSURE = "android.sensor.pressure"; + field public static final java.lang.String STRING_TYPE_PROXIMITY = "android.sensor.proximity"; + field public static final java.lang.String STRING_TYPE_RELATIVE_HUMIDITY = "android.sensor.relative_humidity"; + field public static final java.lang.String STRING_TYPE_ROTATION_VECTOR = "android.sensor.rotation_vector"; + field public static final java.lang.String STRING_TYPE_SIGNIFICANT_MOTION = "android.sensor.significant_motion"; + field public static final java.lang.String STRING_TYPE_STEP_COUNTER = "android.sensor.step_counter"; + field public static final java.lang.String STRING_TYPE_STEP_DETECTOR = "android.sensor.step_detector"; + field public static final deprecated java.lang.String STRING_TYPE_TEMPERATURE = "android.sensor.temperature"; + field public static final java.lang.String STRING_TYPE_WRIST_TILT_GESTURE = "android.sensor.wrist_tilt_gesture"; + field public static final int TYPE_ACCELEROMETER = 1; // 0x1 + field public static final int TYPE_ALL = -1; // 0xffffffff + field public static final int TYPE_AMBIENT_TEMPERATURE = 13; // 0xd + field public static final int TYPE_GAME_ROTATION_VECTOR = 15; // 0xf + field public static final int TYPE_GEOMAGNETIC_ROTATION_VECTOR = 20; // 0x14 + field public static final int TYPE_GRAVITY = 9; // 0x9 + field public static final int TYPE_GYROSCOPE = 4; // 0x4 + field public static final int TYPE_GYROSCOPE_UNCALIBRATED = 16; // 0x10 + field public static final int TYPE_HEART_RATE = 21; // 0x15 + field public static final int TYPE_LIGHT = 5; // 0x5 + field public static final int TYPE_LINEAR_ACCELERATION = 10; // 0xa + field public static final int TYPE_MAGNETIC_FIELD = 2; // 0x2 + field public static final int TYPE_MAGNETIC_FIELD_UNCALIBRATED = 14; // 0xe + field public static final deprecated int TYPE_ORIENTATION = 3; // 0x3 + field public static final int TYPE_PRESSURE = 6; // 0x6 + field public static final int TYPE_PROXIMITY = 8; // 0x8 + field public static final int TYPE_RELATIVE_HUMIDITY = 12; // 0xc + field public static final int TYPE_ROTATION_VECTOR = 11; // 0xb + field public static final int TYPE_SIGNIFICANT_MOTION = 17; // 0x11 + field public static final int TYPE_STEP_COUNTER = 19; // 0x13 + field public static final int TYPE_STEP_DETECTOR = 18; // 0x12 + field public static final deprecated int TYPE_TEMPERATURE = 7; // 0x7 + field public static final int TYPE_WRIST_TILT_GESTURE = 26; // 0x1a + } + + public class SensorEvent { + field public int accuracy; + field public android.hardware.Sensor sensor; + field public long timestamp; + field public final float[] values; + } + + public abstract interface SensorEventListener { + method public abstract void onAccuracyChanged(android.hardware.Sensor, int); + method public abstract void onSensorChanged(android.hardware.SensorEvent); + } + + public abstract interface SensorEventListener2 implements android.hardware.SensorEventListener { + method public abstract void onFlushCompleted(android.hardware.Sensor); + } + + public abstract deprecated interface SensorListener { + method public abstract void onAccuracyChanged(int, int); + method public abstract void onSensorChanged(int, float[]); + } + + public abstract class SensorManager { + method public boolean cancelTriggerSensor(android.hardware.TriggerEventListener, android.hardware.Sensor); + method public boolean flush(android.hardware.SensorEventListener); + method public static float getAltitude(float, float); + method public static void getAngleChange(float[], float[], float[]); + method public android.hardware.Sensor getDefaultSensor(int); + method public android.hardware.Sensor getDefaultSensor(int, boolean); + method public static float getInclination(float[]); + method public static float[] getOrientation(float[], float[]); + method public static void getQuaternionFromVector(float[], float[]); + method public static boolean getRotationMatrix(float[], float[], float[], float[]); + method public static void getRotationMatrixFromVector(float[], float[]); + method public java.util.List getSensorList(int); + method public deprecated int getSensors(); + method public deprecated boolean registerListener(android.hardware.SensorListener, int); + method public deprecated boolean registerListener(android.hardware.SensorListener, int, int); + method public boolean registerListener(android.hardware.SensorEventListener, android.hardware.Sensor, int); + method public boolean registerListener(android.hardware.SensorEventListener, android.hardware.Sensor, int, int); + method public boolean registerListener(android.hardware.SensorEventListener, android.hardware.Sensor, int, android.os.Handler); + method public boolean registerListener(android.hardware.SensorEventListener, android.hardware.Sensor, int, int, android.os.Handler); + method public static boolean remapCoordinateSystem(float[], int, int, float[]); + method public boolean requestTriggerSensor(android.hardware.TriggerEventListener, android.hardware.Sensor); + method public deprecated void unregisterListener(android.hardware.SensorListener); + method public deprecated void unregisterListener(android.hardware.SensorListener, int); + method public void unregisterListener(android.hardware.SensorEventListener, android.hardware.Sensor); + method public void unregisterListener(android.hardware.SensorEventListener); + field public static final int AXIS_MINUS_X = 129; // 0x81 + field public static final int AXIS_MINUS_Y = 130; // 0x82 + field public static final int AXIS_MINUS_Z = 131; // 0x83 + field public static final int AXIS_X = 1; // 0x1 + field public static final int AXIS_Y = 2; // 0x2 + field public static final int AXIS_Z = 3; // 0x3 + field public static final deprecated int DATA_X = 0; // 0x0 + field public static final deprecated int DATA_Y = 1; // 0x1 + field public static final deprecated int DATA_Z = 2; // 0x2 + field public static final float GRAVITY_DEATH_STAR_I = 3.5303614E-7f; + field public static final float GRAVITY_EARTH = 9.80665f; + field public static final float GRAVITY_JUPITER = 23.12f; + field public static final float GRAVITY_MARS = 3.71f; + field public static final float GRAVITY_MERCURY = 3.7f; + field public static final float GRAVITY_MOON = 1.6f; + field public static final float GRAVITY_NEPTUNE = 11.0f; + field public static final float GRAVITY_PLUTO = 0.6f; + field public static final float GRAVITY_SATURN = 8.96f; + field public static final float GRAVITY_SUN = 275.0f; + field public static final float GRAVITY_THE_ISLAND = 4.815162f; + field public static final float GRAVITY_URANUS = 8.69f; + field public static final float GRAVITY_VENUS = 8.87f; + field public static final float LIGHT_CLOUDY = 100.0f; + field public static final float LIGHT_FULLMOON = 0.25f; + field public static final float LIGHT_NO_MOON = 0.001f; + field public static final float LIGHT_OVERCAST = 10000.0f; + field public static final float LIGHT_SHADE = 20000.0f; + field public static final float LIGHT_SUNLIGHT = 110000.0f; + field public static final float LIGHT_SUNLIGHT_MAX = 120000.0f; + field public static final float LIGHT_SUNRISE = 400.0f; + field public static final float MAGNETIC_FIELD_EARTH_MAX = 60.0f; + field public static final float MAGNETIC_FIELD_EARTH_MIN = 30.0f; + field public static final float PRESSURE_STANDARD_ATMOSPHERE = 1013.25f; + field public static final deprecated int RAW_DATA_INDEX = 3; // 0x3 + field public static final deprecated int RAW_DATA_X = 3; // 0x3 + field public static final deprecated int RAW_DATA_Y = 4; // 0x4 + field public static final deprecated int RAW_DATA_Z = 5; // 0x5 + field public static final deprecated int SENSOR_ACCELEROMETER = 2; // 0x2 + field public static final deprecated int SENSOR_ALL = 127; // 0x7f + field public static final int SENSOR_DELAY_FASTEST = 0; // 0x0 + field public static final int SENSOR_DELAY_GAME = 1; // 0x1 + field public static final int SENSOR_DELAY_NORMAL = 3; // 0x3 + field public static final int SENSOR_DELAY_UI = 2; // 0x2 + field public static final deprecated int SENSOR_LIGHT = 16; // 0x10 + field public static final deprecated int SENSOR_MAGNETIC_FIELD = 8; // 0x8 + field public static final deprecated int SENSOR_MAX = 64; // 0x40 + field public static final deprecated int SENSOR_MIN = 1; // 0x1 + field public static final deprecated int SENSOR_ORIENTATION = 1; // 0x1 + field public static final deprecated int SENSOR_ORIENTATION_RAW = 128; // 0x80 + field public static final deprecated int SENSOR_PROXIMITY = 32; // 0x20 + field public static final int SENSOR_STATUS_ACCURACY_HIGH = 3; // 0x3 + field public static final int SENSOR_STATUS_ACCURACY_LOW = 1; // 0x1 + field public static final int SENSOR_STATUS_ACCURACY_MEDIUM = 2; // 0x2 + field public static final int SENSOR_STATUS_NO_CONTACT = -1; // 0xffffffff + field public static final int SENSOR_STATUS_UNRELIABLE = 0; // 0x0 + field public static final deprecated int SENSOR_TEMPERATURE = 4; // 0x4 + field public static final deprecated int SENSOR_TRICORDER = 64; // 0x40 + field public static final float STANDARD_GRAVITY = 9.80665f; + } + + public final class TriggerEvent { + field public android.hardware.Sensor sensor; + field public long timestamp; + field public final float[] values; + } + + public abstract class TriggerEventListener { + ctor public TriggerEventListener(); + method public abstract void onTrigger(android.hardware.TriggerEvent); + } + +} + +package android.hardware.camera2 { + + public class CameraAccessException extends android.util.AndroidException { + ctor public CameraAccessException(int); + ctor public CameraAccessException(int, java.lang.String); + ctor public CameraAccessException(int, java.lang.String, java.lang.Throwable); + ctor public CameraAccessException(int, java.lang.Throwable); + method public final int getReason(); + field public static final int CAMERA_DISABLED = 1; // 0x1 + field public static final int CAMERA_DISCONNECTED = 2; // 0x2 + field public static final int CAMERA_ERROR = 3; // 0x3 + } + + public abstract class CameraCaptureSession implements java.lang.AutoCloseable { + ctor public CameraCaptureSession(); + method public abstract void abortCaptures() throws android.hardware.camera2.CameraAccessException; + method public abstract int capture(android.hardware.camera2.CaptureRequest, android.hardware.camera2.CameraCaptureSession.CaptureCallback, android.os.Handler) throws android.hardware.camera2.CameraAccessException; + method public abstract int captureBurst(java.util.List, android.hardware.camera2.CameraCaptureSession.CaptureCallback, android.os.Handler) throws android.hardware.camera2.CameraAccessException; + method public abstract void close(); + method public abstract android.hardware.camera2.CameraDevice getDevice(); + method public abstract int setRepeatingBurst(java.util.List, android.hardware.camera2.CameraCaptureSession.CaptureCallback, android.os.Handler) throws android.hardware.camera2.CameraAccessException; + method public abstract int setRepeatingRequest(android.hardware.camera2.CaptureRequest, android.hardware.camera2.CameraCaptureSession.CaptureCallback, android.os.Handler) throws android.hardware.camera2.CameraAccessException; + method public abstract void stopRepeating() throws android.hardware.camera2.CameraAccessException; + } + + public static abstract class CameraCaptureSession.CaptureCallback { + ctor public CameraCaptureSession.CaptureCallback(); + method public void onCaptureCompleted(android.hardware.camera2.CameraCaptureSession, android.hardware.camera2.CaptureRequest, android.hardware.camera2.TotalCaptureResult); + method public void onCaptureFailed(android.hardware.camera2.CameraCaptureSession, android.hardware.camera2.CaptureRequest, android.hardware.camera2.CaptureFailure); + method public void onCaptureProgressed(android.hardware.camera2.CameraCaptureSession, android.hardware.camera2.CaptureRequest, android.hardware.camera2.CaptureResult); + method public void onCaptureSequenceAborted(android.hardware.camera2.CameraCaptureSession, int); + method public void onCaptureSequenceCompleted(android.hardware.camera2.CameraCaptureSession, int, long); + method public void onCaptureStarted(android.hardware.camera2.CameraCaptureSession, android.hardware.camera2.CaptureRequest, long, long); + } + + public static abstract class CameraCaptureSession.StateCallback { + ctor public CameraCaptureSession.StateCallback(); + method public void onActive(android.hardware.camera2.CameraCaptureSession); + method public void onClosed(android.hardware.camera2.CameraCaptureSession); + method public abstract void onConfigureFailed(android.hardware.camera2.CameraCaptureSession); + method public abstract void onConfigured(android.hardware.camera2.CameraCaptureSession); + method public void onReady(android.hardware.camera2.CameraCaptureSession); + } + + public final class CameraCharacteristics extends android.hardware.camera2.CameraMetadata { + method public T get(android.hardware.camera2.CameraCharacteristics.Key); + method public java.util.List> getAvailableCaptureRequestKeys(); + method public java.util.List> getAvailableCaptureResultKeys(); + field public static final android.hardware.camera2.CameraCharacteristics.Key COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES; + field public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AE_AVAILABLE_ANTIBANDING_MODES; + field public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AE_AVAILABLE_MODES; + field public static final android.hardware.camera2.CameraCharacteristics.Key[]> CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES; + field public static final android.hardware.camera2.CameraCharacteristics.Key> CONTROL_AE_COMPENSATION_RANGE; + field public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AE_COMPENSATION_STEP; + field public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AF_AVAILABLE_MODES; + field public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AVAILABLE_EFFECTS; + field public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AVAILABLE_SCENE_MODES; + field public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES; + field public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AWB_AVAILABLE_MODES; + field public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_MAX_REGIONS_AE; + field public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_MAX_REGIONS_AF; + field public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_MAX_REGIONS_AWB; + field public static final android.hardware.camera2.CameraCharacteristics.Key EDGE_AVAILABLE_EDGE_MODES; + field public static final android.hardware.camera2.CameraCharacteristics.Key FLASH_INFO_AVAILABLE; + field public static final android.hardware.camera2.CameraCharacteristics.Key HOT_PIXEL_AVAILABLE_HOT_PIXEL_MODES; + field public static final android.hardware.camera2.CameraCharacteristics.Key INFO_SUPPORTED_HARDWARE_LEVEL; + field public static final android.hardware.camera2.CameraCharacteristics.Key JPEG_AVAILABLE_THUMBNAIL_SIZES; + field public static final android.hardware.camera2.CameraCharacteristics.Key LENS_FACING; + field public static final android.hardware.camera2.CameraCharacteristics.Key LENS_INFO_AVAILABLE_APERTURES; + field public static final android.hardware.camera2.CameraCharacteristics.Key LENS_INFO_AVAILABLE_FILTER_DENSITIES; + field public static final android.hardware.camera2.CameraCharacteristics.Key LENS_INFO_AVAILABLE_FOCAL_LENGTHS; + field public static final android.hardware.camera2.CameraCharacteristics.Key LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION; + field public static final android.hardware.camera2.CameraCharacteristics.Key LENS_INFO_FOCUS_DISTANCE_CALIBRATION; + field public static final android.hardware.camera2.CameraCharacteristics.Key LENS_INFO_HYPERFOCAL_DISTANCE; + field public static final android.hardware.camera2.CameraCharacteristics.Key LENS_INFO_MINIMUM_FOCUS_DISTANCE; + field public static final android.hardware.camera2.CameraCharacteristics.Key NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES; + field public static final android.hardware.camera2.CameraCharacteristics.Key REQUEST_AVAILABLE_CAPABILITIES; + field public static final android.hardware.camera2.CameraCharacteristics.Key REQUEST_MAX_NUM_OUTPUT_PROC; + field public static final android.hardware.camera2.CameraCharacteristics.Key REQUEST_MAX_NUM_OUTPUT_PROC_STALLING; + field public static final android.hardware.camera2.CameraCharacteristics.Key REQUEST_MAX_NUM_OUTPUT_RAW; + field public static final android.hardware.camera2.CameraCharacteristics.Key REQUEST_PARTIAL_RESULT_COUNT; + field public static final android.hardware.camera2.CameraCharacteristics.Key REQUEST_PIPELINE_MAX_DEPTH; + field public static final android.hardware.camera2.CameraCharacteristics.Key SCALER_AVAILABLE_MAX_DIGITAL_ZOOM; + field public static final android.hardware.camera2.CameraCharacteristics.Key SCALER_CROPPING_TYPE; + field public static final android.hardware.camera2.CameraCharacteristics.Key SCALER_STREAM_CONFIGURATION_MAP; + field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_AVAILABLE_TEST_PATTERN_MODES; + field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_BLACK_LEVEL_PATTERN; + field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_CALIBRATION_TRANSFORM1; + field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_CALIBRATION_TRANSFORM2; + field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_COLOR_TRANSFORM1; + field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_COLOR_TRANSFORM2; + field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_FORWARD_MATRIX1; + field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_FORWARD_MATRIX2; + field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_INFO_ACTIVE_ARRAY_SIZE; + field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_INFO_COLOR_FILTER_ARRANGEMENT; + field public static final android.hardware.camera2.CameraCharacteristics.Key> SENSOR_INFO_EXPOSURE_TIME_RANGE; + field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_INFO_MAX_FRAME_DURATION; + field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_INFO_PHYSICAL_SIZE; + field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_INFO_PIXEL_ARRAY_SIZE; + field public static final android.hardware.camera2.CameraCharacteristics.Key> SENSOR_INFO_SENSITIVITY_RANGE; + field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_INFO_TIMESTAMP_SOURCE; + field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_INFO_WHITE_LEVEL; + field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_MAX_ANALOG_SENSITIVITY; + field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_ORIENTATION; + field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_REFERENCE_ILLUMINANT1; + field public static final android.hardware.camera2.CameraCharacteristics.Key SENSOR_REFERENCE_ILLUMINANT2; + field public static final android.hardware.camera2.CameraCharacteristics.Key STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES; + field public static final android.hardware.camera2.CameraCharacteristics.Key STATISTICS_INFO_AVAILABLE_HOT_PIXEL_MAP_MODES; + field public static final android.hardware.camera2.CameraCharacteristics.Key STATISTICS_INFO_MAX_FACE_COUNT; + field public static final android.hardware.camera2.CameraCharacteristics.Key SYNC_MAX_LATENCY; + field public static final android.hardware.camera2.CameraCharacteristics.Key TONEMAP_AVAILABLE_TONE_MAP_MODES; + field public static final android.hardware.camera2.CameraCharacteristics.Key TONEMAP_MAX_CURVE_POINTS; + } + + public static final class CameraCharacteristics.Key { + method public final boolean equals(java.lang.Object); + method public java.lang.String getName(); + method public final int hashCode(); + } + + public abstract class CameraDevice implements java.lang.AutoCloseable { + method public abstract void close(); + method public abstract android.hardware.camera2.CaptureRequest.Builder createCaptureRequest(int) throws android.hardware.camera2.CameraAccessException; + method public abstract void createCaptureSession(java.util.List, android.hardware.camera2.CameraCaptureSession.StateCallback, android.os.Handler) throws android.hardware.camera2.CameraAccessException; + method public abstract java.lang.String getId(); + field public static final int TEMPLATE_MANUAL = 6; // 0x6 + field public static final int TEMPLATE_PREVIEW = 1; // 0x1 + field public static final int TEMPLATE_RECORD = 3; // 0x3 + field public static final int TEMPLATE_STILL_CAPTURE = 2; // 0x2 + field public static final int TEMPLATE_VIDEO_SNAPSHOT = 4; // 0x4 + field public static final int TEMPLATE_ZERO_SHUTTER_LAG = 5; // 0x5 + } + + public static abstract class CameraDevice.StateCallback { + ctor public CameraDevice.StateCallback(); + method public void onClosed(android.hardware.camera2.CameraDevice); + method public abstract void onDisconnected(android.hardware.camera2.CameraDevice); + method public abstract void onError(android.hardware.camera2.CameraDevice, int); + method public abstract void onOpened(android.hardware.camera2.CameraDevice); + field public static final int ERROR_CAMERA_DEVICE = 4; // 0x4 + field public static final int ERROR_CAMERA_DISABLED = 3; // 0x3 + field public static final int ERROR_CAMERA_IN_USE = 1; // 0x1 + field public static final int ERROR_CAMERA_SERVICE = 5; // 0x5 + field public static final int ERROR_MAX_CAMERAS_IN_USE = 2; // 0x2 + } + + public final class CameraManager { + method public android.hardware.camera2.CameraCharacteristics getCameraCharacteristics(java.lang.String) throws android.hardware.camera2.CameraAccessException; + method public java.lang.String[] getCameraIdList() throws android.hardware.camera2.CameraAccessException; + method public void openCamera(java.lang.String, android.hardware.camera2.CameraDevice.StateCallback, android.os.Handler) throws android.hardware.camera2.CameraAccessException; + method public void registerAvailabilityCallback(android.hardware.camera2.CameraManager.AvailabilityCallback, android.os.Handler); + method public void unregisterAvailabilityCallback(android.hardware.camera2.CameraManager.AvailabilityCallback); + } + + public static abstract class CameraManager.AvailabilityCallback { + ctor public CameraManager.AvailabilityCallback(); + method public void onCameraAvailable(java.lang.String); + method public void onCameraUnavailable(java.lang.String); + } + + public abstract class CameraMetadata { + method public java.util.List getKeys(); + field public static final int COLOR_CORRECTION_ABERRATION_MODE_FAST = 1; // 0x1 + field public static final int COLOR_CORRECTION_ABERRATION_MODE_HIGH_QUALITY = 2; // 0x2 + field public static final int COLOR_CORRECTION_ABERRATION_MODE_OFF = 0; // 0x0 + field public static final int COLOR_CORRECTION_MODE_FAST = 1; // 0x1 + field public static final int COLOR_CORRECTION_MODE_HIGH_QUALITY = 2; // 0x2 + field public static final int COLOR_CORRECTION_MODE_TRANSFORM_MATRIX = 0; // 0x0 + field public static final int CONTROL_AE_ANTIBANDING_MODE_50HZ = 1; // 0x1 + field public static final int CONTROL_AE_ANTIBANDING_MODE_60HZ = 2; // 0x2 + field public static final int CONTROL_AE_ANTIBANDING_MODE_AUTO = 3; // 0x3 + field public static final int CONTROL_AE_ANTIBANDING_MODE_OFF = 0; // 0x0 + field public static final int CONTROL_AE_MODE_OFF = 0; // 0x0 + field public static final int CONTROL_AE_MODE_ON = 1; // 0x1 + field public static final int CONTROL_AE_MODE_ON_ALWAYS_FLASH = 3; // 0x3 + field public static final int CONTROL_AE_MODE_ON_AUTO_FLASH = 2; // 0x2 + field public static final int CONTROL_AE_MODE_ON_AUTO_FLASH_REDEYE = 4; // 0x4 + field public static final int CONTROL_AE_PRECAPTURE_TRIGGER_IDLE = 0; // 0x0 + field public static final int CONTROL_AE_PRECAPTURE_TRIGGER_START = 1; // 0x1 + field public static final int CONTROL_AE_STATE_CONVERGED = 2; // 0x2 + field public static final int CONTROL_AE_STATE_FLASH_REQUIRED = 4; // 0x4 + field public static final int CONTROL_AE_STATE_INACTIVE = 0; // 0x0 + field public static final int CONTROL_AE_STATE_LOCKED = 3; // 0x3 + field public static final int CONTROL_AE_STATE_PRECAPTURE = 5; // 0x5 + field public static final int CONTROL_AE_STATE_SEARCHING = 1; // 0x1 + field public static final int CONTROL_AF_MODE_AUTO = 1; // 0x1 + field public static final int CONTROL_AF_MODE_CONTINUOUS_PICTURE = 4; // 0x4 + field public static final int CONTROL_AF_MODE_CONTINUOUS_VIDEO = 3; // 0x3 + field public static final int CONTROL_AF_MODE_EDOF = 5; // 0x5 + field public static final int CONTROL_AF_MODE_MACRO = 2; // 0x2 + field public static final int CONTROL_AF_MODE_OFF = 0; // 0x0 + field public static final int CONTROL_AF_STATE_ACTIVE_SCAN = 3; // 0x3 + field public static final int CONTROL_AF_STATE_FOCUSED_LOCKED = 4; // 0x4 + field public static final int CONTROL_AF_STATE_INACTIVE = 0; // 0x0 + field public static final int CONTROL_AF_STATE_NOT_FOCUSED_LOCKED = 5; // 0x5 + field public static final int CONTROL_AF_STATE_PASSIVE_FOCUSED = 2; // 0x2 + field public static final int CONTROL_AF_STATE_PASSIVE_SCAN = 1; // 0x1 + field public static final int CONTROL_AF_STATE_PASSIVE_UNFOCUSED = 6; // 0x6 + field public static final int CONTROL_AF_TRIGGER_CANCEL = 2; // 0x2 + field public static final int CONTROL_AF_TRIGGER_IDLE = 0; // 0x0 + field public static final int CONTROL_AF_TRIGGER_START = 1; // 0x1 + field public static final int CONTROL_AWB_MODE_AUTO = 1; // 0x1 + field public static final int CONTROL_AWB_MODE_CLOUDY_DAYLIGHT = 6; // 0x6 + field public static final int CONTROL_AWB_MODE_DAYLIGHT = 5; // 0x5 + field public static final int CONTROL_AWB_MODE_FLUORESCENT = 3; // 0x3 + field public static final int CONTROL_AWB_MODE_INCANDESCENT = 2; // 0x2 + field public static final int CONTROL_AWB_MODE_OFF = 0; // 0x0 + field public static final int CONTROL_AWB_MODE_SHADE = 8; // 0x8 + field public static final int CONTROL_AWB_MODE_TWILIGHT = 7; // 0x7 + field public static final int CONTROL_AWB_MODE_WARM_FLUORESCENT = 4; // 0x4 + field public static final int CONTROL_AWB_STATE_CONVERGED = 2; // 0x2 + field public static final int CONTROL_AWB_STATE_INACTIVE = 0; // 0x0 + field public static final int CONTROL_AWB_STATE_LOCKED = 3; // 0x3 + field public static final int CONTROL_AWB_STATE_SEARCHING = 1; // 0x1 + field public static final int CONTROL_CAPTURE_INTENT_CUSTOM = 0; // 0x0 + field public static final int CONTROL_CAPTURE_INTENT_MANUAL = 6; // 0x6 + field public static final int CONTROL_CAPTURE_INTENT_PREVIEW = 1; // 0x1 + field public static final int CONTROL_CAPTURE_INTENT_STILL_CAPTURE = 2; // 0x2 + field public static final int CONTROL_CAPTURE_INTENT_VIDEO_RECORD = 3; // 0x3 + field public static final int CONTROL_CAPTURE_INTENT_VIDEO_SNAPSHOT = 4; // 0x4 + field public static final int CONTROL_CAPTURE_INTENT_ZERO_SHUTTER_LAG = 5; // 0x5 + field public static final int CONTROL_EFFECT_MODE_AQUA = 8; // 0x8 + field public static final int CONTROL_EFFECT_MODE_BLACKBOARD = 7; // 0x7 + field public static final int CONTROL_EFFECT_MODE_MONO = 1; // 0x1 + field public static final int CONTROL_EFFECT_MODE_NEGATIVE = 2; // 0x2 + field public static final int CONTROL_EFFECT_MODE_OFF = 0; // 0x0 + field public static final int CONTROL_EFFECT_MODE_POSTERIZE = 5; // 0x5 + field public static final int CONTROL_EFFECT_MODE_SEPIA = 4; // 0x4 + field public static final int CONTROL_EFFECT_MODE_SOLARIZE = 3; // 0x3 + field public static final int CONTROL_EFFECT_MODE_WHITEBOARD = 6; // 0x6 + field public static final int CONTROL_MODE_AUTO = 1; // 0x1 + field public static final int CONTROL_MODE_OFF = 0; // 0x0 + field public static final int CONTROL_MODE_OFF_KEEP_STATE = 3; // 0x3 + field public static final int CONTROL_MODE_USE_SCENE_MODE = 2; // 0x2 + field public static final int CONTROL_SCENE_MODE_ACTION = 2; // 0x2 + field public static final int CONTROL_SCENE_MODE_BARCODE = 16; // 0x10 + field public static final int CONTROL_SCENE_MODE_BEACH = 8; // 0x8 + field public static final int CONTROL_SCENE_MODE_CANDLELIGHT = 15; // 0xf + field public static final int CONTROL_SCENE_MODE_DISABLED = 0; // 0x0 + field public static final int CONTROL_SCENE_MODE_FACE_PRIORITY = 1; // 0x1 + field public static final int CONTROL_SCENE_MODE_FIREWORKS = 12; // 0xc + field public static final int CONTROL_SCENE_MODE_HDR = 18; // 0x12 + field public static final int CONTROL_SCENE_MODE_HIGH_SPEED_VIDEO = 17; // 0x11 + field public static final int CONTROL_SCENE_MODE_LANDSCAPE = 4; // 0x4 + field public static final int CONTROL_SCENE_MODE_NIGHT = 5; // 0x5 + field public static final int CONTROL_SCENE_MODE_NIGHT_PORTRAIT = 6; // 0x6 + field public static final int CONTROL_SCENE_MODE_PARTY = 14; // 0xe + field public static final int CONTROL_SCENE_MODE_PORTRAIT = 3; // 0x3 + field public static final int CONTROL_SCENE_MODE_SNOW = 9; // 0x9 + field public static final int CONTROL_SCENE_MODE_SPORTS = 13; // 0xd + field public static final int CONTROL_SCENE_MODE_STEADYPHOTO = 11; // 0xb + field public static final int CONTROL_SCENE_MODE_SUNSET = 10; // 0xa + field public static final int CONTROL_SCENE_MODE_THEATRE = 7; // 0x7 + field public static final int CONTROL_VIDEO_STABILIZATION_MODE_OFF = 0; // 0x0 + field public static final int CONTROL_VIDEO_STABILIZATION_MODE_ON = 1; // 0x1 + field public static final int EDGE_MODE_FAST = 1; // 0x1 + field public static final int EDGE_MODE_HIGH_QUALITY = 2; // 0x2 + field public static final int EDGE_MODE_OFF = 0; // 0x0 + field public static final int FLASH_MODE_OFF = 0; // 0x0 + field public static final int FLASH_MODE_SINGLE = 1; // 0x1 + field public static final int FLASH_MODE_TORCH = 2; // 0x2 + field public static final int FLASH_STATE_CHARGING = 1; // 0x1 + field public static final int FLASH_STATE_FIRED = 3; // 0x3 + field public static final int FLASH_STATE_PARTIAL = 4; // 0x4 + field public static final int FLASH_STATE_READY = 2; // 0x2 + field public static final int FLASH_STATE_UNAVAILABLE = 0; // 0x0 + field public static final int HOT_PIXEL_MODE_FAST = 1; // 0x1 + field public static final int HOT_PIXEL_MODE_HIGH_QUALITY = 2; // 0x2 + field public static final int HOT_PIXEL_MODE_OFF = 0; // 0x0 + field public static final int INFO_SUPPORTED_HARDWARE_LEVEL_FULL = 1; // 0x1 + field public static final int INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY = 2; // 0x2 + field public static final int INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED = 0; // 0x0 + field public static final int LENS_FACING_BACK = 1; // 0x1 + field public static final int LENS_FACING_FRONT = 0; // 0x0 + field public static final int LENS_INFO_FOCUS_DISTANCE_CALIBRATION_APPROXIMATE = 1; // 0x1 + field public static final int LENS_INFO_FOCUS_DISTANCE_CALIBRATION_CALIBRATED = 2; // 0x2 + field public static final int LENS_INFO_FOCUS_DISTANCE_CALIBRATION_UNCALIBRATED = 0; // 0x0 + field public static final int LENS_OPTICAL_STABILIZATION_MODE_OFF = 0; // 0x0 + field public static final int LENS_OPTICAL_STABILIZATION_MODE_ON = 1; // 0x1 + field public static final int LENS_STATE_MOVING = 1; // 0x1 + field public static final int LENS_STATE_STATIONARY = 0; // 0x0 + field public static final int NOISE_REDUCTION_MODE_FAST = 1; // 0x1 + field public static final int NOISE_REDUCTION_MODE_HIGH_QUALITY = 2; // 0x2 + field public static final int NOISE_REDUCTION_MODE_OFF = 0; // 0x0 + field public static final int REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE = 0; // 0x0 + field public static final int REQUEST_AVAILABLE_CAPABILITIES_BURST_CAPTURE = 6; // 0x6 + field public static final int REQUEST_AVAILABLE_CAPABILITIES_MANUAL_POST_PROCESSING = 2; // 0x2 + field public static final int REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR = 1; // 0x1 + field public static final int REQUEST_AVAILABLE_CAPABILITIES_RAW = 3; // 0x3 + field public static final int REQUEST_AVAILABLE_CAPABILITIES_READ_SENSOR_SETTINGS = 5; // 0x5 + field public static final int SCALER_CROPPING_TYPE_CENTER_ONLY = 0; // 0x0 + field public static final int SCALER_CROPPING_TYPE_FREEFORM = 1; // 0x1 + field public static final int SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_BGGR = 3; // 0x3 + field public static final int SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_GBRG = 2; // 0x2 + field public static final int SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_GRBG = 1; // 0x1 + field public static final int SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_RGB = 4; // 0x4 + field public static final int SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_RGGB = 0; // 0x0 + field public static final int SENSOR_INFO_TIMESTAMP_SOURCE_REALTIME = 1; // 0x1 + field public static final int SENSOR_INFO_TIMESTAMP_SOURCE_UNKNOWN = 0; // 0x0 + field public static final int SENSOR_REFERENCE_ILLUMINANT1_CLOUDY_WEATHER = 10; // 0xa + field public static final int SENSOR_REFERENCE_ILLUMINANT1_COOL_WHITE_FLUORESCENT = 14; // 0xe + field public static final int SENSOR_REFERENCE_ILLUMINANT1_D50 = 23; // 0x17 + field public static final int SENSOR_REFERENCE_ILLUMINANT1_D55 = 20; // 0x14 + field public static final int SENSOR_REFERENCE_ILLUMINANT1_D65 = 21; // 0x15 + field public static final int SENSOR_REFERENCE_ILLUMINANT1_D75 = 22; // 0x16 + field public static final int SENSOR_REFERENCE_ILLUMINANT1_DAYLIGHT = 1; // 0x1 + field public static final int SENSOR_REFERENCE_ILLUMINANT1_DAYLIGHT_FLUORESCENT = 12; // 0xc + field public static final int SENSOR_REFERENCE_ILLUMINANT1_DAY_WHITE_FLUORESCENT = 13; // 0xd + field public static final int SENSOR_REFERENCE_ILLUMINANT1_FINE_WEATHER = 9; // 0x9 + field public static final int SENSOR_REFERENCE_ILLUMINANT1_FLASH = 4; // 0x4 + field public static final int SENSOR_REFERENCE_ILLUMINANT1_FLUORESCENT = 2; // 0x2 + field public static final int SENSOR_REFERENCE_ILLUMINANT1_ISO_STUDIO_TUNGSTEN = 24; // 0x18 + field public static final int SENSOR_REFERENCE_ILLUMINANT1_SHADE = 11; // 0xb + field public static final int SENSOR_REFERENCE_ILLUMINANT1_STANDARD_A = 17; // 0x11 + field public static final int SENSOR_REFERENCE_ILLUMINANT1_STANDARD_B = 18; // 0x12 + field public static final int SENSOR_REFERENCE_ILLUMINANT1_STANDARD_C = 19; // 0x13 + field public static final int SENSOR_REFERENCE_ILLUMINANT1_TUNGSTEN = 3; // 0x3 + field public static final int SENSOR_REFERENCE_ILLUMINANT1_WHITE_FLUORESCENT = 15; // 0xf + field public static final int SENSOR_TEST_PATTERN_MODE_COLOR_BARS = 2; // 0x2 + field public static final int SENSOR_TEST_PATTERN_MODE_COLOR_BARS_FADE_TO_GRAY = 3; // 0x3 + field public static final int SENSOR_TEST_PATTERN_MODE_CUSTOM1 = 256; // 0x100 + field public static final int SENSOR_TEST_PATTERN_MODE_OFF = 0; // 0x0 + field public static final int SENSOR_TEST_PATTERN_MODE_PN9 = 4; // 0x4 + field public static final int SENSOR_TEST_PATTERN_MODE_SOLID_COLOR = 1; // 0x1 + field public static final int SHADING_MODE_FAST = 1; // 0x1 + field public static final int SHADING_MODE_HIGH_QUALITY = 2; // 0x2 + field public static final int SHADING_MODE_OFF = 0; // 0x0 + field public static final int STATISTICS_FACE_DETECT_MODE_FULL = 2; // 0x2 + field public static final int STATISTICS_FACE_DETECT_MODE_OFF = 0; // 0x0 + field public static final int STATISTICS_FACE_DETECT_MODE_SIMPLE = 1; // 0x1 + field public static final int STATISTICS_LENS_SHADING_MAP_MODE_OFF = 0; // 0x0 + field public static final int STATISTICS_LENS_SHADING_MAP_MODE_ON = 1; // 0x1 + field public static final int STATISTICS_SCENE_FLICKER_50HZ = 1; // 0x1 + field public static final int STATISTICS_SCENE_FLICKER_60HZ = 2; // 0x2 + field public static final int STATISTICS_SCENE_FLICKER_NONE = 0; // 0x0 + field public static final int SYNC_MAX_LATENCY_PER_FRAME_CONTROL = 0; // 0x0 + field public static final int SYNC_MAX_LATENCY_UNKNOWN = -1; // 0xffffffff + field public static final int TONEMAP_MODE_CONTRAST_CURVE = 0; // 0x0 + field public static final int TONEMAP_MODE_FAST = 1; // 0x1 + field public static final int TONEMAP_MODE_HIGH_QUALITY = 2; // 0x2 + } + + public class CaptureFailure { + method public long getFrameNumber(); + method public int getReason(); + method public android.hardware.camera2.CaptureRequest getRequest(); + method public int getSequenceId(); + method public boolean wasImageCaptured(); + field public static final int REASON_ERROR = 0; // 0x0 + field public static final int REASON_FLUSHED = 1; // 0x1 + } + + public final class CaptureRequest extends android.hardware.camera2.CameraMetadata implements android.os.Parcelable { + method public int describeContents(); + method public T get(android.hardware.camera2.CaptureRequest.Key); + method public java.lang.Object getTag(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.hardware.camera2.CaptureRequest.Key BLACK_LEVEL_LOCK; + field public static final android.hardware.camera2.CaptureRequest.Key COLOR_CORRECTION_ABERRATION_MODE; + field public static final android.hardware.camera2.CaptureRequest.Key COLOR_CORRECTION_GAINS; + field public static final android.hardware.camera2.CaptureRequest.Key COLOR_CORRECTION_MODE; + field public static final android.hardware.camera2.CaptureRequest.Key COLOR_CORRECTION_TRANSFORM; + field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AE_ANTIBANDING_MODE; + field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AE_EXPOSURE_COMPENSATION; + field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AE_LOCK; + field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AE_MODE; + field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AE_PRECAPTURE_TRIGGER; + field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AE_REGIONS; + field public static final android.hardware.camera2.CaptureRequest.Key> CONTROL_AE_TARGET_FPS_RANGE; + field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AF_MODE; + field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AF_REGIONS; + field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AF_TRIGGER; + field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AWB_LOCK; + field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AWB_MODE; + field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AWB_REGIONS; + field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_CAPTURE_INTENT; + field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_EFFECT_MODE; + field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_MODE; + field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_SCENE_MODE; + field public static final android.hardware.camera2.CaptureRequest.Key CONTROL_VIDEO_STABILIZATION_MODE; + field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.hardware.camera2.CaptureRequest.Key EDGE_MODE; + field public static final android.hardware.camera2.CaptureRequest.Key FLASH_MODE; + field public static final android.hardware.camera2.CaptureRequest.Key HOT_PIXEL_MODE; + field public static final android.hardware.camera2.CaptureRequest.Key JPEG_GPS_LOCATION; + field public static final android.hardware.camera2.CaptureRequest.Key JPEG_ORIENTATION; + field public static final android.hardware.camera2.CaptureRequest.Key JPEG_QUALITY; + field public static final android.hardware.camera2.CaptureRequest.Key JPEG_THUMBNAIL_QUALITY; + field public static final android.hardware.camera2.CaptureRequest.Key JPEG_THUMBNAIL_SIZE; + field public static final android.hardware.camera2.CaptureRequest.Key LENS_APERTURE; + field public static final android.hardware.camera2.CaptureRequest.Key LENS_FILTER_DENSITY; + field public static final android.hardware.camera2.CaptureRequest.Key LENS_FOCAL_LENGTH; + field public static final android.hardware.camera2.CaptureRequest.Key LENS_FOCUS_DISTANCE; + field public static final android.hardware.camera2.CaptureRequest.Key LENS_OPTICAL_STABILIZATION_MODE; + field public static final android.hardware.camera2.CaptureRequest.Key NOISE_REDUCTION_MODE; + field public static final android.hardware.camera2.CaptureRequest.Key SCALER_CROP_REGION; + field public static final android.hardware.camera2.CaptureRequest.Key SENSOR_EXPOSURE_TIME; + field public static final android.hardware.camera2.CaptureRequest.Key SENSOR_FRAME_DURATION; + field public static final android.hardware.camera2.CaptureRequest.Key SENSOR_SENSITIVITY; + field public static final android.hardware.camera2.CaptureRequest.Key SENSOR_TEST_PATTERN_DATA; + field public static final android.hardware.camera2.CaptureRequest.Key SENSOR_TEST_PATTERN_MODE; + field public static final android.hardware.camera2.CaptureRequest.Key SHADING_MODE; + field public static final android.hardware.camera2.CaptureRequest.Key STATISTICS_FACE_DETECT_MODE; + field public static final android.hardware.camera2.CaptureRequest.Key STATISTICS_HOT_PIXEL_MAP_MODE; + field public static final android.hardware.camera2.CaptureRequest.Key STATISTICS_LENS_SHADING_MAP_MODE; + field public static final android.hardware.camera2.CaptureRequest.Key TONEMAP_CURVE; + field public static final android.hardware.camera2.CaptureRequest.Key TONEMAP_MODE; + } + + public static final class CaptureRequest.Builder { + method public void addTarget(android.view.Surface); + method public android.hardware.camera2.CaptureRequest build(); + method public T get(android.hardware.camera2.CaptureRequest.Key); + method public void removeTarget(android.view.Surface); + method public void set(android.hardware.camera2.CaptureRequest.Key, T); + method public void setTag(java.lang.Object); + } + + public static final class CaptureRequest.Key { + method public final boolean equals(java.lang.Object); + method public java.lang.String getName(); + method public final int hashCode(); + } + + public class CaptureResult extends android.hardware.camera2.CameraMetadata { + method public T get(android.hardware.camera2.CaptureResult.Key); + method public long getFrameNumber(); + method public android.hardware.camera2.CaptureRequest getRequest(); + method public int getSequenceId(); + field public static final android.hardware.camera2.CaptureResult.Key BLACK_LEVEL_LOCK; + field public static final android.hardware.camera2.CaptureResult.Key COLOR_CORRECTION_ABERRATION_MODE; + field public static final android.hardware.camera2.CaptureResult.Key COLOR_CORRECTION_GAINS; + field public static final android.hardware.camera2.CaptureResult.Key COLOR_CORRECTION_MODE; + field public static final android.hardware.camera2.CaptureResult.Key COLOR_CORRECTION_TRANSFORM; + field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AE_ANTIBANDING_MODE; + field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AE_EXPOSURE_COMPENSATION; + field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AE_LOCK; + field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AE_MODE; + field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AE_PRECAPTURE_TRIGGER; + field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AE_REGIONS; + field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AE_STATE; + field public static final android.hardware.camera2.CaptureResult.Key> CONTROL_AE_TARGET_FPS_RANGE; + field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AF_MODE; + field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AF_REGIONS; + field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AF_STATE; + field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AF_TRIGGER; + field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AWB_LOCK; + field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AWB_MODE; + field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AWB_REGIONS; + field public static final android.hardware.camera2.CaptureResult.Key CONTROL_AWB_STATE; + field public static final android.hardware.camera2.CaptureResult.Key CONTROL_CAPTURE_INTENT; + field public static final android.hardware.camera2.CaptureResult.Key CONTROL_EFFECT_MODE; + field public static final android.hardware.camera2.CaptureResult.Key CONTROL_MODE; + field public static final android.hardware.camera2.CaptureResult.Key CONTROL_SCENE_MODE; + field public static final android.hardware.camera2.CaptureResult.Key CONTROL_VIDEO_STABILIZATION_MODE; + field public static final android.hardware.camera2.CaptureResult.Key EDGE_MODE; + field public static final android.hardware.camera2.CaptureResult.Key FLASH_MODE; + field public static final android.hardware.camera2.CaptureResult.Key FLASH_STATE; + field public static final android.hardware.camera2.CaptureResult.Key HOT_PIXEL_MODE; + field public static final android.hardware.camera2.CaptureResult.Key JPEG_GPS_LOCATION; + field public static final android.hardware.camera2.CaptureResult.Key JPEG_ORIENTATION; + field public static final android.hardware.camera2.CaptureResult.Key JPEG_QUALITY; + field public static final android.hardware.camera2.CaptureResult.Key JPEG_THUMBNAIL_QUALITY; + field public static final android.hardware.camera2.CaptureResult.Key JPEG_THUMBNAIL_SIZE; + field public static final android.hardware.camera2.CaptureResult.Key LENS_APERTURE; + field public static final android.hardware.camera2.CaptureResult.Key LENS_FILTER_DENSITY; + field public static final android.hardware.camera2.CaptureResult.Key LENS_FOCAL_LENGTH; + field public static final android.hardware.camera2.CaptureResult.Key LENS_FOCUS_DISTANCE; + field public static final android.hardware.camera2.CaptureResult.Key> LENS_FOCUS_RANGE; + field public static final android.hardware.camera2.CaptureResult.Key LENS_OPTICAL_STABILIZATION_MODE; + field public static final android.hardware.camera2.CaptureResult.Key LENS_STATE; + field public static final android.hardware.camera2.CaptureResult.Key NOISE_REDUCTION_MODE; + field public static final android.hardware.camera2.CaptureResult.Key REQUEST_PIPELINE_DEPTH; + field public static final android.hardware.camera2.CaptureResult.Key SCALER_CROP_REGION; + field public static final android.hardware.camera2.CaptureResult.Key SENSOR_EXPOSURE_TIME; + field public static final android.hardware.camera2.CaptureResult.Key SENSOR_FRAME_DURATION; + field public static final android.hardware.camera2.CaptureResult.Key SENSOR_GREEN_SPLIT; + field public static final android.hardware.camera2.CaptureResult.Key SENSOR_NEUTRAL_COLOR_POINT; + field public static final android.hardware.camera2.CaptureResult.Key[]> SENSOR_NOISE_PROFILE; + field public static final android.hardware.camera2.CaptureResult.Key SENSOR_ROLLING_SHUTTER_SKEW; + field public static final android.hardware.camera2.CaptureResult.Key SENSOR_SENSITIVITY; + field public static final android.hardware.camera2.CaptureResult.Key SENSOR_TEST_PATTERN_DATA; + field public static final android.hardware.camera2.CaptureResult.Key SENSOR_TEST_PATTERN_MODE; + field public static final android.hardware.camera2.CaptureResult.Key SENSOR_TIMESTAMP; + field public static final android.hardware.camera2.CaptureResult.Key SHADING_MODE; + field public static final android.hardware.camera2.CaptureResult.Key STATISTICS_FACES; + field public static final android.hardware.camera2.CaptureResult.Key STATISTICS_FACE_DETECT_MODE; + field public static final android.hardware.camera2.CaptureResult.Key STATISTICS_HOT_PIXEL_MAP; + field public static final android.hardware.camera2.CaptureResult.Key STATISTICS_HOT_PIXEL_MAP_MODE; + field public static final android.hardware.camera2.CaptureResult.Key STATISTICS_LENS_SHADING_CORRECTION_MAP; + field public static final android.hardware.camera2.CaptureResult.Key STATISTICS_LENS_SHADING_MAP_MODE; + field public static final android.hardware.camera2.CaptureResult.Key STATISTICS_SCENE_FLICKER; + field public static final android.hardware.camera2.CaptureResult.Key TONEMAP_CURVE; + field public static final android.hardware.camera2.CaptureResult.Key TONEMAP_MODE; + } + + public static final class CaptureResult.Key { + method public final boolean equals(java.lang.Object); + method public java.lang.String getName(); + method public final int hashCode(); + } + + public final class DngCreator implements java.lang.AutoCloseable { + ctor public DngCreator(android.hardware.camera2.CameraCharacteristics, android.hardware.camera2.CaptureResult); + method public void close(); + method public android.hardware.camera2.DngCreator setDescription(java.lang.String); + method public android.hardware.camera2.DngCreator setLocation(android.location.Location); + method public android.hardware.camera2.DngCreator setOrientation(int); + method public android.hardware.camera2.DngCreator setThumbnail(android.graphics.Bitmap); + method public android.hardware.camera2.DngCreator setThumbnail(android.media.Image); + method public void writeByteBuffer(java.io.OutputStream, android.util.Size, java.nio.ByteBuffer, long) throws java.io.IOException; + method public void writeImage(java.io.OutputStream, android.media.Image) throws java.io.IOException; + method public void writeInputStream(java.io.OutputStream, android.util.Size, java.io.InputStream, long) throws java.io.IOException; + field public static final int MAX_THUMBNAIL_DIMENSION = 256; // 0x100 + } + + public final class TotalCaptureResult extends android.hardware.camera2.CaptureResult { + method public java.util.List getPartialResults(); + } + +} + +package android.hardware.camera2.params { + + public final class BlackLevelPattern { + method public void copyTo(int[], int); + method public int getOffsetForIndex(int, int); + field public static final int COUNT = 4; // 0x4 + } + + public final class ColorSpaceTransform { + ctor public ColorSpaceTransform(android.util.Rational[]); + ctor public ColorSpaceTransform(int[]); + method public void copyElements(android.util.Rational[], int); + method public void copyElements(int[], int); + method public android.util.Rational getElement(int, int); + } + + public final class Face { + method public android.graphics.Rect getBounds(); + method public int getId(); + method public android.graphics.Point getLeftEyePosition(); + method public android.graphics.Point getMouthPosition(); + method public android.graphics.Point getRightEyePosition(); + method public int getScore(); + field public static final int ID_UNSUPPORTED = -1; // 0xffffffff + field public static final int SCORE_MAX = 100; // 0x64 + field public static final int SCORE_MIN = 1; // 0x1 + } + + public final class LensShadingMap { + method public void copyGainFactors(float[], int); + method public int getColumnCount(); + method public float getGainFactor(int, int, int); + method public int getGainFactorCount(); + method public android.hardware.camera2.params.RggbChannelVector getGainFactorVector(int, int); + method public int getRowCount(); + field public static final float MINIMUM_GAIN_FACTOR = 1.0f; + } + + public final class MeteringRectangle { + ctor public MeteringRectangle(int, int, int, int, int); + ctor public MeteringRectangle(android.graphics.Point, android.util.Size, int); + ctor public MeteringRectangle(android.graphics.Rect, int); + method public boolean equals(android.hardware.camera2.params.MeteringRectangle); + method public int getHeight(); + method public int getMeteringWeight(); + method public android.graphics.Rect getRect(); + method public android.util.Size getSize(); + method public android.graphics.Point getUpperLeftPoint(); + method public int getWidth(); + method public int getX(); + method public int getY(); + field public static final int METERING_WEIGHT_DONT_CARE = 0; // 0x0 + field public static final int METERING_WEIGHT_MAX = 1000; // 0x3e8 + field public static final int METERING_WEIGHT_MIN = 0; // 0x0 + } + + public final class RggbChannelVector { + ctor public RggbChannelVector(float, float, float, float); + method public void copyTo(float[], int); + method public float getBlue(); + method public float getComponent(int); + method public float getGreenEven(); + method public float getGreenOdd(); + method public final float getRed(); + field public static final int BLUE = 3; // 0x3 + field public static final int COUNT = 4; // 0x4 + field public static final int GREEN_EVEN = 1; // 0x1 + field public static final int GREEN_ODD = 2; // 0x2 + field public static final int RED = 0; // 0x0 + } + + public final class StreamConfigurationMap { + method public android.util.Range[] getHighSpeedVideoFpsRanges(); + method public android.util.Range[] getHighSpeedVideoFpsRangesFor(android.util.Size); + method public android.util.Size[] getHighSpeedVideoSizes(); + method public android.util.Size[] getHighSpeedVideoSizesFor(android.util.Range); + method public final int[] getOutputFormats(); + method public long getOutputMinFrameDuration(int, android.util.Size); + method public long getOutputMinFrameDuration(java.lang.Class, android.util.Size); + method public android.util.Size[] getOutputSizes(java.lang.Class); + method public android.util.Size[] getOutputSizes(int); + method public long getOutputStallDuration(int, android.util.Size); + method public long getOutputStallDuration(java.lang.Class, android.util.Size); + method public boolean isOutputSupportedFor(int); + method public static boolean isOutputSupportedFor(java.lang.Class); + method public boolean isOutputSupportedFor(android.view.Surface); + } + + public final class TonemapCurve { + ctor public TonemapCurve(float[], float[], float[]); + method public void copyColorCurve(int, float[], int); + method public android.graphics.PointF getPoint(int, int); + method public int getPointCount(int); + field public static final int CHANNEL_BLUE = 2; // 0x2 + field public static final int CHANNEL_GREEN = 1; // 0x1 + field public static final int CHANNEL_RED = 0; // 0x0 + field public static final float LEVEL_BLACK = 0.0f; + field public static final float LEVEL_WHITE = 1.0f; + field public static final int POINT_SIZE = 2; // 0x2 + } + +} + +package android.hardware.display { + + public final class DisplayManager { + method public android.hardware.display.VirtualDisplay createVirtualDisplay(java.lang.String, int, int, int, android.view.Surface, int); + method public android.hardware.display.VirtualDisplay createVirtualDisplay(java.lang.String, int, int, int, android.view.Surface, int, android.hardware.display.VirtualDisplay.Callback, android.os.Handler); + method public android.view.Display getDisplay(int); + method public android.view.Display[] getDisplays(); + method public android.view.Display[] getDisplays(java.lang.String); + method public void registerDisplayListener(android.hardware.display.DisplayManager.DisplayListener, android.os.Handler); + method public void unregisterDisplayListener(android.hardware.display.DisplayManager.DisplayListener); + field public static final java.lang.String DISPLAY_CATEGORY_PRESENTATION = "android.hardware.display.category.PRESENTATION"; + field public static final int VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR = 16; // 0x10 + field public static final int VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY = 8; // 0x8 + field public static final int VIRTUAL_DISPLAY_FLAG_PRESENTATION = 2; // 0x2 + field public static final int VIRTUAL_DISPLAY_FLAG_PUBLIC = 1; // 0x1 + field public static final int VIRTUAL_DISPLAY_FLAG_SECURE = 4; // 0x4 + } + + public static abstract interface DisplayManager.DisplayListener { + method public abstract void onDisplayAdded(int); + method public abstract void onDisplayChanged(int); + method public abstract void onDisplayRemoved(int); + } + + public final class VirtualDisplay { + method public android.view.Display getDisplay(); + method public android.view.Surface getSurface(); + method public void release(); + method public void resize(int, int, int); + method public void setSurface(android.view.Surface); + } + + public static abstract class VirtualDisplay.Callback { + ctor public VirtualDisplay.Callback(); + method public void onPaused(); + method public void onResumed(); + method public void onStopped(); + } + +} + +package android.hardware.hdmi { + + public abstract class HdmiClient { + method public android.hardware.hdmi.HdmiDeviceInfo getActiveSource(); + method public void sendKeyEvent(int, boolean); + method public void sendVendorCommand(int, byte[], boolean); + method public void setVendorCommandListener(android.hardware.hdmi.HdmiControlManager.VendorCommandListener); + } + + public final class HdmiControlManager { + method public void addHotplugEventListener(android.hardware.hdmi.HdmiControlManager.HotplugEventListener); + method public android.hardware.hdmi.HdmiClient getClient(int); + method public android.hardware.hdmi.HdmiPlaybackClient getPlaybackClient(); + method public android.hardware.hdmi.HdmiTvClient getTvClient(); + method public void removeHotplugEventListener(android.hardware.hdmi.HdmiControlManager.HotplugEventListener); + field public static final java.lang.String ACTION_OSD_MESSAGE = "android.hardware.hdmi.action.OSD_MESSAGE"; + field public static final int AVR_VOLUME_MUTED = 101; // 0x65 + field public static final int CLEAR_TIMER_STATUS_CEC_DISABLE = 162; // 0xa2 + field public static final int CLEAR_TIMER_STATUS_CHECK_RECORDER_CONNECTION = 160; // 0xa0 + field public static final int CLEAR_TIMER_STATUS_FAIL_TO_CLEAR_SELECTED_SOURCE = 161; // 0xa1 + field public static final int CLEAR_TIMER_STATUS_TIMER_CLEARED = 128; // 0x80 + field public static final int CLEAR_TIMER_STATUS_TIMER_NOT_CLEARED_NO_INFO_AVAILABLE = 2; // 0x2 + field public static final int CLEAR_TIMER_STATUS_TIMER_NOT_CLEARED_NO_MATCHING = 1; // 0x1 + field public static final int CLEAR_TIMER_STATUS_TIMER_NOT_CLEARED_RECORDING = 0; // 0x0 + field public static final int CONTROL_STATE_CHANGED_REASON_SETTING = 1; // 0x1 + field public static final int CONTROL_STATE_CHANGED_REASON_STANDBY = 3; // 0x3 + field public static final int CONTROL_STATE_CHANGED_REASON_START = 0; // 0x0 + field public static final int CONTROL_STATE_CHANGED_REASON_WAKEUP = 2; // 0x2 + field public static final int DEVICE_EVENT_ADD_DEVICE = 1; // 0x1 + field public static final int DEVICE_EVENT_REMOVE_DEVICE = 2; // 0x2 + field public static final int DEVICE_EVENT_UPDATE_DEVICE = 3; // 0x3 + field public static final java.lang.String EXTRA_MESSAGE_EXTRA_PARAM1 = "android.hardware.hdmi.extra.MESSAGE_EXTRA_PARAM1"; + field public static final java.lang.String EXTRA_MESSAGE_ID = "android.hardware.hdmi.extra.MESSAGE_ID"; + field public static final int ONE_TOUCH_RECORD_ALREADY_RECORDING = 18; // 0x12 + field public static final int ONE_TOUCH_RECORD_CEC_DISABLED = 51; // 0x33 + field public static final int ONE_TOUCH_RECORD_CHECK_RECORDER_CONNECTION = 49; // 0x31 + field public static final int ONE_TOUCH_RECORD_DISALLOW_TO_COPY = 13; // 0xd + field public static final int ONE_TOUCH_RECORD_DISALLOW_TO_FUTHER_COPIES = 14; // 0xe + field public static final int ONE_TOUCH_RECORD_FAIL_TO_RECORD_DISPLAYED_SCREEN = 50; // 0x32 + field public static final int ONE_TOUCH_RECORD_INVALID_EXTERNAL_PHYSICAL_ADDRESS = 10; // 0xa + field public static final int ONE_TOUCH_RECORD_INVALID_EXTERNAL_PLUG_NUMBER = 9; // 0x9 + field public static final int ONE_TOUCH_RECORD_MEDIA_PROBLEM = 21; // 0x15 + field public static final int ONE_TOUCH_RECORD_MEDIA_PROTECTED = 19; // 0x13 + field public static final int ONE_TOUCH_RECORD_NOT_ENOUGH_SPACE = 22; // 0x16 + field public static final int ONE_TOUCH_RECORD_NO_MEDIA = 16; // 0x10 + field public static final int ONE_TOUCH_RECORD_NO_OR_INSUFFICIENT_CA_ENTITLEMENTS = 12; // 0xc + field public static final int ONE_TOUCH_RECORD_NO_SOURCE_SIGNAL = 20; // 0x14 + field public static final int ONE_TOUCH_RECORD_OTHER_REASON = 31; // 0x1f + field public static final int ONE_TOUCH_RECORD_PARENT_LOCK_ON = 23; // 0x17 + field public static final int ONE_TOUCH_RECORD_PLAYING = 17; // 0x11 + field public static final int ONE_TOUCH_RECORD_PREVIOUS_RECORDING_IN_PROGRESS = 48; // 0x30 + field public static final int ONE_TOUCH_RECORD_RECORDING_ALREADY_TERMINATED = 27; // 0x1b + field public static final int ONE_TOUCH_RECORD_RECORDING_ANALOGUE_SERVICE = 3; // 0x3 + field public static final int ONE_TOUCH_RECORD_RECORDING_CURRENTLY_SELECTED_SOURCE = 1; // 0x1 + field public static final int ONE_TOUCH_RECORD_RECORDING_DIGITAL_SERVICE = 2; // 0x2 + field public static final int ONE_TOUCH_RECORD_RECORDING_EXTERNAL_INPUT = 4; // 0x4 + field public static final int ONE_TOUCH_RECORD_RECORDING_TERMINATED_NORMALLY = 26; // 0x1a + field public static final int ONE_TOUCH_RECORD_UNABLE_ANALOGUE_SERVICE = 6; // 0x6 + field public static final int ONE_TOUCH_RECORD_UNABLE_DIGITAL_SERVICE = 5; // 0x5 + field public static final int ONE_TOUCH_RECORD_UNABLE_SELECTED_SERVICE = 7; // 0x7 + field public static final int ONE_TOUCH_RECORD_UNSUPPORTED_CA = 11; // 0xb + field public static final int OSD_MESSAGE_ARC_CONNECTED_INVALID_PORT = 1; // 0x1 + field public static final int OSD_MESSAGE_AVR_VOLUME_CHANGED = 2; // 0x2 + field public static final int POWER_STATUS_ON = 0; // 0x0 + field public static final int POWER_STATUS_STANDBY = 1; // 0x1 + field public static final int POWER_STATUS_TRANSIENT_TO_ON = 2; // 0x2 + field public static final int POWER_STATUS_TRANSIENT_TO_STANDBY = 3; // 0x3 + field public static final int POWER_STATUS_UNKNOWN = -1; // 0xffffffff + field public static final int RESULT_ALREADY_IN_PROGRESS = 4; // 0x4 + field public static final int RESULT_COMMUNICATION_FAILED = 7; // 0x7 + field public static final int RESULT_EXCEPTION = 5; // 0x5 + field public static final int RESULT_INCORRECT_MODE = 6; // 0x6 + field public static final int RESULT_SOURCE_NOT_AVAILABLE = 2; // 0x2 + field public static final int RESULT_SUCCESS = 0; // 0x0 + field public static final int RESULT_TARGET_NOT_AVAILABLE = 3; // 0x3 + field public static final int RESULT_TIMEOUT = 1; // 0x1 + field public static final int TIMER_RECORDING_RESULT_EXTRA_CEC_DISABLED = 3; // 0x3 + field public static final int TIMER_RECORDING_RESULT_EXTRA_CHECK_RECORDER_CONNECTION = 1; // 0x1 + field public static final int TIMER_RECORDING_RESULT_EXTRA_FAIL_TO_RECORD_SELECTED_SOURCE = 2; // 0x2 + field public static final int TIMER_RECORDING_RESULT_EXTRA_NO_ERROR = 0; // 0x0 + field public static final int TIMER_RECORDING_TYPE_ANALOGUE = 2; // 0x2 + field public static final int TIMER_RECORDING_TYPE_DIGITAL = 1; // 0x1 + field public static final int TIMER_RECORDING_TYPE_EXTERNAL = 3; // 0x3 + field public static final int TIMER_STATUS_MEDIA_INFO_NOT_PRESENT = 2; // 0x2 + field public static final int TIMER_STATUS_MEDIA_INFO_PRESENT_NOT_PROTECTED = 0; // 0x0 + field public static final int TIMER_STATUS_MEDIA_INFO_PRESENT_PROTECTED = 1; // 0x1 + field public static final int TIMER_STATUS_NOT_PROGRAMMED_CA_NOT_SUPPORTED = 6; // 0x6 + field public static final int TIMER_STATUS_NOT_PROGRAMMED_CLOCK_FAILURE = 10; // 0xa + field public static final int TIMER_STATUS_NOT_PROGRAMMED_DATE_OUT_OF_RANGE = 2; // 0x2 + field public static final int TIMER_STATUS_NOT_PROGRAMMED_DUPLICATED = 14; // 0xe + field public static final int TIMER_STATUS_NOT_PROGRAMMED_INVALID_EXTERNAL_PHYSICAL_NUMBER = 5; // 0x5 + field public static final int TIMER_STATUS_NOT_PROGRAMMED_INVALID_EXTERNAL_PLUG_NUMBER = 4; // 0x4 + field public static final int TIMER_STATUS_NOT_PROGRAMMED_INVALID_SEQUENCE = 3; // 0x3 + field public static final int TIMER_STATUS_NOT_PROGRAMMED_NO_CA_ENTITLEMENTS = 7; // 0x7 + field public static final int TIMER_STATUS_NOT_PROGRAMMED_NO_FREE_TIME = 1; // 0x1 + field public static final int TIMER_STATUS_NOT_PROGRAMMED_PARENTAL_LOCK_ON = 9; // 0x9 + field public static final int TIMER_STATUS_NOT_PROGRAMMED_UNSUPPORTED_RESOLUTION = 8; // 0x8 + field public static final int TIMER_STATUS_PROGRAMMED_INFO_ENOUGH_SPACE = 8; // 0x8 + field public static final int TIMER_STATUS_PROGRAMMED_INFO_MIGHT_NOT_ENOUGH_SPACE = 11; // 0xb + field public static final int TIMER_STATUS_PROGRAMMED_INFO_NOT_ENOUGH_SPACE = 9; // 0x9 + field public static final int TIMER_STATUS_PROGRAMMED_INFO_NO_MEDIA_INFO = 10; // 0xa + } + + public static abstract interface HdmiControlManager.HotplugEventListener { + method public abstract void onReceived(android.hardware.hdmi.HdmiHotplugEvent); + } + + public static abstract interface HdmiControlManager.VendorCommandListener { + method public abstract void onControlStateChanged(boolean, int); + method public abstract void onReceived(int, int, byte[], boolean); + } + + public class HdmiDeviceInfo implements android.os.Parcelable { + ctor public HdmiDeviceInfo(); + method public int describeContents(); + method public int getAdopterId(); + method public int getDeviceId(); + method public int getDevicePowerStatus(); + method public int getDeviceType(); + method public java.lang.String getDisplayName(); + method public int getId(); + method public int getLogicalAddress(); + method public int getPhysicalAddress(); + method public int getPortId(); + method public int getVendorId(); + method public static int idForCecDevice(int); + method public static int idForHardware(int); + method public static int idForMhlDevice(int); + method public boolean isCecDevice(); + method public boolean isInactivated(); + method public boolean isMhlDevice(); + method public boolean isSourceType(); + method public void writeToParcel(android.os.Parcel, int); + field public static final int ADDR_INTERNAL = 0; // 0x0 + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int DEVICE_AUDIO_SYSTEM = 5; // 0x5 + field public static final int DEVICE_INACTIVE = -1; // 0xffffffff + field public static final int DEVICE_PLAYBACK = 4; // 0x4 + field public static final int DEVICE_RECORDER = 1; // 0x1 + field public static final int DEVICE_RESERVED = 2; // 0x2 + field public static final int DEVICE_TUNER = 3; // 0x3 + field public static final int DEVICE_TV = 0; // 0x0 + field public static final int ID_INVALID = 65535; // 0xffff + field public static final android.hardware.hdmi.HdmiDeviceInfo INACTIVE_DEVICE; + field public static final int PATH_INTERNAL = 0; // 0x0 + field public static final int PATH_INVALID = 65535; // 0xffff + field public static final int PORT_INVALID = -1; // 0xffffffff + } + + public final class HdmiHotplugEvent implements android.os.Parcelable { + method public int describeContents(); + method public int getPort(); + method public boolean isConnected(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public final class HdmiPlaybackClient extends android.hardware.hdmi.HdmiClient { + method public int getDeviceType(); + method public void oneTouchPlay(android.hardware.hdmi.HdmiPlaybackClient.OneTouchPlayCallback); + method public void queryDisplayStatus(android.hardware.hdmi.HdmiPlaybackClient.DisplayStatusCallback); + } + + public static abstract interface HdmiPlaybackClient.DisplayStatusCallback { + method public abstract void onComplete(int); + } + + public static abstract interface HdmiPlaybackClient.OneTouchPlayCallback { + method public abstract void onComplete(int); + } + + public final class HdmiPortInfo implements android.os.Parcelable { + ctor public HdmiPortInfo(int, int, int, boolean, boolean, boolean); + method public int describeContents(); + method public int getAddress(); + method public int getId(); + method public int getType(); + method public boolean isArcSupported(); + method public boolean isCecSupported(); + method public boolean isMhlSupported(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int PORT_INPUT = 0; // 0x0 + field public static final int PORT_OUTPUT = 1; // 0x1 + } + + public abstract class HdmiRecordListener { + ctor public HdmiRecordListener(); + method public void onClearTimerRecordingResult(int, int); + method public void onOneTouchRecordResult(int, int); + method public abstract android.hardware.hdmi.HdmiRecordSources.RecordSource onOneTouchRecordSourceRequested(int); + method public void onTimerRecordingResult(int, android.hardware.hdmi.HdmiRecordListener.TimerStatusData); + } + + public static class HdmiRecordListener.TimerStatusData { + method public int getDurationHour(); + method public int getDurationMinute(); + method public int getExtraError(); + method public int getMediaInfo(); + method public int getNotProgammedError(); + method public int getProgrammedInfo(); + method public boolean isOverlapped(); + method public boolean isProgrammed(); + } + + public final class HdmiRecordSources { + method public static boolean checkRecordSource(byte[]); + method public static android.hardware.hdmi.HdmiRecordSources.OwnSource ofOwnSource(); + } + + public static final class HdmiRecordSources.AnalogueServiceSource extends android.hardware.hdmi.HdmiRecordSources.RecordSource { + } + + public static final class HdmiRecordSources.DigitalServiceSource extends android.hardware.hdmi.HdmiRecordSources.RecordSource { + } + + public static final class HdmiRecordSources.ExternalPhysicalAddress extends android.hardware.hdmi.HdmiRecordSources.RecordSource { + } + + public static final class HdmiRecordSources.ExternalPlugData extends android.hardware.hdmi.HdmiRecordSources.RecordSource { + } + + public static final class HdmiRecordSources.OwnSource extends android.hardware.hdmi.HdmiRecordSources.RecordSource { + } + + public static abstract class HdmiRecordSources.RecordSource { + } + + public class HdmiTimerRecordSources { + method public static boolean checkTimerRecordSource(int, byte[]); + method public static android.hardware.hdmi.HdmiTimerRecordSources.Duration durationOf(int, int); + method public static android.hardware.hdmi.HdmiTimerRecordSources.TimerRecordSource ofAnalogueSource(android.hardware.hdmi.HdmiTimerRecordSources.TimerInfo, android.hardware.hdmi.HdmiRecordSources.AnalogueServiceSource); + method public static android.hardware.hdmi.HdmiTimerRecordSources.TimerRecordSource ofDigitalSource(android.hardware.hdmi.HdmiTimerRecordSources.TimerInfo, android.hardware.hdmi.HdmiRecordSources.DigitalServiceSource); + method public static android.hardware.hdmi.HdmiTimerRecordSources.TimerRecordSource ofExternalPhysicalAddress(android.hardware.hdmi.HdmiTimerRecordSources.TimerInfo, android.hardware.hdmi.HdmiRecordSources.ExternalPhysicalAddress); + method public static android.hardware.hdmi.HdmiTimerRecordSources.TimerRecordSource ofExternalPlug(android.hardware.hdmi.HdmiTimerRecordSources.TimerInfo, android.hardware.hdmi.HdmiRecordSources.ExternalPlugData); + method public static android.hardware.hdmi.HdmiTimerRecordSources.Time timeOf(int, int); + method public static android.hardware.hdmi.HdmiTimerRecordSources.TimerInfo timerInfoOf(int, int, android.hardware.hdmi.HdmiTimerRecordSources.Time, android.hardware.hdmi.HdmiTimerRecordSources.Duration, int); + field public static final int RECORDING_SEQUENCE_REPEAT_FRIDAY = 32; // 0x20 + field public static final int RECORDING_SEQUENCE_REPEAT_MONDAY = 2; // 0x2 + field public static final int RECORDING_SEQUENCE_REPEAT_ONCE_ONLY = 0; // 0x0 + field public static final int RECORDING_SEQUENCE_REPEAT_SATUREDAY = 64; // 0x40 + field public static final int RECORDING_SEQUENCE_REPEAT_SUNDAY = 1; // 0x1 + field public static final int RECORDING_SEQUENCE_REPEAT_THURSDAY = 16; // 0x10 + field public static final int RECORDING_SEQUENCE_REPEAT_TUESDAY = 4; // 0x4 + field public static final int RECORDING_SEQUENCE_REPEAT_WEDNESDAY = 8; // 0x8 + } + + public static final class HdmiTimerRecordSources.Duration extends android.hardware.hdmi.HdmiTimerRecordSources.TimeUnit { + } + + public static final class HdmiTimerRecordSources.Time extends android.hardware.hdmi.HdmiTimerRecordSources.TimeUnit { + } + + static class HdmiTimerRecordSources.TimeUnit { + } + + public static final class HdmiTimerRecordSources.TimerInfo { + } + + public static final class HdmiTimerRecordSources.TimerRecordSource { + } + + public final class HdmiTvClient extends android.hardware.hdmi.HdmiClient { + method public void clearTimerRecording(int, int, android.hardware.hdmi.HdmiTimerRecordSources.TimerRecordSource); + method public void deviceSelect(int, android.hardware.hdmi.HdmiTvClient.SelectCallback); + method public java.util.List getDeviceList(); + method public int getDeviceType(); + method public void portSelect(int, android.hardware.hdmi.HdmiTvClient.SelectCallback); + method public void sendMhlVendorCommand(int, int, int, byte[]); + method public void setHdmiMhlVendorCommandListener(android.hardware.hdmi.HdmiTvClient.HdmiMhlVendorCommandListener); + method public void setInputChangeListener(android.hardware.hdmi.HdmiTvClient.InputChangeListener); + method public void setRecordListener(android.hardware.hdmi.HdmiRecordListener); + method public void setSystemAudioMute(boolean); + method public void setSystemAudioVolume(int, int, int); + method public void startOneTouchRecord(int, android.hardware.hdmi.HdmiRecordSources.RecordSource); + method public void startTimerRecording(int, int, android.hardware.hdmi.HdmiTimerRecordSources.TimerRecordSource); + method public void stopOneTouchRecord(int); + field public static final int VENDOR_DATA_SIZE = 16; // 0x10 + } + + public static abstract interface HdmiTvClient.HdmiMhlVendorCommandListener { + method public abstract void onReceived(int, int, int, byte[]); + } + + public static abstract interface HdmiTvClient.InputChangeListener { + method public abstract void onChanged(android.hardware.hdmi.HdmiDeviceInfo); + } + + public static abstract interface HdmiTvClient.SelectCallback { + method public abstract void onComplete(int); + } + +} + +package android.hardware.input { + + public final class InputManager { + method public android.view.InputDevice getInputDevice(int); + method public int[] getInputDeviceIds(); + method public void registerInputDeviceListener(android.hardware.input.InputManager.InputDeviceListener, android.os.Handler); + method public void unregisterInputDeviceListener(android.hardware.input.InputManager.InputDeviceListener); + field public static final java.lang.String ACTION_QUERY_KEYBOARD_LAYOUTS = "android.hardware.input.action.QUERY_KEYBOARD_LAYOUTS"; + field public static final java.lang.String META_DATA_KEYBOARD_LAYOUTS = "android.hardware.input.metadata.KEYBOARD_LAYOUTS"; + } + + public static abstract interface InputManager.InputDeviceListener { + method public abstract void onInputDeviceAdded(int); + method public abstract void onInputDeviceChanged(int); + method public abstract void onInputDeviceRemoved(int); + } + +} + +package android.hardware.location { + + public final class GeofenceHardware { + ctor public GeofenceHardware(android.hardware.location.IGeofenceHardware); + method public boolean addGeofence(int, int, android.hardware.location.GeofenceHardwareRequest, android.hardware.location.GeofenceHardwareCallback); + method public int[] getMonitoringTypes(); + method public int getStatusOfMonitoringType(int); + method public boolean pauseGeofence(int, int); + method public boolean registerForMonitorStateChangeCallback(int, android.hardware.location.GeofenceHardwareMonitorCallback); + method public boolean removeGeofence(int, int); + method public boolean resumeGeofence(int, int, int); + method public boolean unregisterForMonitorStateChangeCallback(int, android.hardware.location.GeofenceHardwareMonitorCallback); + field public static final int GEOFENCE_ENTERED = 1; // 0x1 + field public static final int GEOFENCE_ERROR_ID_EXISTS = 2; // 0x2 + field public static final int GEOFENCE_ERROR_ID_UNKNOWN = 3; // 0x3 + field public static final int GEOFENCE_ERROR_INSUFFICIENT_MEMORY = 6; // 0x6 + field public static final int GEOFENCE_ERROR_INVALID_TRANSITION = 4; // 0x4 + field public static final int GEOFENCE_ERROR_TOO_MANY_GEOFENCES = 1; // 0x1 + field public static final int GEOFENCE_EXITED = 2; // 0x2 + field public static final int GEOFENCE_FAILURE = 5; // 0x5 + field public static final int GEOFENCE_SUCCESS = 0; // 0x0 + field public static final int GEOFENCE_UNCERTAIN = 4; // 0x4 + field public static final int MONITORING_TYPE_FUSED_HARDWARE = 1; // 0x1 + field public static final int MONITORING_TYPE_GPS_HARDWARE = 0; // 0x0 + field public static final int MONITOR_CURRENTLY_AVAILABLE = 0; // 0x0 + field public static final int MONITOR_CURRENTLY_UNAVAILABLE = 1; // 0x1 + field public static final int MONITOR_UNSUPPORTED = 2; // 0x2 + field public static final int SOURCE_TECHNOLOGY_BLUETOOTH = 16; // 0x10 + field public static final int SOURCE_TECHNOLOGY_CELL = 8; // 0x8 + field public static final int SOURCE_TECHNOLOGY_GNSS = 1; // 0x1 + field public static final int SOURCE_TECHNOLOGY_SENSORS = 4; // 0x4 + field public static final int SOURCE_TECHNOLOGY_WIFI = 2; // 0x2 + } + + public abstract class GeofenceHardwareCallback { + ctor public GeofenceHardwareCallback(); + method public void onGeofenceAdd(int, int); + method public void onGeofencePause(int, int); + method public void onGeofenceRemove(int, int); + method public void onGeofenceResume(int, int); + method public void onGeofenceTransition(int, int, android.location.Location, long, int); + } + + public abstract class GeofenceHardwareMonitorCallback { + ctor public GeofenceHardwareMonitorCallback(); + method public deprecated void onMonitoringSystemChange(int, boolean, android.location.Location); + method public void onMonitoringSystemChange(android.hardware.location.GeofenceHardwareMonitorEvent); + } + + public class GeofenceHardwareMonitorEvent implements android.os.Parcelable { + ctor public GeofenceHardwareMonitorEvent(int, int, int, android.location.Location); + method public int describeContents(); + method public android.location.Location getLocation(); + method public int getMonitoringStatus(); + method public int getMonitoringType(); + method public int getSourceTechnologies(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public final class GeofenceHardwareRequest { + ctor public GeofenceHardwareRequest(); + method public static android.hardware.location.GeofenceHardwareRequest createCircularGeofence(double, double, double); + method public int getLastTransition(); + method public double getLatitude(); + method public double getLongitude(); + method public int getMonitorTransitions(); + method public int getNotificationResponsiveness(); + method public double getRadius(); + method public int getSourceTechnologies(); + method public int getUnknownTimer(); + method public void setLastTransition(int); + method public void setMonitorTransitions(int); + method public void setNotificationResponsiveness(int); + method public void setSourceTechnologies(int); + method public void setUnknownTimer(int); + } + + public final class GeofenceHardwareRequestParcelable implements android.os.Parcelable { + ctor public GeofenceHardwareRequestParcelable(int, android.hardware.location.GeofenceHardwareRequest); + method public int describeContents(); + method public int getId(); + method public int getLastTransition(); + method public double getLatitude(); + method public double getLongitude(); + method public int getMonitorTransitions(); + method public int getNotificationResponsiveness(); + method public double getRadius(); + method public int getUnknownTimer(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public abstract interface IGeofenceHardware implements android.os.IInterface { + method public abstract boolean addCircularFence(int, android.hardware.location.GeofenceHardwareRequestParcelable, android.hardware.location.IGeofenceHardwareCallback) throws android.os.RemoteException; + method public abstract int[] getMonitoringTypes() throws android.os.RemoteException; + method public abstract int getStatusOfMonitoringType(int) throws android.os.RemoteException; + method public abstract boolean pauseGeofence(int, int) throws android.os.RemoteException; + method public abstract boolean registerForMonitorStateChangeCallback(int, android.hardware.location.IGeofenceHardwareMonitorCallback) throws android.os.RemoteException; + method public abstract boolean removeGeofence(int, int) throws android.os.RemoteException; + method public abstract boolean resumeGeofence(int, int, int) throws android.os.RemoteException; + method public abstract void setFusedGeofenceHardware(android.location.IFusedGeofenceHardware) throws android.os.RemoteException; + method public abstract void setGpsGeofenceHardware(android.location.IGpsGeofenceHardware) throws android.os.RemoteException; + method public abstract boolean unregisterForMonitorStateChangeCallback(int, android.hardware.location.IGeofenceHardwareMonitorCallback) throws android.os.RemoteException; + } + + public abstract interface IGeofenceHardwareCallback implements android.os.IInterface { + method public abstract void onGeofenceAdd(int, int) throws android.os.RemoteException; + method public abstract void onGeofencePause(int, int) throws android.os.RemoteException; + method public abstract void onGeofenceRemove(int, int) throws android.os.RemoteException; + method public abstract void onGeofenceResume(int, int) throws android.os.RemoteException; + method public abstract void onGeofenceTransition(int, int, android.location.Location, long, int) throws android.os.RemoteException; + } + + public abstract interface IGeofenceHardwareMonitorCallback implements android.os.IInterface { + method public abstract void onMonitoringSystemChange(android.hardware.location.GeofenceHardwareMonitorEvent) throws android.os.RemoteException; + } + +} + +package android.hardware.usb { + + public class UsbAccessory implements android.os.Parcelable { + method public int describeContents(); + method public java.lang.String getDescription(); + method public java.lang.String getManufacturer(); + method public java.lang.String getModel(); + method public java.lang.String getSerial(); + method public java.lang.String getUri(); + method public java.lang.String getVersion(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public class UsbConfiguration implements android.os.Parcelable { + method public int describeContents(); + method public int getId(); + method public android.hardware.usb.UsbInterface getInterface(int); + method public int getInterfaceCount(); + method public int getMaxPower(); + method public java.lang.String getName(); + method public boolean isRemoteWakeup(); + method public boolean isSelfPowered(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public final class UsbConstants { + ctor public UsbConstants(); + field public static final int USB_CLASS_APP_SPEC = 254; // 0xfe + field public static final int USB_CLASS_AUDIO = 1; // 0x1 + field public static final int USB_CLASS_CDC_DATA = 10; // 0xa + field public static final int USB_CLASS_COMM = 2; // 0x2 + field public static final int USB_CLASS_CONTENT_SEC = 13; // 0xd + field public static final int USB_CLASS_CSCID = 11; // 0xb + field public static final int USB_CLASS_HID = 3; // 0x3 + field public static final int USB_CLASS_HUB = 9; // 0x9 + field public static final int USB_CLASS_MASS_STORAGE = 8; // 0x8 + field public static final int USB_CLASS_MISC = 239; // 0xef + field public static final int USB_CLASS_PER_INTERFACE = 0; // 0x0 + field public static final int USB_CLASS_PHYSICA = 5; // 0x5 + field public static final int USB_CLASS_PRINTER = 7; // 0x7 + field public static final int USB_CLASS_STILL_IMAGE = 6; // 0x6 + field public static final int USB_CLASS_VENDOR_SPEC = 255; // 0xff + field public static final int USB_CLASS_VIDEO = 14; // 0xe + field public static final int USB_CLASS_WIRELESS_CONTROLLER = 224; // 0xe0 + field public static final int USB_DIR_IN = 128; // 0x80 + field public static final int USB_DIR_OUT = 0; // 0x0 + field public static final int USB_ENDPOINT_DIR_MASK = 128; // 0x80 + field public static final int USB_ENDPOINT_NUMBER_MASK = 15; // 0xf + field public static final int USB_ENDPOINT_XFERTYPE_MASK = 3; // 0x3 + field public static final int USB_ENDPOINT_XFER_BULK = 2; // 0x2 + field public static final int USB_ENDPOINT_XFER_CONTROL = 0; // 0x0 + field public static final int USB_ENDPOINT_XFER_INT = 3; // 0x3 + field public static final int USB_ENDPOINT_XFER_ISOC = 1; // 0x1 + field public static final int USB_INTERFACE_SUBCLASS_BOOT = 1; // 0x1 + field public static final int USB_SUBCLASS_VENDOR_SPEC = 255; // 0xff + field public static final int USB_TYPE_CLASS = 32; // 0x20 + field public static final int USB_TYPE_MASK = 96; // 0x60 + field public static final int USB_TYPE_RESERVED = 96; // 0x60 + field public static final int USB_TYPE_STANDARD = 0; // 0x0 + field public static final int USB_TYPE_VENDOR = 64; // 0x40 + } + + public class UsbDevice implements android.os.Parcelable { + method public int describeContents(); + method public android.hardware.usb.UsbConfiguration getConfiguration(int); + method public int getConfigurationCount(); + method public int getDeviceClass(); + method public int getDeviceId(); + method public static int getDeviceId(java.lang.String); + method public java.lang.String getDeviceName(); + method public static java.lang.String getDeviceName(int); + method public int getDeviceProtocol(); + method public int getDeviceSubclass(); + method public android.hardware.usb.UsbInterface getInterface(int); + method public int getInterfaceCount(); + method public java.lang.String getManufacturerName(); + method public int getProductId(); + method public java.lang.String getProductName(); + method public java.lang.String getSerialNumber(); + method public int getVendorId(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public class UsbDeviceConnection { + method public int bulkTransfer(android.hardware.usb.UsbEndpoint, byte[], int, int); + method public int bulkTransfer(android.hardware.usb.UsbEndpoint, byte[], int, int, int); + method public boolean claimInterface(android.hardware.usb.UsbInterface, boolean); + method public void close(); + method public int controlTransfer(int, int, int, int, byte[], int, int); + method public int controlTransfer(int, int, int, int, byte[], int, int, int); + method public int getFileDescriptor(); + method public byte[] getRawDescriptors(); + method public java.lang.String getSerial(); + method public boolean releaseInterface(android.hardware.usb.UsbInterface); + method public android.hardware.usb.UsbRequest requestWait(); + method public boolean setConfiguration(android.hardware.usb.UsbConfiguration); + method public boolean setInterface(android.hardware.usb.UsbInterface); + } + + public class UsbEndpoint implements android.os.Parcelable { + method public int describeContents(); + method public int getAddress(); + method public int getAttributes(); + method public int getDirection(); + method public int getEndpointNumber(); + method public int getInterval(); + method public int getMaxPacketSize(); + method public int getType(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public class UsbInterface implements android.os.Parcelable { + method public int describeContents(); + method public int getAlternateSetting(); + method public android.hardware.usb.UsbEndpoint getEndpoint(int); + method public int getEndpointCount(); + method public int getId(); + method public int getInterfaceClass(); + method public int getInterfaceProtocol(); + method public int getInterfaceSubclass(); + method public java.lang.String getName(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public class UsbManager { + method public android.hardware.usb.UsbAccessory[] getAccessoryList(); + method public java.util.HashMap getDeviceList(); + method public boolean hasPermission(android.hardware.usb.UsbDevice); + method public boolean hasPermission(android.hardware.usb.UsbAccessory); + method public android.os.ParcelFileDescriptor openAccessory(android.hardware.usb.UsbAccessory); + method public android.hardware.usb.UsbDeviceConnection openDevice(android.hardware.usb.UsbDevice); + method public void requestPermission(android.hardware.usb.UsbDevice, android.app.PendingIntent); + method public void requestPermission(android.hardware.usb.UsbAccessory, android.app.PendingIntent); + field public static final java.lang.String ACTION_USB_ACCESSORY_ATTACHED = "android.hardware.usb.action.USB_ACCESSORY_ATTACHED"; + field public static final java.lang.String ACTION_USB_ACCESSORY_DETACHED = "android.hardware.usb.action.USB_ACCESSORY_DETACHED"; + field public static final java.lang.String ACTION_USB_DEVICE_ATTACHED = "android.hardware.usb.action.USB_DEVICE_ATTACHED"; + field public static final java.lang.String ACTION_USB_DEVICE_DETACHED = "android.hardware.usb.action.USB_DEVICE_DETACHED"; + field public static final java.lang.String EXTRA_ACCESSORY = "accessory"; + field public static final java.lang.String EXTRA_DEVICE = "device"; + field public static final java.lang.String EXTRA_PERMISSION_GRANTED = "permission"; + } + + public class UsbRequest { + ctor public UsbRequest(); + method public boolean cancel(); + method public void close(); + method public java.lang.Object getClientData(); + method public android.hardware.usb.UsbEndpoint getEndpoint(); + method public boolean initialize(android.hardware.usb.UsbDeviceConnection, android.hardware.usb.UsbEndpoint); + method public boolean queue(java.nio.ByteBuffer, int); + method public void setClientData(java.lang.Object); + } + +} + +package android.inputmethodservice { + + public abstract class AbstractInputMethodService extends android.app.Service implements android.view.KeyEvent.Callback { + ctor public AbstractInputMethodService(); + method public android.view.KeyEvent.DispatcherState getKeyDispatcherState(); + method public final android.os.IBinder onBind(android.content.Intent); + method public abstract android.inputmethodservice.AbstractInputMethodService.AbstractInputMethodImpl onCreateInputMethodInterface(); + method public abstract android.inputmethodservice.AbstractInputMethodService.AbstractInputMethodSessionImpl onCreateInputMethodSessionInterface(); + method public boolean onGenericMotionEvent(android.view.MotionEvent); + method public boolean onTrackballEvent(android.view.MotionEvent); + } + + public abstract class AbstractInputMethodService.AbstractInputMethodImpl implements android.view.inputmethod.InputMethod { + ctor public AbstractInputMethodService.AbstractInputMethodImpl(); + method public void createSession(android.view.inputmethod.InputMethod.SessionCallback); + method public void revokeSession(android.view.inputmethod.InputMethodSession); + method public void setSessionEnabled(android.view.inputmethod.InputMethodSession, boolean); + } + + public abstract class AbstractInputMethodService.AbstractInputMethodSessionImpl implements android.view.inputmethod.InputMethodSession { + ctor public AbstractInputMethodService.AbstractInputMethodSessionImpl(); + method public void dispatchGenericMotionEvent(int, android.view.MotionEvent, android.view.inputmethod.InputMethodSession.EventCallback); + method public void dispatchKeyEvent(int, android.view.KeyEvent, android.view.inputmethod.InputMethodSession.EventCallback); + method public void dispatchTrackballEvent(int, android.view.MotionEvent, android.view.inputmethod.InputMethodSession.EventCallback); + method public boolean isEnabled(); + method public boolean isRevoked(); + method public void revokeSelf(); + method public void setEnabled(boolean); + } + + public class ExtractEditText extends android.widget.EditText { + ctor public ExtractEditText(android.content.Context); + ctor public ExtractEditText(android.content.Context, android.util.AttributeSet); + ctor public ExtractEditText(android.content.Context, android.util.AttributeSet, int); + ctor public ExtractEditText(android.content.Context, android.util.AttributeSet, int, int); + method public void finishInternalChanges(); + method public boolean hasVerticalScrollBar(); + method public void startInternalChanges(); + } + + public class InputMethodService extends android.inputmethodservice.AbstractInputMethodService { + ctor public InputMethodService(); + method public deprecated boolean enableHardwareAcceleration(); + method public int getBackDisposition(); + method public int getCandidatesHiddenVisibility(); + method public android.view.inputmethod.InputBinding getCurrentInputBinding(); + method public android.view.inputmethod.InputConnection getCurrentInputConnection(); + method public android.view.inputmethod.EditorInfo getCurrentInputEditorInfo(); + method public boolean getCurrentInputStarted(); + method public int getInputMethodWindowRecommendedHeight(); + method public android.view.LayoutInflater getLayoutInflater(); + method public int getMaxWidth(); + method public java.lang.CharSequence getTextForImeAction(int); + method public android.app.Dialog getWindow(); + method public void hideStatusIcon(); + method public void hideWindow(); + method public boolean isExtractViewShown(); + method public boolean isFullscreenMode(); + method public boolean isInputViewShown(); + method public boolean isShowInputRequested(); + method public void onAppPrivateCommand(java.lang.String, android.os.Bundle); + method public void onBindInput(); + method public void onComputeInsets(android.inputmethodservice.InputMethodService.Insets); + method public void onConfigureWindow(android.view.Window, boolean, boolean); + method public android.view.View onCreateCandidatesView(); + method public android.view.View onCreateExtractTextView(); + method public android.inputmethodservice.AbstractInputMethodService.AbstractInputMethodImpl onCreateInputMethodInterface(); + method public android.inputmethodservice.AbstractInputMethodService.AbstractInputMethodSessionImpl onCreateInputMethodSessionInterface(); + method public android.view.View onCreateInputView(); + method protected void onCurrentInputMethodSubtypeChanged(android.view.inputmethod.InputMethodSubtype); + method public void onDisplayCompletions(android.view.inputmethod.CompletionInfo[]); + method public boolean onEvaluateFullscreenMode(); + method public boolean onEvaluateInputViewShown(); + method public boolean onExtractTextContextMenuItem(int); + method public void onExtractedCursorMovement(int, int); + method public void onExtractedSelectionChanged(int, int); + method public void onExtractedTextClicked(); + method public void onExtractingInputChanged(android.view.inputmethod.EditorInfo); + method public void onFinishCandidatesView(boolean); + method public void onFinishInput(); + method public void onFinishInputView(boolean); + method public void onInitializeInterface(); + method public boolean onKeyDown(int, android.view.KeyEvent); + method public boolean onKeyLongPress(int, android.view.KeyEvent); + method public boolean onKeyMultiple(int, int, android.view.KeyEvent); + method public boolean onKeyUp(int, android.view.KeyEvent); + method public boolean onShowInputRequested(int, boolean); + method public void onStartCandidatesView(android.view.inputmethod.EditorInfo, boolean); + method public void onStartInput(android.view.inputmethod.EditorInfo, boolean); + method public void onStartInputView(android.view.inputmethod.EditorInfo, boolean); + method public void onUnbindInput(); + method public deprecated void onUpdateCursor(android.graphics.Rect); + method public void onUpdateCursorAnchorInfo(android.view.inputmethod.CursorAnchorInfo); + method public void onUpdateExtractedText(int, android.view.inputmethod.ExtractedText); + method public void onUpdateExtractingViews(android.view.inputmethod.EditorInfo); + method public void onUpdateExtractingVisibility(android.view.inputmethod.EditorInfo); + method public void onUpdateSelection(int, int, int, int, int, int); + method public void onViewClicked(boolean); + method public void onWindowHidden(); + method public void onWindowShown(); + method public void requestHideSelf(int); + method public boolean sendDefaultEditorAction(boolean); + method public void sendDownUpKeyEvents(int); + method public void sendKeyChar(char); + method public void setBackDisposition(int); + method public void setCandidatesView(android.view.View); + method public void setCandidatesViewShown(boolean); + method public void setExtractView(android.view.View); + method public void setExtractViewShown(boolean); + method public void setInputView(android.view.View); + method public void showStatusIcon(int); + method public void showWindow(boolean); + method public void switchInputMethod(java.lang.String); + method public void updateFullscreenMode(); + method public void updateInputViewShown(); + field public static final int BACK_DISPOSITION_DEFAULT = 0; // 0x0 + field public static final int BACK_DISPOSITION_WILL_DISMISS = 2; // 0x2 + field public static final int BACK_DISPOSITION_WILL_NOT_DISMISS = 1; // 0x1 + } + + public class InputMethodService.InputMethodImpl extends android.inputmethodservice.AbstractInputMethodService.AbstractInputMethodImpl { + ctor public InputMethodService.InputMethodImpl(); + method public void attachToken(android.os.IBinder); + method public void bindInput(android.view.inputmethod.InputBinding); + method public void changeInputMethodSubtype(android.view.inputmethod.InputMethodSubtype); + method public void hideSoftInput(int, android.os.ResultReceiver); + method public void restartInput(android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo); + method public void showSoftInput(int, android.os.ResultReceiver); + method public void startInput(android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo); + method public void unbindInput(); + } + + public class InputMethodService.InputMethodSessionImpl extends android.inputmethodservice.AbstractInputMethodService.AbstractInputMethodSessionImpl { + ctor public InputMethodService.InputMethodSessionImpl(); + method public void appPrivateCommand(java.lang.String, android.os.Bundle); + method public void displayCompletions(android.view.inputmethod.CompletionInfo[]); + method public void finishInput(); + method public void toggleSoftInput(int, int); + method public void updateCursor(android.graphics.Rect); + method public void updateCursorAnchorInfo(android.view.inputmethod.CursorAnchorInfo); + method public void updateExtractedText(int, android.view.inputmethod.ExtractedText); + method public void updateSelection(int, int, int, int, int, int); + method public void viewClicked(boolean); + } + + public static final class InputMethodService.Insets { + ctor public InputMethodService.Insets(); + field public static final int TOUCHABLE_INSETS_CONTENT = 1; // 0x1 + field public static final int TOUCHABLE_INSETS_FRAME = 0; // 0x0 + field public static final int TOUCHABLE_INSETS_REGION = 3; // 0x3 + field public static final int TOUCHABLE_INSETS_VISIBLE = 2; // 0x2 + field public int contentTopInsets; + field public int touchableInsets; + field public final android.graphics.Region touchableRegion; + field public int visibleTopInsets; + } + + public class Keyboard { + ctor public Keyboard(android.content.Context, int); + ctor public Keyboard(android.content.Context, int, int, int, int); + ctor public Keyboard(android.content.Context, int, int); + ctor public Keyboard(android.content.Context, int, java.lang.CharSequence, int, int); + method protected android.inputmethodservice.Keyboard.Key createKeyFromXml(android.content.res.Resources, android.inputmethodservice.Keyboard.Row, int, int, android.content.res.XmlResourceParser); + method protected android.inputmethodservice.Keyboard.Row createRowFromXml(android.content.res.Resources, android.content.res.XmlResourceParser); + method public int getHeight(); + method protected int getHorizontalGap(); + method protected int getKeyHeight(); + method protected int getKeyWidth(); + method public java.util.List getKeys(); + method public int getMinWidth(); + method public java.util.List getModifierKeys(); + method public int[] getNearestKeys(int, int); + method public int getShiftKeyIndex(); + method protected int getVerticalGap(); + method public boolean isShifted(); + method protected void setHorizontalGap(int); + method protected void setKeyHeight(int); + method protected void setKeyWidth(int); + method public boolean setShifted(boolean); + method protected void setVerticalGap(int); + field public static final int EDGE_BOTTOM = 8; // 0x8 + field public static final int EDGE_LEFT = 1; // 0x1 + field public static final int EDGE_RIGHT = 2; // 0x2 + field public static final int EDGE_TOP = 4; // 0x4 + field public static final int KEYCODE_ALT = -6; // 0xfffffffa + field public static final int KEYCODE_CANCEL = -3; // 0xfffffffd + field public static final int KEYCODE_DELETE = -5; // 0xfffffffb + field public static final int KEYCODE_DONE = -4; // 0xfffffffc + field public static final int KEYCODE_MODE_CHANGE = -2; // 0xfffffffe + field public static final int KEYCODE_SHIFT = -1; // 0xffffffff + } + + public static class Keyboard.Key { + ctor public Keyboard.Key(android.inputmethodservice.Keyboard.Row); + ctor public Keyboard.Key(android.content.res.Resources, android.inputmethodservice.Keyboard.Row, int, int, android.content.res.XmlResourceParser); + method public int[] getCurrentDrawableState(); + method public boolean isInside(int, int); + method public void onPressed(); + method public void onReleased(boolean); + method public int squaredDistanceFrom(int, int); + field public int[] codes; + field public int edgeFlags; + field public int gap; + field public int height; + field public android.graphics.drawable.Drawable icon; + field public android.graphics.drawable.Drawable iconPreview; + field public java.lang.CharSequence label; + field public boolean modifier; + field public boolean on; + field public java.lang.CharSequence popupCharacters; + field public int popupResId; + field public boolean pressed; + field public boolean repeatable; + field public boolean sticky; + field public java.lang.CharSequence text; + field public int width; + field public int x; + field public int y; + } + + public static class Keyboard.Row { + ctor public Keyboard.Row(android.inputmethodservice.Keyboard); + ctor public Keyboard.Row(android.content.res.Resources, android.inputmethodservice.Keyboard, android.content.res.XmlResourceParser); + field public int defaultHeight; + field public int defaultHorizontalGap; + field public int defaultWidth; + field public int mode; + field public int rowEdgeFlags; + field public int verticalGap; + } + + public class KeyboardView extends android.view.View implements android.view.View.OnClickListener { + ctor public KeyboardView(android.content.Context, android.util.AttributeSet); + ctor public KeyboardView(android.content.Context, android.util.AttributeSet, int); + ctor public KeyboardView(android.content.Context, android.util.AttributeSet, int, int); + method public void closing(); + method public android.inputmethodservice.Keyboard getKeyboard(); + method protected android.inputmethodservice.KeyboardView.OnKeyboardActionListener getOnKeyboardActionListener(); + method public boolean handleBack(); + method public void invalidateAllKeys(); + method public void invalidateKey(int); + method public boolean isPreviewEnabled(); + method public boolean isProximityCorrectionEnabled(); + method public boolean isShifted(); + method public void onClick(android.view.View); + method public void onDetachedFromWindow(); + method public void onDraw(android.graphics.Canvas); + method protected boolean onLongPress(android.inputmethodservice.Keyboard.Key); + method public void onMeasure(int, int); + method public void onSizeChanged(int, int, int, int); + method public void setKeyboard(android.inputmethodservice.Keyboard); + method public void setOnKeyboardActionListener(android.inputmethodservice.KeyboardView.OnKeyboardActionListener); + method public void setPopupOffset(int, int); + method public void setPopupParent(android.view.View); + method public void setPreviewEnabled(boolean); + method public void setProximityCorrectionEnabled(boolean); + method public boolean setShifted(boolean); + method public void setVerticalCorrection(int); + method protected void swipeDown(); + method protected void swipeLeft(); + method protected void swipeRight(); + method protected void swipeUp(); + } + + public static abstract interface KeyboardView.OnKeyboardActionListener { + method public abstract void onKey(int, int[]); + method public abstract void onPress(int); + method public abstract void onRelease(int); + method public abstract void onText(java.lang.CharSequence); + method public abstract void swipeDown(); + method public abstract void swipeLeft(); + method public abstract void swipeRight(); + method public abstract void swipeUp(); + } + +} + +package android.location { + + public class Address implements android.os.Parcelable { + ctor public Address(java.util.Locale); + method public void clearLatitude(); + method public void clearLongitude(); + method public int describeContents(); + method public java.lang.String getAddressLine(int); + method public java.lang.String getAdminArea(); + method public java.lang.String getCountryCode(); + method public java.lang.String getCountryName(); + method public android.os.Bundle getExtras(); + method public java.lang.String getFeatureName(); + method public double getLatitude(); + method public java.util.Locale getLocale(); + method public java.lang.String getLocality(); + method public double getLongitude(); + method public int getMaxAddressLineIndex(); + method public java.lang.String getPhone(); + method public java.lang.String getPostalCode(); + method public java.lang.String getPremises(); + method public java.lang.String getSubAdminArea(); + method public java.lang.String getSubLocality(); + method public java.lang.String getSubThoroughfare(); + method public java.lang.String getThoroughfare(); + method public java.lang.String getUrl(); + method public boolean hasLatitude(); + method public boolean hasLongitude(); + method public void setAddressLine(int, java.lang.String); + method public void setAdminArea(java.lang.String); + method public void setCountryCode(java.lang.String); + method public void setCountryName(java.lang.String); + method public void setExtras(android.os.Bundle); + method public void setFeatureName(java.lang.String); + method public void setLatitude(double); + method public void setLocality(java.lang.String); + method public void setLongitude(double); + method public void setPhone(java.lang.String); + method public void setPostalCode(java.lang.String); + method public void setPremises(java.lang.String); + method public void setSubAdminArea(java.lang.String); + method public void setSubLocality(java.lang.String); + method public void setSubThoroughfare(java.lang.String); + method public void setThoroughfare(java.lang.String); + method public void setUrl(java.lang.String); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public class Criteria implements android.os.Parcelable { + ctor public Criteria(); + ctor public Criteria(android.location.Criteria); + method public int describeContents(); + method public int getAccuracy(); + method public int getBearingAccuracy(); + method public int getHorizontalAccuracy(); + method public int getPowerRequirement(); + method public int getSpeedAccuracy(); + method public int getVerticalAccuracy(); + method public boolean isAltitudeRequired(); + method public boolean isBearingRequired(); + method public boolean isCostAllowed(); + method public boolean isSpeedRequired(); + method public void setAccuracy(int); + method public void setAltitudeRequired(boolean); + method public void setBearingAccuracy(int); + method public void setBearingRequired(boolean); + method public void setCostAllowed(boolean); + method public void setHorizontalAccuracy(int); + method public void setPowerRequirement(int); + method public void setSpeedAccuracy(int); + method public void setSpeedRequired(boolean); + method public void setVerticalAccuracy(int); + method public void writeToParcel(android.os.Parcel, int); + field public static final int ACCURACY_COARSE = 2; // 0x2 + field public static final int ACCURACY_FINE = 1; // 0x1 + field public static final int ACCURACY_HIGH = 3; // 0x3 + field public static final int ACCURACY_LOW = 1; // 0x1 + field public static final int ACCURACY_MEDIUM = 2; // 0x2 + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int NO_REQUIREMENT = 0; // 0x0 + field public static final int POWER_HIGH = 3; // 0x3 + field public static final int POWER_LOW = 1; // 0x1 + field public static final int POWER_MEDIUM = 2; // 0x2 + } + + public final class Geocoder { + ctor public Geocoder(android.content.Context, java.util.Locale); + ctor public Geocoder(android.content.Context); + method public java.util.List getFromLocation(double, double, int) throws java.io.IOException; + method public java.util.List getFromLocationName(java.lang.String, int) throws java.io.IOException; + method public java.util.List getFromLocationName(java.lang.String, int, double, double, double, double) throws java.io.IOException; + method public static boolean isPresent(); + } + + public class GpsClock implements android.os.Parcelable { + method public int describeContents(); + method public double getBiasInNs(); + method public double getBiasUncertaintyInNs(); + method public double getDriftInNsPerSec(); + method public double getDriftUncertaintyInNsPerSec(); + method public long getFullBiasInNs(); + method public short getLeapSecond(); + method public long getTimeInNs(); + method public double getTimeUncertaintyInNs(); + method public byte getType(); + method public boolean hasBiasInNs(); + method public boolean hasBiasUncertaintyInNs(); + method public boolean hasDriftInNsPerSec(); + method public boolean hasDriftUncertaintyInNsPerSec(); + method public boolean hasFullBiasInNs(); + method public boolean hasLeapSecond(); + method public boolean hasTimeUncertaintyInNs(); + method public void reset(); + method public void resetBiasInNs(); + method public void resetBiasUncertaintyInNs(); + method public void resetDriftInNsPerSec(); + method public void resetDriftUncertaintyInNsPerSec(); + method public void resetFullBiasInNs(); + method public void resetLeapSecond(); + method public void resetTimeUncertaintyInNs(); + method public void set(android.location.GpsClock); + method public void setBiasInNs(double); + method public void setBiasUncertaintyInNs(double); + method public void setDriftInNsPerSec(double); + method public void setDriftUncertaintyInNsPerSec(double); + method public void setFullBiasInNs(long); + method public void setLeapSecond(short); + method public void setTimeInNs(long); + method public void setTimeUncertaintyInNs(double); + method public void setType(byte); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final byte TYPE_GPS_TIME = 2; // 0x2 + field public static final byte TYPE_LOCAL_HW_TIME = 1; // 0x1 + field public static final byte TYPE_UNKNOWN = 0; // 0x0 + } + + public class GpsMeasurement implements android.os.Parcelable { + method public int describeContents(); + method public double getAccumulatedDeltaRangeInMeters(); + method public short getAccumulatedDeltaRangeState(); + method public double getAccumulatedDeltaRangeUncertaintyInMeters(); + method public double getAzimuthInDeg(); + method public double getAzimuthUncertaintyInDeg(); + method public int getBitNumber(); + method public long getCarrierCycles(); + method public float getCarrierFrequencyInHz(); + method public double getCarrierPhase(); + method public double getCarrierPhaseUncertainty(); + method public double getCn0InDbHz(); + method public double getCodePhaseInChips(); + method public double getCodePhaseUncertaintyInChips(); + method public double getDopplerShiftInHz(); + method public double getDopplerShiftUncertaintyInHz(); + method public double getElevationInDeg(); + method public double getElevationUncertaintyInDeg(); + method public byte getLossOfLock(); + method public byte getMultipathIndicator(); + method public byte getPrn(); + method public double getPseudorangeInMeters(); + method public double getPseudorangeRateInMetersPerSec(); + method public double getPseudorangeRateUncertaintyInMetersPerSec(); + method public double getPseudorangeUncertaintyInMeters(); + method public long getReceivedGpsTowInNs(); + method public long getReceivedGpsTowUncertaintyInNs(); + method public double getSnrInDb(); + method public short getState(); + method public short getTimeFromLastBitInMs(); + method public double getTimeOffsetInNs(); + method public boolean hasAzimuthInDeg(); + method public boolean hasAzimuthUncertaintyInDeg(); + method public boolean hasBitNumber(); + method public boolean hasCarrierCycles(); + method public boolean hasCarrierFrequencyInHz(); + method public boolean hasCarrierPhase(); + method public boolean hasCarrierPhaseUncertainty(); + method public boolean hasCodePhaseInChips(); + method public boolean hasCodePhaseUncertaintyInChips(); + method public boolean hasDopplerShiftInHz(); + method public boolean hasDopplerShiftUncertaintyInHz(); + method public boolean hasElevationInDeg(); + method public boolean hasElevationUncertaintyInDeg(); + method public boolean hasPseudorangeInMeters(); + method public boolean hasPseudorangeUncertaintyInMeters(); + method public boolean hasSnrInDb(); + method public boolean hasTimeFromLastBitInMs(); + method public boolean isUsedInFix(); + method public void reset(); + method public void resetAzimuthInDeg(); + method public void resetAzimuthUncertaintyInDeg(); + method public void resetBitNumber(); + method public void resetCarrierCycles(); + method public void resetCarrierFrequencyInHz(); + method public void resetCarrierPhase(); + method public void resetCarrierPhaseUncertainty(); + method public void resetCodePhaseInChips(); + method public void resetCodePhaseUncertaintyInChips(); + method public void resetDopplerShiftInHz(); + method public void resetDopplerShiftUncertaintyInHz(); + method public void resetElevationInDeg(); + method public void resetElevationUncertaintyInDeg(); + method public void resetPseudorangeInMeters(); + method public void resetPseudorangeUncertaintyInMeters(); + method public void resetSnrInDb(); + method public void resetTimeFromLastBitInMs(); + method public void set(android.location.GpsMeasurement); + method public void setAccumulatedDeltaRangeInMeters(double); + method public void setAccumulatedDeltaRangeState(short); + method public void setAccumulatedDeltaRangeUncertaintyInMeters(double); + method public void setAzimuthInDeg(double); + method public void setAzimuthUncertaintyInDeg(double); + method public void setBitNumber(int); + method public void setCarrierCycles(long); + method public void setCarrierFrequencyInHz(float); + method public void setCarrierPhase(double); + method public void setCarrierPhaseUncertainty(double); + method public void setCn0InDbHz(double); + method public void setCodePhaseInChips(double); + method public void setCodePhaseUncertaintyInChips(double); + method public void setDopplerShiftInHz(double); + method public void setDopplerShiftUncertaintyInHz(double); + method public void setElevationInDeg(double); + method public void setElevationUncertaintyInDeg(double); + method public void setLossOfLock(byte); + method public void setMultipathIndicator(byte); + method public void setPrn(byte); + method public void setPseudorangeInMeters(double); + method public void setPseudorangeRateInMetersPerSec(double); + method public void setPseudorangeRateUncertaintyInMetersPerSec(double); + method public void setPseudorangeUncertaintyInMeters(double); + method public void setReceivedGpsTowInNs(long); + method public void setReceivedGpsTowUncertaintyInNs(long); + method public void setSnrInDb(double); + method public void setState(short); + method public void setTimeFromLastBitInMs(short); + method public void setTimeOffsetInNs(double); + method public void setUsedInFix(boolean); + method public void writeToParcel(android.os.Parcel, int); + field public static final short ADR_STATE_CYCLE_SLIP = 4; // 0x4 + field public static final short ADR_STATE_RESET = 2; // 0x2 + field public static final short ADR_STATE_UNKNOWN = 0; // 0x0 + field public static final short ADR_STATE_VALID = 1; // 0x1 + field public static final android.os.Parcelable.Creator CREATOR; + field public static final byte LOSS_OF_LOCK_CYCLE_SLIP = 2; // 0x2 + field public static final byte LOSS_OF_LOCK_OK = 1; // 0x1 + field public static final byte LOSS_OF_LOCK_UNKNOWN = 0; // 0x0 + field public static final byte MULTIPATH_INDICATOR_DETECTED = 1; // 0x1 + field public static final byte MULTIPATH_INDICATOR_NOT_USED = 2; // 0x2 + field public static final byte MULTIPATH_INDICATOR_UNKNOWN = 0; // 0x0 + field public static final short STATE_BIT_SYNC = 2; // 0x2 + field public static final short STATE_CODE_LOCK = 1; // 0x1 + field public static final short STATE_SUBFRAME_SYNC = 4; // 0x4 + field public static final short STATE_TOW_DECODED = 8; // 0x8 + field public static final short STATE_UNKNOWN = 0; // 0x0 + } + + public class GpsMeasurementsEvent implements android.os.Parcelable { + ctor public GpsMeasurementsEvent(android.location.GpsClock, android.location.GpsMeasurement[]); + method public int describeContents(); + method public android.location.GpsClock getClock(); + method public java.util.Collection getMeasurements(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int STATUS_GPS_LOCATION_DISABLED = 2; // 0x2 + field public static final int STATUS_NOT_SUPPORTED = 0; // 0x0 + field public static final int STATUS_READY = 1; // 0x1 + } + + public static abstract interface GpsMeasurementsEvent.Listener { + method public abstract void onGpsMeasurementsReceived(android.location.GpsMeasurementsEvent); + method public abstract void onStatusChanged(int); + } + + public class GpsNavigationMessage implements android.os.Parcelable { + method public int describeContents(); + method public byte[] getData(); + method public short getMessageId(); + method public byte getPrn(); + method public short getSubmessageId(); + method public byte getType(); + method public void reset(); + method public void set(android.location.GpsNavigationMessage); + method public void setData(byte[]); + method public void setMessageId(short); + method public void setPrn(byte); + method public void setSubmessageId(short); + method public void setType(byte); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final byte TYPE_CNAV2 = 4; // 0x4 + field public static final byte TYPE_L1CA = 1; // 0x1 + field public static final byte TYPE_L2CNAV = 2; // 0x2 + field public static final byte TYPE_L5CNAV = 3; // 0x3 + field public static final byte TYPE_UNKNOWN = 0; // 0x0 + } + + public class GpsNavigationMessageEvent implements android.os.Parcelable { + ctor public GpsNavigationMessageEvent(android.location.GpsNavigationMessage); + method public int describeContents(); + method public android.location.GpsNavigationMessage getNavigationMessage(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static int STATUS_GPS_LOCATION_DISABLED; + field public static int STATUS_NOT_SUPPORTED; + field public static int STATUS_READY; + } + + public static abstract interface GpsNavigationMessageEvent.Listener { + method public abstract void onGpsNavigationMessageReceived(android.location.GpsNavigationMessageEvent); + method public abstract void onStatusChanged(int); + } + + public final class GpsSatellite { + method public float getAzimuth(); + method public float getElevation(); + method public int getPrn(); + method public float getSnr(); + method public boolean hasAlmanac(); + method public boolean hasEphemeris(); + method public boolean usedInFix(); + } + + public final class GpsStatus { + method public int getMaxSatellites(); + method public java.lang.Iterable getSatellites(); + method public int getTimeToFirstFix(); + field public static final int GPS_EVENT_FIRST_FIX = 3; // 0x3 + field public static final int GPS_EVENT_SATELLITE_STATUS = 4; // 0x4 + field public static final int GPS_EVENT_STARTED = 1; // 0x1 + field public static final int GPS_EVENT_STOPPED = 2; // 0x2 + } + + public static abstract interface GpsStatus.Listener { + method public abstract void onGpsStatusChanged(int); + } + + public static abstract interface GpsStatus.NmeaListener { + method public abstract void onNmeaReceived(long, java.lang.String); + } + + public abstract interface IFusedGeofenceHardware implements android.os.IInterface { + method public abstract void addGeofences(android.hardware.location.GeofenceHardwareRequestParcelable[]) throws android.os.RemoteException; + method public abstract boolean isSupported() throws android.os.RemoteException; + method public abstract void modifyGeofenceOptions(int, int, int, int, int, int) throws android.os.RemoteException; + method public abstract void pauseMonitoringGeofence(int) throws android.os.RemoteException; + method public abstract void removeGeofences(int[]) throws android.os.RemoteException; + method public abstract void resumeMonitoringGeofence(int, int) throws android.os.RemoteException; + } + + public abstract interface IGpsGeofenceHardware implements android.os.IInterface { + method public abstract boolean addCircularHardwareGeofence(int, double, double, double, int, int, int, int) throws android.os.RemoteException; + method public abstract boolean isHardwareGeofenceSupported() throws android.os.RemoteException; + method public abstract boolean pauseHardwareGeofence(int) throws android.os.RemoteException; + method public abstract boolean removeHardwareGeofence(int) throws android.os.RemoteException; + method public abstract boolean resumeHardwareGeofence(int, int) throws android.os.RemoteException; + } + + public class Location implements android.os.Parcelable { + ctor public Location(java.lang.String); + ctor public Location(android.location.Location); + method public float bearingTo(android.location.Location); + method public static java.lang.String convert(double, int); + method public static double convert(java.lang.String); + method public int describeContents(); + method public static void distanceBetween(double, double, double, double, float[]); + method public float distanceTo(android.location.Location); + method public void dump(android.util.Printer, java.lang.String); + method public float getAccuracy(); + method public double getAltitude(); + method public float getBearing(); + method public long getElapsedRealtimeNanos(); + method public android.os.Bundle getExtras(); + method public double getLatitude(); + method public double getLongitude(); + method public java.lang.String getProvider(); + method public float getSpeed(); + method public long getTime(); + method public boolean hasAccuracy(); + method public boolean hasAltitude(); + method public boolean hasBearing(); + method public boolean hasSpeed(); + method public boolean isComplete(); + method public boolean isFromMockProvider(); + method public void makeComplete(); + method public void removeAccuracy(); + method public void removeAltitude(); + method public void removeBearing(); + method public void removeSpeed(); + method public void reset(); + method public void set(android.location.Location); + method public void setAccuracy(float); + method public void setAltitude(double); + method public void setBearing(float); + method public void setElapsedRealtimeNanos(long); + method public void setExtras(android.os.Bundle); + method public void setIsFromMockProvider(boolean); + method public void setLatitude(double); + method public void setLongitude(double); + method public void setProvider(java.lang.String); + method public void setSpeed(float); + method public void setTime(long); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int FORMAT_DEGREES = 0; // 0x0 + field public static final int FORMAT_MINUTES = 1; // 0x1 + field public static final int FORMAT_SECONDS = 2; // 0x2 + } + + public abstract interface LocationListener { + method public abstract void onLocationChanged(android.location.Location); + method public abstract void onProviderDisabled(java.lang.String); + method public abstract void onProviderEnabled(java.lang.String); + method public abstract void onStatusChanged(java.lang.String, int, android.os.Bundle); + } + + public class LocationManager { + method public boolean addGpsMeasurementListener(android.location.GpsMeasurementsEvent.Listener); + method public boolean addGpsNavigationMessageListener(android.location.GpsNavigationMessageEvent.Listener); + method public boolean addGpsStatusListener(android.location.GpsStatus.Listener); + method public boolean addNmeaListener(android.location.GpsStatus.NmeaListener); + method public void addProximityAlert(double, double, float, long, android.app.PendingIntent); + method public void addTestProvider(java.lang.String, boolean, boolean, boolean, boolean, boolean, boolean, boolean, int, int); + method public void clearTestProviderEnabled(java.lang.String); + method public void clearTestProviderLocation(java.lang.String); + method public void clearTestProviderStatus(java.lang.String); + method public java.util.List getAllProviders(); + method public java.lang.String getBestProvider(android.location.Criteria, boolean); + method public android.location.GpsStatus getGpsStatus(android.location.GpsStatus); + method public android.location.Location getLastKnownLocation(java.lang.String); + method public android.location.LocationProvider getProvider(java.lang.String); + method public java.util.List getProviders(boolean); + method public java.util.List getProviders(android.location.Criteria, boolean); + method public boolean isProviderEnabled(java.lang.String); + method public void removeGpsMeasurementListener(android.location.GpsMeasurementsEvent.Listener); + method public void removeGpsNavigationMessageListener(android.location.GpsNavigationMessageEvent.Listener); + method public void removeGpsStatusListener(android.location.GpsStatus.Listener); + method public void removeNmeaListener(android.location.GpsStatus.NmeaListener); + method public void removeProximityAlert(android.app.PendingIntent); + method public void removeTestProvider(java.lang.String); + method public void removeUpdates(android.location.LocationListener); + method public void removeUpdates(android.app.PendingIntent); + method public void requestLocationUpdates(java.lang.String, long, float, android.location.LocationListener); + method public void requestLocationUpdates(java.lang.String, long, float, android.location.LocationListener, android.os.Looper); + method public void requestLocationUpdates(long, float, android.location.Criteria, android.location.LocationListener, android.os.Looper); + method public void requestLocationUpdates(java.lang.String, long, float, android.app.PendingIntent); + method public void requestLocationUpdates(long, float, android.location.Criteria, android.app.PendingIntent); + method public void requestLocationUpdates(android.location.LocationRequest, android.location.LocationListener, android.os.Looper); + method public void requestLocationUpdates(android.location.LocationRequest, android.app.PendingIntent); + method public void requestSingleUpdate(java.lang.String, android.location.LocationListener, android.os.Looper); + method public void requestSingleUpdate(android.location.Criteria, android.location.LocationListener, android.os.Looper); + method public void requestSingleUpdate(java.lang.String, android.app.PendingIntent); + method public void requestSingleUpdate(android.location.Criteria, android.app.PendingIntent); + method public boolean sendExtraCommand(java.lang.String, java.lang.String, android.os.Bundle); + method public void setTestProviderEnabled(java.lang.String, boolean); + method public void setTestProviderLocation(java.lang.String, android.location.Location); + method public void setTestProviderStatus(java.lang.String, int, android.os.Bundle, long); + field public static final java.lang.String GPS_PROVIDER = "gps"; + field public static final java.lang.String KEY_LOCATION_CHANGED = "location"; + field public static final java.lang.String KEY_PROVIDER_ENABLED = "providerEnabled"; + field public static final java.lang.String KEY_PROXIMITY_ENTERING = "entering"; + field public static final java.lang.String KEY_STATUS_CHANGED = "status"; + field public static final java.lang.String MODE_CHANGED_ACTION = "android.location.MODE_CHANGED"; + field public static final java.lang.String NETWORK_PROVIDER = "network"; + field public static final java.lang.String PASSIVE_PROVIDER = "passive"; + field public static final java.lang.String PROVIDERS_CHANGED_ACTION = "android.location.PROVIDERS_CHANGED"; + } + + public class LocationProvider { + method public int getAccuracy(); + method public java.lang.String getName(); + method public int getPowerRequirement(); + method public boolean hasMonetaryCost(); + method public boolean meetsCriteria(android.location.Criteria); + method public boolean requiresCell(); + method public boolean requiresNetwork(); + method public boolean requiresSatellite(); + method public boolean supportsAltitude(); + method public boolean supportsBearing(); + method public boolean supportsSpeed(); + field public static final int AVAILABLE = 2; // 0x2 + field public static final int OUT_OF_SERVICE = 0; // 0x0 + field public static final int TEMPORARILY_UNAVAILABLE = 1; // 0x1 + } + + public final class LocationRequest implements android.os.Parcelable { + method public static android.location.LocationRequest create(); + method public static android.location.LocationRequest createFromDeprecatedCriteria(android.location.Criteria, long, float, boolean); + method public static android.location.LocationRequest createFromDeprecatedProvider(java.lang.String, long, float, boolean); + method public int describeContents(); + method public long getExpireAt(); + method public long getFastestInterval(); + method public boolean getHideFromAppOps(); + method public long getInterval(); + method public int getNumUpdates(); + method public java.lang.String getProvider(); + method public int getQuality(); + method public float getSmallestDisplacement(); + method public android.os.WorkSource getWorkSource(); + method public android.location.LocationRequest setExpireAt(long); + method public android.location.LocationRequest setExpireIn(long); + method public android.location.LocationRequest setFastestInterval(long); + method public void setHideFromAppOps(boolean); + method public android.location.LocationRequest setInterval(long); + method public android.location.LocationRequest setNumUpdates(int); + method public android.location.LocationRequest setProvider(java.lang.String); + method public android.location.LocationRequest setQuality(int); + method public android.location.LocationRequest setSmallestDisplacement(float); + method public void setWorkSource(android.os.WorkSource); + method public void writeToParcel(android.os.Parcel, int); + field public static final int ACCURACY_BLOCK = 102; // 0x66 + field public static final int ACCURACY_CITY = 104; // 0x68 + field public static final int ACCURACY_FINE = 100; // 0x64 + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int POWER_HIGH = 203; // 0xcb + field public static final int POWER_LOW = 201; // 0xc9 + field public static final int POWER_NONE = 200; // 0xc8 + } + + public abstract class SettingInjectorService extends android.app.Service { + ctor public SettingInjectorService(java.lang.String); + method public final android.os.IBinder onBind(android.content.Intent); + method protected abstract boolean onGetEnabled(); + method protected abstract deprecated java.lang.String onGetSummary(); + method public final void onStart(android.content.Intent, int); + method public final int onStartCommand(android.content.Intent, int, int); + field public static final java.lang.String ACTION_INJECTED_SETTING_CHANGED = "android.location.InjectedSettingChanged"; + field public static final java.lang.String ACTION_SERVICE_INTENT = "android.location.SettingInjectorService"; + field public static final java.lang.String ATTRIBUTES_NAME = "injected-location-setting"; + field public static final java.lang.String META_DATA_NAME = "android.location.SettingInjectorService"; + } + +} + +package android.media { + + public class AsyncPlayer { + ctor public AsyncPlayer(java.lang.String); + method public void play(android.content.Context, android.net.Uri, boolean, int); + method public void stop(); + } + + public final class AudioAttributes implements android.os.Parcelable { + method public int describeContents(); + method public int getCapturePreset(); + method public int getContentType(); + method public int getFlags(); + method public int getUsage(); + method public void writeToParcel(android.os.Parcel, int); + field public static final int CONTENT_TYPE_MOVIE = 3; // 0x3 + field public static final int CONTENT_TYPE_MUSIC = 2; // 0x2 + field public static final int CONTENT_TYPE_SONIFICATION = 4; // 0x4 + field public static final int CONTENT_TYPE_SPEECH = 1; // 0x1 + field public static final int CONTENT_TYPE_UNKNOWN = 0; // 0x0 + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int FLAG_AUDIBILITY_ENFORCED = 1; // 0x1 + field public static final int FLAG_BEACON = 8; // 0x8 + field public static final int FLAG_HW_AV_SYNC = 16; // 0x10 + field public static final int FLAG_HW_HOTWORD = 32; // 0x20 + field public static final int USAGE_ALARM = 4; // 0x4 + field public static final int USAGE_ASSISTANCE_ACCESSIBILITY = 11; // 0xb + field public static final int USAGE_ASSISTANCE_NAVIGATION_GUIDANCE = 12; // 0xc + field public static final int USAGE_ASSISTANCE_SONIFICATION = 13; // 0xd + field public static final int USAGE_GAME = 14; // 0xe + field public static final int USAGE_MEDIA = 1; // 0x1 + field public static final int USAGE_NOTIFICATION = 5; // 0x5 + field public static final int USAGE_NOTIFICATION_COMMUNICATION_DELAYED = 9; // 0x9 + field public static final int USAGE_NOTIFICATION_COMMUNICATION_INSTANT = 8; // 0x8 + field public static final int USAGE_NOTIFICATION_COMMUNICATION_REQUEST = 7; // 0x7 + field public static final int USAGE_NOTIFICATION_EVENT = 10; // 0xa + field public static final int USAGE_NOTIFICATION_RINGTONE = 6; // 0x6 + field public static final int USAGE_UNKNOWN = 0; // 0x0 + field public static final int USAGE_VOICE_COMMUNICATION = 2; // 0x2 + field public static final int USAGE_VOICE_COMMUNICATION_SIGNALLING = 3; // 0x3 + } + + public static class AudioAttributes.Builder { + ctor public AudioAttributes.Builder(); + ctor public AudioAttributes.Builder(android.media.AudioAttributes); + method public android.media.AudioAttributes build(); + method public android.media.AudioAttributes.Builder setCapturePreset(int); + method public android.media.AudioAttributes.Builder setContentType(int); + method public android.media.AudioAttributes.Builder setFlags(int); + method public android.media.AudioAttributes.Builder setLegacyStreamType(int); + method public android.media.AudioAttributes.Builder setUsage(int); + } + + public final class AudioFocusInfo implements android.os.Parcelable { + method public int describeContents(); + method public android.media.AudioAttributes getAttributes(); + method public java.lang.String getClientId(); + method public int getFlags(); + method public int getGainRequest(); + method public int getLossReceived(); + method public java.lang.String getPackageName(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public class AudioFormat { + method public int getChannelMask(); + method public int getEncoding(); + method public int getSampleRate(); + field public static final deprecated int CHANNEL_CONFIGURATION_DEFAULT = 1; // 0x1 + field public static final deprecated int CHANNEL_CONFIGURATION_INVALID = 0; // 0x0 + field public static final deprecated int CHANNEL_CONFIGURATION_MONO = 2; // 0x2 + field public static final deprecated int CHANNEL_CONFIGURATION_STEREO = 3; // 0x3 + field public static final int CHANNEL_INVALID = 0; // 0x0 + field public static final int CHANNEL_IN_BACK = 32; // 0x20 + field public static final int CHANNEL_IN_BACK_PROCESSED = 512; // 0x200 + field public static final int CHANNEL_IN_DEFAULT = 1; // 0x1 + field public static final int CHANNEL_IN_FRONT = 16; // 0x10 + field public static final int CHANNEL_IN_FRONT_PROCESSED = 256; // 0x100 + field public static final int CHANNEL_IN_LEFT = 4; // 0x4 + field public static final int CHANNEL_IN_LEFT_PROCESSED = 64; // 0x40 + field public static final int CHANNEL_IN_MONO = 16; // 0x10 + field public static final int CHANNEL_IN_PRESSURE = 1024; // 0x400 + field public static final int CHANNEL_IN_RIGHT = 8; // 0x8 + field public static final int CHANNEL_IN_RIGHT_PROCESSED = 128; // 0x80 + field public static final int CHANNEL_IN_STEREO = 12; // 0xc + field public static final int CHANNEL_IN_VOICE_DNLINK = 32768; // 0x8000 + field public static final int CHANNEL_IN_VOICE_UPLINK = 16384; // 0x4000 + field public static final int CHANNEL_IN_X_AXIS = 2048; // 0x800 + field public static final int CHANNEL_IN_Y_AXIS = 4096; // 0x1000 + field public static final int CHANNEL_IN_Z_AXIS = 8192; // 0x2000 + field public static final int CHANNEL_OUT_5POINT1 = 252; // 0xfc + field public static final int CHANNEL_OUT_7POINT1 = 1020; // 0x3fc + field public static final int CHANNEL_OUT_BACK_CENTER = 1024; // 0x400 + field public static final int CHANNEL_OUT_BACK_LEFT = 64; // 0x40 + field public static final int CHANNEL_OUT_BACK_RIGHT = 128; // 0x80 + field public static final int CHANNEL_OUT_DEFAULT = 1; // 0x1 + field public static final int CHANNEL_OUT_FRONT_CENTER = 16; // 0x10 + field public static final int CHANNEL_OUT_FRONT_LEFT = 4; // 0x4 + field public static final int CHANNEL_OUT_FRONT_LEFT_OF_CENTER = 256; // 0x100 + field public static final int CHANNEL_OUT_FRONT_RIGHT = 8; // 0x8 + field public static final int CHANNEL_OUT_FRONT_RIGHT_OF_CENTER = 512; // 0x200 + field public static final int CHANNEL_OUT_LOW_FREQUENCY = 32; // 0x20 + field public static final int CHANNEL_OUT_MONO = 4; // 0x4 + field public static final int CHANNEL_OUT_QUAD = 204; // 0xcc + field public static final int CHANNEL_OUT_SIDE_LEFT = 2048; // 0x800 + field public static final int CHANNEL_OUT_SIDE_RIGHT = 4096; // 0x1000 + field public static final int CHANNEL_OUT_STEREO = 12; // 0xc + field public static final int CHANNEL_OUT_SURROUND = 1052; // 0x41c + field public static final int ENCODING_AC3 = 5; // 0x5 + field public static final int ENCODING_DEFAULT = 1; // 0x1 + field public static final int ENCODING_E_AC3 = 6; // 0x6 + field public static final int ENCODING_INVALID = 0; // 0x0 + field public static final int ENCODING_PCM_16BIT = 2; // 0x2 + field public static final int ENCODING_PCM_8BIT = 3; // 0x3 + field public static final int ENCODING_PCM_FLOAT = 4; // 0x4 + } + + public static class AudioFormat.Builder { + ctor public AudioFormat.Builder(); + ctor public AudioFormat.Builder(android.media.AudioFormat); + method public android.media.AudioFormat build(); + method public android.media.AudioFormat.Builder setChannelMask(int); + method public android.media.AudioFormat.Builder setEncoding(int) throws java.lang.IllegalArgumentException; + method public android.media.AudioFormat.Builder setSampleRate(int) throws java.lang.IllegalArgumentException; + } + + public class AudioManager { + method public int abandonAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener); + method public int abandonAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener, android.media.AudioAttributes); + method public void adjustStreamVolume(int, int, int); + method public void adjustSuggestedStreamVolume(int, int, int); + method public void adjustVolume(int, int); + method public void dispatchMediaKeyEvent(android.view.KeyEvent); + method public int generateAudioSessionId(); + method public int getMode(); + method public java.lang.String getParameters(java.lang.String); + method public java.lang.String getProperty(java.lang.String); + method public int getRingerMode(); + method public deprecated int getRouting(int); + method public int getStreamMaxVolume(int); + method public int getStreamVolume(int); + method public deprecated int getVibrateSetting(int); + method public boolean isBluetoothA2dpOn(); + method public boolean isBluetoothScoAvailableOffCall(); + method public boolean isBluetoothScoOn(); + method public boolean isHdmiSystemAudioSupported(); + method public boolean isMicrophoneMute(); + method public boolean isMusicActive(); + method public boolean isSpeakerphoneOn(); + method public boolean isVolumeFixed(); + method public deprecated boolean isWiredHeadsetOn(); + method public void loadSoundEffects(); + method public void playSoundEffect(int); + method public void playSoundEffect(int, float); + method public int registerAudioPolicy(android.media.audiopolicy.AudioPolicy); + method public deprecated void registerMediaButtonEventReceiver(android.content.ComponentName); + method public deprecated void registerMediaButtonEventReceiver(android.app.PendingIntent); + method public deprecated void registerRemoteControlClient(android.media.RemoteControlClient); + method public deprecated boolean registerRemoteController(android.media.RemoteController); + method public int requestAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener, int, int); + method public int requestAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener, android.media.AudioAttributes, int, int) throws java.lang.IllegalArgumentException; + method public int requestAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener, android.media.AudioAttributes, int, int, android.media.audiopolicy.AudioPolicy) throws java.lang.IllegalArgumentException; + method public deprecated void setBluetoothA2dpOn(boolean); + method public void setBluetoothScoOn(boolean); + method public void setMicrophoneMute(boolean); + method public void setMode(int); + method public void setParameters(java.lang.String); + method public void setRingerMode(int); + method public deprecated void setRouting(int, int, int); + method public void setSpeakerphoneOn(boolean); + method public void setStreamMute(int, boolean); + method public void setStreamSolo(int, boolean); + method public void setStreamVolume(int, int, int); + method public deprecated void setVibrateSetting(int, int); + method public deprecated void setWiredHeadsetOn(boolean); + method public deprecated boolean shouldVibrate(int); + method public void startBluetoothSco(); + method public void stopBluetoothSco(); + method public void unloadSoundEffects(); + method public void unregisterAudioPolicyAsync(android.media.audiopolicy.AudioPolicy); + method public deprecated void unregisterMediaButtonEventReceiver(android.content.ComponentName); + method public deprecated void unregisterMediaButtonEventReceiver(android.app.PendingIntent); + method public deprecated void unregisterRemoteControlClient(android.media.RemoteControlClient); + method public deprecated void unregisterRemoteController(android.media.RemoteController); + field public static final java.lang.String ACTION_AUDIO_BECOMING_NOISY = "android.media.AUDIO_BECOMING_NOISY"; + field public static final java.lang.String ACTION_HDMI_AUDIO_PLUG = "android.media.action.HDMI_AUDIO_PLUG"; + field public static final java.lang.String ACTION_HEADSET_PLUG = "android.intent.action.HEADSET_PLUG"; + field public static final deprecated java.lang.String ACTION_SCO_AUDIO_STATE_CHANGED = "android.media.SCO_AUDIO_STATE_CHANGED"; + field public static final java.lang.String ACTION_SCO_AUDIO_STATE_UPDATED = "android.media.ACTION_SCO_AUDIO_STATE_UPDATED"; + field public static final int ADJUST_LOWER = -1; // 0xffffffff + field public static final int ADJUST_RAISE = 1; // 0x1 + field public static final int ADJUST_SAME = 0; // 0x0 + field public static final int AUDIOFOCUS_FLAG_DELAY_OK = 1; // 0x1 + field public static final int AUDIOFOCUS_FLAG_LOCK = 4; // 0x4 + field public static final int AUDIOFOCUS_FLAG_PAUSES_ON_DUCKABLE_LOSS = 2; // 0x2 + field public static final int AUDIOFOCUS_GAIN = 1; // 0x1 + field public static final int AUDIOFOCUS_GAIN_TRANSIENT = 2; // 0x2 + field public static final int AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE = 4; // 0x4 + field public static final int AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK = 3; // 0x3 + field public static final int AUDIOFOCUS_LOSS = -1; // 0xffffffff + field public static final int AUDIOFOCUS_LOSS_TRANSIENT = -2; // 0xfffffffe + field public static final int AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK = -3; // 0xfffffffd + field public static final int AUDIOFOCUS_REQUEST_FAILED = 0; // 0x0 + field public static final int AUDIOFOCUS_REQUEST_GRANTED = 1; // 0x1 + field public static final int AUDIO_SESSION_ID_GENERATE = 0; // 0x0 + field public static final int ERROR = -1; // 0xffffffff + field public static final int ERROR_DEAD_OBJECT = -6; // 0xfffffffa + field public static final java.lang.String EXTRA_AUDIO_PLUG_STATE = "android.media.extra.AUDIO_PLUG_STATE"; + field public static final java.lang.String EXTRA_ENCODINGS = "android.media.extra.ENCODINGS"; + field public static final java.lang.String EXTRA_MAX_CHANNEL_COUNT = "android.media.extra.MAX_CHANNEL_COUNT"; + field public static final java.lang.String EXTRA_RINGER_MODE = "android.media.EXTRA_RINGER_MODE"; + field public static final java.lang.String EXTRA_SCO_AUDIO_PREVIOUS_STATE = "android.media.extra.SCO_AUDIO_PREVIOUS_STATE"; + field public static final java.lang.String EXTRA_SCO_AUDIO_STATE = "android.media.extra.SCO_AUDIO_STATE"; + field public static final deprecated java.lang.String EXTRA_VIBRATE_SETTING = "android.media.EXTRA_VIBRATE_SETTING"; + field public static final deprecated java.lang.String EXTRA_VIBRATE_TYPE = "android.media.EXTRA_VIBRATE_TYPE"; + field public static final int FLAG_ALLOW_RINGER_MODES = 2; // 0x2 + field public static final int FLAG_PLAY_SOUND = 4; // 0x4 + field public static final int FLAG_REMOVE_SOUND_AND_VIBRATE = 8; // 0x8 + field public static final int FLAG_SHOW_UI = 1; // 0x1 + field public static final int FLAG_VIBRATE = 16; // 0x10 + field public static final int FX_FOCUS_NAVIGATION_DOWN = 2; // 0x2 + field public static final int FX_FOCUS_NAVIGATION_LEFT = 3; // 0x3 + field public static final int FX_FOCUS_NAVIGATION_RIGHT = 4; // 0x4 + field public static final int FX_FOCUS_NAVIGATION_UP = 1; // 0x1 + field public static final int FX_KEYPRESS_DELETE = 7; // 0x7 + field public static final int FX_KEYPRESS_INVALID = 9; // 0x9 + field public static final int FX_KEYPRESS_RETURN = 8; // 0x8 + field public static final int FX_KEYPRESS_SPACEBAR = 6; // 0x6 + field public static final int FX_KEYPRESS_STANDARD = 5; // 0x5 + field public static final int FX_KEY_CLICK = 0; // 0x0 + field public static final int MODE_CURRENT = -1; // 0xffffffff + field public static final int MODE_INVALID = -2; // 0xfffffffe + field public static final int MODE_IN_CALL = 2; // 0x2 + field public static final int MODE_IN_COMMUNICATION = 3; // 0x3 + field public static final int MODE_NORMAL = 0; // 0x0 + field public static final int MODE_RINGTONE = 1; // 0x1 + field public static final deprecated int NUM_STREAMS = 5; // 0x5 + field public static final java.lang.String PROPERTY_OUTPUT_FRAMES_PER_BUFFER = "android.media.property.OUTPUT_FRAMES_PER_BUFFER"; + field public static final java.lang.String PROPERTY_OUTPUT_SAMPLE_RATE = "android.media.property.OUTPUT_SAMPLE_RATE"; + field public static final java.lang.String RINGER_MODE_CHANGED_ACTION = "android.media.RINGER_MODE_CHANGED"; + field public static final int RINGER_MODE_NORMAL = 2; // 0x2 + field public static final int RINGER_MODE_SILENT = 0; // 0x0 + field public static final int RINGER_MODE_VIBRATE = 1; // 0x1 + field public static final deprecated int ROUTE_ALL = -1; // 0xffffffff + field public static final deprecated int ROUTE_BLUETOOTH = 4; // 0x4 + field public static final deprecated int ROUTE_BLUETOOTH_A2DP = 16; // 0x10 + field public static final deprecated int ROUTE_BLUETOOTH_SCO = 4; // 0x4 + field public static final deprecated int ROUTE_EARPIECE = 1; // 0x1 + field public static final deprecated int ROUTE_HEADSET = 8; // 0x8 + field public static final deprecated int ROUTE_SPEAKER = 2; // 0x2 + field public static final int SCO_AUDIO_STATE_CONNECTED = 1; // 0x1 + field public static final int SCO_AUDIO_STATE_CONNECTING = 2; // 0x2 + field public static final int SCO_AUDIO_STATE_DISCONNECTED = 0; // 0x0 + field public static final int SCO_AUDIO_STATE_ERROR = -1; // 0xffffffff + field public static final int STREAM_ALARM = 4; // 0x4 + field public static final int STREAM_DTMF = 8; // 0x8 + field public static final int STREAM_MUSIC = 3; // 0x3 + field public static final int STREAM_NOTIFICATION = 5; // 0x5 + field public static final int STREAM_RING = 2; // 0x2 + field public static final int STREAM_SYSTEM = 1; // 0x1 + field public static final int STREAM_VOICE_CALL = 0; // 0x0 + field public static final int USE_DEFAULT_STREAM_TYPE = -2147483648; // 0x80000000 + field public static final deprecated java.lang.String VIBRATE_SETTING_CHANGED_ACTION = "android.media.VIBRATE_SETTING_CHANGED"; + field public static final deprecated int VIBRATE_SETTING_OFF = 0; // 0x0 + field public static final deprecated int VIBRATE_SETTING_ON = 1; // 0x1 + field public static final deprecated int VIBRATE_SETTING_ONLY_SILENT = 2; // 0x2 + field public static final deprecated int VIBRATE_TYPE_NOTIFICATION = 1; // 0x1 + field public static final deprecated int VIBRATE_TYPE_RINGER = 0; // 0x0 + } + + public static abstract interface AudioManager.OnAudioFocusChangeListener { + method public abstract void onAudioFocusChange(int); + } + + public class AudioRecord { + ctor public AudioRecord(int, int, int, int, int) throws java.lang.IllegalArgumentException; + method public int getAudioFormat(); + method public int getAudioSessionId(); + method public int getAudioSource(); + method public int getChannelConfiguration(); + method public int getChannelCount(); + method public static int getMinBufferSize(int, int, int); + method public int getNotificationMarkerPosition(); + method public int getPositionNotificationPeriod(); + method public int getRecordingState(); + method public int getSampleRate(); + method public int getState(); + method public int read(byte[], int, int); + method public int read(short[], int, int); + method public int read(java.nio.ByteBuffer, int); + method public void release(); + method public int setNotificationMarkerPosition(int); + method public int setPositionNotificationPeriod(int); + method public void setRecordPositionUpdateListener(android.media.AudioRecord.OnRecordPositionUpdateListener); + method public void setRecordPositionUpdateListener(android.media.AudioRecord.OnRecordPositionUpdateListener, android.os.Handler); + method public void startRecording() throws java.lang.IllegalStateException; + method public void startRecording(android.media.MediaSyncEvent) throws java.lang.IllegalStateException; + method public void stop() throws java.lang.IllegalStateException; + field public static final int ERROR = -1; // 0xffffffff + field public static final int ERROR_BAD_VALUE = -2; // 0xfffffffe + field public static final int ERROR_INVALID_OPERATION = -3; // 0xfffffffd + field public static final int RECORDSTATE_RECORDING = 3; // 0x3 + field public static final int RECORDSTATE_STOPPED = 1; // 0x1 + field public static final int STATE_INITIALIZED = 1; // 0x1 + field public static final int STATE_UNINITIALIZED = 0; // 0x0 + field public static final int SUCCESS = 0; // 0x0 + } + + public static abstract interface AudioRecord.OnRecordPositionUpdateListener { + method public abstract void onMarkerReached(android.media.AudioRecord); + method public abstract void onPeriodicNotification(android.media.AudioRecord); + } + + public final class AudioTimestamp { + ctor public AudioTimestamp(); + field public long framePosition; + field public long nanoTime; + } + + public class AudioTrack { + ctor public AudioTrack(int, int, int, int, int, int) throws java.lang.IllegalArgumentException; + ctor public AudioTrack(int, int, int, int, int, int, int) throws java.lang.IllegalArgumentException; + ctor public AudioTrack(android.media.AudioAttributes, android.media.AudioFormat, int, int, int) throws java.lang.IllegalArgumentException; + method public int attachAuxEffect(int); + method public void flush(); + method public int getAudioFormat(); + method public int getAudioSessionId(); + method public int getChannelConfiguration(); + method public int getChannelCount(); + method public static float getMaxVolume(); + method public static int getMinBufferSize(int, int, int); + method public static float getMinVolume(); + method protected deprecated int getNativeFrameCount(); + method public static int getNativeOutputSampleRate(int); + method public int getNotificationMarkerPosition(); + method public int getPlayState(); + method public int getPlaybackHeadPosition(); + method public int getPlaybackRate(); + method public int getPositionNotificationPeriod(); + method public int getSampleRate(); + method public int getState(); + method public int getStreamType(); + method public boolean getTimestamp(android.media.AudioTimestamp); + method public void pause() throws java.lang.IllegalStateException; + method public void play() throws java.lang.IllegalStateException; + method public void release(); + method public int reloadStaticData(); + method public int setAuxEffectSendLevel(float); + method public int setLoopPoints(int, int, int); + method public int setNotificationMarkerPosition(int); + method public int setPlaybackHeadPosition(int); + method public void setPlaybackPositionUpdateListener(android.media.AudioTrack.OnPlaybackPositionUpdateListener); + method public void setPlaybackPositionUpdateListener(android.media.AudioTrack.OnPlaybackPositionUpdateListener, android.os.Handler); + method public int setPlaybackRate(int); + method public int setPositionNotificationPeriod(int); + method protected deprecated void setState(int); + method public deprecated int setStereoVolume(float, float); + method public int setVolume(float); + method public void stop() throws java.lang.IllegalStateException; + method public int write(byte[], int, int); + method public int write(short[], int, int); + method public int write(float[], int, int, int); + method public int write(java.nio.ByteBuffer, int, int); + field public static final int ERROR = -1; // 0xffffffff + field public static final int ERROR_BAD_VALUE = -2; // 0xfffffffe + field public static final int ERROR_INVALID_OPERATION = -3; // 0xfffffffd + field public static final int MODE_STATIC = 0; // 0x0 + field public static final int MODE_STREAM = 1; // 0x1 + field public static final int PLAYSTATE_PAUSED = 2; // 0x2 + field public static final int PLAYSTATE_PLAYING = 3; // 0x3 + field public static final int PLAYSTATE_STOPPED = 1; // 0x1 + field public static final int STATE_INITIALIZED = 1; // 0x1 + field public static final int STATE_NO_STATIC_DATA = 2; // 0x2 + field public static final int STATE_UNINITIALIZED = 0; // 0x0 + field public static final int SUCCESS = 0; // 0x0 + field public static final int WRITE_BLOCKING = 0; // 0x0 + field public static final int WRITE_NON_BLOCKING = 1; // 0x1 + } + + public static abstract interface AudioTrack.OnPlaybackPositionUpdateListener { + method public abstract void onMarkerReached(android.media.AudioTrack); + method public abstract void onPeriodicNotification(android.media.AudioTrack); + } + + public class CamcorderProfile { + method public static android.media.CamcorderProfile get(int); + method public static android.media.CamcorderProfile get(int, int); + method public static boolean hasProfile(int); + method public static boolean hasProfile(int, int); + field public static final int QUALITY_1080P = 6; // 0x6 + field public static final int QUALITY_2160P = 8; // 0x8 + field public static final int QUALITY_480P = 4; // 0x4 + field public static final int QUALITY_720P = 5; // 0x5 + field public static final int QUALITY_CIF = 3; // 0x3 + field public static final int QUALITY_HIGH = 1; // 0x1 + field public static final int QUALITY_HIGH_SPEED_1080P = 2004; // 0x7d4 + field public static final int QUALITY_HIGH_SPEED_2160P = 2005; // 0x7d5 + field public static final int QUALITY_HIGH_SPEED_480P = 2002; // 0x7d2 + field public static final int QUALITY_HIGH_SPEED_720P = 2003; // 0x7d3 + field public static final int QUALITY_HIGH_SPEED_HIGH = 2001; // 0x7d1 + field public static final int QUALITY_HIGH_SPEED_LOW = 2000; // 0x7d0 + field public static final int QUALITY_LOW = 0; // 0x0 + field public static final int QUALITY_QCIF = 2; // 0x2 + field public static final int QUALITY_QVGA = 7; // 0x7 + field public static final int QUALITY_TIME_LAPSE_1080P = 1006; // 0x3ee + field public static final int QUALITY_TIME_LAPSE_2160P = 1008; // 0x3f0 + field public static final int QUALITY_TIME_LAPSE_480P = 1004; // 0x3ec + field public static final int QUALITY_TIME_LAPSE_720P = 1005; // 0x3ed + field public static final int QUALITY_TIME_LAPSE_CIF = 1003; // 0x3eb + field public static final int QUALITY_TIME_LAPSE_HIGH = 1001; // 0x3e9 + field public static final int QUALITY_TIME_LAPSE_LOW = 1000; // 0x3e8 + field public static final int QUALITY_TIME_LAPSE_QCIF = 1002; // 0x3ea + field public static final int QUALITY_TIME_LAPSE_QVGA = 1007; // 0x3ef + field public int audioBitRate; + field public int audioChannels; + field public int audioCodec; + field public int audioSampleRate; + field public int duration; + field public int fileFormat; + field public int quality; + field public int videoBitRate; + field public int videoCodec; + field public int videoFrameHeight; + field public int videoFrameRate; + field public int videoFrameWidth; + } + + public class CameraProfile { + ctor public CameraProfile(); + method public static int getJpegEncodingQualityParameter(int); + method public static int getJpegEncodingQualityParameter(int, int); + field public static final int QUALITY_HIGH = 2; // 0x2 + field public static final int QUALITY_LOW = 0; // 0x0 + field public static final int QUALITY_MEDIUM = 1; // 0x1 + } + + public final class DeniedByServerException extends android.media.MediaDrmException { + ctor public DeniedByServerException(java.lang.String); + } + + public class ExifInterface { + ctor public ExifInterface(java.lang.String) throws java.io.IOException; + method public double getAltitude(double); + method public java.lang.String getAttribute(java.lang.String); + method public double getAttributeDouble(java.lang.String, double); + method public int getAttributeInt(java.lang.String, int); + method public boolean getLatLong(float[]); + method public byte[] getThumbnail(); + method public boolean hasThumbnail(); + method public void saveAttributes() throws java.io.IOException; + method public void setAttribute(java.lang.String, java.lang.String); + field public static final int ORIENTATION_FLIP_HORIZONTAL = 2; // 0x2 + field public static final int ORIENTATION_FLIP_VERTICAL = 4; // 0x4 + field public static final int ORIENTATION_NORMAL = 1; // 0x1 + field public static final int ORIENTATION_ROTATE_180 = 3; // 0x3 + field public static final int ORIENTATION_ROTATE_270 = 8; // 0x8 + field public static final int ORIENTATION_ROTATE_90 = 6; // 0x6 + field public static final int ORIENTATION_TRANSPOSE = 5; // 0x5 + field public static final int ORIENTATION_TRANSVERSE = 7; // 0x7 + field public static final int ORIENTATION_UNDEFINED = 0; // 0x0 + field public static final java.lang.String TAG_APERTURE = "FNumber"; + field public static final java.lang.String TAG_DATETIME = "DateTime"; + field public static final java.lang.String TAG_EXPOSURE_TIME = "ExposureTime"; + field public static final java.lang.String TAG_FLASH = "Flash"; + field public static final java.lang.String TAG_FOCAL_LENGTH = "FocalLength"; + field public static final java.lang.String TAG_GPS_ALTITUDE = "GPSAltitude"; + field public static final java.lang.String TAG_GPS_ALTITUDE_REF = "GPSAltitudeRef"; + field public static final java.lang.String TAG_GPS_DATESTAMP = "GPSDateStamp"; + field public static final java.lang.String TAG_GPS_LATITUDE = "GPSLatitude"; + field public static final java.lang.String TAG_GPS_LATITUDE_REF = "GPSLatitudeRef"; + field public static final java.lang.String TAG_GPS_LONGITUDE = "GPSLongitude"; + field public static final java.lang.String TAG_GPS_LONGITUDE_REF = "GPSLongitudeRef"; + field public static final java.lang.String TAG_GPS_PROCESSING_METHOD = "GPSProcessingMethod"; + field public static final java.lang.String TAG_GPS_TIMESTAMP = "GPSTimeStamp"; + field public static final java.lang.String TAG_IMAGE_LENGTH = "ImageLength"; + field public static final java.lang.String TAG_IMAGE_WIDTH = "ImageWidth"; + field public static final java.lang.String TAG_ISO = "ISOSpeedRatings"; + field public static final java.lang.String TAG_MAKE = "Make"; + field public static final java.lang.String TAG_MODEL = "Model"; + field public static final java.lang.String TAG_ORIENTATION = "Orientation"; + field public static final java.lang.String TAG_WHITE_BALANCE = "WhiteBalance"; + field public static final int WHITEBALANCE_AUTO = 0; // 0x0 + field public static final int WHITEBALANCE_MANUAL = 1; // 0x1 + } + + public class FaceDetector { + ctor public FaceDetector(int, int, int); + method public int findFaces(android.graphics.Bitmap, android.media.FaceDetector.Face[]); + } + + public class FaceDetector.Face { + method public float confidence(); + method public float eyesDistance(); + method public void getMidPoint(android.graphics.PointF); + method public float pose(int); + field public static final float CONFIDENCE_THRESHOLD = 0.4f; + field public static final int EULER_X = 0; // 0x0 + field public static final int EULER_Y = 1; // 0x1 + field public static final int EULER_Z = 2; // 0x2 + } + + public abstract class Image implements java.lang.AutoCloseable { + method public abstract void close(); + method public android.graphics.Rect getCropRect(); + method public abstract int getFormat(); + method public abstract int getHeight(); + method public abstract android.media.Image.Plane[] getPlanes(); + method public abstract long getTimestamp(); + method public abstract int getWidth(); + method public void setCropRect(android.graphics.Rect); + } + + public static abstract class Image.Plane { + method public abstract java.nio.ByteBuffer getBuffer(); + method public abstract int getPixelStride(); + method public abstract int getRowStride(); + } + + public class ImageReader implements java.lang.AutoCloseable { + method public android.media.Image acquireLatestImage(); + method public android.media.Image acquireNextImage(); + method public void close(); + method public int getHeight(); + method public int getImageFormat(); + method public int getMaxImages(); + method public android.view.Surface getSurface(); + method public int getWidth(); + method public static android.media.ImageReader newInstance(int, int, int, int); + method public void setOnImageAvailableListener(android.media.ImageReader.OnImageAvailableListener, android.os.Handler); + } + + public static abstract interface ImageReader.OnImageAvailableListener { + method public abstract void onImageAvailable(android.media.ImageReader); + } + + public class JetPlayer { + method public boolean clearQueue(); + method public java.lang.Object clone() throws java.lang.CloneNotSupportedException; + method public boolean closeJetFile(); + method public static android.media.JetPlayer getJetPlayer(); + method public static int getMaxTracks(); + method public boolean loadJetFile(java.lang.String); + method public boolean loadJetFile(android.content.res.AssetFileDescriptor); + method public boolean pause(); + method public boolean play(); + method public boolean queueJetSegment(int, int, int, int, int, byte); + method public boolean queueJetSegmentMuteArray(int, int, int, int, boolean[], byte); + method public void release(); + method public void setEventListener(android.media.JetPlayer.OnJetEventListener); + method public void setEventListener(android.media.JetPlayer.OnJetEventListener, android.os.Handler); + method public boolean setMuteArray(boolean[], boolean); + method public boolean setMuteFlag(int, boolean, boolean); + method public boolean setMuteFlags(int, boolean); + method public boolean triggerClip(int); + } + + public static abstract interface JetPlayer.OnJetEventListener { + method public abstract void onJetEvent(android.media.JetPlayer, short, byte, byte, byte, byte); + method public abstract void onJetNumQueuedSegmentUpdate(android.media.JetPlayer, int); + method public abstract void onJetPauseUpdate(android.media.JetPlayer, int); + method public abstract void onJetUserIdUpdate(android.media.JetPlayer, int, int); + } + + public class MediaActionSound { + ctor public MediaActionSound(); + method public synchronized void load(int); + method public synchronized void play(int); + method public void release(); + field public static final int FOCUS_COMPLETE = 1; // 0x1 + field public static final int SHUTTER_CLICK = 0; // 0x0 + field public static final int START_VIDEO_RECORDING = 2; // 0x2 + field public static final int STOP_VIDEO_RECORDING = 3; // 0x3 + } + + public final class MediaCodec { + method public void configure(android.media.MediaFormat, android.view.Surface, android.media.MediaCrypto, int); + method public static android.media.MediaCodec createByCodecName(java.lang.String) throws java.io.IOException; + method public static android.media.MediaCodec createDecoderByType(java.lang.String) throws java.io.IOException; + method public static android.media.MediaCodec createEncoderByType(java.lang.String) throws java.io.IOException; + method public final android.view.Surface createInputSurface(); + method public final int dequeueInputBuffer(long); + method public final int dequeueOutputBuffer(android.media.MediaCodec.BufferInfo, long); + method public final void flush(); + method public android.media.MediaCodecInfo getCodecInfo(); + method public java.nio.ByteBuffer getInputBuffer(int); + method public deprecated java.nio.ByteBuffer[] getInputBuffers(); + method public final android.media.MediaFormat getInputFormat(); + method public android.media.Image getInputImage(int); + method public final java.lang.String getName(); + method public java.nio.ByteBuffer getOutputBuffer(int); + method public deprecated java.nio.ByteBuffer[] getOutputBuffers(); + method public final android.media.MediaFormat getOutputFormat(); + method public final android.media.MediaFormat getOutputFormat(int); + method public android.media.Image getOutputImage(int); + method public final void queueInputBuffer(int, int, int, long, int) throws android.media.MediaCodec.CryptoException; + method public final void queueSecureInputBuffer(int, int, android.media.MediaCodec.CryptoInfo, long, int) throws android.media.MediaCodec.CryptoException; + method public final void release(); + method public final void releaseOutputBuffer(int, boolean); + method public final void releaseOutputBuffer(int, long); + method public final void reset(); + method public void setCallback(android.media.MediaCodec.Callback); + method public final void setParameters(android.os.Bundle); + method public final void setVideoScalingMode(int); + method public final void signalEndOfInputStream(); + method public final void start(); + method public final void stop(); + field public static final int BUFFER_FLAG_CODEC_CONFIG = 2; // 0x2 + field public static final int BUFFER_FLAG_END_OF_STREAM = 4; // 0x4 + field public static final int BUFFER_FLAG_KEY_FRAME = 1; // 0x1 + field public static final deprecated int BUFFER_FLAG_SYNC_FRAME = 1; // 0x1 + field public static final int CONFIGURE_FLAG_ENCODE = 1; // 0x1 + field public static final int CRYPTO_MODE_AES_CTR = 1; // 0x1 + field public static final int CRYPTO_MODE_UNENCRYPTED = 0; // 0x0 + field public static final deprecated int INFO_OUTPUT_BUFFERS_CHANGED = -3; // 0xfffffffd + field public static final int INFO_OUTPUT_FORMAT_CHANGED = -2; // 0xfffffffe + field public static final int INFO_TRY_AGAIN_LATER = -1; // 0xffffffff + field public static final java.lang.String PARAMETER_KEY_REQUEST_SYNC_FRAME = "request-sync"; + field public static final java.lang.String PARAMETER_KEY_SUSPEND = "drop-input-frames"; + field public static final java.lang.String PARAMETER_KEY_VIDEO_BITRATE = "video-bitrate"; + field public static final int VIDEO_SCALING_MODE_SCALE_TO_FIT = 1; // 0x1 + field public static final int VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING = 2; // 0x2 + } + + public static final class MediaCodec.BufferInfo { + ctor public MediaCodec.BufferInfo(); + method public void set(int, int, long, int); + field public int flags; + field public int offset; + field public long presentationTimeUs; + field public int size; + } + + public static abstract class MediaCodec.Callback { + ctor public MediaCodec.Callback(); + method public abstract void onError(android.media.MediaCodec, android.media.MediaCodec.CodecException); + method public abstract void onInputBufferAvailable(android.media.MediaCodec, int); + method public abstract void onOutputBufferAvailable(android.media.MediaCodec, int, android.media.MediaCodec.BufferInfo); + method public abstract void onOutputFormatChanged(android.media.MediaCodec, android.media.MediaFormat); + } + + public static final class MediaCodec.CodecException extends java.lang.IllegalStateException { + method public java.lang.String getDiagnosticInfo(); + method public boolean isRecoverable(); + method public boolean isTransient(); + } + + public static final class MediaCodec.CryptoException extends java.lang.RuntimeException { + ctor public MediaCodec.CryptoException(int, java.lang.String); + method public int getErrorCode(); + field public static final int ERROR_INSUFFICIENT_OUTPUT_PROTECTION = 4; // 0x4 + field public static final int ERROR_KEY_EXPIRED = 2; // 0x2 + field public static final int ERROR_NO_KEY = 1; // 0x1 + field public static final int ERROR_RESOURCE_BUSY = 3; // 0x3 + } + + public static final class MediaCodec.CryptoInfo { + ctor public MediaCodec.CryptoInfo(); + method public void set(int, int[], int[], byte[], byte[], int); + field public byte[] iv; + field public byte[] key; + field public int mode; + field public int[] numBytesOfClearData; + field public int[] numBytesOfEncryptedData; + field public int numSubSamples; + } + + public final class MediaCodecInfo { + method public final android.media.MediaCodecInfo.CodecCapabilities getCapabilitiesForType(java.lang.String); + method public final java.lang.String getName(); + method public final java.lang.String[] getSupportedTypes(); + method public final boolean isEncoder(); + } + + public static final class MediaCodecInfo.AudioCapabilities { + method public android.util.Range getBitrateRange(); + method public int getMaxInputChannelCount(); + method public android.util.Range[] getSupportedSampleRateRanges(); + method public int[] getSupportedSampleRates(); + method public boolean isSampleRateSupported(int); + } + + public static final class MediaCodecInfo.CodecCapabilities { + ctor public MediaCodecInfo.CodecCapabilities(); + method public static android.media.MediaCodecInfo.CodecCapabilities createFromProfileLevel(java.lang.String, int, int); + method public android.media.MediaCodecInfo.AudioCapabilities getAudioCapabilities(); + method public android.media.MediaFormat getDefaultFormat(); + method public android.media.MediaCodecInfo.EncoderCapabilities getEncoderCapabilities(); + method public java.lang.String getMimeType(); + method public android.media.MediaCodecInfo.VideoCapabilities getVideoCapabilities(); + method public final boolean isFeatureRequired(java.lang.String); + method public final boolean isFeatureSupported(java.lang.String); + method public final boolean isFormatSupported(android.media.MediaFormat); + field public static final int COLOR_Format12bitRGB444 = 3; // 0x3 + field public static final int COLOR_Format16bitARGB1555 = 5; // 0x5 + field public static final int COLOR_Format16bitARGB4444 = 4; // 0x4 + field public static final int COLOR_Format16bitBGR565 = 7; // 0x7 + field public static final int COLOR_Format16bitRGB565 = 6; // 0x6 + field public static final int COLOR_Format18BitBGR666 = 41; // 0x29 + field public static final int COLOR_Format18bitARGB1665 = 9; // 0x9 + field public static final int COLOR_Format18bitRGB666 = 8; // 0x8 + field public static final int COLOR_Format19bitARGB1666 = 10; // 0xa + field public static final int COLOR_Format24BitABGR6666 = 43; // 0x2b + field public static final int COLOR_Format24BitARGB6666 = 42; // 0x2a + field public static final int COLOR_Format24bitARGB1887 = 13; // 0xd + field public static final int COLOR_Format24bitBGR888 = 12; // 0xc + field public static final int COLOR_Format24bitRGB888 = 11; // 0xb + field public static final int COLOR_Format25bitARGB1888 = 14; // 0xe + field public static final int COLOR_Format32bitARGB8888 = 16; // 0x10 + field public static final int COLOR_Format32bitBGRA8888 = 15; // 0xf + field public static final int COLOR_Format8bitRGB332 = 2; // 0x2 + field public static final int COLOR_FormatCbYCrY = 27; // 0x1b + field public static final int COLOR_FormatCrYCbY = 28; // 0x1c + field public static final int COLOR_FormatL16 = 36; // 0x24 + field public static final int COLOR_FormatL2 = 33; // 0x21 + field public static final int COLOR_FormatL24 = 37; // 0x25 + field public static final int COLOR_FormatL32 = 38; // 0x26 + field public static final int COLOR_FormatL4 = 34; // 0x22 + field public static final int COLOR_FormatL8 = 35; // 0x23 + field public static final int COLOR_FormatMonochrome = 1; // 0x1 + field public static final int COLOR_FormatRawBayer10bit = 31; // 0x1f + field public static final int COLOR_FormatRawBayer8bit = 30; // 0x1e + field public static final int COLOR_FormatRawBayer8bitcompressed = 32; // 0x20 + field public static final int COLOR_FormatSurface = 2130708361; // 0x7f000789 + field public static final int COLOR_FormatYCbYCr = 25; // 0x19 + field public static final int COLOR_FormatYCrYCb = 26; // 0x1a + field public static final int COLOR_FormatYUV411PackedPlanar = 18; // 0x12 + field public static final int COLOR_FormatYUV411Planar = 17; // 0x11 + field public static final int COLOR_FormatYUV420Flexible = 2135033992; // 0x7f420888 + field public static final int COLOR_FormatYUV420PackedPlanar = 20; // 0x14 + field public static final int COLOR_FormatYUV420PackedSemiPlanar = 39; // 0x27 + field public static final int COLOR_FormatYUV420Planar = 19; // 0x13 + field public static final int COLOR_FormatYUV420SemiPlanar = 21; // 0x15 + field public static final int COLOR_FormatYUV422PackedPlanar = 23; // 0x17 + field public static final int COLOR_FormatYUV422PackedSemiPlanar = 40; // 0x28 + field public static final int COLOR_FormatYUV422Planar = 22; // 0x16 + field public static final int COLOR_FormatYUV422SemiPlanar = 24; // 0x18 + field public static final int COLOR_FormatYUV444Interleaved = 29; // 0x1d + field public static final int COLOR_QCOM_FormatYUV420SemiPlanar = 2141391872; // 0x7fa30c00 + field public static final int COLOR_TI_FormatYUV420PackedSemiPlanar = 2130706688; // 0x7f000100 + field public static final java.lang.String FEATURE_AdaptivePlayback = "adaptive-playback"; + field public static final java.lang.String FEATURE_SecurePlayback = "secure-playback"; + field public static final java.lang.String FEATURE_TunneledPlayback = "tunneled-playback"; + field public int[] colorFormats; + field public android.media.MediaCodecInfo.CodecProfileLevel[] profileLevels; + } + + public static final class MediaCodecInfo.CodecProfileLevel { + ctor public MediaCodecInfo.CodecProfileLevel(); + field public static final int AACObjectELD = 39; // 0x27 + field public static final int AACObjectERLC = 17; // 0x11 + field public static final int AACObjectHE = 5; // 0x5 + field public static final int AACObjectHE_PS = 29; // 0x1d + field public static final int AACObjectLC = 2; // 0x2 + field public static final int AACObjectLD = 23; // 0x17 + field public static final int AACObjectLTP = 4; // 0x4 + field public static final int AACObjectMain = 1; // 0x1 + field public static final int AACObjectSSR = 3; // 0x3 + field public static final int AACObjectScalable = 6; // 0x6 + field public static final int AVCLevel1 = 1; // 0x1 + field public static final int AVCLevel11 = 4; // 0x4 + field public static final int AVCLevel12 = 8; // 0x8 + field public static final int AVCLevel13 = 16; // 0x10 + field public static final int AVCLevel1b = 2; // 0x2 + field public static final int AVCLevel2 = 32; // 0x20 + field public static final int AVCLevel21 = 64; // 0x40 + field public static final int AVCLevel22 = 128; // 0x80 + field public static final int AVCLevel3 = 256; // 0x100 + field public static final int AVCLevel31 = 512; // 0x200 + field public static final int AVCLevel32 = 1024; // 0x400 + field public static final int AVCLevel4 = 2048; // 0x800 + field public static final int AVCLevel41 = 4096; // 0x1000 + field public static final int AVCLevel42 = 8192; // 0x2000 + field public static final int AVCLevel5 = 16384; // 0x4000 + field public static final int AVCLevel51 = 32768; // 0x8000 + field public static final int AVCLevel52 = 65536; // 0x10000 + field public static final int AVCProfileBaseline = 1; // 0x1 + field public static final int AVCProfileExtended = 4; // 0x4 + field public static final int AVCProfileHigh = 8; // 0x8 + field public static final int AVCProfileHigh10 = 16; // 0x10 + field public static final int AVCProfileHigh422 = 32; // 0x20 + field public static final int AVCProfileHigh444 = 64; // 0x40 + field public static final int AVCProfileMain = 2; // 0x2 + field public static final int H263Level10 = 1; // 0x1 + field public static final int H263Level20 = 2; // 0x2 + field public static final int H263Level30 = 4; // 0x4 + field public static final int H263Level40 = 8; // 0x8 + field public static final int H263Level45 = 16; // 0x10 + field public static final int H263Level50 = 32; // 0x20 + field public static final int H263Level60 = 64; // 0x40 + field public static final int H263Level70 = 128; // 0x80 + field public static final int H263ProfileBackwardCompatible = 4; // 0x4 + field public static final int H263ProfileBaseline = 1; // 0x1 + field public static final int H263ProfileH320Coding = 2; // 0x2 + field public static final int H263ProfileHighCompression = 32; // 0x20 + field public static final int H263ProfileHighLatency = 256; // 0x100 + field public static final int H263ProfileISWV2 = 8; // 0x8 + field public static final int H263ProfileISWV3 = 16; // 0x10 + field public static final int H263ProfileInterlace = 128; // 0x80 + field public static final int H263ProfileInternet = 64; // 0x40 + field public static final int HEVCHighTierLevel1 = 2; // 0x2 + field public static final int HEVCHighTierLevel2 = 8; // 0x8 + field public static final int HEVCHighTierLevel21 = 32; // 0x20 + field public static final int HEVCHighTierLevel3 = 128; // 0x80 + field public static final int HEVCHighTierLevel31 = 512; // 0x200 + field public static final int HEVCHighTierLevel4 = 2048; // 0x800 + field public static final int HEVCHighTierLevel41 = 8192; // 0x2000 + field public static final int HEVCHighTierLevel5 = 32768; // 0x8000 + field public static final int HEVCHighTierLevel51 = 131072; // 0x20000 + field public static final int HEVCHighTierLevel52 = 524288; // 0x80000 + field public static final int HEVCHighTierLevel6 = 2097152; // 0x200000 + field public static final int HEVCHighTierLevel61 = 8388608; // 0x800000 + field public static final int HEVCHighTierLevel62 = 33554432; // 0x2000000 + field public static final int HEVCMainTierLevel1 = 1; // 0x1 + field public static final int HEVCMainTierLevel2 = 4; // 0x4 + field public static final int HEVCMainTierLevel21 = 16; // 0x10 + field public static final int HEVCMainTierLevel3 = 64; // 0x40 + field public static final int HEVCMainTierLevel31 = 256; // 0x100 + field public static final int HEVCMainTierLevel4 = 1024; // 0x400 + field public static final int HEVCMainTierLevel41 = 4096; // 0x1000 + field public static final int HEVCMainTierLevel5 = 16384; // 0x4000 + field public static final int HEVCMainTierLevel51 = 65536; // 0x10000 + field public static final int HEVCMainTierLevel52 = 262144; // 0x40000 + field public static final int HEVCMainTierLevel6 = 1048576; // 0x100000 + field public static final int HEVCMainTierLevel61 = 4194304; // 0x400000 + field public static final int HEVCMainTierLevel62 = 16777216; // 0x1000000 + field public static final int HEVCProfileMain = 1; // 0x1 + field public static final int HEVCProfileMain10 = 2; // 0x2 + field public static final int MPEG4Level0 = 1; // 0x1 + field public static final int MPEG4Level0b = 2; // 0x2 + field public static final int MPEG4Level1 = 4; // 0x4 + field public static final int MPEG4Level2 = 8; // 0x8 + field public static final int MPEG4Level3 = 16; // 0x10 + field public static final int MPEG4Level4 = 32; // 0x20 + field public static final int MPEG4Level4a = 64; // 0x40 + field public static final int MPEG4Level5 = 128; // 0x80 + field public static final int MPEG4ProfileAdvancedCoding = 4096; // 0x1000 + field public static final int MPEG4ProfileAdvancedCore = 8192; // 0x2000 + field public static final int MPEG4ProfileAdvancedRealTime = 1024; // 0x400 + field public static final int MPEG4ProfileAdvancedScalable = 16384; // 0x4000 + field public static final int MPEG4ProfileAdvancedSimple = 32768; // 0x8000 + field public static final int MPEG4ProfileBasicAnimated = 256; // 0x100 + field public static final int MPEG4ProfileCore = 4; // 0x4 + field public static final int MPEG4ProfileCoreScalable = 2048; // 0x800 + field public static final int MPEG4ProfileHybrid = 512; // 0x200 + field public static final int MPEG4ProfileMain = 8; // 0x8 + field public static final int MPEG4ProfileNbit = 16; // 0x10 + field public static final int MPEG4ProfileScalableTexture = 32; // 0x20 + field public static final int MPEG4ProfileSimple = 1; // 0x1 + field public static final int MPEG4ProfileSimpleFBA = 128; // 0x80 + field public static final int MPEG4ProfileSimpleFace = 64; // 0x40 + field public static final int MPEG4ProfileSimpleScalable = 2; // 0x2 + field public static final int VP8Level_Version0 = 1; // 0x1 + field public static final int VP8Level_Version1 = 2; // 0x2 + field public static final int VP8Level_Version2 = 4; // 0x4 + field public static final int VP8Level_Version3 = 8; // 0x8 + field public static final int VP8ProfileMain = 1; // 0x1 + field public int level; + field public int profile; + } + + public static final class MediaCodecInfo.EncoderCapabilities { + method public android.util.Range getComplexityRange(); + method public boolean isBitrateModeSupported(int); + field public static final int BITRATE_MODE_CBR = 2; // 0x2 + field public static final int BITRATE_MODE_CQ = 0; // 0x0 + field public static final int BITRATE_MODE_VBR = 1; // 0x1 + } + + public static final class MediaCodecInfo.VideoCapabilities { + method public boolean areSizeAndRateSupported(int, int, double); + method public android.util.Range getBitrateRange(); + method public int getHeightAlignment(); + method public android.util.Range getSupportedFrameRates(); + method public android.util.Range getSupportedFrameRatesFor(int, int); + method public android.util.Range getSupportedHeights(); + method public android.util.Range getSupportedHeightsFor(int); + method public android.util.Range getSupportedWidths(); + method public android.util.Range getSupportedWidthsFor(int); + method public int getWidthAlignment(); + method public boolean isSizeSupported(int, int); + } + + public final class MediaCodecList { + ctor public MediaCodecList(int); + method public final java.lang.String findDecoderForFormat(android.media.MediaFormat); + method public final java.lang.String findEncoderForFormat(android.media.MediaFormat); + method public static final deprecated int getCodecCount(); + method public static final deprecated android.media.MediaCodecInfo getCodecInfoAt(int); + method public final android.media.MediaCodecInfo[] getCodecInfos(); + field public static final int ALL_CODECS = 1; // 0x1 + field public static final int REGULAR_CODECS = 0; // 0x0 + } + + public final class MediaCrypto { + ctor public MediaCrypto(java.util.UUID, byte[]) throws android.media.MediaCryptoException; + method public static final boolean isCryptoSchemeSupported(java.util.UUID); + method public final void release(); + method public final boolean requiresSecureDecoderComponent(java.lang.String); + } + + public final class MediaCryptoException extends java.lang.Exception { + ctor public MediaCryptoException(java.lang.String); + } + + public class MediaDescription implements android.os.Parcelable { + method public int describeContents(); + method public java.lang.CharSequence getDescription(); + method public android.os.Bundle getExtras(); + method public android.graphics.Bitmap getIconBitmap(); + method public android.net.Uri getIconUri(); + method public java.lang.String getMediaId(); + method public java.lang.CharSequence getSubtitle(); + method public java.lang.CharSequence getTitle(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public static class MediaDescription.Builder { + ctor public MediaDescription.Builder(); + method public android.media.MediaDescription build(); + method public android.media.MediaDescription.Builder setDescription(java.lang.CharSequence); + method public android.media.MediaDescription.Builder setExtras(android.os.Bundle); + method public android.media.MediaDescription.Builder setIconBitmap(android.graphics.Bitmap); + method public android.media.MediaDescription.Builder setIconUri(android.net.Uri); + method public android.media.MediaDescription.Builder setMediaId(java.lang.String); + method public android.media.MediaDescription.Builder setSubtitle(java.lang.CharSequence); + method public android.media.MediaDescription.Builder setTitle(java.lang.CharSequence); + } + + public final class MediaDrm { + ctor public MediaDrm(java.util.UUID) throws android.media.UnsupportedSchemeException; + method public void closeSession(byte[]); + method public android.media.MediaDrm.CryptoSession getCryptoSession(byte[], java.lang.String, java.lang.String); + method public android.media.MediaDrm.KeyRequest getKeyRequest(byte[], byte[], java.lang.String, int, java.util.HashMap) throws android.media.NotProvisionedException; + method public byte[] getPropertyByteArray(java.lang.String); + method public java.lang.String getPropertyString(java.lang.String); + method public android.media.MediaDrm.ProvisionRequest getProvisionRequest(); + method public byte[] getSecureStop(byte[]); + method public java.util.List getSecureStops(); + method public static final boolean isCryptoSchemeSupported(java.util.UUID); + method public static final boolean isCryptoSchemeSupported(java.util.UUID, java.lang.String); + method public byte[] openSession() throws android.media.NotProvisionedException, android.media.ResourceBusyException; + method public byte[] provideKeyResponse(byte[], byte[]) throws android.media.DeniedByServerException, android.media.NotProvisionedException; + method public void provideProvisionResponse(byte[]) throws android.media.DeniedByServerException; + method public java.util.HashMap queryKeyStatus(byte[]); + method public final void release(); + method public void releaseAllSecureStops(); + method public void releaseSecureStops(byte[]); + method public void removeKeys(byte[]); + method public void restoreKeys(byte[], byte[]); + method public void setOnEventListener(android.media.MediaDrm.OnEventListener); + method public void setPropertyByteArray(java.lang.String, byte[]); + method public void setPropertyString(java.lang.String, java.lang.String); + method public void unprovisionDevice(); + field public static final int EVENT_KEY_EXPIRED = 3; // 0x3 + field public static final int EVENT_KEY_REQUIRED = 2; // 0x2 + field public static final int EVENT_PROVISION_REQUIRED = 1; // 0x1 + field public static final int EVENT_VENDOR_DEFINED = 4; // 0x4 + field public static final int KEY_TYPE_OFFLINE = 2; // 0x2 + field public static final int KEY_TYPE_RELEASE = 3; // 0x3 + field public static final int KEY_TYPE_STREAMING = 1; // 0x1 + field public static final java.lang.String PROPERTY_ALGORITHMS = "algorithms"; + field public static final java.lang.String PROPERTY_DESCRIPTION = "description"; + field public static final java.lang.String PROPERTY_DEVICE_UNIQUE_ID = "deviceUniqueId"; + field public static final java.lang.String PROPERTY_VENDOR = "vendor"; + field public static final java.lang.String PROPERTY_VERSION = "version"; + } + + public final class MediaDrm.CryptoSession { + method public byte[] decrypt(byte[], byte[], byte[]); + method public byte[] encrypt(byte[], byte[], byte[]); + method public byte[] sign(byte[], byte[]); + method public boolean verify(byte[], byte[], byte[]); + } + + public static final class MediaDrm.KeyRequest { + method public byte[] getData(); + method public java.lang.String getDefaultUrl(); + } + + public static final class MediaDrm.MediaDrmStateException extends java.lang.IllegalStateException { + method public java.lang.String getDiagnosticInfo(); + } + + public static abstract interface MediaDrm.OnEventListener { + method public abstract void onEvent(android.media.MediaDrm, byte[], int, int, byte[]); + } + + public static final class MediaDrm.ProvisionRequest { + method public byte[] getData(); + method public java.lang.String getDefaultUrl(); + } + + public class MediaDrmException extends java.lang.Exception { + ctor public MediaDrmException(java.lang.String); + } + + public final class MediaExtractor { + ctor public MediaExtractor(); + method public boolean advance(); + method public long getCachedDuration(); + method public java.util.Map getPsshInfo(); + method public boolean getSampleCryptoInfo(android.media.MediaCodec.CryptoInfo); + method public int getSampleFlags(); + method public long getSampleTime(); + method public int getSampleTrackIndex(); + method public final int getTrackCount(); + method public android.media.MediaFormat getTrackFormat(int); + method public boolean hasCacheReachedEndOfStream(); + method public int readSampleData(java.nio.ByteBuffer, int); + method public final void release(); + method public void seekTo(long, int); + method public void selectTrack(int); + method public final void setDataSource(android.content.Context, android.net.Uri, java.util.Map) throws java.io.IOException; + method public final void setDataSource(java.lang.String, java.util.Map) throws java.io.IOException; + method public final void setDataSource(java.lang.String) throws java.io.IOException; + method public final void setDataSource(java.io.FileDescriptor) throws java.io.IOException; + method public final void setDataSource(java.io.FileDescriptor, long, long) throws java.io.IOException; + method public void unselectTrack(int); + field public static final int SAMPLE_FLAG_ENCRYPTED = 2; // 0x2 + field public static final int SAMPLE_FLAG_SYNC = 1; // 0x1 + field public static final int SEEK_TO_CLOSEST_SYNC = 2; // 0x2 + field public static final int SEEK_TO_NEXT_SYNC = 1; // 0x1 + field public static final int SEEK_TO_PREVIOUS_SYNC = 0; // 0x0 + } + + public final class MediaFormat { + ctor public MediaFormat(); + method public final boolean containsKey(java.lang.String); + method public static final android.media.MediaFormat createAudioFormat(java.lang.String, int, int); + method public static final android.media.MediaFormat createSubtitleFormat(java.lang.String, java.lang.String); + method public static final android.media.MediaFormat createVideoFormat(java.lang.String, int, int); + method public final java.nio.ByteBuffer getByteBuffer(java.lang.String); + method public boolean getFeatureEnabled(java.lang.String); + method public final float getFloat(java.lang.String); + method public final int getInteger(java.lang.String); + method public final long getLong(java.lang.String); + method public final java.lang.String getString(java.lang.String); + method public final void setByteBuffer(java.lang.String, java.nio.ByteBuffer); + method public void setFeatureEnabled(java.lang.String, boolean); + method public final void setFloat(java.lang.String, float); + method public final void setInteger(java.lang.String, int); + method public final void setLong(java.lang.String, long); + method public final void setString(java.lang.String, java.lang.String); + field public static final java.lang.String KEY_AAC_DRC_ATTENUATION_FACTOR = "aac-drc-cut-level"; + field public static final java.lang.String KEY_AAC_DRC_BOOST_FACTOR = "aac-drc-boost-level"; + field public static final java.lang.String KEY_AAC_DRC_HEAVY_COMPRESSION = "aac-drc-heavy-compression"; + field public static final java.lang.String KEY_AAC_DRC_TARGET_REFERENCE_LEVEL = "aac-target-ref-level"; + field public static final java.lang.String KEY_AAC_ENCODED_TARGET_LEVEL = "aac-encoded-target-level"; + field public static final java.lang.String KEY_AAC_MAX_OUTPUT_CHANNEL_COUNT = "aac-max-output-channel_count"; + field public static final java.lang.String KEY_AAC_PROFILE = "aac-profile"; + field public static final java.lang.String KEY_AAC_SBR_MODE = "aac-sbr-mode"; + field public static final java.lang.String KEY_AUDIO_SESSION_ID = "audio-session-id"; + field public static final java.lang.String KEY_BITRATE_MODE = "bitrate-mode"; + field public static final java.lang.String KEY_BIT_RATE = "bitrate"; + field public static final java.lang.String KEY_CAPTURE_RATE = "capture-rate"; + field public static final java.lang.String KEY_CHANNEL_COUNT = "channel-count"; + field public static final java.lang.String KEY_CHANNEL_MASK = "channel-mask"; + field public static final java.lang.String KEY_COLOR_FORMAT = "color-format"; + field public static final java.lang.String KEY_COMPLEXITY = "complexity"; + field public static final java.lang.String KEY_DURATION = "durationUs"; + field public static final java.lang.String KEY_FLAC_COMPRESSION_LEVEL = "flac-compression-level"; + field public static final java.lang.String KEY_FRAME_RATE = "frame-rate"; + field public static final java.lang.String KEY_HEIGHT = "height"; + field public static final java.lang.String KEY_IS_ADTS = "is-adts"; + field public static final java.lang.String KEY_IS_AUTOSELECT = "is-autoselect"; + field public static final java.lang.String KEY_IS_DEFAULT = "is-default"; + field public static final java.lang.String KEY_IS_FORCED_SUBTITLE = "is-forced-subtitle"; + field public static final java.lang.String KEY_I_FRAME_INTERVAL = "i-frame-interval"; + field public static final java.lang.String KEY_LANGUAGE = "language"; + field public static final java.lang.String KEY_MAX_HEIGHT = "max-height"; + field public static final java.lang.String KEY_MAX_INPUT_SIZE = "max-input-size"; + field public static final java.lang.String KEY_MAX_WIDTH = "max-width"; + field public static final java.lang.String KEY_MIME = "mime"; + field public static final java.lang.String KEY_PROFILE = "profile"; + field public static final java.lang.String KEY_PUSH_BLANK_BUFFERS_ON_STOP = "push-blank-buffers-on-shutdown"; + field public static final java.lang.String KEY_REPEAT_PREVIOUS_FRAME_AFTER = "repeat-previous-frame-after"; + field public static final java.lang.String KEY_SAMPLE_RATE = "sample-rate"; + field public static final java.lang.String KEY_TEMPORAL_LAYERING = "ts-schema"; + field public static final java.lang.String KEY_WIDTH = "width"; + field public static final java.lang.String MIMETYPE_AUDIO_AAC = "audio/mp4a-latm"; + field public static final java.lang.String MIMETYPE_AUDIO_AC3 = "audio/ac3"; + field public static final java.lang.String MIMETYPE_AUDIO_AMR_NB = "audio/3gpp"; + field public static final java.lang.String MIMETYPE_AUDIO_AMR_WB = "audio/amr-wb"; + field public static final java.lang.String MIMETYPE_AUDIO_FLAC = "audio/flac"; + field public static final java.lang.String MIMETYPE_AUDIO_G711_ALAW = "audio/g711-alaw"; + field public static final java.lang.String MIMETYPE_AUDIO_G711_MLAW = "audio/g711-mlaw"; + field public static final java.lang.String MIMETYPE_AUDIO_MPEG = "audio/mpeg"; + field public static final java.lang.String MIMETYPE_AUDIO_MSGSM = "audio/gsm"; + field public static final java.lang.String MIMETYPE_AUDIO_OPUS = "audio/opus"; + field public static final java.lang.String MIMETYPE_AUDIO_QCELP = "audio/qcelp"; + field public static final java.lang.String MIMETYPE_AUDIO_RAW = "audio/raw"; + field public static final java.lang.String MIMETYPE_AUDIO_VORBIS = "audio/vorbis"; + field public static final java.lang.String MIMETYPE_TEXT_CEA_608 = "text/cea-608"; + field public static final java.lang.String MIMETYPE_TEXT_VTT = "text/vtt"; + field public static final java.lang.String MIMETYPE_VIDEO_AVC = "video/avc"; + field public static final java.lang.String MIMETYPE_VIDEO_H263 = "video/3gpp"; + field public static final java.lang.String MIMETYPE_VIDEO_HEVC = "video/hevc"; + field public static final java.lang.String MIMETYPE_VIDEO_MPEG2 = "video/mpeg2"; + field public static final java.lang.String MIMETYPE_VIDEO_MPEG4 = "video/mp4v-es"; + field public static final java.lang.String MIMETYPE_VIDEO_RAW = "video/raw"; + field public static final java.lang.String MIMETYPE_VIDEO_VP8 = "video/x-vnd.on2.vp8"; + field public static final java.lang.String MIMETYPE_VIDEO_VP9 = "video/x-vnd.on2.vp9"; + } + + public final class MediaMetadata implements android.os.Parcelable { + method public boolean containsKey(java.lang.String); + method public int describeContents(); + method public android.graphics.Bitmap getBitmap(java.lang.String); + method public android.media.MediaDescription getDescription(); + method public long getLong(java.lang.String); + method public android.media.Rating getRating(java.lang.String); + method public java.lang.String getString(java.lang.String); + method public java.lang.CharSequence getText(java.lang.String); + method public java.util.Set keySet(); + method public int size(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final java.lang.String METADATA_KEY_ALBUM = "android.media.metadata.ALBUM"; + field public static final java.lang.String METADATA_KEY_ALBUM_ART = "android.media.metadata.ALBUM_ART"; + field public static final java.lang.String METADATA_KEY_ALBUM_ARTIST = "android.media.metadata.ALBUM_ARTIST"; + field public static final java.lang.String METADATA_KEY_ALBUM_ART_URI = "android.media.metadata.ALBUM_ART_URI"; + field public static final java.lang.String METADATA_KEY_ART = "android.media.metadata.ART"; + field public static final java.lang.String METADATA_KEY_ARTIST = "android.media.metadata.ARTIST"; + field public static final java.lang.String METADATA_KEY_ART_URI = "android.media.metadata.ART_URI"; + field public static final java.lang.String METADATA_KEY_AUTHOR = "android.media.metadata.AUTHOR"; + field public static final java.lang.String METADATA_KEY_COMPILATION = "android.media.metadata.COMPILATION"; + field public static final java.lang.String METADATA_KEY_COMPOSER = "android.media.metadata.COMPOSER"; + field public static final java.lang.String METADATA_KEY_DATE = "android.media.metadata.DATE"; + field public static final java.lang.String METADATA_KEY_DISC_NUMBER = "android.media.metadata.DISC_NUMBER"; + field public static final java.lang.String METADATA_KEY_DISPLAY_DESCRIPTION = "android.media.metadata.DISPLAY_DESCRIPTION"; + field public static final java.lang.String METADATA_KEY_DISPLAY_ICON = "android.media.metadata.DISPLAY_ICON"; + field public static final java.lang.String METADATA_KEY_DISPLAY_ICON_URI = "android.media.metadata.DISPLAY_ICON_URI"; + field public static final java.lang.String METADATA_KEY_DISPLAY_SUBTITLE = "android.media.metadata.DISPLAY_SUBTITLE"; + field public static final java.lang.String METADATA_KEY_DISPLAY_TITLE = "android.media.metadata.DISPLAY_TITLE"; + field public static final java.lang.String METADATA_KEY_DURATION = "android.media.metadata.DURATION"; + field public static final java.lang.String METADATA_KEY_GENRE = "android.media.metadata.GENRE"; + field public static final java.lang.String METADATA_KEY_MEDIA_ID = "android.media.metadata.MEDIA_ID"; + field public static final java.lang.String METADATA_KEY_NUM_TRACKS = "android.media.metadata.NUM_TRACKS"; + field public static final java.lang.String METADATA_KEY_RATING = "android.media.metadata.RATING"; + field public static final java.lang.String METADATA_KEY_TITLE = "android.media.metadata.TITLE"; + field public static final java.lang.String METADATA_KEY_TRACK_NUMBER = "android.media.metadata.TRACK_NUMBER"; + field public static final java.lang.String METADATA_KEY_USER_RATING = "android.media.metadata.USER_RATING"; + field public static final java.lang.String METADATA_KEY_WRITER = "android.media.metadata.WRITER"; + field public static final java.lang.String METADATA_KEY_YEAR = "android.media.metadata.YEAR"; + } + + public static final class MediaMetadata.Builder { + ctor public MediaMetadata.Builder(); + ctor public MediaMetadata.Builder(android.media.MediaMetadata); + method public android.media.MediaMetadata build(); + method public android.media.MediaMetadata.Builder putBitmap(java.lang.String, android.graphics.Bitmap); + method public android.media.MediaMetadata.Builder putLong(java.lang.String, long); + method public android.media.MediaMetadata.Builder putRating(java.lang.String, android.media.Rating); + method public android.media.MediaMetadata.Builder putString(java.lang.String, java.lang.String); + method public android.media.MediaMetadata.Builder putText(java.lang.String, java.lang.CharSequence); + } + + public abstract deprecated class MediaMetadataEditor { + method public synchronized void addEditableKey(int); + method public abstract void apply(); + method public synchronized void clear(); + method public synchronized android.graphics.Bitmap getBitmap(int, android.graphics.Bitmap) throws java.lang.IllegalArgumentException; + method public synchronized int[] getEditableKeys(); + method public synchronized long getLong(int, long) throws java.lang.IllegalArgumentException; + method public synchronized java.lang.Object getObject(int, java.lang.Object) throws java.lang.IllegalArgumentException; + method public synchronized java.lang.String getString(int, java.lang.String) throws java.lang.IllegalArgumentException; + method public synchronized android.media.MediaMetadataEditor putBitmap(int, android.graphics.Bitmap) throws java.lang.IllegalArgumentException; + method public synchronized android.media.MediaMetadataEditor putLong(int, long) throws java.lang.IllegalArgumentException; + method public synchronized android.media.MediaMetadataEditor putObject(int, java.lang.Object) throws java.lang.IllegalArgumentException; + method public synchronized android.media.MediaMetadataEditor putString(int, java.lang.String) throws java.lang.IllegalArgumentException; + method public synchronized void removeEditableKeys(); + field public static final int BITMAP_KEY_ARTWORK = 100; // 0x64 + field public static final int RATING_KEY_BY_OTHERS = 101; // 0x65 + field public static final int RATING_KEY_BY_USER = 268435457; // 0x10000001 + } + + public class MediaMetadataRetriever { + ctor public MediaMetadataRetriever(); + method public java.lang.String extractMetadata(int); + method public byte[] getEmbeddedPicture(); + method public android.graphics.Bitmap getFrameAtTime(long, int); + method public android.graphics.Bitmap getFrameAtTime(long); + method public android.graphics.Bitmap getFrameAtTime(); + method public void release(); + method public void setDataSource(java.lang.String) throws java.lang.IllegalArgumentException; + method public void setDataSource(java.lang.String, java.util.Map) throws java.lang.IllegalArgumentException; + method public void setDataSource(java.io.FileDescriptor, long, long) throws java.lang.IllegalArgumentException; + method public void setDataSource(java.io.FileDescriptor) throws java.lang.IllegalArgumentException; + method public void setDataSource(android.content.Context, android.net.Uri) throws java.lang.IllegalArgumentException, java.lang.SecurityException; + field public static final int METADATA_KEY_ALBUM = 1; // 0x1 + field public static final int METADATA_KEY_ALBUMARTIST = 13; // 0xd + field public static final int METADATA_KEY_ARTIST = 2; // 0x2 + field public static final int METADATA_KEY_AUTHOR = 3; // 0x3 + field public static final int METADATA_KEY_BITRATE = 20; // 0x14 + field public static final int METADATA_KEY_CD_TRACK_NUMBER = 0; // 0x0 + field public static final int METADATA_KEY_COMPILATION = 15; // 0xf + field public static final int METADATA_KEY_COMPOSER = 4; // 0x4 + field public static final int METADATA_KEY_DATE = 5; // 0x5 + field public static final int METADATA_KEY_DISC_NUMBER = 14; // 0xe + field public static final int METADATA_KEY_DURATION = 9; // 0x9 + field public static final int METADATA_KEY_GENRE = 6; // 0x6 + field public static final int METADATA_KEY_HAS_AUDIO = 16; // 0x10 + field public static final int METADATA_KEY_HAS_VIDEO = 17; // 0x11 + field public static final int METADATA_KEY_LOCATION = 23; // 0x17 + field public static final int METADATA_KEY_MIMETYPE = 12; // 0xc + field public static final int METADATA_KEY_NUM_TRACKS = 10; // 0xa + field public static final int METADATA_KEY_TITLE = 7; // 0x7 + field public static final int METADATA_KEY_VIDEO_HEIGHT = 19; // 0x13 + field public static final int METADATA_KEY_VIDEO_ROTATION = 24; // 0x18 + field public static final int METADATA_KEY_VIDEO_WIDTH = 18; // 0x12 + field public static final int METADATA_KEY_WRITER = 11; // 0xb + field public static final int METADATA_KEY_YEAR = 8; // 0x8 + field public static final int OPTION_CLOSEST = 3; // 0x3 + field public static final int OPTION_CLOSEST_SYNC = 2; // 0x2 + field public static final int OPTION_NEXT_SYNC = 1; // 0x1 + field public static final int OPTION_PREVIOUS_SYNC = 0; // 0x0 + } + + public final class MediaMuxer { + ctor public MediaMuxer(java.lang.String, int) throws java.io.IOException; + method public int addTrack(android.media.MediaFormat); + method public void release(); + method public void setLocation(float, float); + method public void setOrientationHint(int); + method public void start(); + method public void stop(); + method public void writeSampleData(int, java.nio.ByteBuffer, android.media.MediaCodec.BufferInfo); + } + + public static final class MediaMuxer.OutputFormat { + field public static final int MUXER_OUTPUT_MPEG_4 = 0; // 0x0 + field public static final int MUXER_OUTPUT_WEBM = 1; // 0x1 + } + + public class MediaPlayer { + ctor public MediaPlayer(); + method public void addTimedTextSource(java.lang.String, java.lang.String) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException; + method public void addTimedTextSource(android.content.Context, android.net.Uri, java.lang.String) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException; + method public void addTimedTextSource(java.io.FileDescriptor, java.lang.String) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException; + method public void addTimedTextSource(java.io.FileDescriptor, long, long, java.lang.String) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException; + method public void attachAuxEffect(int); + method public static android.media.MediaPlayer create(android.content.Context, android.net.Uri); + method public static android.media.MediaPlayer create(android.content.Context, android.net.Uri, android.view.SurfaceHolder); + method public static android.media.MediaPlayer create(android.content.Context, android.net.Uri, android.view.SurfaceHolder, android.media.AudioAttributes, int); + method public static android.media.MediaPlayer create(android.content.Context, int); + method public static android.media.MediaPlayer create(android.content.Context, int, android.media.AudioAttributes, int); + method public void deselectTrack(int) throws java.lang.IllegalStateException; + method public int getAudioSessionId(); + method public int getCurrentPosition(); + method public int getDuration(); + method public int getSelectedTrack(int) throws java.lang.IllegalStateException; + method public android.media.MediaPlayer.TrackInfo[] getTrackInfo() throws java.lang.IllegalStateException; + method public int getVideoHeight(); + method public int getVideoWidth(); + method public boolean isLooping(); + method public boolean isPlaying(); + method public void pause() throws java.lang.IllegalStateException; + method public void prepare() throws java.io.IOException, java.lang.IllegalStateException; + method public void prepareAsync() throws java.lang.IllegalStateException; + method public void release(); + method public void reset(); + method public void seekTo(int) throws java.lang.IllegalStateException; + method public void selectTrack(int) throws java.lang.IllegalStateException; + method public void setAudioAttributes(android.media.AudioAttributes) throws java.lang.IllegalArgumentException; + method public void setAudioSessionId(int) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException; + method public void setAudioStreamType(int); + method public void setAuxEffectSendLevel(float); + method public void setDataSource(android.content.Context, android.net.Uri) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.SecurityException; + method public void setDataSource(android.content.Context, android.net.Uri, java.util.Map) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.SecurityException; + method public void setDataSource(java.lang.String) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.SecurityException; + method public void setDataSource(java.io.FileDescriptor) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException; + method public void setDataSource(java.io.FileDescriptor, long, long) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException; + method public void setDisplay(android.view.SurfaceHolder); + method public void setLooping(boolean); + method public void setNextMediaPlayer(android.media.MediaPlayer); + method public void setOnBufferingUpdateListener(android.media.MediaPlayer.OnBufferingUpdateListener); + method public void setOnCompletionListener(android.media.MediaPlayer.OnCompletionListener); + method public void setOnErrorListener(android.media.MediaPlayer.OnErrorListener); + method public void setOnInfoListener(android.media.MediaPlayer.OnInfoListener); + method public void setOnPreparedListener(android.media.MediaPlayer.OnPreparedListener); + method public void setOnSeekCompleteListener(android.media.MediaPlayer.OnSeekCompleteListener); + method public void setOnTimedTextListener(android.media.MediaPlayer.OnTimedTextListener); + method public void setOnVideoSizeChangedListener(android.media.MediaPlayer.OnVideoSizeChangedListener); + method public void setScreenOnWhilePlaying(boolean); + method public void setSurface(android.view.Surface); + method public void setVideoScalingMode(int); + method public void setVolume(float, float); + method public void setWakeMode(android.content.Context, int); + method public void start() throws java.lang.IllegalStateException; + method public void stop() throws java.lang.IllegalStateException; + field public static final int MEDIA_ERROR_IO = -1004; // 0xfffffc14 + field public static final int MEDIA_ERROR_MALFORMED = -1007; // 0xfffffc11 + field public static final int MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK = 200; // 0xc8 + field public static final int MEDIA_ERROR_SERVER_DIED = 100; // 0x64 + field public static final int MEDIA_ERROR_TIMED_OUT = -110; // 0xffffff92 + field public static final int MEDIA_ERROR_UNKNOWN = 1; // 0x1 + field public static final int MEDIA_ERROR_UNSUPPORTED = -1010; // 0xfffffc0e + field public static final int MEDIA_INFO_BAD_INTERLEAVING = 800; // 0x320 + field public static final int MEDIA_INFO_BUFFERING_END = 702; // 0x2be + field public static final int MEDIA_INFO_BUFFERING_START = 701; // 0x2bd + field public static final int MEDIA_INFO_METADATA_UPDATE = 802; // 0x322 + field public static final int MEDIA_INFO_NOT_SEEKABLE = 801; // 0x321 + field public static final int MEDIA_INFO_SUBTITLE_TIMED_OUT = 902; // 0x386 + field public static final int MEDIA_INFO_UNKNOWN = 1; // 0x1 + field public static final int MEDIA_INFO_UNSUPPORTED_SUBTITLE = 901; // 0x385 + field public static final int MEDIA_INFO_VIDEO_RENDERING_START = 3; // 0x3 + field public static final int MEDIA_INFO_VIDEO_TRACK_LAGGING = 700; // 0x2bc + field public static final java.lang.String MEDIA_MIMETYPE_TEXT_SUBRIP = "application/x-subrip"; + field public static final int VIDEO_SCALING_MODE_SCALE_TO_FIT = 1; // 0x1 + field public static final int VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING = 2; // 0x2 + } + + public static abstract interface MediaPlayer.OnBufferingUpdateListener { + method public abstract void onBufferingUpdate(android.media.MediaPlayer, int); + } + + public static abstract interface MediaPlayer.OnCompletionListener { + method public abstract void onCompletion(android.media.MediaPlayer); + } + + public static abstract interface MediaPlayer.OnErrorListener { + method public abstract boolean onError(android.media.MediaPlayer, int, int); + } + + public static abstract interface MediaPlayer.OnInfoListener { + method public abstract boolean onInfo(android.media.MediaPlayer, int, int); + } + + public static abstract interface MediaPlayer.OnPreparedListener { + method public abstract void onPrepared(android.media.MediaPlayer); + } + + public static abstract interface MediaPlayer.OnSeekCompleteListener { + method public abstract void onSeekComplete(android.media.MediaPlayer); + } + + public static abstract interface MediaPlayer.OnTimedTextListener { + method public abstract void onTimedText(android.media.MediaPlayer, android.media.TimedText); + } + + public static abstract interface MediaPlayer.OnVideoSizeChangedListener { + method public abstract void onVideoSizeChanged(android.media.MediaPlayer, int, int); + } + + public static class MediaPlayer.TrackInfo implements android.os.Parcelable { + method public int describeContents(); + method public android.media.MediaFormat getFormat(); + method public java.lang.String getLanguage(); + method public int getTrackType(); + method public void writeToParcel(android.os.Parcel, int); + field public static final int MEDIA_TRACK_TYPE_AUDIO = 2; // 0x2 + field public static final int MEDIA_TRACK_TYPE_SUBTITLE = 4; // 0x4 + field public static final int MEDIA_TRACK_TYPE_TIMEDTEXT = 3; // 0x3 + field public static final int MEDIA_TRACK_TYPE_UNKNOWN = 0; // 0x0 + field public static final int MEDIA_TRACK_TYPE_VIDEO = 1; // 0x1 + } + + public class MediaRecorder { + ctor public MediaRecorder(); + method public static final int getAudioSourceMax(); + method public int getMaxAmplitude() throws java.lang.IllegalStateException; + method public android.view.Surface getSurface(); + method public void prepare() throws java.io.IOException, java.lang.IllegalStateException; + method public void release(); + method public void reset(); + method public void setAudioChannels(int); + method public void setAudioEncoder(int) throws java.lang.IllegalStateException; + method public void setAudioEncodingBitRate(int); + method public void setAudioSamplingRate(int); + method public void setAudioSource(int) throws java.lang.IllegalStateException; + method public deprecated void setCamera(android.hardware.Camera); + method public void setCaptureRate(double); + method public void setLocation(float, float); + method public void setMaxDuration(int) throws java.lang.IllegalArgumentException; + method public void setMaxFileSize(long) throws java.lang.IllegalArgumentException; + method public void setOnErrorListener(android.media.MediaRecorder.OnErrorListener); + method public void setOnInfoListener(android.media.MediaRecorder.OnInfoListener); + method public void setOrientationHint(int); + method public void setOutputFile(java.io.FileDescriptor) throws java.lang.IllegalStateException; + method public void setOutputFile(java.lang.String) throws java.lang.IllegalStateException; + method public void setOutputFormat(int) throws java.lang.IllegalStateException; + method public void setPreviewDisplay(android.view.Surface); + method public void setProfile(android.media.CamcorderProfile); + method public void setVideoEncoder(int) throws java.lang.IllegalStateException; + method public void setVideoEncodingBitRate(int); + method public void setVideoFrameRate(int) throws java.lang.IllegalStateException; + method public void setVideoSize(int, int) throws java.lang.IllegalStateException; + method public void setVideoSource(int) throws java.lang.IllegalStateException; + method public void start() throws java.lang.IllegalStateException; + method public void stop() throws java.lang.IllegalStateException; + field public static final int MEDIA_ERROR_SERVER_DIED = 100; // 0x64 + field public static final int MEDIA_RECORDER_ERROR_UNKNOWN = 1; // 0x1 + field public static final int MEDIA_RECORDER_INFO_MAX_DURATION_REACHED = 800; // 0x320 + field public static final int MEDIA_RECORDER_INFO_MAX_FILESIZE_REACHED = 801; // 0x321 + field public static final int MEDIA_RECORDER_INFO_UNKNOWN = 1; // 0x1 + } + + public final class MediaRecorder.AudioEncoder { + field public static final int AAC = 3; // 0x3 + field public static final int AAC_ELD = 5; // 0x5 + field public static final int AMR_NB = 1; // 0x1 + field public static final int AMR_WB = 2; // 0x2 + field public static final int DEFAULT = 0; // 0x0 + field public static final int HE_AAC = 4; // 0x4 + field public static final int VORBIS = 6; // 0x6 + } + + public final class MediaRecorder.AudioSource { + field public static final int CAMCORDER = 5; // 0x5 + field public static final int DEFAULT = 0; // 0x0 + field public static final int MIC = 1; // 0x1 + field public static final int REMOTE_SUBMIX = 8; // 0x8 + field public static final int VOICE_CALL = 4; // 0x4 + field public static final int VOICE_COMMUNICATION = 7; // 0x7 + field public static final int VOICE_DOWNLINK = 3; // 0x3 + field public static final int VOICE_RECOGNITION = 6; // 0x6 + field public static final int VOICE_UPLINK = 2; // 0x2 + } + + public static abstract interface MediaRecorder.OnErrorListener { + method public abstract void onError(android.media.MediaRecorder, int, int); + } + + public static abstract interface MediaRecorder.OnInfoListener { + method public abstract void onInfo(android.media.MediaRecorder, int, int); + } + + public final class MediaRecorder.OutputFormat { + field public static final int AAC_ADTS = 6; // 0x6 + field public static final int AMR_NB = 3; // 0x3 + field public static final int AMR_WB = 4; // 0x4 + field public static final int DEFAULT = 0; // 0x0 + field public static final int MPEG_4 = 2; // 0x2 + field public static final deprecated int RAW_AMR = 3; // 0x3 + field public static final int THREE_GPP = 1; // 0x1 + field public static final int WEBM = 9; // 0x9 + } + + public final class MediaRecorder.VideoEncoder { + field public static final int DEFAULT = 0; // 0x0 + field public static final int H263 = 1; // 0x1 + field public static final int H264 = 2; // 0x2 + field public static final int MPEG_4_SP = 3; // 0x3 + field public static final int VP8 = 4; // 0x4 + } + + public final class MediaRecorder.VideoSource { + field public static final int CAMERA = 1; // 0x1 + field public static final int DEFAULT = 0; // 0x0 + field public static final int SURFACE = 2; // 0x2 + } + + public class MediaRouter { + method public void addCallback(int, android.media.MediaRouter.Callback); + method public void addCallback(int, android.media.MediaRouter.Callback, int); + method public void addUserRoute(android.media.MediaRouter.UserRouteInfo); + method public void clearUserRoutes(); + method public android.media.MediaRouter.RouteCategory createRouteCategory(java.lang.CharSequence, boolean); + method public android.media.MediaRouter.RouteCategory createRouteCategory(int, boolean); + method public android.media.MediaRouter.UserRouteInfo createUserRoute(android.media.MediaRouter.RouteCategory); + method public android.media.MediaRouter.RouteCategory getCategoryAt(int); + method public int getCategoryCount(); + method public android.media.MediaRouter.RouteInfo getDefaultRoute(); + method public android.media.MediaRouter.RouteInfo getRouteAt(int); + method public int getRouteCount(); + method public android.media.MediaRouter.RouteInfo getSelectedRoute(int); + method public void removeCallback(android.media.MediaRouter.Callback); + method public void removeUserRoute(android.media.MediaRouter.UserRouteInfo); + method public void selectRoute(int, android.media.MediaRouter.RouteInfo); + field public static final int CALLBACK_FLAG_PERFORM_ACTIVE_SCAN = 1; // 0x1 + field public static final int CALLBACK_FLAG_UNFILTERED_EVENTS = 2; // 0x2 + field public static final int ROUTE_TYPE_LIVE_AUDIO = 1; // 0x1 + field public static final int ROUTE_TYPE_LIVE_VIDEO = 2; // 0x2 + field public static final int ROUTE_TYPE_USER = 8388608; // 0x800000 + } + + public static abstract class MediaRouter.Callback { + ctor public MediaRouter.Callback(); + method public abstract void onRouteAdded(android.media.MediaRouter, android.media.MediaRouter.RouteInfo); + method public abstract void onRouteChanged(android.media.MediaRouter, android.media.MediaRouter.RouteInfo); + method public abstract void onRouteGrouped(android.media.MediaRouter, android.media.MediaRouter.RouteInfo, android.media.MediaRouter.RouteGroup, int); + method public void onRoutePresentationDisplayChanged(android.media.MediaRouter, android.media.MediaRouter.RouteInfo); + method public abstract void onRouteRemoved(android.media.MediaRouter, android.media.MediaRouter.RouteInfo); + method public abstract void onRouteSelected(android.media.MediaRouter, int, android.media.MediaRouter.RouteInfo); + method public abstract void onRouteUngrouped(android.media.MediaRouter, android.media.MediaRouter.RouteInfo, android.media.MediaRouter.RouteGroup); + method public abstract void onRouteUnselected(android.media.MediaRouter, int, android.media.MediaRouter.RouteInfo); + method public abstract void onRouteVolumeChanged(android.media.MediaRouter, android.media.MediaRouter.RouteInfo); + } + + public static class MediaRouter.RouteCategory { + method public java.lang.CharSequence getName(); + method public java.lang.CharSequence getName(android.content.Context); + method public java.util.List getRoutes(java.util.List); + method public int getSupportedTypes(); + method public boolean isGroupable(); + } + + public static class MediaRouter.RouteGroup extends android.media.MediaRouter.RouteInfo { + method public void addRoute(android.media.MediaRouter.RouteInfo); + method public void addRoute(android.media.MediaRouter.RouteInfo, int); + method public android.media.MediaRouter.RouteInfo getRouteAt(int); + method public int getRouteCount(); + method public void removeRoute(android.media.MediaRouter.RouteInfo); + method public void removeRoute(int); + method public void setIconDrawable(android.graphics.drawable.Drawable); + method public void setIconResource(int); + } + + public static class MediaRouter.RouteInfo { + method public android.media.MediaRouter.RouteCategory getCategory(); + method public java.lang.CharSequence getDescription(); + method public android.media.MediaRouter.RouteGroup getGroup(); + method public android.graphics.drawable.Drawable getIconDrawable(); + method public java.lang.CharSequence getName(); + method public java.lang.CharSequence getName(android.content.Context); + method public int getPlaybackStream(); + method public int getPlaybackType(); + method public android.view.Display getPresentationDisplay(); + method public java.lang.CharSequence getStatus(); + method public int getSupportedTypes(); + method public java.lang.Object getTag(); + method public int getVolume(); + method public int getVolumeHandling(); + method public int getVolumeMax(); + method public boolean isConnecting(); + method public boolean isEnabled(); + method public void requestSetVolume(int); + method public void requestUpdateVolume(int); + method public void setTag(java.lang.Object); + field public static final int PLAYBACK_TYPE_LOCAL = 0; // 0x0 + field public static final int PLAYBACK_TYPE_REMOTE = 1; // 0x1 + field public static final int PLAYBACK_VOLUME_FIXED = 0; // 0x0 + field public static final int PLAYBACK_VOLUME_VARIABLE = 1; // 0x1 + } + + public static class MediaRouter.SimpleCallback extends android.media.MediaRouter.Callback { + ctor public MediaRouter.SimpleCallback(); + method public void onRouteAdded(android.media.MediaRouter, android.media.MediaRouter.RouteInfo); + method public void onRouteChanged(android.media.MediaRouter, android.media.MediaRouter.RouteInfo); + method public void onRouteGrouped(android.media.MediaRouter, android.media.MediaRouter.RouteInfo, android.media.MediaRouter.RouteGroup, int); + method public void onRouteRemoved(android.media.MediaRouter, android.media.MediaRouter.RouteInfo); + method public void onRouteSelected(android.media.MediaRouter, int, android.media.MediaRouter.RouteInfo); + method public void onRouteUngrouped(android.media.MediaRouter, android.media.MediaRouter.RouteInfo, android.media.MediaRouter.RouteGroup); + method public void onRouteUnselected(android.media.MediaRouter, int, android.media.MediaRouter.RouteInfo); + method public void onRouteVolumeChanged(android.media.MediaRouter, android.media.MediaRouter.RouteInfo); + } + + public static class MediaRouter.UserRouteInfo extends android.media.MediaRouter.RouteInfo { + method public android.media.RemoteControlClient getRemoteControlClient(); + method public void setDescription(java.lang.CharSequence); + method public void setIconDrawable(android.graphics.drawable.Drawable); + method public void setIconResource(int); + method public void setName(java.lang.CharSequence); + method public void setName(int); + method public void setPlaybackStream(int); + method public void setPlaybackType(int); + method public void setRemoteControlClient(android.media.RemoteControlClient); + method public void setStatus(java.lang.CharSequence); + method public void setVolume(int); + method public void setVolumeCallback(android.media.MediaRouter.VolumeCallback); + method public void setVolumeHandling(int); + method public void setVolumeMax(int); + } + + public static abstract class MediaRouter.VolumeCallback { + ctor public MediaRouter.VolumeCallback(); + method public abstract void onVolumeSetRequest(android.media.MediaRouter.RouteInfo, int); + method public abstract void onVolumeUpdateRequest(android.media.MediaRouter.RouteInfo, int); + } + + public class MediaScannerConnection implements android.content.ServiceConnection { + ctor public MediaScannerConnection(android.content.Context, android.media.MediaScannerConnection.MediaScannerConnectionClient); + method public void connect(); + method public void disconnect(); + method public synchronized boolean isConnected(); + method public void onServiceConnected(android.content.ComponentName, android.os.IBinder); + method public void onServiceDisconnected(android.content.ComponentName); + method public void scanFile(java.lang.String, java.lang.String); + method public static void scanFile(android.content.Context, java.lang.String[], java.lang.String[], android.media.MediaScannerConnection.OnScanCompletedListener); + } + + public static abstract interface MediaScannerConnection.MediaScannerConnectionClient implements android.media.MediaScannerConnection.OnScanCompletedListener { + method public abstract void onMediaScannerConnected(); + method public abstract void onScanCompleted(java.lang.String, android.net.Uri); + } + + public static abstract interface MediaScannerConnection.OnScanCompletedListener { + method public abstract void onScanCompleted(java.lang.String, android.net.Uri); + } + + public class MediaSyncEvent { + method public static android.media.MediaSyncEvent createEvent(int) throws java.lang.IllegalArgumentException; + method public int getAudioSessionId(); + method public int getType(); + method public android.media.MediaSyncEvent setAudioSessionId(int) throws java.lang.IllegalArgumentException; + field public static final int SYNC_EVENT_NONE = 0; // 0x0 + field public static final int SYNC_EVENT_PRESENTATION_COMPLETE = 1; // 0x1 + } + + public final class NotProvisionedException extends android.media.MediaDrmException { + ctor public NotProvisionedException(java.lang.String); + } + + public final class Rating implements android.os.Parcelable { + method public int describeContents(); + method public float getPercentRating(); + method public int getRatingStyle(); + method public float getStarRating(); + method public boolean hasHeart(); + method public boolean isRated(); + method public boolean isThumbUp(); + method public static android.media.Rating newHeartRating(boolean); + method public static android.media.Rating newPercentageRating(float); + method public static android.media.Rating newStarRating(int, float); + method public static android.media.Rating newThumbRating(boolean); + method public static android.media.Rating newUnratedRating(int); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int RATING_3_STARS = 3; // 0x3 + field public static final int RATING_4_STARS = 4; // 0x4 + field public static final int RATING_5_STARS = 5; // 0x5 + field public static final int RATING_HEART = 1; // 0x1 + field public static final int RATING_NONE = 0; // 0x0 + field public static final int RATING_PERCENTAGE = 6; // 0x6 + field public static final int RATING_THUMB_UP_DOWN = 2; // 0x2 + } + + public deprecated class RemoteControlClient { + ctor public RemoteControlClient(android.app.PendingIntent); + ctor public RemoteControlClient(android.app.PendingIntent, android.os.Looper); + method public android.media.RemoteControlClient.MetadataEditor editMetadata(boolean); + method public android.media.session.MediaSession getMediaSession(); + method public void setMetadataUpdateListener(android.media.RemoteControlClient.OnMetadataUpdateListener); + method public void setOnGetPlaybackPositionListener(android.media.RemoteControlClient.OnGetPlaybackPositionListener); + method public void setPlaybackPositionUpdateListener(android.media.RemoteControlClient.OnPlaybackPositionUpdateListener); + method public void setPlaybackState(int); + method public void setPlaybackState(int, long, float); + method public void setTransportControlFlags(int); + field public static final int FLAG_KEY_MEDIA_FAST_FORWARD = 64; // 0x40 + field public static final int FLAG_KEY_MEDIA_NEXT = 128; // 0x80 + field public static final int FLAG_KEY_MEDIA_PAUSE = 16; // 0x10 + field public static final int FLAG_KEY_MEDIA_PLAY = 4; // 0x4 + field public static final int FLAG_KEY_MEDIA_PLAY_PAUSE = 8; // 0x8 + field public static final int FLAG_KEY_MEDIA_POSITION_UPDATE = 256; // 0x100 + field public static final int FLAG_KEY_MEDIA_PREVIOUS = 1; // 0x1 + field public static final int FLAG_KEY_MEDIA_RATING = 512; // 0x200 + field public static final int FLAG_KEY_MEDIA_REWIND = 2; // 0x2 + field public static final int FLAG_KEY_MEDIA_STOP = 32; // 0x20 + field public static final int PLAYSTATE_BUFFERING = 8; // 0x8 + field public static final int PLAYSTATE_ERROR = 9; // 0x9 + field public static final int PLAYSTATE_FAST_FORWARDING = 4; // 0x4 + field public static final int PLAYSTATE_PAUSED = 2; // 0x2 + field public static final int PLAYSTATE_PLAYING = 3; // 0x3 + field public static final int PLAYSTATE_REWINDING = 5; // 0x5 + field public static final int PLAYSTATE_SKIPPING_BACKWARDS = 7; // 0x7 + field public static final int PLAYSTATE_SKIPPING_FORWARDS = 6; // 0x6 + field public static final int PLAYSTATE_STOPPED = 1; // 0x1 + } + + public deprecated class RemoteControlClient.MetadataEditor extends android.media.MediaMetadataEditor { + method public synchronized void apply(); + field public static final int BITMAP_KEY_ARTWORK = 100; // 0x64 + } + + public static abstract interface RemoteControlClient.OnGetPlaybackPositionListener { + method public abstract long onGetPlaybackPosition(); + } + + public static abstract interface RemoteControlClient.OnMetadataUpdateListener { + method public abstract void onMetadataUpdate(int, java.lang.Object); + } + + public static abstract interface RemoteControlClient.OnPlaybackPositionUpdateListener { + method public abstract void onPlaybackPositionUpdate(long); + } + + public final deprecated class RemoteController { + ctor public RemoteController(android.content.Context, android.media.RemoteController.OnClientUpdateListener) throws java.lang.IllegalArgumentException; + ctor public RemoteController(android.content.Context, android.media.RemoteController.OnClientUpdateListener, android.os.Looper) throws java.lang.IllegalArgumentException; + method public boolean clearArtworkConfiguration(); + method public android.media.RemoteController.MetadataEditor editMetadata(); + method public long getEstimatedMediaPosition(); + method public boolean seekTo(long) throws java.lang.IllegalArgumentException; + method public boolean sendMediaKeyEvent(android.view.KeyEvent) throws java.lang.IllegalArgumentException; + method public boolean setArtworkConfiguration(int, int) throws java.lang.IllegalArgumentException; + method public boolean setSynchronizationMode(int) throws java.lang.IllegalArgumentException; + field public static final int POSITION_SYNCHRONIZATION_CHECK = 1; // 0x1 + field public static final int POSITION_SYNCHRONIZATION_NONE = 0; // 0x0 + } + + public class RemoteController.MetadataEditor extends android.media.MediaMetadataEditor { + method public synchronized void apply(); + } + + public static abstract interface RemoteController.OnClientUpdateListener { + method public abstract void onClientChange(boolean); + method public abstract void onClientMetadataUpdate(android.media.RemoteController.MetadataEditor); + method public abstract void onClientPlaybackStateUpdate(int); + method public abstract void onClientPlaybackStateUpdate(int, long, long, float); + method public abstract void onClientTransportControlUpdate(int); + } + + public final class ResourceBusyException extends android.media.MediaDrmException { + ctor public ResourceBusyException(java.lang.String); + } + + public class Ringtone { + method public android.media.AudioAttributes getAudioAttributes(); + method public deprecated int getStreamType(); + method public java.lang.String getTitle(android.content.Context); + method public boolean isPlaying(); + method public void play(); + method public void setAudioAttributes(android.media.AudioAttributes) throws java.lang.IllegalArgumentException; + method public deprecated void setStreamType(int); + method public void stop(); + } + + public class RingtoneManager { + ctor public RingtoneManager(android.app.Activity); + ctor public RingtoneManager(android.content.Context); + method public static android.net.Uri getActualDefaultRingtoneUri(android.content.Context, int); + method public android.database.Cursor getCursor(); + method public static int getDefaultType(android.net.Uri); + method public static android.net.Uri getDefaultUri(int); + method public deprecated boolean getIncludeDrm(); + method public android.media.Ringtone getRingtone(int); + method public static android.media.Ringtone getRingtone(android.content.Context, android.net.Uri); + method public int getRingtonePosition(android.net.Uri); + method public android.net.Uri getRingtoneUri(int); + method public boolean getStopPreviousRingtone(); + method public static android.net.Uri getValidRingtoneUri(android.content.Context); + method public int inferStreamType(); + method public static boolean isDefault(android.net.Uri); + method public static void setActualDefaultRingtoneUri(android.content.Context, int, android.net.Uri); + method public deprecated void setIncludeDrm(boolean); + method public void setStopPreviousRingtone(boolean); + method public void setType(int); + method public void stopPreviousRingtone(); + field public static final java.lang.String ACTION_RINGTONE_PICKER = "android.intent.action.RINGTONE_PICKER"; + field public static final java.lang.String EXTRA_RINGTONE_DEFAULT_URI = "android.intent.extra.ringtone.DEFAULT_URI"; + field public static final java.lang.String EXTRA_RINGTONE_EXISTING_URI = "android.intent.extra.ringtone.EXISTING_URI"; + field public static final deprecated java.lang.String EXTRA_RINGTONE_INCLUDE_DRM = "android.intent.extra.ringtone.INCLUDE_DRM"; + field public static final java.lang.String EXTRA_RINGTONE_PICKED_URI = "android.intent.extra.ringtone.PICKED_URI"; + field public static final java.lang.String EXTRA_RINGTONE_SHOW_DEFAULT = "android.intent.extra.ringtone.SHOW_DEFAULT"; + field public static final java.lang.String EXTRA_RINGTONE_SHOW_SILENT = "android.intent.extra.ringtone.SHOW_SILENT"; + field public static final java.lang.String EXTRA_RINGTONE_TITLE = "android.intent.extra.ringtone.TITLE"; + field public static final java.lang.String EXTRA_RINGTONE_TYPE = "android.intent.extra.ringtone.TYPE"; + field public static final int ID_COLUMN_INDEX = 0; // 0x0 + field public static final int TITLE_COLUMN_INDEX = 1; // 0x1 + field public static final int TYPE_ALARM = 4; // 0x4 + field public static final int TYPE_ALL = 7; // 0x7 + field public static final int TYPE_NOTIFICATION = 2; // 0x2 + field public static final int TYPE_RINGTONE = 1; // 0x1 + field public static final int URI_COLUMN_INDEX = 2; // 0x2 + } + + public class SoundPool { + ctor public deprecated SoundPool(int, int, int); + method public final void autoPause(); + method public final void autoResume(); + method public int load(java.lang.String, int); + method public int load(android.content.Context, int, int); + method public int load(android.content.res.AssetFileDescriptor, int); + method public int load(java.io.FileDescriptor, long, long, int); + method public final void pause(int); + method public final int play(int, float, float, int, int, float); + method public final void release(); + method public final void resume(int); + method public final void setLoop(int, int); + method public void setOnLoadCompleteListener(android.media.SoundPool.OnLoadCompleteListener); + method public final void setPriority(int, int); + method public final void setRate(int, float); + method public final void setVolume(int, float, float); + method public final void stop(int); + method public final boolean unload(int); + } + + public static class SoundPool.Builder { + ctor public SoundPool.Builder(); + method public android.media.SoundPool build(); + method public android.media.SoundPool.Builder setAudioAttributes(android.media.AudioAttributes) throws java.lang.IllegalArgumentException; + method public android.media.SoundPool.Builder setMaxStreams(int) throws java.lang.IllegalArgumentException; + } + + public static abstract interface SoundPool.OnLoadCompleteListener { + method public abstract void onLoadComplete(android.media.SoundPool, int, int); + } + + public class ThumbnailUtils { + ctor public ThumbnailUtils(); + method public static android.graphics.Bitmap createVideoThumbnail(java.lang.String, int); + method public static android.graphics.Bitmap extractThumbnail(android.graphics.Bitmap, int, int); + method public static android.graphics.Bitmap extractThumbnail(android.graphics.Bitmap, int, int, int); + field public static final int OPTIONS_RECYCLE_INPUT = 2; // 0x2 + } + + public final class TimedText { + method public android.graphics.Rect getBounds(); + method public java.lang.String getText(); + } + + public class ToneGenerator { + ctor public ToneGenerator(int, int); + method public final int getAudioSessionId(); + method public void release(); + method public boolean startTone(int); + method public boolean startTone(int, int); + method public void stopTone(); + field public static final int MAX_VOLUME = 100; // 0x64 + field public static final int MIN_VOLUME = 0; // 0x0 + field public static final int TONE_CDMA_ABBR_ALERT = 97; // 0x61 + field public static final int TONE_CDMA_ABBR_INTERCEPT = 37; // 0x25 + field public static final int TONE_CDMA_ABBR_REORDER = 39; // 0x27 + field public static final int TONE_CDMA_ALERT_AUTOREDIAL_LITE = 87; // 0x57 + field public static final int TONE_CDMA_ALERT_CALL_GUARD = 93; // 0x5d + field public static final int TONE_CDMA_ALERT_INCALL_LITE = 91; // 0x5b + field public static final int TONE_CDMA_ALERT_NETWORK_LITE = 86; // 0x56 + field public static final int TONE_CDMA_ANSWER = 42; // 0x2a + field public static final int TONE_CDMA_CALLDROP_LITE = 95; // 0x5f + field public static final int TONE_CDMA_CALL_SIGNAL_ISDN_INTERGROUP = 46; // 0x2e + field public static final int TONE_CDMA_CALL_SIGNAL_ISDN_NORMAL = 45; // 0x2d + field public static final int TONE_CDMA_CALL_SIGNAL_ISDN_PAT3 = 48; // 0x30 + field public static final int TONE_CDMA_CALL_SIGNAL_ISDN_PAT5 = 50; // 0x32 + field public static final int TONE_CDMA_CALL_SIGNAL_ISDN_PAT6 = 51; // 0x33 + field public static final int TONE_CDMA_CALL_SIGNAL_ISDN_PAT7 = 52; // 0x34 + field public static final int TONE_CDMA_CALL_SIGNAL_ISDN_PING_RING = 49; // 0x31 + field public static final int TONE_CDMA_CALL_SIGNAL_ISDN_SP_PRI = 47; // 0x2f + field public static final int TONE_CDMA_CONFIRM = 41; // 0x29 + field public static final int TONE_CDMA_DIAL_TONE_LITE = 34; // 0x22 + field public static final int TONE_CDMA_EMERGENCY_RINGBACK = 92; // 0x5c + field public static final int TONE_CDMA_HIGH_L = 53; // 0x35 + field public static final int TONE_CDMA_HIGH_PBX_L = 71; // 0x47 + field public static final int TONE_CDMA_HIGH_PBX_SLS = 80; // 0x50 + field public static final int TONE_CDMA_HIGH_PBX_SS = 74; // 0x4a + field public static final int TONE_CDMA_HIGH_PBX_SSL = 77; // 0x4d + field public static final int TONE_CDMA_HIGH_PBX_S_X4 = 83; // 0x53 + field public static final int TONE_CDMA_HIGH_SLS = 65; // 0x41 + field public static final int TONE_CDMA_HIGH_SS = 56; // 0x38 + field public static final int TONE_CDMA_HIGH_SSL = 59; // 0x3b + field public static final int TONE_CDMA_HIGH_SS_2 = 62; // 0x3e + field public static final int TONE_CDMA_HIGH_S_X4 = 68; // 0x44 + field public static final int TONE_CDMA_INTERCEPT = 36; // 0x24 + field public static final int TONE_CDMA_KEYPAD_VOLUME_KEY_LITE = 89; // 0x59 + field public static final int TONE_CDMA_LOW_L = 55; // 0x37 + field public static final int TONE_CDMA_LOW_PBX_L = 73; // 0x49 + field public static final int TONE_CDMA_LOW_PBX_SLS = 82; // 0x52 + field public static final int TONE_CDMA_LOW_PBX_SS = 76; // 0x4c + field public static final int TONE_CDMA_LOW_PBX_SSL = 79; // 0x4f + field public static final int TONE_CDMA_LOW_PBX_S_X4 = 85; // 0x55 + field public static final int TONE_CDMA_LOW_SLS = 67; // 0x43 + field public static final int TONE_CDMA_LOW_SS = 58; // 0x3a + field public static final int TONE_CDMA_LOW_SSL = 61; // 0x3d + field public static final int TONE_CDMA_LOW_SS_2 = 64; // 0x40 + field public static final int TONE_CDMA_LOW_S_X4 = 70; // 0x46 + field public static final int TONE_CDMA_MED_L = 54; // 0x36 + field public static final int TONE_CDMA_MED_PBX_L = 72; // 0x48 + field public static final int TONE_CDMA_MED_PBX_SLS = 81; // 0x51 + field public static final int TONE_CDMA_MED_PBX_SS = 75; // 0x4b + field public static final int TONE_CDMA_MED_PBX_SSL = 78; // 0x4e + field public static final int TONE_CDMA_MED_PBX_S_X4 = 84; // 0x54 + field public static final int TONE_CDMA_MED_SLS = 66; // 0x42 + field public static final int TONE_CDMA_MED_SS = 57; // 0x39 + field public static final int TONE_CDMA_MED_SSL = 60; // 0x3c + field public static final int TONE_CDMA_MED_SS_2 = 63; // 0x3f + field public static final int TONE_CDMA_MED_S_X4 = 69; // 0x45 + field public static final int TONE_CDMA_NETWORK_BUSY = 40; // 0x28 + field public static final int TONE_CDMA_NETWORK_BUSY_ONE_SHOT = 96; // 0x60 + field public static final int TONE_CDMA_NETWORK_CALLWAITING = 43; // 0x2b + field public static final int TONE_CDMA_NETWORK_USA_RINGBACK = 35; // 0x23 + field public static final int TONE_CDMA_ONE_MIN_BEEP = 88; // 0x58 + field public static final int TONE_CDMA_PIP = 44; // 0x2c + field public static final int TONE_CDMA_PRESSHOLDKEY_LITE = 90; // 0x5a + field public static final int TONE_CDMA_REORDER = 38; // 0x26 + field public static final int TONE_CDMA_SIGNAL_OFF = 98; // 0x62 + field public static final int TONE_CDMA_SOFT_ERROR_LITE = 94; // 0x5e + field public static final int TONE_DTMF_0 = 0; // 0x0 + field public static final int TONE_DTMF_1 = 1; // 0x1 + field public static final int TONE_DTMF_2 = 2; // 0x2 + field public static final int TONE_DTMF_3 = 3; // 0x3 + field public static final int TONE_DTMF_4 = 4; // 0x4 + field public static final int TONE_DTMF_5 = 5; // 0x5 + field public static final int TONE_DTMF_6 = 6; // 0x6 + field public static final int TONE_DTMF_7 = 7; // 0x7 + field public static final int TONE_DTMF_8 = 8; // 0x8 + field public static final int TONE_DTMF_9 = 9; // 0x9 + field public static final int TONE_DTMF_A = 12; // 0xc + field public static final int TONE_DTMF_B = 13; // 0xd + field public static final int TONE_DTMF_C = 14; // 0xe + field public static final int TONE_DTMF_D = 15; // 0xf + field public static final int TONE_DTMF_P = 11; // 0xb + field public static final int TONE_DTMF_S = 10; // 0xa + field public static final int TONE_PROP_ACK = 25; // 0x19 + field public static final int TONE_PROP_BEEP = 24; // 0x18 + field public static final int TONE_PROP_BEEP2 = 28; // 0x1c + field public static final int TONE_PROP_NACK = 26; // 0x1a + field public static final int TONE_PROP_PROMPT = 27; // 0x1b + field public static final int TONE_SUP_BUSY = 17; // 0x11 + field public static final int TONE_SUP_CALL_WAITING = 22; // 0x16 + field public static final int TONE_SUP_CONFIRM = 32; // 0x20 + field public static final int TONE_SUP_CONGESTION = 18; // 0x12 + field public static final int TONE_SUP_CONGESTION_ABBREV = 31; // 0x1f + field public static final int TONE_SUP_DIAL = 16; // 0x10 + field public static final int TONE_SUP_ERROR = 21; // 0x15 + field public static final int TONE_SUP_INTERCEPT = 29; // 0x1d + field public static final int TONE_SUP_INTERCEPT_ABBREV = 30; // 0x1e + field public static final int TONE_SUP_PIP = 33; // 0x21 + field public static final int TONE_SUP_RADIO_ACK = 19; // 0x13 + field public static final int TONE_SUP_RADIO_NOTAVAIL = 20; // 0x14 + field public static final int TONE_SUP_RINGTONE = 23; // 0x17 + } + + public final class UnsupportedSchemeException extends android.media.MediaDrmException { + ctor public UnsupportedSchemeException(java.lang.String); + } + + public abstract class VolumeProvider { + ctor public VolumeProvider(int, int, int); + method public final int getCurrentVolume(); + method public final int getMaxVolume(); + method public final int getVolumeControl(); + method public void onAdjustVolume(int); + method public void onSetVolumeTo(int); + method public final void setCurrentVolume(int); + field public static final int VOLUME_CONTROL_ABSOLUTE = 2; // 0x2 + field public static final int VOLUME_CONTROL_FIXED = 0; // 0x0 + field public static final int VOLUME_CONTROL_RELATIVE = 1; // 0x1 + } + +} + +package android.media.audiofx { + + public class AcousticEchoCanceler extends android.media.audiofx.AudioEffect { + method public static android.media.audiofx.AcousticEchoCanceler create(int); + method public static boolean isAvailable(); + } + + public class AudioEffect { + method public android.media.audiofx.AudioEffect.Descriptor getDescriptor() throws java.lang.IllegalStateException; + method public boolean getEnabled() throws java.lang.IllegalStateException; + method public int getId() throws java.lang.IllegalStateException; + method public boolean hasControl() throws java.lang.IllegalStateException; + method public static android.media.audiofx.AudioEffect.Descriptor[] queryEffects(); + method public void release(); + method public void setControlStatusListener(android.media.audiofx.AudioEffect.OnControlStatusChangeListener); + method public void setEnableStatusListener(android.media.audiofx.AudioEffect.OnEnableStatusChangeListener); + method public int setEnabled(boolean) throws java.lang.IllegalStateException; + field public static final java.lang.String ACTION_CLOSE_AUDIO_EFFECT_CONTROL_SESSION = "android.media.action.CLOSE_AUDIO_EFFECT_CONTROL_SESSION"; + field public static final java.lang.String ACTION_DISPLAY_AUDIO_EFFECT_CONTROL_PANEL = "android.media.action.DISPLAY_AUDIO_EFFECT_CONTROL_PANEL"; + field public static final java.lang.String ACTION_OPEN_AUDIO_EFFECT_CONTROL_SESSION = "android.media.action.OPEN_AUDIO_EFFECT_CONTROL_SESSION"; + field public static final int ALREADY_EXISTS = -2; // 0xfffffffe + field public static final int CONTENT_TYPE_GAME = 2; // 0x2 + field public static final int CONTENT_TYPE_MOVIE = 1; // 0x1 + field public static final int CONTENT_TYPE_MUSIC = 0; // 0x0 + field public static final int CONTENT_TYPE_VOICE = 3; // 0x3 + field public static final java.lang.String EFFECT_AUXILIARY = "Auxiliary"; + field public static final java.lang.String EFFECT_INSERT = "Insert"; + field public static final java.util.UUID EFFECT_TYPE_AEC; + field public static final java.util.UUID EFFECT_TYPE_AGC; + field public static final java.util.UUID EFFECT_TYPE_BASS_BOOST; + field public static final java.util.UUID EFFECT_TYPE_ENV_REVERB; + field public static final java.util.UUID EFFECT_TYPE_EQUALIZER; + field public static final java.util.UUID EFFECT_TYPE_LOUDNESS_ENHANCER; + field public static final java.util.UUID EFFECT_TYPE_NS; + field public static final java.util.UUID EFFECT_TYPE_PRESET_REVERB; + field public static final java.util.UUID EFFECT_TYPE_VIRTUALIZER; + field public static final int ERROR = -1; // 0xffffffff + field public static final int ERROR_BAD_VALUE = -4; // 0xfffffffc + field public static final int ERROR_DEAD_OBJECT = -7; // 0xfffffff9 + field public static final int ERROR_INVALID_OPERATION = -5; // 0xfffffffb + field public static final int ERROR_NO_INIT = -3; // 0xfffffffd + field public static final int ERROR_NO_MEMORY = -6; // 0xfffffffa + field public static final java.lang.String EXTRA_AUDIO_SESSION = "android.media.extra.AUDIO_SESSION"; + field public static final java.lang.String EXTRA_CONTENT_TYPE = "android.media.extra.CONTENT_TYPE"; + field public static final java.lang.String EXTRA_PACKAGE_NAME = "android.media.extra.PACKAGE_NAME"; + field public static final int SUCCESS = 0; // 0x0 + } + + public static class AudioEffect.Descriptor { + ctor public AudioEffect.Descriptor(); + ctor public AudioEffect.Descriptor(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String); + field public java.lang.String connectMode; + field public java.lang.String implementor; + field public java.lang.String name; + field public java.util.UUID type; + field public java.util.UUID uuid; + } + + public static abstract interface AudioEffect.OnControlStatusChangeListener { + method public abstract void onControlStatusChange(android.media.audiofx.AudioEffect, boolean); + } + + public static abstract interface AudioEffect.OnEnableStatusChangeListener { + method public abstract void onEnableStatusChange(android.media.audiofx.AudioEffect, boolean); + } + + public class AutomaticGainControl extends android.media.audiofx.AudioEffect { + method public static android.media.audiofx.AutomaticGainControl create(int); + method public static boolean isAvailable(); + } + + public class BassBoost extends android.media.audiofx.AudioEffect { + ctor public BassBoost(int, int) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.RuntimeException, java.lang.UnsupportedOperationException; + method public android.media.audiofx.BassBoost.Settings getProperties() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + method public short getRoundedStrength() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + method public boolean getStrengthSupported(); + method public void setParameterListener(android.media.audiofx.BassBoost.OnParameterChangeListener); + method public void setProperties(android.media.audiofx.BassBoost.Settings) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + method public void setStrength(short) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + field public static final int PARAM_STRENGTH = 1; // 0x1 + field public static final int PARAM_STRENGTH_SUPPORTED = 0; // 0x0 + } + + public static abstract interface BassBoost.OnParameterChangeListener { + method public abstract void onParameterChange(android.media.audiofx.BassBoost, int, int, short); + } + + public static class BassBoost.Settings { + ctor public BassBoost.Settings(); + ctor public BassBoost.Settings(java.lang.String); + field public short strength; + } + + public class EnvironmentalReverb extends android.media.audiofx.AudioEffect { + ctor public EnvironmentalReverb(int, int) throws java.lang.IllegalArgumentException, java.lang.RuntimeException, java.lang.UnsupportedOperationException; + method public short getDecayHFRatio() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + method public int getDecayTime() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + method public short getDensity() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + method public short getDiffusion() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + method public android.media.audiofx.EnvironmentalReverb.Settings getProperties() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + method public int getReflectionsDelay() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + method public short getReflectionsLevel() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + method public int getReverbDelay() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + method public short getReverbLevel() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + method public short getRoomHFLevel() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + method public short getRoomLevel() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + method public void setDecayHFRatio(short) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + method public void setDecayTime(int) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + method public void setDensity(short) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + method public void setDiffusion(short) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + method public void setParameterListener(android.media.audiofx.EnvironmentalReverb.OnParameterChangeListener); + method public void setProperties(android.media.audiofx.EnvironmentalReverb.Settings) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + method public void setReflectionsDelay(int) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + method public void setReflectionsLevel(short) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + method public void setReverbDelay(int) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + method public void setReverbLevel(short) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + method public void setRoomHFLevel(short) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + method public void setRoomLevel(short) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + field public static final int PARAM_DECAY_HF_RATIO = 3; // 0x3 + field public static final int PARAM_DECAY_TIME = 2; // 0x2 + field public static final int PARAM_DENSITY = 9; // 0x9 + field public static final int PARAM_DIFFUSION = 8; // 0x8 + field public static final int PARAM_REFLECTIONS_DELAY = 5; // 0x5 + field public static final int PARAM_REFLECTIONS_LEVEL = 4; // 0x4 + field public static final int PARAM_REVERB_DELAY = 7; // 0x7 + field public static final int PARAM_REVERB_LEVEL = 6; // 0x6 + field public static final int PARAM_ROOM_HF_LEVEL = 1; // 0x1 + field public static final int PARAM_ROOM_LEVEL = 0; // 0x0 + } + + public static abstract interface EnvironmentalReverb.OnParameterChangeListener { + method public abstract void onParameterChange(android.media.audiofx.EnvironmentalReverb, int, int, int); + } + + public static class EnvironmentalReverb.Settings { + ctor public EnvironmentalReverb.Settings(); + ctor public EnvironmentalReverb.Settings(java.lang.String); + field public short decayHFRatio; + field public int decayTime; + field public short density; + field public short diffusion; + field public int reflectionsDelay; + field public short reflectionsLevel; + field public int reverbDelay; + field public short reverbLevel; + field public short roomHFLevel; + field public short roomLevel; + } + + public class Equalizer extends android.media.audiofx.AudioEffect { + ctor public Equalizer(int, int) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.RuntimeException, java.lang.UnsupportedOperationException; + method public short getBand(int) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + method public int[] getBandFreqRange(short) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + method public short getBandLevel(short) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + method public short[] getBandLevelRange() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + method public int getCenterFreq(short) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + method public short getCurrentPreset() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + method public short getNumberOfBands() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + method public short getNumberOfPresets() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + method public java.lang.String getPresetName(short); + method public android.media.audiofx.Equalizer.Settings getProperties() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + method public void setBandLevel(short, short) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + method public void setParameterListener(android.media.audiofx.Equalizer.OnParameterChangeListener); + method public void setProperties(android.media.audiofx.Equalizer.Settings) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + method public void usePreset(short) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + field public static final int PARAM_BAND_FREQ_RANGE = 4; // 0x4 + field public static final int PARAM_BAND_LEVEL = 2; // 0x2 + field public static final int PARAM_CENTER_FREQ = 3; // 0x3 + field public static final int PARAM_CURRENT_PRESET = 6; // 0x6 + field public static final int PARAM_GET_BAND = 5; // 0x5 + field public static final int PARAM_GET_NUM_OF_PRESETS = 7; // 0x7 + field public static final int PARAM_GET_PRESET_NAME = 8; // 0x8 + field public static final int PARAM_LEVEL_RANGE = 1; // 0x1 + field public static final int PARAM_NUM_BANDS = 0; // 0x0 + field public static final int PARAM_STRING_SIZE_MAX = 32; // 0x20 + } + + public static abstract interface Equalizer.OnParameterChangeListener { + method public abstract void onParameterChange(android.media.audiofx.Equalizer, int, int, int, int); + } + + public static class Equalizer.Settings { + ctor public Equalizer.Settings(); + ctor public Equalizer.Settings(java.lang.String); + field public short[] bandLevels; + field public short curPreset; + field public short numBands; + } + + public class LoudnessEnhancer extends android.media.audiofx.AudioEffect { + ctor public LoudnessEnhancer(int) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.RuntimeException, java.lang.UnsupportedOperationException; + method public float getTargetGain() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + method public void setTargetGain(int) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + field public static final int PARAM_TARGET_GAIN_MB = 0; // 0x0 + } + + public class NoiseSuppressor extends android.media.audiofx.AudioEffect { + method public static android.media.audiofx.NoiseSuppressor create(int); + method public static boolean isAvailable(); + } + + public class PresetReverb extends android.media.audiofx.AudioEffect { + ctor public PresetReverb(int, int) throws java.lang.IllegalArgumentException, java.lang.RuntimeException, java.lang.UnsupportedOperationException; + method public short getPreset() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + method public android.media.audiofx.PresetReverb.Settings getProperties() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + method public void setParameterListener(android.media.audiofx.PresetReverb.OnParameterChangeListener); + method public void setPreset(short) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + method public void setProperties(android.media.audiofx.PresetReverb.Settings) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + field public static final int PARAM_PRESET = 0; // 0x0 + field public static final short PRESET_LARGEHALL = 5; // 0x5 + field public static final short PRESET_LARGEROOM = 3; // 0x3 + field public static final short PRESET_MEDIUMHALL = 4; // 0x4 + field public static final short PRESET_MEDIUMROOM = 2; // 0x2 + field public static final short PRESET_NONE = 0; // 0x0 + field public static final short PRESET_PLATE = 6; // 0x6 + field public static final short PRESET_SMALLROOM = 1; // 0x1 + } + + public static abstract interface PresetReverb.OnParameterChangeListener { + method public abstract void onParameterChange(android.media.audiofx.PresetReverb, int, int, short); + } + + public static class PresetReverb.Settings { + ctor public PresetReverb.Settings(); + ctor public PresetReverb.Settings(java.lang.String); + field public short preset; + } + + public class Virtualizer extends android.media.audiofx.AudioEffect { + ctor public Virtualizer(int, int) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.RuntimeException, java.lang.UnsupportedOperationException; + method public boolean canVirtualize(int, int) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + method public boolean forceVirtualizationMode(int) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + method public android.media.audiofx.Virtualizer.Settings getProperties() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + method public short getRoundedStrength() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + method public boolean getSpeakerAngles(int, int, int[]) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + method public boolean getStrengthSupported(); + method public int getVirtualizationMode() throws java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + method public void setParameterListener(android.media.audiofx.Virtualizer.OnParameterChangeListener); + method public void setProperties(android.media.audiofx.Virtualizer.Settings) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + method public void setStrength(short) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException; + field public static final int PARAM_STRENGTH = 1; // 0x1 + field public static final int PARAM_STRENGTH_SUPPORTED = 0; // 0x0 + field public static final int VIRTUALIZATION_MODE_AUTO = 1; // 0x1 + field public static final int VIRTUALIZATION_MODE_BINAURAL = 2; // 0x2 + field public static final int VIRTUALIZATION_MODE_OFF = 0; // 0x0 + field public static final int VIRTUALIZATION_MODE_TRANSAURAL = 3; // 0x3 + } + + public static abstract interface Virtualizer.OnParameterChangeListener { + method public abstract void onParameterChange(android.media.audiofx.Virtualizer, int, int, short); + } + + public static class Virtualizer.Settings { + ctor public Virtualizer.Settings(); + ctor public Virtualizer.Settings(java.lang.String); + field public short strength; + } + + public class Visualizer { + ctor public Visualizer(int) throws java.lang.RuntimeException, java.lang.UnsupportedOperationException; + method public int getCaptureSize() throws java.lang.IllegalStateException; + method public static int[] getCaptureSizeRange(); + method public boolean getEnabled(); + method public int getFft(byte[]) throws java.lang.IllegalStateException; + method public static int getMaxCaptureRate(); + method public int getMeasurementMode() throws java.lang.IllegalStateException; + method public int getMeasurementPeakRms(android.media.audiofx.Visualizer.MeasurementPeakRms); + method public int getSamplingRate() throws java.lang.IllegalStateException; + method public int getScalingMode() throws java.lang.IllegalStateException; + method public int getWaveForm(byte[]) throws java.lang.IllegalStateException; + method public void release(); + method public int setCaptureSize(int) throws java.lang.IllegalStateException; + method public int setDataCaptureListener(android.media.audiofx.Visualizer.OnDataCaptureListener, int, boolean, boolean); + method public int setEnabled(boolean) throws java.lang.IllegalStateException; + method public int setMeasurementMode(int) throws java.lang.IllegalStateException; + method public int setScalingMode(int) throws java.lang.IllegalStateException; + field public static final int ALREADY_EXISTS = -2; // 0xfffffffe + field public static final int ERROR = -1; // 0xffffffff + field public static final int ERROR_BAD_VALUE = -4; // 0xfffffffc + field public static final int ERROR_DEAD_OBJECT = -7; // 0xfffffff9 + field public static final int ERROR_INVALID_OPERATION = -5; // 0xfffffffb + field public static final int ERROR_NO_INIT = -3; // 0xfffffffd + field public static final int ERROR_NO_MEMORY = -6; // 0xfffffffa + field public static final int MEASUREMENT_MODE_NONE = 0; // 0x0 + field public static final int MEASUREMENT_MODE_PEAK_RMS = 1; // 0x1 + field public static final int SCALING_MODE_AS_PLAYED = 1; // 0x1 + field public static final int SCALING_MODE_NORMALIZED = 0; // 0x0 + field public static final int STATE_ENABLED = 2; // 0x2 + field public static final int STATE_INITIALIZED = 1; // 0x1 + field public static final int STATE_UNINITIALIZED = 0; // 0x0 + field public static final int SUCCESS = 0; // 0x0 + } + + public static final class Visualizer.MeasurementPeakRms { + ctor public Visualizer.MeasurementPeakRms(); + field public int mPeak; + field public int mRms; + } + + public static abstract interface Visualizer.OnDataCaptureListener { + method public abstract void onFftDataCapture(android.media.audiofx.Visualizer, byte[], int); + method public abstract void onWaveFormDataCapture(android.media.audiofx.Visualizer, byte[], int); + } + +} + +package android.media.audiopolicy { + + public class AudioMix { + field public static final int ROUTE_FLAG_LOOP_BACK = 2; // 0x2 + field public static final int ROUTE_FLAG_RENDER = 1; // 0x1 + } + + public static class AudioMix.Builder { + ctor public AudioMix.Builder(android.media.audiopolicy.AudioMixingRule) throws java.lang.IllegalArgumentException; + method public android.media.audiopolicy.AudioMix build() throws java.lang.IllegalArgumentException; + method public android.media.audiopolicy.AudioMix.Builder setFormat(android.media.AudioFormat) throws java.lang.IllegalArgumentException; + method public android.media.audiopolicy.AudioMix.Builder setRouteFlags(int) throws java.lang.IllegalArgumentException; + } + + public class AudioMixingRule { + field public static final int RULE_MATCH_ATTRIBUTE_CAPTURE_PRESET = 2; // 0x2 + field public static final int RULE_MATCH_ATTRIBUTE_USAGE = 1; // 0x1 + } + + public static class AudioMixingRule.Builder { + ctor public AudioMixingRule.Builder(); + method public android.media.audiopolicy.AudioMixingRule.Builder addRule(android.media.AudioAttributes, int) throws java.lang.IllegalArgumentException; + method public android.media.audiopolicy.AudioMixingRule build(); + method public android.media.audiopolicy.AudioMixingRule.Builder excludeRule(android.media.AudioAttributes, int) throws java.lang.IllegalArgumentException; + } + + public class AudioPolicy { + method public android.media.AudioRecord createAudioRecordSink(android.media.audiopolicy.AudioMix) throws java.lang.IllegalArgumentException; + method public android.media.AudioTrack createAudioTrackSource(android.media.audiopolicy.AudioMix) throws java.lang.IllegalArgumentException; + method public int getFocusDuckingBehavior(); + method public int getStatus(); + method public int setFocusDuckingBehavior(int) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException; + method public void setRegistration(java.lang.String); + method public java.lang.String toLogFriendlyString(); + field public static final int FOCUS_POLICY_DUCKING_DEFAULT = 0; // 0x0 + field public static final int FOCUS_POLICY_DUCKING_IN_APP = 0; // 0x0 + field public static final int FOCUS_POLICY_DUCKING_IN_POLICY = 1; // 0x1 + field public static final int POLICY_STATUS_REGISTERED = 2; // 0x2 + field public static final int POLICY_STATUS_UNREGISTERED = 1; // 0x1 + } + + public static abstract class AudioPolicy.AudioPolicyFocusListener { + ctor public AudioPolicy.AudioPolicyFocusListener(); + method public void onAudioFocusGrant(android.media.AudioFocusInfo, int); + method public void onAudioFocusLoss(android.media.AudioFocusInfo, boolean); + } + + public static abstract class AudioPolicy.AudioPolicyStatusListener { + ctor public AudioPolicy.AudioPolicyStatusListener(); + method public void onMixStateUpdate(android.media.audiopolicy.AudioMix); + method public void onStatusChange(); + } + + public static class AudioPolicy.Builder { + ctor public AudioPolicy.Builder(android.content.Context); + method public android.media.audiopolicy.AudioPolicy.Builder addMix(android.media.audiopolicy.AudioMix) throws java.lang.IllegalArgumentException; + method public android.media.audiopolicy.AudioPolicy build(); + method public void setAudioPolicyFocusListener(android.media.audiopolicy.AudioPolicy.AudioPolicyFocusListener); + method public void setAudioPolicyStatusListener(android.media.audiopolicy.AudioPolicy.AudioPolicyStatusListener); + method public android.media.audiopolicy.AudioPolicy.Builder setLooper(android.os.Looper) throws java.lang.IllegalArgumentException; + } + +} + +package android.media.browse { + + public final class MediaBrowser { + ctor public MediaBrowser(android.content.Context, android.content.ComponentName, android.media.browse.MediaBrowser.ConnectionCallback, android.os.Bundle); + method public void connect(); + method public void disconnect(); + method public android.os.Bundle getExtras(); + method public java.lang.String getRoot(); + method public android.content.ComponentName getServiceComponent(); + method public android.media.session.MediaSession.Token getSessionToken(); + method public boolean isConnected(); + method public void subscribe(java.lang.String, android.media.browse.MediaBrowser.SubscriptionCallback); + method public void unsubscribe(java.lang.String); + } + + public static class MediaBrowser.ConnectionCallback { + ctor public MediaBrowser.ConnectionCallback(); + method public void onConnected(); + method public void onConnectionFailed(); + method public void onConnectionSuspended(); + } + + public static class MediaBrowser.MediaItem implements android.os.Parcelable { + ctor public MediaBrowser.MediaItem(android.media.MediaDescription, int); + method public int describeContents(); + method public android.media.MediaDescription getDescription(); + method public int getFlags(); + method public java.lang.String getMediaId(); + method public boolean isBrowsable(); + method public boolean isPlayable(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int FLAG_BROWSABLE = 1; // 0x1 + field public static final int FLAG_PLAYABLE = 2; // 0x2 + } + + public static abstract class MediaBrowser.SubscriptionCallback { + ctor public MediaBrowser.SubscriptionCallback(); + method public void onChildrenLoaded(java.lang.String, java.util.List); + method public void onError(java.lang.String); + } + +} + +package android.media.effect { + + public abstract class Effect { + ctor public Effect(); + method public abstract void apply(int, int, int, int); + method public abstract java.lang.String getName(); + method public abstract void release(); + method public abstract void setParameter(java.lang.String, java.lang.Object); + method public void setUpdateListener(android.media.effect.EffectUpdateListener); + } + + public class EffectContext { + method public static android.media.effect.EffectContext createWithCurrentGlContext(); + method public android.media.effect.EffectFactory getFactory(); + method public void release(); + } + + public class EffectFactory { + method public android.media.effect.Effect createEffect(java.lang.String); + method public static boolean isEffectSupported(java.lang.String); + field public static final java.lang.String EFFECT_AUTOFIX = "android.media.effect.effects.AutoFixEffect"; + field public static final java.lang.String EFFECT_BACKDROPPER = "android.media.effect.effects.BackDropperEffect"; + field public static final java.lang.String EFFECT_BITMAPOVERLAY = "android.media.effect.effects.BitmapOverlayEffect"; + field public static final java.lang.String EFFECT_BLACKWHITE = "android.media.effect.effects.BlackWhiteEffect"; + field public static final java.lang.String EFFECT_BRIGHTNESS = "android.media.effect.effects.BrightnessEffect"; + field public static final java.lang.String EFFECT_CONTRAST = "android.media.effect.effects.ContrastEffect"; + field public static final java.lang.String EFFECT_CROP = "android.media.effect.effects.CropEffect"; + field public static final java.lang.String EFFECT_CROSSPROCESS = "android.media.effect.effects.CrossProcessEffect"; + field public static final java.lang.String EFFECT_DOCUMENTARY = "android.media.effect.effects.DocumentaryEffect"; + field public static final java.lang.String EFFECT_DUOTONE = "android.media.effect.effects.DuotoneEffect"; + field public static final java.lang.String EFFECT_FILLLIGHT = "android.media.effect.effects.FillLightEffect"; + field public static final java.lang.String EFFECT_FISHEYE = "android.media.effect.effects.FisheyeEffect"; + field public static final java.lang.String EFFECT_FLIP = "android.media.effect.effects.FlipEffect"; + field public static final java.lang.String EFFECT_GRAIN = "android.media.effect.effects.GrainEffect"; + field public static final java.lang.String EFFECT_GRAYSCALE = "android.media.effect.effects.GrayscaleEffect"; + field public static final java.lang.String EFFECT_LOMOISH = "android.media.effect.effects.LomoishEffect"; + field public static final java.lang.String EFFECT_NEGATIVE = "android.media.effect.effects.NegativeEffect"; + field public static final java.lang.String EFFECT_POSTERIZE = "android.media.effect.effects.PosterizeEffect"; + field public static final java.lang.String EFFECT_REDEYE = "android.media.effect.effects.RedEyeEffect"; + field public static final java.lang.String EFFECT_ROTATE = "android.media.effect.effects.RotateEffect"; + field public static final java.lang.String EFFECT_SATURATE = "android.media.effect.effects.SaturateEffect"; + field public static final java.lang.String EFFECT_SEPIA = "android.media.effect.effects.SepiaEffect"; + field public static final java.lang.String EFFECT_SHARPEN = "android.media.effect.effects.SharpenEffect"; + field public static final java.lang.String EFFECT_STRAIGHTEN = "android.media.effect.effects.StraightenEffect"; + field public static final java.lang.String EFFECT_TEMPERATURE = "android.media.effect.effects.ColorTemperatureEffect"; + field public static final java.lang.String EFFECT_TINT = "android.media.effect.effects.TintEffect"; + field public static final java.lang.String EFFECT_VIGNETTE = "android.media.effect.effects.VignetteEffect"; + } + + public abstract interface EffectUpdateListener { + method public abstract void onEffectUpdated(android.media.effect.Effect, java.lang.Object); + } + +} + +package android.media.projection { + + public final class MediaProjection { + method public android.hardware.display.VirtualDisplay createVirtualDisplay(java.lang.String, int, int, int, int, android.view.Surface, android.hardware.display.VirtualDisplay.Callback, android.os.Handler); + method public void registerCallback(android.media.projection.MediaProjection.Callback, android.os.Handler); + method public void stop(); + method public void unregisterCallback(android.media.projection.MediaProjection.Callback); + } + + public static abstract class MediaProjection.Callback { + ctor public MediaProjection.Callback(); + method public void onStop(); + } + + public final class MediaProjectionManager { + method public android.content.Intent createScreenCaptureIntent(); + method public android.media.projection.MediaProjection getMediaProjection(int, android.content.Intent); + } + +} + +package android.media.session { + + public final class MediaController { + ctor public MediaController(android.content.Context, android.media.session.MediaSession.Token); + method public void adjustVolume(int, int); + method public boolean dispatchMediaButtonEvent(android.view.KeyEvent); + method public android.os.Bundle getExtras(); + method public long getFlags(); + method public android.media.MediaMetadata getMetadata(); + method public java.lang.String getPackageName(); + method public android.media.session.MediaController.PlaybackInfo getPlaybackInfo(); + method public android.media.session.PlaybackState getPlaybackState(); + method public java.util.List getQueue(); + method public java.lang.CharSequence getQueueTitle(); + method public int getRatingType(); + method public android.app.PendingIntent getSessionActivity(); + method public android.media.session.MediaSession.Token getSessionToken(); + method public android.media.session.MediaController.TransportControls getTransportControls(); + method public void registerCallback(android.media.session.MediaController.Callback); + method public void registerCallback(android.media.session.MediaController.Callback, android.os.Handler); + method public void sendCommand(java.lang.String, android.os.Bundle, android.os.ResultReceiver); + method public void setVolumeTo(int, int); + method public void unregisterCallback(android.media.session.MediaController.Callback); + } + + public static abstract class MediaController.Callback { + ctor public MediaController.Callback(); + method public void onAudioInfoChanged(android.media.session.MediaController.PlaybackInfo); + method public void onExtrasChanged(android.os.Bundle); + method public void onMetadataChanged(android.media.MediaMetadata); + method public void onPlaybackStateChanged(android.media.session.PlaybackState); + method public void onQueueChanged(java.util.List); + method public void onQueueTitleChanged(java.lang.CharSequence); + method public void onSessionDestroyed(); + method public void onSessionEvent(java.lang.String, android.os.Bundle); + } + + public static final class MediaController.PlaybackInfo { + method public android.media.AudioAttributes getAudioAttributes(); + method public int getCurrentVolume(); + method public int getMaxVolume(); + method public int getPlaybackType(); + method public int getVolumeControl(); + field public static final int PLAYBACK_TYPE_LOCAL = 1; // 0x1 + field public static final int PLAYBACK_TYPE_REMOTE = 2; // 0x2 + } + + public final class MediaController.TransportControls { + method public void fastForward(); + method public void pause(); + method public void play(); + method public void playFromMediaId(java.lang.String, android.os.Bundle); + method public void playFromSearch(java.lang.String, android.os.Bundle); + method public void rewind(); + method public void seekTo(long); + method public void sendCustomAction(android.media.session.PlaybackState.CustomAction, android.os.Bundle); + method public void sendCustomAction(java.lang.String, android.os.Bundle); + method public void setRating(android.media.Rating); + method public void skipToNext(); + method public void skipToPrevious(); + method public void skipToQueueItem(long); + method public void stop(); + } + + public final class MediaSession { + ctor public MediaSession(android.content.Context, java.lang.String); + method public android.media.session.MediaController getController(); + method public android.media.session.MediaSession.Token getSessionToken(); + method public boolean isActive(); + method public void release(); + method public void sendSessionEvent(java.lang.String, android.os.Bundle); + method public void setActive(boolean); + method public void setCallback(android.media.session.MediaSession.Callback); + method public void setCallback(android.media.session.MediaSession.Callback, android.os.Handler); + method public void setExtras(android.os.Bundle); + method public void setFlags(int); + method public void setMediaButtonReceiver(android.app.PendingIntent); + method public void setMetadata(android.media.MediaMetadata); + method public void setPlaybackState(android.media.session.PlaybackState); + method public void setPlaybackToLocal(android.media.AudioAttributes); + method public void setPlaybackToRemote(android.media.VolumeProvider); + method public void setQueue(java.util.List); + method public void setQueueTitle(java.lang.CharSequence); + method public void setRatingType(int); + method public void setSessionActivity(android.app.PendingIntent); + field public static final int FLAG_HANDLES_MEDIA_BUTTONS = 1; // 0x1 + field public static final int FLAG_HANDLES_TRANSPORT_CONTROLS = 2; // 0x2 + } + + public static abstract class MediaSession.Callback { + ctor public MediaSession.Callback(); + method public void onCommand(java.lang.String, android.os.Bundle, android.os.ResultReceiver); + method public void onCustomAction(java.lang.String, android.os.Bundle); + method public void onFastForward(); + method public boolean onMediaButtonEvent(android.content.Intent); + method public void onPause(); + method public void onPlay(); + method public void onPlayFromMediaId(java.lang.String, android.os.Bundle); + method public void onPlayFromSearch(java.lang.String, android.os.Bundle); + method public void onRewind(); + method public void onSeekTo(long); + method public void onSetRating(android.media.Rating); + method public void onSkipToNext(); + method public void onSkipToPrevious(); + method public void onSkipToQueueItem(long); + method public void onStop(); + } + + public static final class MediaSession.QueueItem implements android.os.Parcelable { + ctor public MediaSession.QueueItem(android.media.MediaDescription, long); + method public int describeContents(); + method public android.media.MediaDescription getDescription(); + method public long getQueueId(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int UNKNOWN_ID = -1; // 0xffffffff + } + + public static final class MediaSession.Token implements android.os.Parcelable { + method public int describeContents(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public final class MediaSessionManager { + method public void addOnActiveSessionsChangedListener(android.media.session.MediaSessionManager.OnActiveSessionsChangedListener, android.content.ComponentName); + method public void addOnActiveSessionsChangedListener(android.media.session.MediaSessionManager.OnActiveSessionsChangedListener, android.content.ComponentName, android.os.Handler); + method public java.util.List getActiveSessions(android.content.ComponentName); + method public void removeOnActiveSessionsChangedListener(android.media.session.MediaSessionManager.OnActiveSessionsChangedListener); + } + + public static abstract interface MediaSessionManager.OnActiveSessionsChangedListener { + method public abstract void onActiveSessionsChanged(java.util.List); + } + + public final class PlaybackState implements android.os.Parcelable { + method public int describeContents(); + method public long getActions(); + method public long getActiveQueueItemId(); + method public long getBufferedPosition(); + method public java.util.List getCustomActions(); + method public java.lang.CharSequence getErrorMessage(); + method public android.os.Bundle getExtras(); + method public long getLastPositionUpdateTime(); + method public float getPlaybackSpeed(); + method public long getPosition(); + method public int getState(); + method public void writeToParcel(android.os.Parcel, int); + field public static final long ACTION_FAST_FORWARD = 64L; // 0x40L + field public static final long ACTION_PAUSE = 2L; // 0x2L + field public static final long ACTION_PLAY = 4L; // 0x4L + field public static final long ACTION_PLAY_FROM_MEDIA_ID = 1024L; // 0x400L + field public static final long ACTION_PLAY_FROM_SEARCH = 2048L; // 0x800L + field public static final long ACTION_PLAY_PAUSE = 512L; // 0x200L + field public static final long ACTION_REWIND = 8L; // 0x8L + field public static final long ACTION_SEEK_TO = 256L; // 0x100L + field public static final long ACTION_SET_RATING = 128L; // 0x80L + field public static final long ACTION_SKIP_TO_NEXT = 32L; // 0x20L + field public static final long ACTION_SKIP_TO_PREVIOUS = 16L; // 0x10L + field public static final long ACTION_SKIP_TO_QUEUE_ITEM = 4096L; // 0x1000L + field public static final long ACTION_STOP = 1L; // 0x1L + field public static final android.os.Parcelable.Creator CREATOR; + field public static final long PLAYBACK_POSITION_UNKNOWN = -1L; // 0xffffffffffffffffL + field public static final int STATE_BUFFERING = 6; // 0x6 + field public static final int STATE_CONNECTING = 8; // 0x8 + field public static final int STATE_ERROR = 7; // 0x7 + field public static final int STATE_FAST_FORWARDING = 4; // 0x4 + field public static final int STATE_NONE = 0; // 0x0 + field public static final int STATE_PAUSED = 2; // 0x2 + field public static final int STATE_PLAYING = 3; // 0x3 + field public static final int STATE_REWINDING = 5; // 0x5 + field public static final int STATE_SKIPPING_TO_NEXT = 10; // 0xa + field public static final int STATE_SKIPPING_TO_PREVIOUS = 9; // 0x9 + field public static final int STATE_SKIPPING_TO_QUEUE_ITEM = 11; // 0xb + field public static final int STATE_STOPPED = 1; // 0x1 + } + + public static final class PlaybackState.Builder { + ctor public PlaybackState.Builder(); + ctor public PlaybackState.Builder(android.media.session.PlaybackState); + method public android.media.session.PlaybackState.Builder addCustomAction(java.lang.String, java.lang.String, int); + method public android.media.session.PlaybackState.Builder addCustomAction(android.media.session.PlaybackState.CustomAction); + method public android.media.session.PlaybackState build(); + method public android.media.session.PlaybackState.Builder setActions(long); + method public android.media.session.PlaybackState.Builder setActiveQueueItemId(long); + method public android.media.session.PlaybackState.Builder setBufferedPosition(long); + method public android.media.session.PlaybackState.Builder setErrorMessage(java.lang.CharSequence); + method public android.media.session.PlaybackState.Builder setExtras(android.os.Bundle); + method public android.media.session.PlaybackState.Builder setState(int, long, float, long); + method public android.media.session.PlaybackState.Builder setState(int, long, float); + } + + public static final class PlaybackState.CustomAction implements android.os.Parcelable { + method public int describeContents(); + method public java.lang.String getAction(); + method public android.os.Bundle getExtras(); + method public int getIcon(); + method public java.lang.CharSequence getName(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public static final class PlaybackState.CustomAction.Builder { + ctor public PlaybackState.CustomAction.Builder(java.lang.String, java.lang.CharSequence, int); + method public android.media.session.PlaybackState.CustomAction build(); + method public android.media.session.PlaybackState.CustomAction.Builder setExtras(android.os.Bundle); + } + +} + +package android.media.tv { + + public final class TvContentRating { + method public final boolean contains(android.media.tv.TvContentRating); + method public static android.media.tv.TvContentRating createRating(java.lang.String, java.lang.String, java.lang.String, java.lang.String...); + method public java.lang.String flattenToString(); + method public java.lang.String getDomain(); + method public java.lang.String getMainRating(); + method public java.lang.String getRatingSystem(); + method public java.util.List getSubRatings(); + method public static android.media.tv.TvContentRating unflattenFromString(java.lang.String); + } + + public final class TvContentRatingSystemInfo implements android.os.Parcelable { + method public static final android.media.tv.TvContentRatingSystemInfo createTvContentRatingSystemInfo(int, android.content.pm.ApplicationInfo); + method public int describeContents(); + method public final android.net.Uri getXmlUri(); + method public final boolean isSystemDefined(); + method public void writeToParcel(android.os.Parcel, int); + } + + public final class TvContract { + method public static final android.net.Uri buildChannelLogoUri(long); + method public static final android.net.Uri buildChannelLogoUri(android.net.Uri); + method public static final android.net.Uri buildChannelUri(long); + method public static final android.net.Uri buildChannelUriForPassthroughInput(java.lang.String); + method public static final android.net.Uri buildChannelsUriForInput(java.lang.String); + method public static final android.net.Uri buildChannelsUriForInput(java.lang.String, boolean); + method public static final android.net.Uri buildChannelsUriForInput(java.lang.String, java.lang.String, boolean); + method public static final java.lang.String buildInputId(android.content.ComponentName); + method public static final android.net.Uri buildProgramUri(long); + method public static final android.net.Uri buildProgramsUriForChannel(long); + method public static final android.net.Uri buildProgramsUriForChannel(android.net.Uri); + method public static final android.net.Uri buildProgramsUriForChannel(long, long, long); + method public static final android.net.Uri buildProgramsUriForChannel(android.net.Uri, long, long); + method public static final boolean isChannelUriForPassthroughInput(android.net.Uri); + field public static final java.lang.String AUTHORITY = "android.media.tv"; + } + + public static abstract interface TvContract.BaseTvColumns implements android.provider.BaseColumns { + field public static final java.lang.String COLUMN_PACKAGE_NAME = "package_name"; + } + + public static final class TvContract.Channels implements android.media.tv.TvContract.BaseTvColumns { + method public static final java.lang.String getVideoResolution(java.lang.String); + field public static final java.lang.String COLUMN_BROWSABLE = "browsable"; + field public static final java.lang.String COLUMN_DESCRIPTION = "description"; + field public static final java.lang.String COLUMN_DISPLAY_NAME = "display_name"; + field public static final java.lang.String COLUMN_DISPLAY_NUMBER = "display_number"; + field public static final java.lang.String COLUMN_INPUT_ID = "input_id"; + field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_DATA = "internal_provider_data"; + field public static final java.lang.String COLUMN_LOCKED = "locked"; + field public static final java.lang.String COLUMN_NETWORK_AFFILIATION = "network_affiliation"; + field public static final java.lang.String COLUMN_ORIGINAL_NETWORK_ID = "original_network_id"; + field public static final java.lang.String COLUMN_SEARCHABLE = "searchable"; + field public static final java.lang.String COLUMN_SERVICE_ID = "service_id"; + field public static final java.lang.String COLUMN_SERVICE_TYPE = "service_type"; + field public static final java.lang.String COLUMN_TRANSPORT_STREAM_ID = "transport_stream_id"; + field public static final java.lang.String COLUMN_TYPE = "type"; + field public static final java.lang.String COLUMN_VERSION_NUMBER = "version_number"; + field public static final java.lang.String COLUMN_VIDEO_FORMAT = "video_format"; + field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/channel"; + field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/channel"; + field public static final android.net.Uri CONTENT_URI; + field public static final java.lang.String SERVICE_TYPE_AUDIO = "SERVICE_TYPE_AUDIO"; + field public static final java.lang.String SERVICE_TYPE_AUDIO_VIDEO = "SERVICE_TYPE_AUDIO_VIDEO"; + field public static final java.lang.String SERVICE_TYPE_OTHER = "SERVICE_TYPE_OTHER"; + field public static final java.lang.String TYPE_1SEG = "TYPE_1SEG"; + field public static final java.lang.String TYPE_ATSC_C = "TYPE_ATSC_C"; + field public static final java.lang.String TYPE_ATSC_M_H = "TYPE_ATSC_M_H"; + field public static final java.lang.String TYPE_ATSC_T = "TYPE_ATSC_T"; + field public static final java.lang.String TYPE_CMMB = "TYPE_CMMB"; + field public static final java.lang.String TYPE_DTMB = "TYPE_DTMB"; + field public static final java.lang.String TYPE_DVB_C = "TYPE_DVB_C"; + field public static final java.lang.String TYPE_DVB_C2 = "TYPE_DVB_C2"; + field public static final java.lang.String TYPE_DVB_H = "TYPE_DVB_H"; + field public static final java.lang.String TYPE_DVB_S = "TYPE_DVB_S"; + field public static final java.lang.String TYPE_DVB_S2 = "TYPE_DVB_S2"; + field public static final java.lang.String TYPE_DVB_SH = "TYPE_DVB_SH"; + field public static final java.lang.String TYPE_DVB_T = "TYPE_DVB_T"; + field public static final java.lang.String TYPE_DVB_T2 = "TYPE_DVB_T2"; + field public static final java.lang.String TYPE_ISDB_C = "TYPE_ISDB_C"; + field public static final java.lang.String TYPE_ISDB_S = "TYPE_ISDB_S"; + field public static final java.lang.String TYPE_ISDB_T = "TYPE_ISDB_T"; + field public static final java.lang.String TYPE_ISDB_TB = "TYPE_ISDB_TB"; + field public static final java.lang.String TYPE_NTSC = "TYPE_NTSC"; + field public static final java.lang.String TYPE_OTHER = "TYPE_OTHER"; + field public static final java.lang.String TYPE_PAL = "TYPE_PAL"; + field public static final java.lang.String TYPE_SECAM = "TYPE_SECAM"; + field public static final java.lang.String TYPE_S_DMB = "TYPE_S_DMB"; + field public static final java.lang.String TYPE_T_DMB = "TYPE_T_DMB"; + field public static final java.lang.String VIDEO_FORMAT_1080I = "VIDEO_FORMAT_1080I"; + field public static final java.lang.String VIDEO_FORMAT_1080P = "VIDEO_FORMAT_1080P"; + field public static final java.lang.String VIDEO_FORMAT_2160P = "VIDEO_FORMAT_2160P"; + field public static final java.lang.String VIDEO_FORMAT_240P = "VIDEO_FORMAT_240P"; + field public static final java.lang.String VIDEO_FORMAT_360P = "VIDEO_FORMAT_360P"; + field public static final java.lang.String VIDEO_FORMAT_4320P = "VIDEO_FORMAT_4320P"; + field public static final java.lang.String VIDEO_FORMAT_480I = "VIDEO_FORMAT_480I"; + field public static final java.lang.String VIDEO_FORMAT_480P = "VIDEO_FORMAT_480P"; + field public static final java.lang.String VIDEO_FORMAT_576I = "VIDEO_FORMAT_576I"; + field public static final java.lang.String VIDEO_FORMAT_576P = "VIDEO_FORMAT_576P"; + field public static final java.lang.String VIDEO_FORMAT_720P = "VIDEO_FORMAT_720P"; + field public static final java.lang.String VIDEO_RESOLUTION_ED = "VIDEO_RESOLUTION_ED"; + field public static final java.lang.String VIDEO_RESOLUTION_FHD = "VIDEO_RESOLUTION_FHD"; + field public static final java.lang.String VIDEO_RESOLUTION_HD = "VIDEO_RESOLUTION_HD"; + field public static final java.lang.String VIDEO_RESOLUTION_SD = "VIDEO_RESOLUTION_SD"; + field public static final java.lang.String VIDEO_RESOLUTION_UHD = "VIDEO_RESOLUTION_UHD"; + } + + public static final class TvContract.Channels.Logo { + field public static final java.lang.String CONTENT_DIRECTORY = "logo"; + } + + public static final class TvContract.Programs implements android.media.tv.TvContract.BaseTvColumns { + field public static final java.lang.String COLUMN_AUDIO_LANGUAGE = "audio_language"; + field public static final java.lang.String COLUMN_BROADCAST_GENRE = "broadcast_genre"; + field public static final java.lang.String COLUMN_CANONICAL_GENRE = "canonical_genre"; + field public static final java.lang.String COLUMN_CHANNEL_ID = "channel_id"; + field public static final java.lang.String COLUMN_CONTENT_RATING = "content_rating"; + field public static final java.lang.String COLUMN_END_TIME_UTC_MILLIS = "end_time_utc_millis"; + field public static final java.lang.String COLUMN_EPISODE_NUMBER = "episode_number"; + field public static final java.lang.String COLUMN_EPISODE_TITLE = "episode_title"; + field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_DATA = "internal_provider_data"; + field public static final java.lang.String COLUMN_LONG_DESCRIPTION = "long_description"; + field public static final java.lang.String COLUMN_POSTER_ART_URI = "poster_art_uri"; + field public static final java.lang.String COLUMN_SEASON_NUMBER = "season_number"; + field public static final java.lang.String COLUMN_SHORT_DESCRIPTION = "short_description"; + field public static final java.lang.String COLUMN_START_TIME_UTC_MILLIS = "start_time_utc_millis"; + field public static final java.lang.String COLUMN_THUMBNAIL_URI = "thumbnail_uri"; + field public static final java.lang.String COLUMN_TITLE = "title"; + field public static final java.lang.String COLUMN_VERSION_NUMBER = "version_number"; + field public static final java.lang.String COLUMN_VIDEO_HEIGHT = "video_height"; + field public static final java.lang.String COLUMN_VIDEO_WIDTH = "video_width"; + field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/program"; + field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/program"; + field public static final android.net.Uri CONTENT_URI; + } + + public static final class TvContract.Programs.Genres { + method public static java.lang.String[] decode(java.lang.String); + method public static java.lang.String encode(java.lang.String...); + method public static boolean isCanonical(java.lang.String); + field public static final java.lang.String ANIMAL_WILDLIFE = "ANIMAL_WILDLIFE"; + field public static final java.lang.String ARTS = "ARTS"; + field public static final java.lang.String COMEDY = "COMEDY"; + field public static final java.lang.String DRAMA = "DRAMA"; + field public static final java.lang.String EDUCATION = "EDUCATION"; + field public static final java.lang.String ENTERTAINMENT = "ENTERTAINMENT"; + field public static final java.lang.String FAMILY_KIDS = "FAMILY_KIDS"; + field public static final java.lang.String GAMING = "GAMING"; + field public static final java.lang.String LIFE_STYLE = "LIFE_STYLE"; + field public static final java.lang.String MOVIES = "MOVIES"; + field public static final java.lang.String MUSIC = "MUSIC"; + field public static final java.lang.String NEWS = "NEWS"; + field public static final java.lang.String PREMIER = "PREMIER"; + field public static final java.lang.String SHOPPING = "SHOPPING"; + field public static final java.lang.String SPORTS = "SPORTS"; + field public static final java.lang.String TECH_SCIENCE = "TECH_SCIENCE"; + field public static final java.lang.String TRAVEL = "TRAVEL"; + } + + public static final class TvContract.WatchedPrograms implements android.media.tv.TvContract.BaseTvColumns { + field public static final java.lang.String COLUMN_CHANNEL_ID = "channel_id"; + field public static final java.lang.String COLUMN_DESCRIPTION = "description"; + field public static final java.lang.String COLUMN_END_TIME_UTC_MILLIS = "end_time_utc_millis"; + field public static final java.lang.String COLUMN_INTERNAL_SESSION_TOKEN = "session_token"; + field public static final java.lang.String COLUMN_INTERNAL_TUNE_PARAMS = "tune_params"; + field public static final java.lang.String COLUMN_START_TIME_UTC_MILLIS = "start_time_utc_millis"; + field public static final java.lang.String COLUMN_TITLE = "title"; + field public static final java.lang.String COLUMN_WATCH_END_TIME_UTC_MILLIS = "watch_end_time_utc_millis"; + field public static final java.lang.String COLUMN_WATCH_START_TIME_UTC_MILLIS = "watch_start_time_utc_millis"; + field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/watched_program"; + field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/watched_program"; + field public static final android.net.Uri CONTENT_URI; + } + + public final class TvInputHardwareInfo implements android.os.Parcelable { + method public int describeContents(); + method public java.lang.String getAudioAddress(); + method public int getAudioType(); + method public int getDeviceId(); + method public int getHdmiPortId(); + method public int getType(); + method public void readFromParcel(android.os.Parcel); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int TV_INPUT_TYPE_COMPONENT = 6; // 0x6 + field public static final int TV_INPUT_TYPE_COMPOSITE = 3; // 0x3 + field public static final int TV_INPUT_TYPE_DISPLAY_PORT = 10; // 0xa + field public static final int TV_INPUT_TYPE_DVI = 8; // 0x8 + field public static final int TV_INPUT_TYPE_HDMI = 9; // 0x9 + field public static final int TV_INPUT_TYPE_OTHER_HARDWARE = 1; // 0x1 + field public static final int TV_INPUT_TYPE_SCART = 5; // 0x5 + field public static final int TV_INPUT_TYPE_SVIDEO = 4; // 0x4 + field public static final int TV_INPUT_TYPE_TUNER = 2; // 0x2 + field public static final int TV_INPUT_TYPE_VGA = 7; // 0x7 + } + + public static final class TvInputHardwareInfo.Builder { + ctor public TvInputHardwareInfo.Builder(); + method public android.media.tv.TvInputHardwareInfo.Builder audioAddress(java.lang.String); + method public android.media.tv.TvInputHardwareInfo.Builder audioType(int); + method public android.media.tv.TvInputHardwareInfo build(); + method public android.media.tv.TvInputHardwareInfo.Builder deviceId(int); + method public android.media.tv.TvInputHardwareInfo.Builder hdmiPortId(int); + method public android.media.tv.TvInputHardwareInfo.Builder type(int); + } + + public final class TvInputInfo implements android.os.Parcelable { + method public android.content.Intent createSettingsIntent(); + method public android.content.Intent createSetupIntent(); + method public static android.media.tv.TvInputInfo createTvInputInfo(android.content.Context, android.content.pm.ResolveInfo, android.hardware.hdmi.HdmiDeviceInfo, java.lang.String, java.lang.String, android.net.Uri) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException; + method public static android.media.tv.TvInputInfo createTvInputInfo(android.content.Context, android.content.pm.ResolveInfo, android.media.tv.TvInputHardwareInfo, java.lang.String, android.net.Uri) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException; + method public int describeContents(); + method public android.hardware.hdmi.HdmiDeviceInfo getHdmiDeviceInfo(); + method public java.lang.String getId(); + method public java.lang.String getParentId(); + method public android.content.pm.ServiceInfo getServiceInfo(); + method public int getType(); + method public boolean isConnectedToHdmiSwitch(); + method public boolean isHidden(android.content.Context); + method public boolean isPassthroughInput(); + method public java.lang.CharSequence loadCustomLabel(android.content.Context); + method public android.graphics.drawable.Drawable loadIcon(android.content.Context); + method public java.lang.CharSequence loadLabel(android.content.Context); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final java.lang.String EXTRA_INPUT_ID = "android.media.tv.extra.INPUT_ID"; + field public static final int TYPE_COMPONENT = 1004; // 0x3ec + field public static final int TYPE_COMPOSITE = 1001; // 0x3e9 + field public static final int TYPE_DISPLAY_PORT = 1008; // 0x3f0 + field public static final int TYPE_DVI = 1006; // 0x3ee + field public static final int TYPE_HDMI = 1007; // 0x3ef + field public static final int TYPE_OTHER = 1000; // 0x3e8 + field public static final int TYPE_SCART = 1003; // 0x3eb + field public static final int TYPE_SVIDEO = 1002; // 0x3ea + field public static final int TYPE_TUNER = 0; // 0x0 + field public static final int TYPE_VGA = 1005; // 0x3ed + } + + public static final class TvInputInfo.TvInputSettings { + method public static java.util.Map getCustomLabels(android.content.Context, int); + method public static java.util.Set getHiddenTvInputIds(android.content.Context, int); + method public static void putCustomLabels(android.content.Context, java.util.Map, int); + method public static void putHiddenTvInputs(android.content.Context, java.util.Set, int); + } + + public final class TvInputManager { + method public android.media.tv.TvInputManager.Hardware acquireTvInputHardware(int, android.media.tv.TvInputManager.HardwareCallback, android.media.tv.TvInputInfo); + method public void addBlockedRating(android.media.tv.TvContentRating); + method public boolean captureFrame(java.lang.String, android.view.Surface, android.media.tv.TvStreamConfig); + method public void createSession(java.lang.String, android.media.tv.TvInputManager.SessionCallback, android.os.Handler); + method public java.util.List getAvailableTvStreamConfigList(java.lang.String); + method public java.util.List getBlockedRatings(); + method public java.util.List getHardwareList(); + method public int getInputState(java.lang.String); + method public java.util.List getTvContentRatingSystemList(); + method public android.media.tv.TvInputInfo getTvInputInfo(java.lang.String); + method public java.util.List getTvInputList(); + method public boolean isParentalControlsEnabled(); + method public boolean isRatingBlocked(android.media.tv.TvContentRating); + method public boolean isSingleSessionActive(); + method public void registerCallback(android.media.tv.TvInputManager.TvInputCallback, android.os.Handler); + method public void releaseTvInputHardware(int, android.media.tv.TvInputManager.Hardware); + method public void removeBlockedRating(android.media.tv.TvContentRating); + method public void setParentalControlsEnabled(boolean); + method public void unregisterCallback(android.media.tv.TvInputManager.TvInputCallback); + field public static final java.lang.String ACTION_BLOCKED_RATINGS_CHANGED = "android.media.tv.action.BLOCKED_RATINGS_CHANGED"; + field public static final java.lang.String ACTION_PARENTAL_CONTROLS_ENABLED_CHANGED = "android.media.tv.action.PARENTAL_CONTROLS_ENABLED_CHANGED"; + field public static final java.lang.String ACTION_QUERY_CONTENT_RATING_SYSTEMS = "android.media.tv.action.QUERY_CONTENT_RATING_SYSTEMS"; + field public static final int INPUT_STATE_CONNECTED = 0; // 0x0 + field public static final int INPUT_STATE_CONNECTED_STANDBY = 1; // 0x1 + field public static final int INPUT_STATE_DISCONNECTED = 2; // 0x2 + field public static final java.lang.String META_DATA_CONTENT_RATING_SYSTEMS = "android.media.tv.metadata.CONTENT_RATING_SYSTEMS"; + field public static final int VIDEO_UNAVAILABLE_REASON_BUFFERING = 3; // 0x3 + field public static final int VIDEO_UNAVAILABLE_REASON_TUNING = 1; // 0x1 + field public static final int VIDEO_UNAVAILABLE_REASON_UNKNOWN = 0; // 0x0 + field public static final int VIDEO_UNAVAILABLE_REASON_WEAK_SIGNAL = 2; // 0x2 + } + + public static final class TvInputManager.Hardware { + method public boolean dispatchKeyEventToHdmi(android.view.KeyEvent); + method public void overrideAudioSink(int, java.lang.String, int, int, int); + method public void setStreamVolume(float); + method public boolean setSurface(android.view.Surface, android.media.tv.TvStreamConfig); + } + + public static abstract class TvInputManager.HardwareCallback { + ctor public TvInputManager.HardwareCallback(); + method public abstract void onReleased(); + method public abstract void onStreamConfigChanged(android.media.tv.TvStreamConfig[]); + } + + public static final class TvInputManager.Session { + method public void dispatchSurfaceChanged(int, int, int); + method public java.lang.String getSelectedTrack(int); + method public java.util.List getTracks(int); + method public void release(); + method public void selectTrack(int, java.lang.String); + method public void sendAppPrivateCommand(java.lang.String, android.os.Bundle); + method public void setCaptionEnabled(boolean); + method public void setStreamVolume(float); + method public void setSurface(android.view.Surface); + method public void tune(android.net.Uri); + method public void tune(android.net.Uri, android.os.Bundle); + } + + public static abstract class TvInputManager.SessionCallback { + ctor public TvInputManager.SessionCallback(); + method public void onChannelRetuned(android.media.tv.TvInputManager.Session, android.net.Uri); + method public void onContentAllowed(android.media.tv.TvInputManager.Session); + method public void onContentBlocked(android.media.tv.TvInputManager.Session, android.media.tv.TvContentRating); + method public void onLayoutSurface(android.media.tv.TvInputManager.Session, int, int, int, int); + method public void onSessionCreated(android.media.tv.TvInputManager.Session); + method public void onSessionEvent(android.media.tv.TvInputManager.Session, java.lang.String, android.os.Bundle); + method public void onSessionReleased(android.media.tv.TvInputManager.Session); + method public void onTrackSelected(android.media.tv.TvInputManager.Session, int, java.lang.String); + method public void onTracksChanged(android.media.tv.TvInputManager.Session, java.util.List); + method public void onVideoAvailable(android.media.tv.TvInputManager.Session); + method public void onVideoSizeChanged(android.media.tv.TvInputManager.Session, int, int); + method public void onVideoUnavailable(android.media.tv.TvInputManager.Session, int); + } + + public static abstract class TvInputManager.TvInputCallback { + ctor public TvInputManager.TvInputCallback(); + method public void onInputAdded(java.lang.String); + method public void onInputRemoved(java.lang.String); + method public void onInputStateChanged(java.lang.String, int); + method public void onInputUpdated(java.lang.String); + } + + public abstract class TvInputService extends android.app.Service { + ctor public TvInputService(); + method public final android.os.IBinder onBind(android.content.Intent); + method public abstract android.media.tv.TvInputService.Session onCreateSession(java.lang.String); + method public android.media.tv.TvInputInfo onHardwareAdded(android.media.tv.TvInputHardwareInfo); + method public java.lang.String onHardwareRemoved(android.media.tv.TvInputHardwareInfo); + method public android.media.tv.TvInputInfo onHdmiDeviceAdded(android.hardware.hdmi.HdmiDeviceInfo); + method public java.lang.String onHdmiDeviceRemoved(android.hardware.hdmi.HdmiDeviceInfo); + field public static final java.lang.String SERVICE_INTERFACE = "android.media.tv.TvInputService"; + field public static final java.lang.String SERVICE_META_DATA = "android.media.tv.input"; + } + + public static abstract class TvInputService.HardwareSession extends android.media.tv.TvInputService.Session { + ctor public TvInputService.HardwareSession(android.content.Context); + method public abstract java.lang.String getHardwareInputId(); + method public void onHardwareVideoAvailable(); + method public void onHardwareVideoUnavailable(int); + method public final boolean onSetSurface(android.view.Surface); + } + + public static abstract class TvInputService.Session implements android.view.KeyEvent.Callback { + ctor public TvInputService.Session(android.content.Context); + method public void layoutSurface(int, int, int, int); + method public void notifyChannelRetuned(android.net.Uri); + method public void notifyContentAllowed(); + method public void notifyContentBlocked(android.media.tv.TvContentRating); + method public void notifySessionEvent(java.lang.String, android.os.Bundle); + method public void notifyTrackSelected(int, java.lang.String); + method public void notifyTracksChanged(java.util.List); + method public void notifyVideoAvailable(); + method public void notifyVideoUnavailable(int); + method public void onAppPrivateCommand(java.lang.String, android.os.Bundle); + method public android.view.View onCreateOverlayView(); + method public boolean onGenericMotionEvent(android.view.MotionEvent); + method public boolean onKeyDown(int, android.view.KeyEvent); + method public boolean onKeyLongPress(int, android.view.KeyEvent); + method public boolean onKeyMultiple(int, int, android.view.KeyEvent); + method public boolean onKeyUp(int, android.view.KeyEvent); + method public void onOverlayViewSizeChanged(int, int); + method public abstract void onRelease(); + method public boolean onSelectTrack(int, java.lang.String); + method public abstract void onSetCaptionEnabled(boolean); + method public void onSetMain(boolean); + method public abstract void onSetStreamVolume(float); + method public abstract boolean onSetSurface(android.view.Surface); + method public void onSurfaceChanged(int, int, int); + method public boolean onTouchEvent(android.view.MotionEvent); + method public boolean onTrackballEvent(android.view.MotionEvent); + method public abstract boolean onTune(android.net.Uri); + method public boolean onTune(android.net.Uri, android.os.Bundle); + method public void onUnblockContent(android.media.tv.TvContentRating); + method public void setOverlayViewEnabled(boolean); + } + + public class TvStreamConfig implements android.os.Parcelable { + method public int describeContents(); + method public int getGeneration(); + method public int getMaxHeight(); + method public int getMaxWidth(); + method public int getStreamId(); + method public int getType(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int STREAM_TYPE_BUFFER_PRODUCER = 2; // 0x2 + field public static final int STREAM_TYPE_INDEPENDENT_VIDEO_SOURCE = 1; // 0x1 + } + + public static final class TvStreamConfig.Builder { + ctor public TvStreamConfig.Builder(); + method public android.media.tv.TvStreamConfig build(); + method public android.media.tv.TvStreamConfig.Builder generation(int); + method public android.media.tv.TvStreamConfig.Builder maxHeight(int); + method public android.media.tv.TvStreamConfig.Builder maxWidth(int); + method public android.media.tv.TvStreamConfig.Builder streamId(int); + method public android.media.tv.TvStreamConfig.Builder type(int); + } + + public final class TvTrackInfo implements android.os.Parcelable { + method public int describeContents(); + method public final int getAudioChannelCount(); + method public final int getAudioSampleRate(); + method public final android.os.Bundle getExtra(); + method public final java.lang.String getId(); + method public final java.lang.String getLanguage(); + method public final int getType(); + method public final float getVideoFrameRate(); + method public final int getVideoHeight(); + method public final int getVideoWidth(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int TYPE_AUDIO = 0; // 0x0 + field public static final int TYPE_SUBTITLE = 2; // 0x2 + field public static final int TYPE_VIDEO = 1; // 0x1 + } + + public static final class TvTrackInfo.Builder { + ctor public TvTrackInfo.Builder(int, java.lang.String); + method public android.media.tv.TvTrackInfo build(); + method public final android.media.tv.TvTrackInfo.Builder setAudioChannelCount(int); + method public final android.media.tv.TvTrackInfo.Builder setAudioSampleRate(int); + method public final android.media.tv.TvTrackInfo.Builder setExtra(android.os.Bundle); + method public final android.media.tv.TvTrackInfo.Builder setLanguage(java.lang.String); + method public final android.media.tv.TvTrackInfo.Builder setVideoFrameRate(float); + method public final android.media.tv.TvTrackInfo.Builder setVideoHeight(int); + method public final android.media.tv.TvTrackInfo.Builder setVideoWidth(int); + } + + public class TvView extends android.view.ViewGroup { + ctor public TvView(android.content.Context); + ctor public TvView(android.content.Context, android.util.AttributeSet); + ctor public TvView(android.content.Context, android.util.AttributeSet, int); + method public boolean dispatchUnhandledInputEvent(android.view.InputEvent); + method public java.lang.String getSelectedTrack(int); + method public java.util.List getTracks(int); + method protected void onLayout(boolean, int, int, int, int); + method public boolean onUnhandledInputEvent(android.view.InputEvent); + method public void requestUnblockContent(android.media.tv.TvContentRating); + method public void reset(); + method public void selectTrack(int, java.lang.String); + method public void sendAppPrivateCommand(java.lang.String, android.os.Bundle); + method public void setCallback(android.media.tv.TvView.TvInputCallback); + method public void setCaptionEnabled(boolean); + method public void setMain(); + method public void setOnUnhandledInputEventListener(android.media.tv.TvView.OnUnhandledInputEventListener); + method public void setStreamVolume(float); + method public void setZOrderMediaOverlay(boolean); + method public void setZOrderOnTop(boolean); + method public void tune(java.lang.String, android.net.Uri); + method public void tune(java.lang.String, android.net.Uri, android.os.Bundle); + } + + public static abstract interface TvView.OnUnhandledInputEventListener { + method public abstract boolean onUnhandledInputEvent(android.view.InputEvent); + } + + public static abstract class TvView.TvInputCallback { + ctor public TvView.TvInputCallback(); + method public void onChannelRetuned(java.lang.String, android.net.Uri); + method public void onConnectionFailed(java.lang.String); + method public void onContentAllowed(java.lang.String); + method public void onContentBlocked(java.lang.String, android.media.tv.TvContentRating); + method public void onDisconnected(java.lang.String); + method public void onEvent(java.lang.String, java.lang.String, android.os.Bundle); + method public void onTrackSelected(java.lang.String, int, java.lang.String); + method public void onTracksChanged(java.lang.String, java.util.List); + method public void onVideoAvailable(java.lang.String); + method public void onVideoSizeChanged(java.lang.String, int, int); + method public void onVideoUnavailable(java.lang.String, int); + } + +} + +package android.mtp { + + public final class MtpConstants { + ctor public MtpConstants(); + method public static boolean isAbstractObject(int); + field public static final int ASSOCIATION_TYPE_GENERIC_FOLDER = 1; // 0x1 + field public static final int FORMAT_3GP_CONTAINER = 47492; // 0xb984 + field public static final int FORMAT_AAC = 47363; // 0xb903 + field public static final int FORMAT_ABSTRACT_AUDIO_ALBUM = 47619; // 0xba03 + field public static final int FORMAT_ABSTRACT_AUDIO_PLAYLIST = 47625; // 0xba09 + field public static final int FORMAT_ABSTRACT_AV_PLAYLIST = 47621; // 0xba05 + field public static final int FORMAT_ABSTRACT_DOCUMENT = 47745; // 0xba81 + field public static final int FORMAT_ABSTRACT_IMAGE_ALBUM = 47618; // 0xba02 + field public static final int FORMAT_ABSTRACT_MEDIACAST = 47627; // 0xba0b + field public static final int FORMAT_ABSTRACT_MULTIMEDIA_ALBUM = 47617; // 0xba01 + field public static final int FORMAT_ABSTRACT_VIDEO_ALBUM = 47620; // 0xba04 + field public static final int FORMAT_ABSTRACT_VIDEO_PLAYLIST = 47626; // 0xba0a + field public static final int FORMAT_AIFF = 12295; // 0x3007 + field public static final int FORMAT_ASF = 12300; // 0x300c + field public static final int FORMAT_ASSOCIATION = 12289; // 0x3001 + field public static final int FORMAT_ASX_PLAYLIST = 47635; // 0xba13 + field public static final int FORMAT_AUDIBLE = 47364; // 0xb904 + field public static final int FORMAT_AVI = 12298; // 0x300a + field public static final int FORMAT_BMP = 14340; // 0x3804 + field public static final int FORMAT_DPOF = 12294; // 0x3006 + field public static final int FORMAT_EXECUTABLE = 12291; // 0x3003 + field public static final int FORMAT_EXIF_JPEG = 14337; // 0x3801 + field public static final int FORMAT_FLAC = 47366; // 0xb906 + field public static final int FORMAT_GIF = 14343; // 0x3807 + field public static final int FORMAT_HTML = 12293; // 0x3005 + field public static final int FORMAT_JFIF = 14344; // 0x3808 + field public static final int FORMAT_JP2 = 14351; // 0x380f + field public static final int FORMAT_JPX = 14352; // 0x3810 + field public static final int FORMAT_M3U_PLAYLIST = 47633; // 0xba11 + field public static final int FORMAT_MP2 = 47491; // 0xb983 + field public static final int FORMAT_MP3 = 12297; // 0x3009 + field public static final int FORMAT_MP4_CONTAINER = 47490; // 0xb982 + field public static final int FORMAT_MPEG = 12299; // 0x300b + field public static final int FORMAT_MPL_PLAYLIST = 47634; // 0xba12 + field public static final int FORMAT_MS_EXCEL_SPREADSHEET = 47749; // 0xba85 + field public static final int FORMAT_MS_POWERPOINT_PRESENTATION = 47750; // 0xba86 + field public static final int FORMAT_MS_WORD_DOCUMENT = 47747; // 0xba83 + field public static final int FORMAT_OGG = 47362; // 0xb902 + field public static final int FORMAT_PICT = 14346; // 0x380a + field public static final int FORMAT_PLS_PLAYLIST = 47636; // 0xba14 + field public static final int FORMAT_PNG = 14347; // 0x380b + field public static final int FORMAT_SCRIPT = 12290; // 0x3002 + field public static final int FORMAT_TEXT = 12292; // 0x3004 + field public static final int FORMAT_TIFF = 14349; // 0x380d + field public static final int FORMAT_TIFF_EP = 14338; // 0x3802 + field public static final int FORMAT_UNDEFINED = 12288; // 0x3000 + field public static final int FORMAT_UNDEFINED_AUDIO = 47360; // 0xb900 + field public static final int FORMAT_UNDEFINED_COLLECTION = 47616; // 0xba00 + field public static final int FORMAT_UNDEFINED_DOCUMENT = 47744; // 0xba80 + field public static final int FORMAT_UNDEFINED_FIRMWARE = 47106; // 0xb802 + field public static final int FORMAT_UNDEFINED_VIDEO = 47488; // 0xb980 + field public static final int FORMAT_WAV = 12296; // 0x3008 + field public static final int FORMAT_WINDOWS_IMAGE_FORMAT = 47233; // 0xb881 + field public static final int FORMAT_WMA = 47361; // 0xb901 + field public static final int FORMAT_WMV = 47489; // 0xb981 + field public static final int FORMAT_WPL_PLAYLIST = 47632; // 0xba10 + field public static final int FORMAT_XML_DOCUMENT = 47746; // 0xba82 + field public static final int PROTECTION_STATUS_NONE = 0; // 0x0 + field public static final int PROTECTION_STATUS_NON_TRANSFERABLE_DATA = 32771; // 0x8003 + field public static final int PROTECTION_STATUS_READ_ONLY = 32769; // 0x8001 + field public static final int PROTECTION_STATUS_READ_ONLY_DATA = 32770; // 0x8002 + } + + public final class MtpDevice { + ctor public MtpDevice(android.hardware.usb.UsbDevice); + method public void close(); + method public boolean deleteObject(int); + method public int getDeviceId(); + method public android.mtp.MtpDeviceInfo getDeviceInfo(); + method public java.lang.String getDeviceName(); + method public byte[] getObject(int, int); + method public int[] getObjectHandles(int, int, int); + method public android.mtp.MtpObjectInfo getObjectInfo(int); + method public long getParent(int); + method public long getStorageId(int); + method public int[] getStorageIds(); + method public android.mtp.MtpStorageInfo getStorageInfo(int); + method public byte[] getThumbnail(int); + method public boolean importFile(int, java.lang.String); + method public boolean open(android.hardware.usb.UsbDeviceConnection); + } + + public class MtpDeviceInfo { + method public final java.lang.String getManufacturer(); + method public final java.lang.String getModel(); + method public final java.lang.String getSerialNumber(); + method public final java.lang.String getVersion(); + } + + public final class MtpObjectInfo { + method public final int getAssociationDesc(); + method public final int getAssociationType(); + method public final int getCompressedSize(); + method public final long getDateCreated(); + method public final long getDateModified(); + method public final int getFormat(); + method public final int getImagePixDepth(); + method public final int getImagePixHeight(); + method public final int getImagePixWidth(); + method public final java.lang.String getKeywords(); + method public final java.lang.String getName(); + method public final int getObjectHandle(); + method public final int getParent(); + method public final int getProtectionStatus(); + method public final int getSequenceNumber(); + method public final int getStorageId(); + method public final int getThumbCompressedSize(); + method public final int getThumbFormat(); + method public final int getThumbPixHeight(); + method public final int getThumbPixWidth(); + } + + public final class MtpStorageInfo { + method public final java.lang.String getDescription(); + method public final long getFreeSpace(); + method public final long getMaxCapacity(); + method public final int getStorageId(); + method public final java.lang.String getVolumeIdentifier(); + } + +} + +package android.net { + + public class ConnectivityManager { + method public void addDefaultNetworkActiveListener(android.net.ConnectivityManager.OnNetworkActiveListener); + method public android.net.NetworkInfo getActiveNetworkInfo(); + method public android.net.NetworkInfo[] getAllNetworkInfo(); + method public android.net.Network[] getAllNetworks(); + method public deprecated boolean getBackgroundDataSetting(); + method public android.net.LinkProperties getLinkProperties(android.net.Network); + method public android.net.NetworkCapabilities getNetworkCapabilities(android.net.Network); + method public android.net.NetworkInfo getNetworkInfo(int); + method public android.net.NetworkInfo getNetworkInfo(android.net.Network); + method public deprecated int getNetworkPreference(); + method public static android.net.Network getProcessDefaultNetwork(); + method public boolean isActiveNetworkMetered(); + method public boolean isDefaultNetworkActive(); + method public static boolean isNetworkTypeValid(int); + method public void registerNetworkCallback(android.net.NetworkRequest, android.net.ConnectivityManager.NetworkCallback); + method public void releaseNetworkRequest(android.app.PendingIntent); + method public void removeDefaultNetworkActiveListener(android.net.ConnectivityManager.OnNetworkActiveListener); + method public void reportBadNetwork(android.net.Network); + method public void requestNetwork(android.net.NetworkRequest, android.net.ConnectivityManager.NetworkCallback); + method public void requestNetwork(android.net.NetworkRequest, android.app.PendingIntent); + method public deprecated boolean requestRouteToHost(int, int); + method public deprecated void setNetworkPreference(int); + method public static boolean setProcessDefaultNetwork(android.net.Network); + method public deprecated int startUsingNetworkFeature(int, java.lang.String); + method public deprecated int stopUsingNetworkFeature(int, java.lang.String); + method public void unregisterNetworkCallback(android.net.ConnectivityManager.NetworkCallback); + field public static final deprecated java.lang.String ACTION_BACKGROUND_DATA_SETTING_CHANGED = "android.net.conn.BACKGROUND_DATA_SETTING_CHANGED"; + field public static final java.lang.String CONNECTIVITY_ACTION = "android.net.conn.CONNECTIVITY_CHANGE"; + field public static final deprecated int DEFAULT_NETWORK_PREFERENCE = 1; // 0x1 + field public static final java.lang.String EXTRA_EXTRA_INFO = "extraInfo"; + field public static final java.lang.String EXTRA_IS_FAILOVER = "isFailover"; + field public static final java.lang.String EXTRA_NETWORK = "android.net.extra.NETWORK"; + field public static final deprecated java.lang.String EXTRA_NETWORK_INFO = "networkInfo"; + field public static final java.lang.String EXTRA_NETWORK_REQUEST = "android.net.extra.NETWORK_REQUEST"; + field public static final java.lang.String EXTRA_NETWORK_TYPE = "networkType"; + field public static final java.lang.String EXTRA_NO_CONNECTIVITY = "noConnectivity"; + field public static final java.lang.String EXTRA_OTHER_NETWORK_INFO = "otherNetwork"; + field public static final java.lang.String EXTRA_REASON = "reason"; + field public static final int TYPE_BLUETOOTH = 7; // 0x7 + field public static final int TYPE_DUMMY = 8; // 0x8 + field public static final int TYPE_ETHERNET = 9; // 0x9 + field public static final int TYPE_MOBILE = 0; // 0x0 + field public static final int TYPE_MOBILE_DUN = 4; // 0x4 + field public static final int TYPE_MOBILE_HIPRI = 5; // 0x5 + field public static final int TYPE_MOBILE_MMS = 2; // 0x2 + field public static final int TYPE_MOBILE_SUPL = 3; // 0x3 + field public static final int TYPE_VPN = 17; // 0x11 + field public static final int TYPE_WIFI = 1; // 0x1 + field public static final int TYPE_WIMAX = 6; // 0x6 + } + + public static class ConnectivityManager.NetworkCallback { + ctor public ConnectivityManager.NetworkCallback(); + method public void onAvailable(android.net.Network); + method public void onCapabilitiesChanged(android.net.Network, android.net.NetworkCapabilities); + method public void onLinkPropertiesChanged(android.net.Network, android.net.LinkProperties); + method public void onLosing(android.net.Network, int); + method public void onLost(android.net.Network); + } + + public static abstract interface ConnectivityManager.OnNetworkActiveListener { + method public abstract void onNetworkActive(); + } + + public class Credentials { + ctor public Credentials(int, int, int); + method public int getGid(); + method public int getPid(); + method public int getUid(); + } + + public class DhcpInfo implements android.os.Parcelable { + ctor public DhcpInfo(); + method public int describeContents(); + method public void writeToParcel(android.os.Parcel, int); + field public int dns1; + field public int dns2; + field public int gateway; + field public int ipAddress; + field public int leaseDuration; + field public int netmask; + field public int serverAddress; + } + + public final class IpPrefix implements android.os.Parcelable { + method public int describeContents(); + method public java.net.InetAddress getAddress(); + method public int getPrefixLength(); + method public byte[] getRawAddress(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public class LinkAddress implements android.os.Parcelable { + method public int describeContents(); + method public java.net.InetAddress getAddress(); + method public int getFlags(); + method public int getPrefixLength(); + method public int getScope(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public final class LinkProperties implements android.os.Parcelable { + method public int describeContents(); + method public java.util.List getDnsServers(); + method public java.lang.String getDomains(); + method public android.net.ProxyInfo getHttpProxy(); + method public java.lang.String getInterfaceName(); + method public java.util.List getLinkAddresses(); + method public java.util.List getRoutes(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public class LocalServerSocket { + ctor public LocalServerSocket(java.lang.String) throws java.io.IOException; + ctor public LocalServerSocket(java.io.FileDescriptor) throws java.io.IOException; + method public android.net.LocalSocket accept() throws java.io.IOException; + method public void close() throws java.io.IOException; + method public java.io.FileDescriptor getFileDescriptor(); + method public android.net.LocalSocketAddress getLocalSocketAddress(); + } + + public class LocalSocket implements java.io.Closeable { + ctor public LocalSocket(); + ctor public LocalSocket(int); + method public void bind(android.net.LocalSocketAddress) throws java.io.IOException; + method public void close() throws java.io.IOException; + method public void connect(android.net.LocalSocketAddress) throws java.io.IOException; + method public void connect(android.net.LocalSocketAddress, int) throws java.io.IOException; + method public java.io.FileDescriptor[] getAncillaryFileDescriptors() throws java.io.IOException; + method public java.io.FileDescriptor getFileDescriptor(); + method public java.io.InputStream getInputStream() throws java.io.IOException; + method public android.net.LocalSocketAddress getLocalSocketAddress(); + method public java.io.OutputStream getOutputStream() throws java.io.IOException; + method public android.net.Credentials getPeerCredentials() throws java.io.IOException; + method public int getReceiveBufferSize() throws java.io.IOException; + method public android.net.LocalSocketAddress getRemoteSocketAddress(); + method public int getSendBufferSize() throws java.io.IOException; + method public int getSoTimeout() throws java.io.IOException; + method public synchronized boolean isBound(); + method public boolean isClosed(); + method public synchronized boolean isConnected(); + method public boolean isInputShutdown(); + method public boolean isOutputShutdown(); + method public void setFileDescriptorsForSend(java.io.FileDescriptor[]); + method public void setReceiveBufferSize(int) throws java.io.IOException; + method public void setSendBufferSize(int) throws java.io.IOException; + method public void setSoTimeout(int) throws java.io.IOException; + method public void shutdownInput() throws java.io.IOException; + method public void shutdownOutput() throws java.io.IOException; + field public static final int SOCKET_DGRAM = 1; // 0x1 + field public static final int SOCKET_SEQPACKET = 3; // 0x3 + field public static final int SOCKET_STREAM = 2; // 0x2 + } + + public class LocalSocketAddress { + ctor public LocalSocketAddress(java.lang.String, android.net.LocalSocketAddress.Namespace); + ctor public LocalSocketAddress(java.lang.String); + method public java.lang.String getName(); + method public android.net.LocalSocketAddress.Namespace getNamespace(); + } + + public static final class LocalSocketAddress.Namespace extends java.lang.Enum { + method public static android.net.LocalSocketAddress.Namespace valueOf(java.lang.String); + method public static final android.net.LocalSocketAddress.Namespace[] values(); + enum_constant public static final android.net.LocalSocketAddress.Namespace ABSTRACT; + enum_constant public static final android.net.LocalSocketAddress.Namespace FILESYSTEM; + enum_constant public static final android.net.LocalSocketAddress.Namespace RESERVED; + } + + public class MailTo { + method public java.lang.String getBody(); + method public java.lang.String getCc(); + method public java.util.Map getHeaders(); + method public java.lang.String getSubject(); + method public java.lang.String getTo(); + method public static boolean isMailTo(java.lang.String); + method public static android.net.MailTo parse(java.lang.String) throws android.net.ParseException; + field public static final java.lang.String MAILTO_SCHEME = "mailto:"; + } + + public class Network implements android.os.Parcelable { + method public void bindSocket(java.net.DatagramSocket) throws java.io.IOException; + method public void bindSocket(java.net.Socket) throws java.io.IOException; + method public int describeContents(); + method public java.net.InetAddress[] getAllByName(java.lang.String) throws java.net.UnknownHostException; + method public java.net.InetAddress getByName(java.lang.String) throws java.net.UnknownHostException; + method public javax.net.SocketFactory getSocketFactory(); + method public java.net.URLConnection openConnection(java.net.URL) throws java.io.IOException; + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public final class NetworkCapabilities implements android.os.Parcelable { + ctor public NetworkCapabilities(android.net.NetworkCapabilities); + method public int describeContents(); + method public int getLinkDownstreamBandwidthKbps(); + method public int getLinkUpstreamBandwidthKbps(); + method public boolean hasCapability(int); + method public boolean hasTransport(int); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int NET_CAPABILITY_CBS = 5; // 0x5 + field public static final int NET_CAPABILITY_DUN = 2; // 0x2 + field public static final int NET_CAPABILITY_EIMS = 10; // 0xa + field public static final int NET_CAPABILITY_FOTA = 3; // 0x3 + field public static final int NET_CAPABILITY_IA = 7; // 0x7 + field public static final int NET_CAPABILITY_IMS = 4; // 0x4 + field public static final int NET_CAPABILITY_INTERNET = 12; // 0xc + field public static final int NET_CAPABILITY_MMS = 0; // 0x0 + field public static final int NET_CAPABILITY_NOT_METERED = 11; // 0xb + field public static final int NET_CAPABILITY_NOT_RESTRICTED = 13; // 0xd + field public static final int NET_CAPABILITY_NOT_VPN = 15; // 0xf + field public static final int NET_CAPABILITY_RCS = 8; // 0x8 + field public static final int NET_CAPABILITY_SUPL = 1; // 0x1 + field public static final int NET_CAPABILITY_TRUSTED = 14; // 0xe + field public static final int NET_CAPABILITY_WIFI_P2P = 6; // 0x6 + field public static final int NET_CAPABILITY_XCAP = 9; // 0x9 + field public static final int TRANSPORT_BLUETOOTH = 2; // 0x2 + field public static final int TRANSPORT_CELLULAR = 0; // 0x0 + field public static final int TRANSPORT_ETHERNET = 3; // 0x3 + field public static final int TRANSPORT_VPN = 4; // 0x4 + field public static final int TRANSPORT_WIFI = 1; // 0x1 + } + + public class NetworkInfo implements android.os.Parcelable { + method public int describeContents(); + method public android.net.NetworkInfo.DetailedState getDetailedState(); + method public java.lang.String getExtraInfo(); + method public java.lang.String getReason(); + method public android.net.NetworkInfo.State getState(); + method public int getSubtype(); + method public java.lang.String getSubtypeName(); + method public int getType(); + method public java.lang.String getTypeName(); + method public boolean isAvailable(); + method public boolean isConnected(); + method public boolean isConnectedOrConnecting(); + method public boolean isFailover(); + method public boolean isRoaming(); + method public void writeToParcel(android.os.Parcel, int); + } + + public static final class NetworkInfo.DetailedState extends java.lang.Enum { + method public static android.net.NetworkInfo.DetailedState valueOf(java.lang.String); + method public static final android.net.NetworkInfo.DetailedState[] values(); + enum_constant public static final android.net.NetworkInfo.DetailedState AUTHENTICATING; + enum_constant public static final android.net.NetworkInfo.DetailedState BLOCKED; + enum_constant public static final android.net.NetworkInfo.DetailedState CAPTIVE_PORTAL_CHECK; + enum_constant public static final android.net.NetworkInfo.DetailedState CONNECTED; + enum_constant public static final android.net.NetworkInfo.DetailedState CONNECTING; + enum_constant public static final android.net.NetworkInfo.DetailedState DISCONNECTED; + enum_constant public static final android.net.NetworkInfo.DetailedState DISCONNECTING; + enum_constant public static final android.net.NetworkInfo.DetailedState FAILED; + enum_constant public static final android.net.NetworkInfo.DetailedState IDLE; + enum_constant public static final android.net.NetworkInfo.DetailedState OBTAINING_IPADDR; + enum_constant public static final android.net.NetworkInfo.DetailedState SCANNING; + enum_constant public static final android.net.NetworkInfo.DetailedState SUSPENDED; + enum_constant public static final android.net.NetworkInfo.DetailedState VERIFYING_POOR_LINK; + } + + public static final class NetworkInfo.State extends java.lang.Enum { + method public static android.net.NetworkInfo.State valueOf(java.lang.String); + method public static final android.net.NetworkInfo.State[] values(); + enum_constant public static final android.net.NetworkInfo.State CONNECTED; + enum_constant public static final android.net.NetworkInfo.State CONNECTING; + enum_constant public static final android.net.NetworkInfo.State DISCONNECTED; + enum_constant public static final android.net.NetworkInfo.State DISCONNECTING; + enum_constant public static final android.net.NetworkInfo.State SUSPENDED; + enum_constant public static final android.net.NetworkInfo.State UNKNOWN; + } + + public class NetworkKey implements android.os.Parcelable { + ctor public NetworkKey(android.net.WifiKey); + method public int describeContents(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int TYPE_WIFI = 1; // 0x1 + field public final int type; + field public final android.net.WifiKey wifiKey; + } + + public class NetworkRequest implements android.os.Parcelable { + method public int describeContents(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public static class NetworkRequest.Builder { + ctor public NetworkRequest.Builder(); + method public android.net.NetworkRequest.Builder addCapability(int); + method public android.net.NetworkRequest.Builder addTransportType(int); + method public android.net.NetworkRequest build(); + method public android.net.NetworkRequest.Builder removeCapability(int); + method public android.net.NetworkRequest.Builder removeTransportType(int); + method public android.net.NetworkRequest.Builder setNetworkSpecifier(java.lang.String); + } + + public class NetworkScoreManager { + method public boolean clearScores() throws java.lang.SecurityException; + method public void disableScoring() throws java.lang.SecurityException; + method public java.lang.String getActiveScorerPackage(); + method public boolean setActiveScorer(java.lang.String) throws java.lang.SecurityException; + method public boolean updateScores(android.net.ScoredNetwork[]) throws java.lang.SecurityException; + field public static final java.lang.String ACTION_CHANGE_ACTIVE = "android.net.scoring.CHANGE_ACTIVE"; + field public static final java.lang.String ACTION_CUSTOM_ENABLE = "android.net.scoring.CUSTOM_ENABLE"; + field public static final java.lang.String ACTION_SCORER_CHANGED = "android.net.scoring.SCORER_CHANGED"; + field public static final java.lang.String ACTION_SCORE_NETWORKS = "android.net.scoring.SCORE_NETWORKS"; + field public static final java.lang.String EXTRA_NETWORKS_TO_SCORE = "networksToScore"; + field public static final java.lang.String EXTRA_NEW_SCORER = "newScorer"; + field public static final java.lang.String EXTRA_PACKAGE_NAME = "packageName"; + } + + public class ParseException extends java.lang.RuntimeException { + field public java.lang.String response; + } + + public final class Proxy { + ctor public Proxy(); + method public static final deprecated java.lang.String getDefaultHost(); + method public static final deprecated int getDefaultPort(); + method public static final deprecated java.lang.String getHost(android.content.Context); + method public static final deprecated int getPort(android.content.Context); + field public static final java.lang.String EXTRA_PROXY_INFO = "android.intent.extra.PROXY_INFO"; + field public static final java.lang.String PROXY_CHANGE_ACTION = "android.intent.action.PROXY_CHANGE"; + } + + public deprecated class ProxyInfo implements android.os.Parcelable { + method public static android.net.ProxyInfo buildDirectProxy(java.lang.String, int); + method public static android.net.ProxyInfo buildDirectProxy(java.lang.String, int, java.util.List); + method public static android.net.ProxyInfo buildPacProxy(android.net.Uri); + method public int describeContents(); + method public java.lang.String[] getExclusionList(); + method public java.lang.String getHost(); + method public android.net.Uri getPacFileUrl(); + method public int getPort(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public abstract class PskKeyManager { + ctor public PskKeyManager(); + method public java.lang.String chooseClientKeyIdentity(java.lang.String, java.net.Socket); + method public java.lang.String chooseClientKeyIdentity(java.lang.String, javax.net.ssl.SSLEngine); + method public java.lang.String chooseServerKeyIdentityHint(java.net.Socket); + method public java.lang.String chooseServerKeyIdentityHint(javax.net.ssl.SSLEngine); + method public javax.crypto.SecretKey getKey(java.lang.String, java.lang.String, java.net.Socket); + method public javax.crypto.SecretKey getKey(java.lang.String, java.lang.String, javax.net.ssl.SSLEngine); + field public static final int MAX_IDENTITY_HINT_LENGTH_BYTES = 128; // 0x80 + field public static final int MAX_IDENTITY_LENGTH_BYTES = 128; // 0x80 + field public static final int MAX_KEY_LENGTH_BYTES = 256; // 0x100 + } + + public final class RouteInfo implements android.os.Parcelable { + method public int describeContents(); + method public android.net.IpPrefix getDestination(); + method public java.net.InetAddress getGateway(); + method public java.lang.String getInterface(); + method public boolean isDefaultRoute(); + method public boolean matches(java.net.InetAddress); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public class RssiCurve implements android.os.Parcelable { + ctor public RssiCurve(int, int, byte[]); + ctor public RssiCurve(int, int, byte[], int); + method public int describeContents(); + method public byte lookupScore(int); + method public byte lookupScore(int, boolean); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public final int activeNetworkRssiBoost; + field public final int bucketWidth; + field public final byte[] rssiBuckets; + field public final int start; + } + + public class SSLCertificateSocketFactory extends javax.net.ssl.SSLSocketFactory { + ctor public deprecated SSLCertificateSocketFactory(int); + method public java.net.Socket createSocket(java.net.Socket, java.lang.String, int, boolean) throws java.io.IOException; + method public java.net.Socket createSocket(java.net.InetAddress, int, java.net.InetAddress, int) throws java.io.IOException; + method public java.net.Socket createSocket(java.net.InetAddress, int) throws java.io.IOException; + method public java.net.Socket createSocket(java.lang.String, int, java.net.InetAddress, int) throws java.io.IOException; + method public java.net.Socket createSocket(java.lang.String, int) throws java.io.IOException; + method public static javax.net.SocketFactory getDefault(int); + method public static javax.net.ssl.SSLSocketFactory getDefault(int, android.net.SSLSessionCache); + method public java.lang.String[] getDefaultCipherSuites(); + method public static deprecated org.apache.http.conn.ssl.SSLSocketFactory getHttpSocketFactory(int, android.net.SSLSessionCache); + method public static javax.net.ssl.SSLSocketFactory getInsecure(int, android.net.SSLSessionCache); + method public byte[] getNpnSelectedProtocol(java.net.Socket); + method public java.lang.String[] getSupportedCipherSuites(); + method public void setHostname(java.net.Socket, java.lang.String); + method public void setKeyManagers(javax.net.ssl.KeyManager[]); + method public void setNpnProtocols(byte[][]); + method public void setTrustManagers(javax.net.ssl.TrustManager[]); + method public void setUseSessionTickets(java.net.Socket, boolean); + } + + public final class SSLSessionCache { + ctor public SSLSessionCache(java.io.File) throws java.io.IOException; + ctor public SSLSessionCache(android.content.Context); + } + + public class ScoredNetwork implements android.os.Parcelable { + ctor public ScoredNetwork(android.net.NetworkKey, android.net.RssiCurve); + method public int describeContents(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public final android.net.NetworkKey networkKey; + field public final android.net.RssiCurve rssiCurve; + } + + public class TrafficStats { + ctor public TrafficStats(); + method public static void clearThreadStatsTag(); + method public static void clearThreadStatsUid(); + method public static long getMobileRxBytes(); + method public static long getMobileRxPackets(); + method public static long getMobileTxBytes(); + method public static long getMobileTxPackets(); + method public static int getThreadStatsTag(); + method public static long getTotalRxBytes(); + method public static long getTotalRxPackets(); + method public static long getTotalTxBytes(); + method public static long getTotalTxPackets(); + method public static long getUidRxBytes(int); + method public static long getUidRxPackets(int); + method public static deprecated long getUidTcpRxBytes(int); + method public static deprecated long getUidTcpRxSegments(int); + method public static deprecated long getUidTcpTxBytes(int); + method public static deprecated long getUidTcpTxSegments(int); + method public static long getUidTxBytes(int); + method public static long getUidTxPackets(int); + method public static deprecated long getUidUdpRxBytes(int); + method public static deprecated long getUidUdpRxPackets(int); + method public static deprecated long getUidUdpTxBytes(int); + method public static deprecated long getUidUdpTxPackets(int); + method public static void incrementOperationCount(int); + method public static void incrementOperationCount(int, int); + method public static void setThreadStatsTag(int); + method public static void setThreadStatsTagBackup(); + method public static void setThreadStatsUid(int); + method public static void tagSocket(java.net.Socket) throws java.net.SocketException; + method public static void untagSocket(java.net.Socket) throws java.net.SocketException; + field public static final int UNSUPPORTED = -1; // 0xffffffff + } + + public abstract class Uri implements java.lang.Comparable android.os.Parcelable { + method public abstract android.net.Uri.Builder buildUpon(); + method public int compareTo(android.net.Uri); + method public static java.lang.String decode(java.lang.String); + method public static java.lang.String encode(java.lang.String); + method public static java.lang.String encode(java.lang.String, java.lang.String); + method public static android.net.Uri fromFile(java.io.File); + method public static android.net.Uri fromParts(java.lang.String, java.lang.String, java.lang.String); + method public abstract java.lang.String getAuthority(); + method public boolean getBooleanQueryParameter(java.lang.String, boolean); + method public abstract java.lang.String getEncodedAuthority(); + method public abstract java.lang.String getEncodedFragment(); + method public abstract java.lang.String getEncodedPath(); + method public abstract java.lang.String getEncodedQuery(); + method public abstract java.lang.String getEncodedSchemeSpecificPart(); + method public abstract java.lang.String getEncodedUserInfo(); + method public abstract java.lang.String getFragment(); + method public abstract java.lang.String getHost(); + method public abstract java.lang.String getLastPathSegment(); + method public abstract java.lang.String getPath(); + method public abstract java.util.List getPathSegments(); + method public abstract int getPort(); + method public abstract java.lang.String getQuery(); + method public java.lang.String getQueryParameter(java.lang.String); + method public java.util.Set getQueryParameterNames(); + method public java.util.List getQueryParameters(java.lang.String); + method public abstract java.lang.String getScheme(); + method public abstract java.lang.String getSchemeSpecificPart(); + method public abstract java.lang.String getUserInfo(); + method public boolean isAbsolute(); + method public abstract boolean isHierarchical(); + method public boolean isOpaque(); + method public abstract boolean isRelative(); + method public android.net.Uri normalizeScheme(); + method public static android.net.Uri parse(java.lang.String); + method public abstract java.lang.String toString(); + method public static android.net.Uri withAppendedPath(android.net.Uri, java.lang.String); + method public static void writeToParcel(android.os.Parcel, android.net.Uri); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.net.Uri EMPTY; + } + + public static final class Uri.Builder { + ctor public Uri.Builder(); + method public android.net.Uri.Builder appendEncodedPath(java.lang.String); + method public android.net.Uri.Builder appendPath(java.lang.String); + method public android.net.Uri.Builder appendQueryParameter(java.lang.String, java.lang.String); + method public android.net.Uri.Builder authority(java.lang.String); + method public android.net.Uri build(); + method public android.net.Uri.Builder clearQuery(); + method public android.net.Uri.Builder encodedAuthority(java.lang.String); + method public android.net.Uri.Builder encodedFragment(java.lang.String); + method public android.net.Uri.Builder encodedOpaquePart(java.lang.String); + method public android.net.Uri.Builder encodedPath(java.lang.String); + method public android.net.Uri.Builder encodedQuery(java.lang.String); + method public android.net.Uri.Builder fragment(java.lang.String); + method public android.net.Uri.Builder opaquePart(java.lang.String); + method public android.net.Uri.Builder path(java.lang.String); + method public android.net.Uri.Builder query(java.lang.String); + method public android.net.Uri.Builder scheme(java.lang.String); + } + + public class UrlQuerySanitizer { + ctor public UrlQuerySanitizer(); + ctor public UrlQuerySanitizer(java.lang.String); + method protected void addSanitizedEntry(java.lang.String, java.lang.String); + method protected void clear(); + method protected int decodeHexDigit(char); + method public static final android.net.UrlQuerySanitizer.ValueSanitizer getAllButNulAndAngleBracketsLegal(); + method public static final android.net.UrlQuerySanitizer.ValueSanitizer getAllButNulLegal(); + method public static final android.net.UrlQuerySanitizer.ValueSanitizer getAllButWhitespaceLegal(); + method public static final android.net.UrlQuerySanitizer.ValueSanitizer getAllIllegal(); + method public boolean getAllowUnregisteredParamaters(); + method public static final android.net.UrlQuerySanitizer.ValueSanitizer getAmpAndSpaceLegal(); + method public static final android.net.UrlQuerySanitizer.ValueSanitizer getAmpLegal(); + method public android.net.UrlQuerySanitizer.ValueSanitizer getEffectiveValueSanitizer(java.lang.String); + method public java.util.List getParameterList(); + method public java.util.Set getParameterSet(); + method public boolean getPreferFirstRepeatedParameter(); + method public static final android.net.UrlQuerySanitizer.ValueSanitizer getSpaceLegal(); + method public android.net.UrlQuerySanitizer.ValueSanitizer getUnregisteredParameterValueSanitizer(); + method public static final android.net.UrlQuerySanitizer.ValueSanitizer getUrlAndSpaceLegal(); + method public static final android.net.UrlQuerySanitizer.ValueSanitizer getUrlLegal(); + method public java.lang.String getValue(java.lang.String); + method public android.net.UrlQuerySanitizer.ValueSanitizer getValueSanitizer(java.lang.String); + method public boolean hasParameter(java.lang.String); + method protected boolean isHexDigit(char); + method protected void parseEntry(java.lang.String, java.lang.String); + method public void parseQuery(java.lang.String); + method public void parseUrl(java.lang.String); + method public void registerParameter(java.lang.String, android.net.UrlQuerySanitizer.ValueSanitizer); + method public void registerParameters(java.lang.String[], android.net.UrlQuerySanitizer.ValueSanitizer); + method public void setAllowUnregisteredParamaters(boolean); + method public void setPreferFirstRepeatedParameter(boolean); + method public void setUnregisteredParameterValueSanitizer(android.net.UrlQuerySanitizer.ValueSanitizer); + method public java.lang.String unescape(java.lang.String); + } + + public static class UrlQuerySanitizer.IllegalCharacterValueSanitizer implements android.net.UrlQuerySanitizer.ValueSanitizer { + ctor public UrlQuerySanitizer.IllegalCharacterValueSanitizer(int); + method public java.lang.String sanitize(java.lang.String); + field public static final int ALL_BUT_NUL_AND_ANGLE_BRACKETS_LEGAL = 1439; // 0x59f + field public static final int ALL_BUT_NUL_LEGAL = 1535; // 0x5ff + field public static final int ALL_BUT_WHITESPACE_LEGAL = 1532; // 0x5fc + field public static final int ALL_ILLEGAL = 0; // 0x0 + field public static final int ALL_OK = 2047; // 0x7ff + field public static final int ALL_WHITESPACE_OK = 3; // 0x3 + field public static final int AMP_AND_SPACE_LEGAL = 129; // 0x81 + field public static final int AMP_LEGAL = 128; // 0x80 + field public static final int AMP_OK = 128; // 0x80 + field public static final int DQUOTE_OK = 8; // 0x8 + field public static final int GT_OK = 64; // 0x40 + field public static final int LT_OK = 32; // 0x20 + field public static final int NON_7_BIT_ASCII_OK = 4; // 0x4 + field public static final int NUL_OK = 512; // 0x200 + field public static final int OTHER_WHITESPACE_OK = 2; // 0x2 + field public static final int PCT_OK = 256; // 0x100 + field public static final int SCRIPT_URL_OK = 1024; // 0x400 + field public static final int SPACE_LEGAL = 1; // 0x1 + field public static final int SPACE_OK = 1; // 0x1 + field public static final int SQUOTE_OK = 16; // 0x10 + field public static final int URL_AND_SPACE_LEGAL = 405; // 0x195 + field public static final int URL_LEGAL = 404; // 0x194 + } + + public class UrlQuerySanitizer.ParameterValuePair { + ctor public UrlQuerySanitizer.ParameterValuePair(java.lang.String, java.lang.String); + field public java.lang.String mParameter; + field public java.lang.String mValue; + } + + public static abstract interface UrlQuerySanitizer.ValueSanitizer { + method public abstract java.lang.String sanitize(java.lang.String); + } + + public class VpnService extends android.app.Service { + ctor public VpnService(); + method public android.os.IBinder onBind(android.content.Intent); + method public void onRevoke(); + method public static android.content.Intent prepare(android.content.Context); + method public static void prepareAndAuthorize(android.content.Context); + method public boolean protect(int); + method public boolean protect(java.net.Socket); + method public boolean protect(java.net.DatagramSocket); + method public boolean setUnderlyingNetworks(android.net.Network[]); + field public static final java.lang.String SERVICE_INTERFACE = "android.net.VpnService"; + } + + public class VpnService.Builder { + ctor public VpnService.Builder(); + method public android.net.VpnService.Builder addAddress(java.net.InetAddress, int); + method public android.net.VpnService.Builder addAddress(java.lang.String, int); + method public android.net.VpnService.Builder addAllowedApplication(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException; + method public android.net.VpnService.Builder addDisallowedApplication(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException; + method public android.net.VpnService.Builder addDnsServer(java.net.InetAddress); + method public android.net.VpnService.Builder addDnsServer(java.lang.String); + method public android.net.VpnService.Builder addRoute(java.net.InetAddress, int); + method public android.net.VpnService.Builder addRoute(java.lang.String, int); + method public android.net.VpnService.Builder addSearchDomain(java.lang.String); + method public android.net.VpnService.Builder allowBypass(); + method public android.net.VpnService.Builder allowFamily(int); + method public android.os.ParcelFileDescriptor establish(); + method public android.net.VpnService.Builder setBlocking(boolean); + method public android.net.VpnService.Builder setConfigureIntent(android.app.PendingIntent); + method public android.net.VpnService.Builder setMtu(int); + method public android.net.VpnService.Builder setSession(java.lang.String); + method public android.net.VpnService.Builder setUnderlyingNetworks(android.net.Network[]); + } + + public class WebAddress { + ctor public WebAddress(java.lang.String) throws android.net.ParseException; + } + + public class WifiKey implements android.os.Parcelable { + ctor public WifiKey(java.lang.String, java.lang.String); + method public int describeContents(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public final java.lang.String bssid; + field public final java.lang.String ssid; + } + +} + +package android.net.http { + + public final deprecated class AndroidHttpClient implements org.apache.http.client.HttpClient { + method public void close(); + method public void disableCurlLogging(); + method public void enableCurlLogging(java.lang.String, int); + method public org.apache.http.HttpResponse execute(org.apache.http.client.methods.HttpUriRequest) throws java.io.IOException; + method public org.apache.http.HttpResponse execute(org.apache.http.client.methods.HttpUriRequest, org.apache.http.protocol.HttpContext) throws java.io.IOException; + method public org.apache.http.HttpResponse execute(org.apache.http.HttpHost, org.apache.http.HttpRequest) throws java.io.IOException; + method public org.apache.http.HttpResponse execute(org.apache.http.HttpHost, org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws java.io.IOException; + method public T execute(org.apache.http.client.methods.HttpUriRequest, org.apache.http.client.ResponseHandler) throws org.apache.http.client.ClientProtocolException, java.io.IOException; + method public T execute(org.apache.http.client.methods.HttpUriRequest, org.apache.http.client.ResponseHandler, org.apache.http.protocol.HttpContext) throws org.apache.http.client.ClientProtocolException, java.io.IOException; + method public T execute(org.apache.http.HttpHost, org.apache.http.HttpRequest, org.apache.http.client.ResponseHandler) throws org.apache.http.client.ClientProtocolException, java.io.IOException; + method public T execute(org.apache.http.HttpHost, org.apache.http.HttpRequest, org.apache.http.client.ResponseHandler, org.apache.http.protocol.HttpContext) throws org.apache.http.client.ClientProtocolException, java.io.IOException; + method public static org.apache.http.entity.AbstractHttpEntity getCompressedEntity(byte[], android.content.ContentResolver) throws java.io.IOException; + method public org.apache.http.conn.ClientConnectionManager getConnectionManager(); + method public static long getMinGzipSize(android.content.ContentResolver); + method public org.apache.http.params.HttpParams getParams(); + method public static java.io.InputStream getUngzippedContent(org.apache.http.HttpEntity) throws java.io.IOException; + method public static void modifyRequestToAcceptGzipResponse(org.apache.http.HttpRequest); + method public static deprecated android.net.http.AndroidHttpClient newInstance(java.lang.String, android.content.Context); + method public static deprecated android.net.http.AndroidHttpClient newInstance(java.lang.String); + method public static long parseDate(java.lang.String); + field public static long DEFAULT_SYNC_MIN_GZIP_BYTES; + } + + public final class HttpResponseCache extends java.net.ResponseCache implements java.io.Closeable { + method public void close() throws java.io.IOException; + method public void delete() throws java.io.IOException; + method public void flush(); + method public java.net.CacheResponse get(java.net.URI, java.lang.String, java.util.Map>) throws java.io.IOException; + method public int getHitCount(); + method public static android.net.http.HttpResponseCache getInstalled(); + method public int getNetworkCount(); + method public int getRequestCount(); + method public static android.net.http.HttpResponseCache install(java.io.File, long) throws java.io.IOException; + method public long maxSize(); + method public java.net.CacheRequest put(java.net.URI, java.net.URLConnection) throws java.io.IOException; + method public long size(); + } + + public class SslCertificate { + ctor public deprecated SslCertificate(java.lang.String, java.lang.String, java.lang.String, java.lang.String); + ctor public deprecated SslCertificate(java.lang.String, java.lang.String, java.util.Date, java.util.Date); + ctor public SslCertificate(java.security.cert.X509Certificate); + method public android.net.http.SslCertificate.DName getIssuedBy(); + method public android.net.http.SslCertificate.DName getIssuedTo(); + method public deprecated java.lang.String getValidNotAfter(); + method public java.util.Date getValidNotAfterDate(); + method public deprecated java.lang.String getValidNotBefore(); + method public java.util.Date getValidNotBeforeDate(); + method public static android.net.http.SslCertificate restoreState(android.os.Bundle); + method public static android.os.Bundle saveState(android.net.http.SslCertificate); + } + + public class SslCertificate.DName { + ctor public SslCertificate.DName(java.lang.String); + method public java.lang.String getCName(); + method public java.lang.String getDName(); + method public java.lang.String getOName(); + method public java.lang.String getUName(); + } + + public class SslError { + ctor public deprecated SslError(int, android.net.http.SslCertificate); + ctor public deprecated SslError(int, java.security.cert.X509Certificate); + ctor public SslError(int, android.net.http.SslCertificate, java.lang.String); + ctor public SslError(int, java.security.cert.X509Certificate, java.lang.String); + method public boolean addError(int); + method public android.net.http.SslCertificate getCertificate(); + method public int getPrimaryError(); + method public java.lang.String getUrl(); + method public boolean hasError(int); + field public static final int SSL_DATE_INVALID = 4; // 0x4 + field public static final int SSL_EXPIRED = 1; // 0x1 + field public static final int SSL_IDMISMATCH = 2; // 0x2 + field public static final int SSL_INVALID = 5; // 0x5 + field public static final deprecated int SSL_MAX_ERROR = 6; // 0x6 + field public static final int SSL_NOTYETVALID = 0; // 0x0 + field public static final int SSL_UNTRUSTED = 3; // 0x3 + } + + public class X509TrustManagerExtensions { + ctor public X509TrustManagerExtensions(javax.net.ssl.X509TrustManager) throws java.lang.IllegalArgumentException; + method public java.util.List checkServerTrusted(java.security.cert.X509Certificate[], java.lang.String, java.lang.String) throws java.security.cert.CertificateException; + method public boolean isUserAddedCertificate(java.security.cert.X509Certificate); + } + +} + +package android.net.nsd { + + public final class NsdManager { + method public void discoverServices(java.lang.String, int, android.net.nsd.NsdManager.DiscoveryListener); + method public void registerService(android.net.nsd.NsdServiceInfo, int, android.net.nsd.NsdManager.RegistrationListener); + method public void resolveService(android.net.nsd.NsdServiceInfo, android.net.nsd.NsdManager.ResolveListener); + method public void stopServiceDiscovery(android.net.nsd.NsdManager.DiscoveryListener); + method public void unregisterService(android.net.nsd.NsdManager.RegistrationListener); + field public static final java.lang.String ACTION_NSD_STATE_CHANGED = "android.net.nsd.STATE_CHANGED"; + field public static final java.lang.String EXTRA_NSD_STATE = "nsd_state"; + field public static final int FAILURE_ALREADY_ACTIVE = 3; // 0x3 + field public static final int FAILURE_INTERNAL_ERROR = 0; // 0x0 + field public static final int FAILURE_MAX_LIMIT = 4; // 0x4 + field public static final int NSD_STATE_DISABLED = 1; // 0x1 + field public static final int NSD_STATE_ENABLED = 2; // 0x2 + field public static final int PROTOCOL_DNS_SD = 1; // 0x1 + } + + public static abstract interface NsdManager.DiscoveryListener { + method public abstract void onDiscoveryStarted(java.lang.String); + method public abstract void onDiscoveryStopped(java.lang.String); + method public abstract void onServiceFound(android.net.nsd.NsdServiceInfo); + method public abstract void onServiceLost(android.net.nsd.NsdServiceInfo); + method public abstract void onStartDiscoveryFailed(java.lang.String, int); + method public abstract void onStopDiscoveryFailed(java.lang.String, int); + } + + public static abstract interface NsdManager.RegistrationListener { + method public abstract void onRegistrationFailed(android.net.nsd.NsdServiceInfo, int); + method public abstract void onServiceRegistered(android.net.nsd.NsdServiceInfo); + method public abstract void onServiceUnregistered(android.net.nsd.NsdServiceInfo); + method public abstract void onUnregistrationFailed(android.net.nsd.NsdServiceInfo, int); + } + + public static abstract interface NsdManager.ResolveListener { + method public abstract void onResolveFailed(android.net.nsd.NsdServiceInfo, int); + method public abstract void onServiceResolved(android.net.nsd.NsdServiceInfo); + } + + public final class NsdServiceInfo implements android.os.Parcelable { + ctor public NsdServiceInfo(); + method public int describeContents(); + method public java.util.Map getAttributes(); + method public java.net.InetAddress getHost(); + method public int getPort(); + method public java.lang.String getServiceName(); + method public java.lang.String getServiceType(); + method public void removeAttribute(java.lang.String); + method public void setAttribute(java.lang.String, java.lang.String); + method public void setHost(java.net.InetAddress); + method public void setPort(int); + method public void setServiceName(java.lang.String); + method public void setServiceType(java.lang.String); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + +} + +package android.net.rtp { + + public class AudioCodec { + method public static android.net.rtp.AudioCodec getCodec(int, java.lang.String, java.lang.String); + method public static android.net.rtp.AudioCodec[] getCodecs(); + field public static final android.net.rtp.AudioCodec AMR; + field public static final android.net.rtp.AudioCodec GSM; + field public static final android.net.rtp.AudioCodec GSM_EFR; + field public static final android.net.rtp.AudioCodec PCMA; + field public static final android.net.rtp.AudioCodec PCMU; + field public final java.lang.String fmtp; + field public final java.lang.String rtpmap; + field public final int type; + } + + public class AudioGroup { + ctor public AudioGroup(); + method public void clear(); + method public int getMode(); + method public android.net.rtp.AudioStream[] getStreams(); + method public void sendDtmf(int); + method public void setMode(int); + field public static final int MODE_ECHO_SUPPRESSION = 3; // 0x3 + field public static final int MODE_MUTED = 1; // 0x1 + field public static final int MODE_NORMAL = 2; // 0x2 + field public static final int MODE_ON_HOLD = 0; // 0x0 + } + + public class AudioStream extends android.net.rtp.RtpStream { + ctor public AudioStream(java.net.InetAddress) throws java.net.SocketException; + method public android.net.rtp.AudioCodec getCodec(); + method public int getDtmfType(); + method public android.net.rtp.AudioGroup getGroup(); + method public final boolean isBusy(); + method public void join(android.net.rtp.AudioGroup); + method public void setCodec(android.net.rtp.AudioCodec); + method public void setDtmfType(int); + } + + public class RtpStream { + method public void associate(java.net.InetAddress, int); + method public java.net.InetAddress getLocalAddress(); + method public int getLocalPort(); + method public int getMode(); + method public java.net.InetAddress getRemoteAddress(); + method public int getRemotePort(); + method public boolean isBusy(); + method public void release(); + method public void setMode(int); + field public static final int MODE_NORMAL = 0; // 0x0 + field public static final int MODE_RECEIVE_ONLY = 2; // 0x2 + field public static final int MODE_SEND_ONLY = 1; // 0x1 + } + +} + +package android.net.sip { + + public class SipAudioCall { + ctor public SipAudioCall(android.content.Context, android.net.sip.SipProfile); + method public void answerCall(int) throws android.net.sip.SipException; + method public void attachCall(android.net.sip.SipSession, java.lang.String) throws android.net.sip.SipException; + method public void close(); + method public void continueCall(int) throws android.net.sip.SipException; + method public void endCall() throws android.net.sip.SipException; + method public android.net.sip.SipProfile getLocalProfile(); + method public android.net.sip.SipProfile getPeerProfile(); + method public int getState(); + method public void holdCall(int) throws android.net.sip.SipException; + method public boolean isInCall(); + method public boolean isMuted(); + method public boolean isOnHold(); + method public void makeCall(android.net.sip.SipProfile, android.net.sip.SipSession, int) throws android.net.sip.SipException; + method public void sendDtmf(int); + method public void sendDtmf(int, android.os.Message); + method public void setListener(android.net.sip.SipAudioCall.Listener); + method public void setListener(android.net.sip.SipAudioCall.Listener, boolean); + method public void setSpeakerMode(boolean); + method public void startAudio(); + method public void toggleMute(); + } + + public static class SipAudioCall.Listener { + ctor public SipAudioCall.Listener(); + method public void onCallBusy(android.net.sip.SipAudioCall); + method public void onCallEnded(android.net.sip.SipAudioCall); + method public void onCallEstablished(android.net.sip.SipAudioCall); + method public void onCallHeld(android.net.sip.SipAudioCall); + method public void onCalling(android.net.sip.SipAudioCall); + method public void onChanged(android.net.sip.SipAudioCall); + method public void onError(android.net.sip.SipAudioCall, int, java.lang.String); + method public void onReadyToCall(android.net.sip.SipAudioCall); + method public void onRinging(android.net.sip.SipAudioCall, android.net.sip.SipProfile); + method public void onRingingBack(android.net.sip.SipAudioCall); + } + + public class SipErrorCode { + method public static java.lang.String toString(int); + field public static final int CLIENT_ERROR = -4; // 0xfffffffc + field public static final int CROSS_DOMAIN_AUTHENTICATION = -11; // 0xfffffff5 + field public static final int DATA_CONNECTION_LOST = -10; // 0xfffffff6 + field public static final int INVALID_CREDENTIALS = -8; // 0xfffffff8 + field public static final int INVALID_REMOTE_URI = -6; // 0xfffffffa + field public static final int IN_PROGRESS = -9; // 0xfffffff7 + field public static final int NO_ERROR = 0; // 0x0 + field public static final int PEER_NOT_REACHABLE = -7; // 0xfffffff9 + field public static final int SERVER_ERROR = -2; // 0xfffffffe + field public static final int SERVER_UNREACHABLE = -12; // 0xfffffff4 + field public static final int SOCKET_ERROR = -1; // 0xffffffff + field public static final int TIME_OUT = -5; // 0xfffffffb + field public static final int TRANSACTION_TERMINTED = -3; // 0xfffffffd + } + + public class SipException extends java.lang.Exception { + ctor public SipException(); + ctor public SipException(java.lang.String); + ctor public SipException(java.lang.String, java.lang.Throwable); + } + + public class SipManager { + method public void close(java.lang.String) throws android.net.sip.SipException; + method public android.net.sip.SipSession createSipSession(android.net.sip.SipProfile, android.net.sip.SipSession.Listener) throws android.net.sip.SipException; + method public static java.lang.String getCallId(android.content.Intent); + method public static java.lang.String getOfferSessionDescription(android.content.Intent); + method public android.net.sip.SipSession getSessionFor(android.content.Intent) throws android.net.sip.SipException; + method public static boolean isApiSupported(android.content.Context); + method public static boolean isIncomingCallIntent(android.content.Intent); + method public boolean isOpened(java.lang.String) throws android.net.sip.SipException; + method public boolean isRegistered(java.lang.String) throws android.net.sip.SipException; + method public static boolean isSipWifiOnly(android.content.Context); + method public static boolean isVoipSupported(android.content.Context); + method public android.net.sip.SipAudioCall makeAudioCall(android.net.sip.SipProfile, android.net.sip.SipProfile, android.net.sip.SipAudioCall.Listener, int) throws android.net.sip.SipException; + method public android.net.sip.SipAudioCall makeAudioCall(java.lang.String, java.lang.String, android.net.sip.SipAudioCall.Listener, int) throws android.net.sip.SipException; + method public static android.net.sip.SipManager newInstance(android.content.Context); + method public void open(android.net.sip.SipProfile) throws android.net.sip.SipException; + method public void open(android.net.sip.SipProfile, android.app.PendingIntent, android.net.sip.SipRegistrationListener) throws android.net.sip.SipException; + method public void register(android.net.sip.SipProfile, int, android.net.sip.SipRegistrationListener) throws android.net.sip.SipException; + method public void setRegistrationListener(java.lang.String, android.net.sip.SipRegistrationListener) throws android.net.sip.SipException; + method public android.net.sip.SipAudioCall takeAudioCall(android.content.Intent, android.net.sip.SipAudioCall.Listener) throws android.net.sip.SipException; + method public void unregister(android.net.sip.SipProfile, android.net.sip.SipRegistrationListener) throws android.net.sip.SipException; + field public static final java.lang.String EXTRA_CALL_ID = "android:sipCallID"; + field public static final java.lang.String EXTRA_OFFER_SD = "android:sipOfferSD"; + field public static final int INCOMING_CALL_RESULT_CODE = 101; // 0x65 + } + + public class SipProfile implements java.lang.Cloneable android.os.Parcelable java.io.Serializable { + method public int describeContents(); + method public java.lang.String getAuthUserName(); + method public boolean getAutoRegistration(); + method public java.lang.String getDisplayName(); + method public java.lang.String getPassword(); + method public int getPort(); + method public java.lang.String getProfileName(); + method public java.lang.String getProtocol(); + method public java.lang.String getProxyAddress(); + method public boolean getSendKeepAlive(); + method public java.lang.String getSipDomain(); + method public java.lang.String getUriString(); + method public java.lang.String getUserName(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public static class SipProfile.Builder { + ctor public SipProfile.Builder(android.net.sip.SipProfile); + ctor public SipProfile.Builder(java.lang.String) throws java.text.ParseException; + ctor public SipProfile.Builder(java.lang.String, java.lang.String) throws java.text.ParseException; + method public android.net.sip.SipProfile build(); + method public android.net.sip.SipProfile.Builder setAuthUserName(java.lang.String); + method public android.net.sip.SipProfile.Builder setAutoRegistration(boolean); + method public android.net.sip.SipProfile.Builder setDisplayName(java.lang.String); + method public android.net.sip.SipProfile.Builder setOutboundProxy(java.lang.String); + method public android.net.sip.SipProfile.Builder setPassword(java.lang.String); + method public android.net.sip.SipProfile.Builder setPort(int) throws java.lang.IllegalArgumentException; + method public android.net.sip.SipProfile.Builder setProfileName(java.lang.String); + method public android.net.sip.SipProfile.Builder setProtocol(java.lang.String) throws java.lang.IllegalArgumentException; + method public android.net.sip.SipProfile.Builder setSendKeepAlive(boolean); + } + + public abstract interface SipRegistrationListener { + method public abstract void onRegistering(java.lang.String); + method public abstract void onRegistrationDone(java.lang.String, long); + method public abstract void onRegistrationFailed(java.lang.String, int, java.lang.String); + } + + public final class SipSession { + method public void answerCall(java.lang.String, int); + method public void changeCall(java.lang.String, int); + method public void endCall(); + method public java.lang.String getCallId(); + method public java.lang.String getLocalIp(); + method public android.net.sip.SipProfile getLocalProfile(); + method public android.net.sip.SipProfile getPeerProfile(); + method public int getState(); + method public boolean isInCall(); + method public void makeCall(android.net.sip.SipProfile, java.lang.String, int); + method public void register(int); + method public void setListener(android.net.sip.SipSession.Listener); + method public void unregister(); + } + + public static class SipSession.Listener { + ctor public SipSession.Listener(); + method public void onCallBusy(android.net.sip.SipSession); + method public void onCallChangeFailed(android.net.sip.SipSession, int, java.lang.String); + method public void onCallEnded(android.net.sip.SipSession); + method public void onCallEstablished(android.net.sip.SipSession, java.lang.String); + method public void onCalling(android.net.sip.SipSession); + method public void onError(android.net.sip.SipSession, int, java.lang.String); + method public void onRegistering(android.net.sip.SipSession); + method public void onRegistrationDone(android.net.sip.SipSession, int); + method public void onRegistrationFailed(android.net.sip.SipSession, int, java.lang.String); + method public void onRegistrationTimeout(android.net.sip.SipSession); + method public void onRinging(android.net.sip.SipSession, android.net.sip.SipProfile, java.lang.String); + method public void onRingingBack(android.net.sip.SipSession); + } + + public static class SipSession.State { + method public static java.lang.String toString(int); + field public static final int DEREGISTERING = 2; // 0x2 + field public static final int INCOMING_CALL = 3; // 0x3 + field public static final int INCOMING_CALL_ANSWERING = 4; // 0x4 + field public static final int IN_CALL = 8; // 0x8 + field public static final int NOT_DEFINED = 101; // 0x65 + field public static final int OUTGOING_CALL = 5; // 0x5 + field public static final int OUTGOING_CALL_CANCELING = 7; // 0x7 + field public static final int OUTGOING_CALL_RING_BACK = 6; // 0x6 + field public static final int PINGING = 9; // 0x9 + field public static final int READY_TO_CALL = 0; // 0x0 + field public static final int REGISTERING = 1; // 0x1 + } + +} + +package android.net.wifi { + + public class BatchedScanResult implements android.os.Parcelable { + ctor public BatchedScanResult(); + ctor public BatchedScanResult(android.net.wifi.BatchedScanResult); + method public int describeContents(); + method public void writeToParcel(android.os.Parcel, int); + field public final java.util.List scanResults; + field public boolean truncated; + } + + public class RttManager { + method public android.net.wifi.RttManager.Capabilities getCapabilities(); + method public void startRanging(android.net.wifi.RttManager.RttParams[], android.net.wifi.RttManager.RttListener); + method public void stopRanging(android.net.wifi.RttManager.RttListener); + field public static final int BASE = 160256; // 0x27200 + field public static final int CMD_OP_ABORTED = 160260; // 0x27204 + field public static final int CMD_OP_FAILED = 160258; // 0x27202 + field public static final int CMD_OP_START_RANGING = 160256; // 0x27200 + field public static final int CMD_OP_STOP_RANGING = 160257; // 0x27201 + field public static final int CMD_OP_SUCCEEDED = 160259; // 0x27203 + field public static final java.lang.String DESCRIPTION_KEY = "android.net.wifi.RttManager.Description"; + field public static final int REASON_INVALID_LISTENER = -3; // 0xfffffffd + field public static final int REASON_INVALID_REQUEST = -4; // 0xfffffffc + field public static final int REASON_NOT_AVAILABLE = -2; // 0xfffffffe + field public static final int REASON_UNSPECIFIED = -1; // 0xffffffff + field public static final int RTT_CHANNEL_WIDTH_10 = 6; // 0x6 + field public static final int RTT_CHANNEL_WIDTH_160 = 3; // 0x3 + field public static final int RTT_CHANNEL_WIDTH_20 = 0; // 0x0 + field public static final int RTT_CHANNEL_WIDTH_40 = 1; // 0x1 + field public static final int RTT_CHANNEL_WIDTH_5 = 5; // 0x5 + field public static final int RTT_CHANNEL_WIDTH_80 = 2; // 0x2 + field public static final int RTT_CHANNEL_WIDTH_80P80 = 4; // 0x4 + field public static final int RTT_CHANNEL_WIDTH_UNSPECIFIED = -1; // 0xffffffff + field public static final int RTT_PEER_TYPE_AP = 1; // 0x1 + field public static final int RTT_PEER_TYPE_STA = 2; // 0x2 + field public static final int RTT_PEER_TYPE_UNSPECIFIED = 0; // 0x0 + field public static final int RTT_STATUS_ABORTED = 8; // 0x8 + field public static final int RTT_STATUS_FAILURE = 1; // 0x1 + field public static final int RTT_STATUS_FAIL_AP_ON_DIFF_CHANNEL = 6; // 0x6 + field public static final int RTT_STATUS_FAIL_NOT_SCHEDULED_YET = 4; // 0x4 + field public static final int RTT_STATUS_FAIL_NO_CAPABILITY = 7; // 0x7 + field public static final int RTT_STATUS_FAIL_NO_RSP = 2; // 0x2 + field public static final int RTT_STATUS_FAIL_REJECTED = 3; // 0x3 + field public static final int RTT_STATUS_FAIL_TM_TIMEOUT = 5; // 0x5 + field public static final int RTT_STATUS_SUCCESS = 0; // 0x0 + field public static final int RTT_TYPE_11_MC = 4; // 0x4 + field public static final int RTT_TYPE_11_V = 2; // 0x2 + field public static final int RTT_TYPE_ONE_SIDED = 1; // 0x1 + field public static final int RTT_TYPE_UNSPECIFIED = 0; // 0x0 + } + + public class RttManager.Capabilities { + ctor public RttManager.Capabilities(); + field public int supportedPeerType; + field public int supportedType; + } + + public static class RttManager.ParcelableRttParams implements android.os.Parcelable { + method public int describeContents(); + method public void writeToParcel(android.os.Parcel, int); + field public android.net.wifi.RttManager.RttParams[] mParams; + } + + public static class RttManager.ParcelableRttResults implements android.os.Parcelable { + ctor public RttManager.ParcelableRttResults(android.net.wifi.RttManager.RttResult[]); + method public int describeContents(); + method public void writeToParcel(android.os.Parcel, int); + field public android.net.wifi.RttManager.RttResult[] mResults; + } + + public static abstract interface RttManager.RttListener { + method public abstract void onAborted(); + method public abstract void onFailure(int, java.lang.String); + method public abstract void onSuccess(android.net.wifi.RttManager.RttResult[]); + } + + public static class RttManager.RttParams { + ctor public RttManager.RttParams(); + field public java.lang.String bssid; + field public int channelWidth; + field public int deviceType; + field public int frequency; + field public int num_retries; + field public int num_samples; + field public int requestType; + } + + public static class RttManager.RttResult { + ctor public RttManager.RttResult(); + field public java.lang.String bssid; + field public int distance_cm; + field public int distance_sd_cm; + field public int distance_spread_cm; + field public int requestType; + field public int rssi; + field public int rssi_spread; + field public long rtt_ns; + field public long rtt_sd_ns; + field public long rtt_spread_ns; + field public int status; + field public long ts; + field public int tx_rate; + } + + public class ScanResult implements android.os.Parcelable { + method public int describeContents(); + method public void writeToParcel(android.os.Parcel, int); + field public java.lang.String BSSID; + field public java.lang.String SSID; + field public java.lang.String capabilities; + field public int frequency; + field public int level; + field public long timestamp; + } + + public final class SupplicantState extends java.lang.Enum implements android.os.Parcelable { + method public int describeContents(); + method public static boolean isValidState(android.net.wifi.SupplicantState); + method public static android.net.wifi.SupplicantState valueOf(java.lang.String); + method public static final android.net.wifi.SupplicantState[] values(); + method public void writeToParcel(android.os.Parcel, int); + enum_constant public static final android.net.wifi.SupplicantState ASSOCIATED; + enum_constant public static final android.net.wifi.SupplicantState ASSOCIATING; + enum_constant public static final android.net.wifi.SupplicantState AUTHENTICATING; + enum_constant public static final android.net.wifi.SupplicantState COMPLETED; + enum_constant public static final android.net.wifi.SupplicantState DISCONNECTED; + enum_constant public static final android.net.wifi.SupplicantState DORMANT; + enum_constant public static final android.net.wifi.SupplicantState FOUR_WAY_HANDSHAKE; + enum_constant public static final android.net.wifi.SupplicantState GROUP_HANDSHAKE; + enum_constant public static final android.net.wifi.SupplicantState INACTIVE; + enum_constant public static final android.net.wifi.SupplicantState INTERFACE_DISABLED; + enum_constant public static final android.net.wifi.SupplicantState INVALID; + enum_constant public static final android.net.wifi.SupplicantState SCANNING; + enum_constant public static final android.net.wifi.SupplicantState UNINITIALIZED; + } + + public class WifiConfiguration implements android.os.Parcelable { + ctor public WifiConfiguration(); + method public int describeContents(); + method public void writeToParcel(android.os.Parcel, int); + field public java.lang.String BSSID; + field public java.lang.String FQDN; + field public java.lang.String SSID; + field public java.util.BitSet allowedAuthAlgorithms; + field public java.util.BitSet allowedGroupCiphers; + field public java.util.BitSet allowedKeyManagement; + field public java.util.BitSet allowedPairwiseCiphers; + field public java.util.BitSet allowedProtocols; + field public int creatorUid; + field public android.net.wifi.WifiEnterpriseConfig enterpriseConfig; + field public boolean hiddenSSID; + field public int lastUpdateUid; + field public int networkId; + field public int numAssociation; + field public int numScorerOverride; + field public int numScorerOverrideAndSwitchedNetwork; + field public java.lang.String preSharedKey; + field public int priority; + field public int status; + field public java.lang.String[] wepKeys; + field public int wepTxKeyIndex; + } + + public static class WifiConfiguration.AuthAlgorithm { + field public static final int LEAP = 2; // 0x2 + field public static final int OPEN = 0; // 0x0 + field public static final int SHARED = 1; // 0x1 + field public static final java.lang.String[] strings; + field public static final java.lang.String varName = "auth_alg"; + } + + public static class WifiConfiguration.GroupCipher { + field public static final int CCMP = 3; // 0x3 + field public static final int TKIP = 2; // 0x2 + field public static final int WEP104 = 1; // 0x1 + field public static final int WEP40 = 0; // 0x0 + field public static final java.lang.String[] strings; + field public static final java.lang.String varName = "group"; + } + + public static class WifiConfiguration.KeyMgmt { + field public static final int IEEE8021X = 3; // 0x3 + field public static final int NONE = 0; // 0x0 + field public static final int WPA_EAP = 2; // 0x2 + field public static final int WPA_PSK = 1; // 0x1 + field public static final java.lang.String[] strings; + field public static final java.lang.String varName = "key_mgmt"; + } + + public static class WifiConfiguration.PairwiseCipher { + field public static final int CCMP = 2; // 0x2 + field public static final int NONE = 0; // 0x0 + field public static final int TKIP = 1; // 0x1 + field public static final java.lang.String[] strings; + field public static final java.lang.String varName = "pairwise"; + } + + public static class WifiConfiguration.Protocol { + field public static final int RSN = 1; // 0x1 + field public static final int WPA = 0; // 0x0 + field public static final java.lang.String[] strings; + field public static final java.lang.String varName = "proto"; + } + + public static class WifiConfiguration.Status { + field public static final int CURRENT = 0; // 0x0 + field public static final int DISABLED = 1; // 0x1 + field public static final int ENABLED = 2; // 0x2 + field public static final java.lang.String[] strings; + } + + public class WifiConnectionStatistics implements android.os.Parcelable { + ctor public WifiConnectionStatistics(); + ctor public WifiConnectionStatistics(android.net.wifi.WifiConnectionStatistics); + method public int describeContents(); + method public void incrementOrAddUntrusted(java.lang.String, int, int); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public int num24GhzConnected; + field public int num5GhzConnected; + field public int numAutoJoinAttempt; + field public int numAutoRoamAttempt; + field public int numWifiManagerJoinAttempt; + field public java.util.HashMap untrustedNetworkHistory; + } + + public class WifiEnterpriseConfig implements android.os.Parcelable { + ctor public WifiEnterpriseConfig(); + ctor public WifiEnterpriseConfig(android.net.wifi.WifiEnterpriseConfig); + method public int describeContents(); + method public java.lang.String getAnonymousIdentity(); + method public java.security.cert.X509Certificate getCaCertificate(); + method public java.security.cert.X509Certificate getClientCertificate(); + method public int getEapMethod(); + method public java.lang.String getIdentity(); + method public java.lang.String getPassword(); + method public int getPhase2Method(); + method public java.lang.String getSubjectMatch(); + method public void setAnonymousIdentity(java.lang.String); + method public void setCaCertificate(java.security.cert.X509Certificate); + method public void setClientKeyEntry(java.security.PrivateKey, java.security.cert.X509Certificate); + method public void setEapMethod(int); + method public void setIdentity(java.lang.String); + method public void setPassword(java.lang.String); + method public void setPhase2Method(int); + method public void setSubjectMatch(java.lang.String); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public static final class WifiEnterpriseConfig.Eap { + field public static final int AKA = 5; // 0x5 + field public static final int NONE = -1; // 0xffffffff + field public static final int PEAP = 0; // 0x0 + field public static final int PWD = 3; // 0x3 + field public static final int SIM = 4; // 0x4 + field public static final int TLS = 1; // 0x1 + field public static final int TTLS = 2; // 0x2 + } + + public static final class WifiEnterpriseConfig.Phase2 { + field public static final int GTC = 4; // 0x4 + field public static final int MSCHAP = 2; // 0x2 + field public static final int MSCHAPV2 = 3; // 0x3 + field public static final int NONE = 0; // 0x0 + field public static final int PAP = 1; // 0x1 + } + + public class WifiInfo implements android.os.Parcelable { + method public int describeContents(); + method public java.lang.String getBSSID(); + method public static android.net.NetworkInfo.DetailedState getDetailedStateOf(android.net.wifi.SupplicantState); + method public int getFrequency(); + method public boolean getHiddenSSID(); + method public int getIpAddress(); + method public int getLinkSpeed(); + method public java.lang.String getMacAddress(); + method public int getNetworkId(); + method public int getRssi(); + method public java.lang.String getSSID(); + method public android.net.wifi.SupplicantState getSupplicantState(); + method public void writeToParcel(android.os.Parcel, int); + field public static final java.lang.String FREQUENCY_UNITS = "MHz"; + field public static final java.lang.String LINK_SPEED_UNITS = "Mbps"; + } + + public class WifiManager { + method public int addNetwork(android.net.wifi.WifiConfiguration); + method public static int calculateSignalLevel(int, int); + method public void cancelWps(android.net.wifi.WifiManager.WpsCallback); + method public static int compareSignalLevel(int, int); + method public android.net.wifi.WifiManager.MulticastLock createMulticastLock(java.lang.String); + method public android.net.wifi.WifiManager.WifiLock createWifiLock(int, java.lang.String); + method public android.net.wifi.WifiManager.WifiLock createWifiLock(java.lang.String); + method public boolean disableNetwork(int); + method public boolean disconnect(); + method public boolean enableNetwork(int, boolean); + method public java.util.List getBatchedScanResults(); + method public java.util.List getConfiguredNetworks(); + method public android.net.wifi.WifiInfo getConnectionInfo(); + method public android.net.wifi.WifiConnectionStatistics getConnectionStatistics(); + method public android.net.DhcpInfo getDhcpInfo(); + method public java.util.List getPrivilegedConfiguredNetworks(); + method public java.util.List getScanResults(); + method public int getWifiState(); + method public boolean is5GHzBandSupported(); + method public boolean isBatchedScanSupported(); + method public boolean isDeviceToApRttSupported(); + method public boolean isDeviceToDeviceRttSupported(); + method public boolean isEnhancedPowerReportingSupported(); + method public boolean isP2pSupported(); + method public boolean isPortableHotspotSupported(); + method public boolean isPreferredNetworkOffloadSupported(); + method public boolean isScanAlwaysAvailable(); + method public boolean isTdlsSupported(); + method public boolean isWifiEnabled(); + method public boolean isWifiScannerSupported(); + method public boolean pingSupplicant(); + method public boolean reassociate(); + method public boolean reconnect(); + method public boolean removeNetwork(int); + method public boolean saveConfiguration(); + method public void setTdlsEnabled(java.net.InetAddress, boolean); + method public void setTdlsEnabledWithMacAddress(java.lang.String, boolean); + method public boolean setWifiEnabled(boolean); + method public boolean startLocationRestrictedScan(android.os.WorkSource); + method public boolean startScan(); + method public boolean startScan(android.os.WorkSource); + method public void startWps(android.net.wifi.WpsInfo, android.net.wifi.WifiManager.WpsCallback); + method public int updateNetwork(android.net.wifi.WifiConfiguration); + field public static final java.lang.String ACTION_PICK_WIFI_NETWORK = "android.net.wifi.PICK_WIFI_NETWORK"; + field public static final java.lang.String ACTION_REQUEST_SCAN_ALWAYS_AVAILABLE = "android.net.wifi.action.REQUEST_SCAN_ALWAYS_AVAILABLE"; + field public static final int CHANGE_REASON_ADDED = 0; // 0x0 + field public static final int CHANGE_REASON_CONFIG_CHANGE = 2; // 0x2 + field public static final int CHANGE_REASON_REMOVED = 1; // 0x1 + field public static final java.lang.String CONFIGURED_NETWORKS_CHANGED_ACTION = "android.net.wifi.CONFIGURED_NETWORKS_CHANGE"; + field public static final int ERROR_AUTHENTICATING = 1; // 0x1 + field public static final java.lang.String EXTRA_BSSID = "bssid"; + field public static final java.lang.String EXTRA_CHANGE_REASON = "changeReason"; + field public static final java.lang.String EXTRA_MULTIPLE_NETWORKS_CHANGED = "multipleChanges"; + field public static final java.lang.String EXTRA_NETWORK_INFO = "networkInfo"; + field public static final java.lang.String EXTRA_NEW_RSSI = "newRssi"; + field public static final java.lang.String EXTRA_NEW_STATE = "newState"; + field public static final java.lang.String EXTRA_PREVIOUS_WIFI_STATE = "previous_wifi_state"; + field public static final java.lang.String EXTRA_SUPPLICANT_CONNECTED = "connected"; + field public static final java.lang.String EXTRA_SUPPLICANT_ERROR = "supplicantError"; + field public static final java.lang.String EXTRA_WIFI_CONFIGURATION = "wifiConfiguration"; + field public static final java.lang.String EXTRA_WIFI_INFO = "wifiInfo"; + field public static final java.lang.String EXTRA_WIFI_STATE = "wifi_state"; + field public static final java.lang.String NETWORK_IDS_CHANGED_ACTION = "android.net.wifi.NETWORK_IDS_CHANGED"; + field public static final java.lang.String NETWORK_STATE_CHANGED_ACTION = "android.net.wifi.STATE_CHANGE"; + field public static final java.lang.String RSSI_CHANGED_ACTION = "android.net.wifi.RSSI_CHANGED"; + field public static final java.lang.String SCAN_RESULTS_AVAILABLE_ACTION = "android.net.wifi.SCAN_RESULTS"; + field public static final java.lang.String SUPPLICANT_CONNECTION_CHANGE_ACTION = "android.net.wifi.supplicant.CONNECTION_CHANGE"; + field public static final java.lang.String SUPPLICANT_STATE_CHANGED_ACTION = "android.net.wifi.supplicant.STATE_CHANGE"; + field public static final int WIFI_MODE_FULL = 1; // 0x1 + field public static final int WIFI_MODE_FULL_HIGH_PERF = 3; // 0x3 + field public static final int WIFI_MODE_SCAN_ONLY = 2; // 0x2 + field public static final java.lang.String WIFI_STATE_CHANGED_ACTION = "android.net.wifi.WIFI_STATE_CHANGED"; + field public static final int WIFI_STATE_DISABLED = 1; // 0x1 + field public static final int WIFI_STATE_DISABLING = 0; // 0x0 + field public static final int WIFI_STATE_ENABLED = 3; // 0x3 + field public static final int WIFI_STATE_ENABLING = 2; // 0x2 + field public static final int WIFI_STATE_UNKNOWN = 4; // 0x4 + field public static final int WPS_AUTH_FAILURE = 6; // 0x6 + field public static final int WPS_OVERLAP_ERROR = 3; // 0x3 + field public static final int WPS_TIMED_OUT = 7; // 0x7 + field public static final int WPS_TKIP_ONLY_PROHIBITED = 5; // 0x5 + field public static final int WPS_WEP_PROHIBITED = 4; // 0x4 + } + + public class WifiManager.MulticastLock { + method public void acquire(); + method public boolean isHeld(); + method public void release(); + method public void setReferenceCounted(boolean); + } + + public class WifiManager.WifiLock { + method public void acquire(); + method public boolean isHeld(); + method public void release(); + method public void setReferenceCounted(boolean); + method public void setWorkSource(android.os.WorkSource); + } + + public static abstract class WifiManager.WpsCallback { + ctor public WifiManager.WpsCallback(); + method public abstract void onFailed(int); + method public abstract void onStarted(java.lang.String); + method public abstract void onSucceeded(); + } + + public class WifiNetworkConnectionStatistics implements android.os.Parcelable { + ctor public WifiNetworkConnectionStatistics(int, int); + ctor public WifiNetworkConnectionStatistics(); + ctor public WifiNetworkConnectionStatistics(android.net.wifi.WifiNetworkConnectionStatistics); + method public int describeContents(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public int numConnection; + field public int numUsage; + } + + public class WifiScanner { + method public void configureWifiChange(int, int, int, int, int, android.net.wifi.WifiScanner.BssidInfo[]); + method public void configureWifiChange(android.net.wifi.WifiScanner.WifiChangeSettings); + method public android.net.wifi.ScanResult[] getScanResults(); + method public void startBackgroundScan(android.net.wifi.WifiScanner.ScanSettings, android.net.wifi.WifiScanner.ScanListener); + method public void startTrackingBssids(android.net.wifi.WifiScanner.BssidInfo[], int, android.net.wifi.WifiScanner.BssidListener); + method public void startTrackingWifiChange(android.net.wifi.WifiScanner.WifiChangeListener); + method public void stopBackgroundScan(android.net.wifi.WifiScanner.ScanListener); + method public void stopTrackingBssids(android.net.wifi.WifiScanner.BssidListener); + method public void stopTrackingWifiChange(android.net.wifi.WifiScanner.WifiChangeListener); + field public static final int MAX_SCAN_PERIOD_MS = 1024000; // 0xfa000 + field public static final int MIN_SCAN_PERIOD_MS = 1000; // 0x3e8 + field public static final int REASON_INVALID_LISTENER = -2; // 0xfffffffe + field public static final int REASON_INVALID_REQUEST = -3; // 0xfffffffd + field public static final int REASON_NOT_AUTHORIZED = -4; // 0xfffffffc + field public static final int REASON_SUCCEEDED = 0; // 0x0 + field public static final int REASON_UNSPECIFIED = -1; // 0xffffffff + field public static final int REPORT_EVENT_AFTER_BUFFER_FULL = 0; // 0x0 + field public static final int REPORT_EVENT_AFTER_EACH_SCAN = 1; // 0x1 + field public static final int REPORT_EVENT_FULL_SCAN_RESULT = 2; // 0x2 + field public static final int WIFI_BAND_24_GHZ = 1; // 0x1 + field public static final int WIFI_BAND_5_GHZ = 2; // 0x2 + field public static final int WIFI_BAND_5_GHZ_DFS_ONLY = 4; // 0x4 + field public static final int WIFI_BAND_5_GHZ_WITH_DFS = 6; // 0x6 + field public static final int WIFI_BAND_BOTH = 3; // 0x3 + field public static final int WIFI_BAND_BOTH_WITH_DFS = 7; // 0x7 + field public static final int WIFI_BAND_UNSPECIFIED = 0; // 0x0 + } + + public static abstract interface WifiScanner.ActionListener { + method public abstract void onFailure(int, java.lang.String); + method public abstract void onSuccess(); + } + + public static class WifiScanner.BssidInfo { + ctor public WifiScanner.BssidInfo(); + field public java.lang.String bssid; + field public int frequencyHint; + field public int high; + field public int low; + } + + public static abstract interface WifiScanner.BssidListener implements android.net.wifi.WifiScanner.ActionListener { + method public abstract void onFound(android.net.wifi.ScanResult[]); + } + + public static class WifiScanner.ChannelSpec { + ctor public WifiScanner.ChannelSpec(int); + field public int frequency; + } + + public static class WifiScanner.HotlistSettings implements android.os.Parcelable { + ctor public WifiScanner.HotlistSettings(); + method public int describeContents(); + method public void writeToParcel(android.os.Parcel, int); + field public int apLostThreshold; + field public android.net.wifi.WifiScanner.BssidInfo[] bssidInfos; + } + + public static abstract interface WifiScanner.ScanListener implements android.net.wifi.WifiScanner.ActionListener { + method public abstract void onFullResult(android.net.wifi.ScanResult); + method public abstract void onPeriodChanged(int); + method public abstract void onResults(android.net.wifi.ScanResult[]); + } + + public static class WifiScanner.ScanSettings implements android.os.Parcelable { + ctor public WifiScanner.ScanSettings(); + method public int describeContents(); + method public void writeToParcel(android.os.Parcel, int); + field public int band; + field public android.net.wifi.WifiScanner.ChannelSpec[] channels; + field public int numBssidsPerScan; + field public int periodInMs; + field public int reportEvents; + } + + public static abstract interface WifiScanner.WifiChangeListener implements android.net.wifi.WifiScanner.ActionListener { + method public abstract void onChanging(android.net.wifi.ScanResult[]); + method public abstract void onQuiescence(android.net.wifi.ScanResult[]); + } + + public static class WifiScanner.WifiChangeSettings implements android.os.Parcelable { + ctor public WifiScanner.WifiChangeSettings(); + method public int describeContents(); + method public void writeToParcel(android.os.Parcel, int); + field public android.net.wifi.WifiScanner.BssidInfo[] bssidInfos; + field public int lostApSampleSize; + field public int minApsBreachingThreshold; + field public int periodInMs; + field public int rssiSampleSize; + field public int unchangedSampleSize; + } + + public class WpsInfo implements android.os.Parcelable { + ctor public WpsInfo(); + ctor public WpsInfo(android.net.wifi.WpsInfo); + method public int describeContents(); + method public void writeToParcel(android.os.Parcel, int); + field public java.lang.String BSSID; + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int DISPLAY = 1; // 0x1 + field public static final int INVALID = 4; // 0x4 + field public static final int KEYPAD = 2; // 0x2 + field public static final int LABEL = 3; // 0x3 + field public static final int PBC = 0; // 0x0 + field public java.lang.String pin; + field public int setup; + } + +} + +package android.net.wifi.p2p { + + public class WifiP2pConfig implements android.os.Parcelable { + ctor public WifiP2pConfig(); + ctor public WifiP2pConfig(android.net.wifi.p2p.WifiP2pConfig); + method public int describeContents(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public java.lang.String deviceAddress; + field public int groupOwnerIntent; + field public android.net.wifi.WpsInfo wps; + } + + public class WifiP2pDevice implements android.os.Parcelable { + ctor public WifiP2pDevice(); + ctor public WifiP2pDevice(android.net.wifi.p2p.WifiP2pDevice); + method public int describeContents(); + method public boolean isGroupOwner(); + method public boolean isServiceDiscoveryCapable(); + method public boolean wpsDisplaySupported(); + method public boolean wpsKeypadSupported(); + method public boolean wpsPbcSupported(); + method public void writeToParcel(android.os.Parcel, int); + field public static final int AVAILABLE = 3; // 0x3 + field public static final int CONNECTED = 0; // 0x0 + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int FAILED = 2; // 0x2 + field public static final int INVITED = 1; // 0x1 + field public static final int UNAVAILABLE = 4; // 0x4 + field public java.lang.String deviceAddress; + field public java.lang.String deviceName; + field public java.lang.String primaryDeviceType; + field public java.lang.String secondaryDeviceType; + field public int status; + } + + public class WifiP2pDeviceList implements android.os.Parcelable { + ctor public WifiP2pDeviceList(); + ctor public WifiP2pDeviceList(android.net.wifi.p2p.WifiP2pDeviceList); + method public int describeContents(); + method public android.net.wifi.p2p.WifiP2pDevice get(java.lang.String); + method public java.util.Collection getDeviceList(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public class WifiP2pGroup implements android.os.Parcelable { + ctor public WifiP2pGroup(); + ctor public WifiP2pGroup(android.net.wifi.p2p.WifiP2pGroup); + method public int describeContents(); + method public java.util.Collection getClientList(); + method public java.lang.String getInterface(); + method public java.lang.String getNetworkName(); + method public android.net.wifi.p2p.WifiP2pDevice getOwner(); + method public java.lang.String getPassphrase(); + method public boolean isGroupOwner(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public class WifiP2pInfo implements android.os.Parcelable { + ctor public WifiP2pInfo(); + ctor public WifiP2pInfo(android.net.wifi.p2p.WifiP2pInfo); + method public int describeContents(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public boolean groupFormed; + field public java.net.InetAddress groupOwnerAddress; + field public boolean isGroupOwner; + } + + public class WifiP2pManager { + method public void addLocalService(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.nsd.WifiP2pServiceInfo, android.net.wifi.p2p.WifiP2pManager.ActionListener); + method public void addServiceRequest(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.nsd.WifiP2pServiceRequest, android.net.wifi.p2p.WifiP2pManager.ActionListener); + method public void cancelConnect(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.ActionListener); + method public void clearLocalServices(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.ActionListener); + method public void clearServiceRequests(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.ActionListener); + method public void connect(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pConfig, android.net.wifi.p2p.WifiP2pManager.ActionListener); + method public void createGroup(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.ActionListener); + method public void discoverPeers(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.ActionListener); + method public void discoverServices(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.ActionListener); + method public android.net.wifi.p2p.WifiP2pManager.Channel initialize(android.content.Context, android.os.Looper, android.net.wifi.p2p.WifiP2pManager.ChannelListener); + method public void removeGroup(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.ActionListener); + method public void removeLocalService(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.nsd.WifiP2pServiceInfo, android.net.wifi.p2p.WifiP2pManager.ActionListener); + method public void removeServiceRequest(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.nsd.WifiP2pServiceRequest, android.net.wifi.p2p.WifiP2pManager.ActionListener); + method public void requestConnectionInfo(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.ConnectionInfoListener); + method public void requestGroupInfo(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.GroupInfoListener); + method public void requestPeers(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.PeerListListener); + method public void setDnsSdResponseListeners(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.DnsSdServiceResponseListener, android.net.wifi.p2p.WifiP2pManager.DnsSdTxtRecordListener); + method public void setServiceResponseListener(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.ServiceResponseListener); + method public void setUpnpServiceResponseListener(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.UpnpServiceResponseListener); + method public void stopPeerDiscovery(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.ActionListener); + field public static final int BUSY = 2; // 0x2 + field public static final int ERROR = 0; // 0x0 + field public static final java.lang.String EXTRA_DISCOVERY_STATE = "discoveryState"; + field public static final java.lang.String EXTRA_NETWORK_INFO = "networkInfo"; + field public static final java.lang.String EXTRA_P2P_DEVICE_LIST = "wifiP2pDeviceList"; + field public static final java.lang.String EXTRA_WIFI_P2P_DEVICE = "wifiP2pDevice"; + field public static final java.lang.String EXTRA_WIFI_P2P_GROUP = "p2pGroupInfo"; + field public static final java.lang.String EXTRA_WIFI_P2P_INFO = "wifiP2pInfo"; + field public static final java.lang.String EXTRA_WIFI_STATE = "wifi_p2p_state"; + field public static final int NO_SERVICE_REQUESTS = 3; // 0x3 + field public static final int P2P_UNSUPPORTED = 1; // 0x1 + field public static final java.lang.String WIFI_P2P_CONNECTION_CHANGED_ACTION = "android.net.wifi.p2p.CONNECTION_STATE_CHANGE"; + field public static final java.lang.String WIFI_P2P_DISCOVERY_CHANGED_ACTION = "android.net.wifi.p2p.DISCOVERY_STATE_CHANGE"; + field public static final int WIFI_P2P_DISCOVERY_STARTED = 2; // 0x2 + field public static final int WIFI_P2P_DISCOVERY_STOPPED = 1; // 0x1 + field public static final java.lang.String WIFI_P2P_PEERS_CHANGED_ACTION = "android.net.wifi.p2p.PEERS_CHANGED"; + field public static final java.lang.String WIFI_P2P_STATE_CHANGED_ACTION = "android.net.wifi.p2p.STATE_CHANGED"; + field public static final int WIFI_P2P_STATE_DISABLED = 1; // 0x1 + field public static final int WIFI_P2P_STATE_ENABLED = 2; // 0x2 + field public static final java.lang.String WIFI_P2P_THIS_DEVICE_CHANGED_ACTION = "android.net.wifi.p2p.THIS_DEVICE_CHANGED"; + } + + public static abstract interface WifiP2pManager.ActionListener { + method public abstract void onFailure(int); + method public abstract void onSuccess(); + } + + public static class WifiP2pManager.Channel { + } + + public static abstract interface WifiP2pManager.ChannelListener { + method public abstract void onChannelDisconnected(); + } + + public static abstract interface WifiP2pManager.ConnectionInfoListener { + method public abstract void onConnectionInfoAvailable(android.net.wifi.p2p.WifiP2pInfo); + } + + public static abstract interface WifiP2pManager.DnsSdServiceResponseListener { + method public abstract void onDnsSdServiceAvailable(java.lang.String, java.lang.String, android.net.wifi.p2p.WifiP2pDevice); + } + + public static abstract interface WifiP2pManager.DnsSdTxtRecordListener { + method public abstract void onDnsSdTxtRecordAvailable(java.lang.String, java.util.Map, android.net.wifi.p2p.WifiP2pDevice); + } + + public static abstract interface WifiP2pManager.GroupInfoListener { + method public abstract void onGroupInfoAvailable(android.net.wifi.p2p.WifiP2pGroup); + } + + public static abstract interface WifiP2pManager.PeerListListener { + method public abstract void onPeersAvailable(android.net.wifi.p2p.WifiP2pDeviceList); + } + + public static abstract interface WifiP2pManager.ServiceResponseListener { + method public abstract void onServiceAvailable(int, byte[], android.net.wifi.p2p.WifiP2pDevice); + } + + public static abstract interface WifiP2pManager.UpnpServiceResponseListener { + method public abstract void onUpnpServiceAvailable(java.util.List, android.net.wifi.p2p.WifiP2pDevice); + } + +} + +package android.net.wifi.p2p.nsd { + + public class WifiP2pDnsSdServiceInfo extends android.net.wifi.p2p.nsd.WifiP2pServiceInfo { + method public static android.net.wifi.p2p.nsd.WifiP2pDnsSdServiceInfo newInstance(java.lang.String, java.lang.String, java.util.Map); + } + + public class WifiP2pDnsSdServiceRequest extends android.net.wifi.p2p.nsd.WifiP2pServiceRequest { + method public static android.net.wifi.p2p.nsd.WifiP2pDnsSdServiceRequest newInstance(); + method public static android.net.wifi.p2p.nsd.WifiP2pDnsSdServiceRequest newInstance(java.lang.String); + method public static android.net.wifi.p2p.nsd.WifiP2pDnsSdServiceRequest newInstance(java.lang.String, java.lang.String); + } + + public class WifiP2pServiceInfo implements android.os.Parcelable { + method public int describeContents(); + method public void writeToParcel(android.os.Parcel, int); + field public static final int SERVICE_TYPE_ALL = 0; // 0x0 + field public static final int SERVICE_TYPE_BONJOUR = 1; // 0x1 + field public static final int SERVICE_TYPE_UPNP = 2; // 0x2 + field public static final int SERVICE_TYPE_VENDOR_SPECIFIC = 255; // 0xff + } + + public class WifiP2pServiceRequest implements android.os.Parcelable { + method public int describeContents(); + method public static android.net.wifi.p2p.nsd.WifiP2pServiceRequest newInstance(int, java.lang.String); + method public static android.net.wifi.p2p.nsd.WifiP2pServiceRequest newInstance(int); + method public void writeToParcel(android.os.Parcel, int); + } + + public class WifiP2pUpnpServiceInfo extends android.net.wifi.p2p.nsd.WifiP2pServiceInfo { + method public static android.net.wifi.p2p.nsd.WifiP2pUpnpServiceInfo newInstance(java.lang.String, java.lang.String, java.util.List); + } + + public class WifiP2pUpnpServiceRequest extends android.net.wifi.p2p.nsd.WifiP2pServiceRequest { + method public static android.net.wifi.p2p.nsd.WifiP2pUpnpServiceRequest newInstance(); + method public static android.net.wifi.p2p.nsd.WifiP2pUpnpServiceRequest newInstance(java.lang.String); + } + +} + +package android.nfc { + + public class FormatException extends java.lang.Exception { + ctor public FormatException(); + ctor public FormatException(java.lang.String); + ctor public FormatException(java.lang.String, java.lang.Throwable); + } + + public final class NdefMessage implements android.os.Parcelable { + ctor public NdefMessage(byte[]) throws android.nfc.FormatException; + ctor public NdefMessage(android.nfc.NdefRecord, android.nfc.NdefRecord...); + ctor public NdefMessage(android.nfc.NdefRecord[]); + method public int describeContents(); + method public int getByteArrayLength(); + method public android.nfc.NdefRecord[] getRecords(); + method public byte[] toByteArray(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public final class NdefRecord implements android.os.Parcelable { + ctor public NdefRecord(short, byte[], byte[], byte[]); + ctor public deprecated NdefRecord(byte[]) throws android.nfc.FormatException; + method public static android.nfc.NdefRecord createApplicationRecord(java.lang.String); + method public static android.nfc.NdefRecord createExternal(java.lang.String, java.lang.String, byte[]); + method public static android.nfc.NdefRecord createMime(java.lang.String, byte[]); + method public static android.nfc.NdefRecord createTextRecord(java.lang.String, java.lang.String); + method public static android.nfc.NdefRecord createUri(android.net.Uri); + method public static android.nfc.NdefRecord createUri(java.lang.String); + method public int describeContents(); + method public byte[] getId(); + method public byte[] getPayload(); + method public short getTnf(); + method public byte[] getType(); + method public deprecated byte[] toByteArray(); + method public java.lang.String toMimeType(); + method public android.net.Uri toUri(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final byte[] RTD_ALTERNATIVE_CARRIER; + field public static final byte[] RTD_HANDOVER_CARRIER; + field public static final byte[] RTD_HANDOVER_REQUEST; + field public static final byte[] RTD_HANDOVER_SELECT; + field public static final byte[] RTD_SMART_POSTER; + field public static final byte[] RTD_TEXT; + field public static final byte[] RTD_URI; + field public static final short TNF_ABSOLUTE_URI = 3; // 0x3 + field public static final short TNF_EMPTY = 0; // 0x0 + field public static final short TNF_EXTERNAL_TYPE = 4; // 0x4 + field public static final short TNF_MIME_MEDIA = 2; // 0x2 + field public static final short TNF_UNCHANGED = 6; // 0x6 + field public static final short TNF_UNKNOWN = 5; // 0x5 + field public static final short TNF_WELL_KNOWN = 1; // 0x1 + } + + public final class NfcAdapter { + method public boolean addNfcUnlockHandler(android.nfc.NfcAdapter.NfcUnlockHandler, java.lang.String[]); + method public boolean disable(); + method public boolean disable(boolean); + method public void disableForegroundDispatch(android.app.Activity); + method public deprecated void disableForegroundNdefPush(android.app.Activity); + method public boolean disableNdefPush(); + method public void disableReaderMode(android.app.Activity); + method public boolean enable(); + method public void enableForegroundDispatch(android.app.Activity, android.app.PendingIntent, android.content.IntentFilter[], java.lang.String[][]); + method public deprecated void enableForegroundNdefPush(android.app.Activity, android.nfc.NdefMessage); + method public boolean enableNdefPush(); + method public void enableReaderMode(android.app.Activity, android.nfc.NfcAdapter.ReaderCallback, int, android.os.Bundle); + method public static android.nfc.NfcAdapter getDefaultAdapter(android.content.Context); + method public boolean invokeBeam(android.app.Activity); + method public boolean isEnabled(); + method public boolean isNdefPushEnabled(); + method public boolean removeNfcUnlockHandler(android.nfc.NfcAdapter.NfcUnlockHandler); + method public void setBeamPushUris(android.net.Uri[], android.app.Activity); + method public void setBeamPushUrisCallback(android.nfc.NfcAdapter.CreateBeamUrisCallback, android.app.Activity); + method public void setNdefPushMessage(android.nfc.NdefMessage, android.app.Activity, android.app.Activity...); + method public void setNdefPushMessage(android.nfc.NdefMessage, android.app.Activity, int); + method public void setNdefPushMessageCallback(android.nfc.NfcAdapter.CreateNdefMessageCallback, android.app.Activity, android.app.Activity...); + method public void setOnNdefPushCompleteCallback(android.nfc.NfcAdapter.OnNdefPushCompleteCallback, android.app.Activity, android.app.Activity...); + field public static final java.lang.String ACTION_ADAPTER_STATE_CHANGED = "android.nfc.action.ADAPTER_STATE_CHANGED"; + field public static final java.lang.String ACTION_NDEF_DISCOVERED = "android.nfc.action.NDEF_DISCOVERED"; + field public static final java.lang.String ACTION_TAG_DISCOVERED = "android.nfc.action.TAG_DISCOVERED"; + field public static final java.lang.String ACTION_TECH_DISCOVERED = "android.nfc.action.TECH_DISCOVERED"; + field public static final java.lang.String EXTRA_ADAPTER_STATE = "android.nfc.extra.ADAPTER_STATE"; + field public static final java.lang.String EXTRA_ID = "android.nfc.extra.ID"; + field public static final java.lang.String EXTRA_NDEF_MESSAGES = "android.nfc.extra.NDEF_MESSAGES"; + field public static final java.lang.String EXTRA_READER_PRESENCE_CHECK_DELAY = "presence"; + field public static final java.lang.String EXTRA_TAG = "android.nfc.extra.TAG"; + field public static final int FLAG_NDEF_PUSH_NO_CONFIRM = 1; // 0x1 + field public static final int FLAG_READER_NFC_A = 1; // 0x1 + field public static final int FLAG_READER_NFC_B = 2; // 0x2 + field public static final int FLAG_READER_NFC_BARCODE = 16; // 0x10 + field public static final int FLAG_READER_NFC_F = 4; // 0x4 + field public static final int FLAG_READER_NFC_V = 8; // 0x8 + field public static final int FLAG_READER_NO_PLATFORM_SOUNDS = 256; // 0x100 + field public static final int FLAG_READER_SKIP_NDEF_CHECK = 128; // 0x80 + field public static final int STATE_OFF = 1; // 0x1 + field public static final int STATE_ON = 3; // 0x3 + field public static final int STATE_TURNING_OFF = 4; // 0x4 + field public static final int STATE_TURNING_ON = 2; // 0x2 + } + + public static abstract interface NfcAdapter.CreateBeamUrisCallback { + method public abstract android.net.Uri[] createBeamUris(android.nfc.NfcEvent); + } + + public static abstract interface NfcAdapter.CreateNdefMessageCallback { + method public abstract android.nfc.NdefMessage createNdefMessage(android.nfc.NfcEvent); + } + + public static abstract interface NfcAdapter.NfcUnlockHandler { + method public abstract boolean onUnlockAttempted(android.nfc.Tag); + } + + public static abstract interface NfcAdapter.OnNdefPushCompleteCallback { + method public abstract void onNdefPushComplete(android.nfc.NfcEvent); + } + + public static abstract interface NfcAdapter.ReaderCallback { + method public abstract void onTagDiscovered(android.nfc.Tag); + } + + public final class NfcEvent { + field public final android.nfc.NfcAdapter nfcAdapter; + } + + public final class NfcManager { + method public android.nfc.NfcAdapter getDefaultAdapter(); + } + + public final class Tag implements android.os.Parcelable { + method public int describeContents(); + method public byte[] getId(); + method public java.lang.String[] getTechList(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public class TagLostException extends java.io.IOException { + ctor public TagLostException(); + ctor public TagLostException(java.lang.String); + } + +} + +package android.nfc.cardemulation { + + public final class CardEmulation { + method public boolean categoryAllowsForegroundPreference(java.lang.String); + method public java.util.List getAidsForService(android.content.ComponentName, java.lang.String); + method public static synchronized android.nfc.cardemulation.CardEmulation getInstance(android.nfc.NfcAdapter); + method public int getSelectionModeForCategory(java.lang.String); + method public boolean isDefaultServiceForAid(android.content.ComponentName, java.lang.String); + method public boolean isDefaultServiceForCategory(android.content.ComponentName, java.lang.String); + method public boolean registerAidsForService(android.content.ComponentName, java.lang.String, java.util.List); + method public boolean removeAidsForService(android.content.ComponentName, java.lang.String); + method public boolean setPreferredService(android.app.Activity, android.content.ComponentName); + method public boolean supportsAidPrefixRegistration(); + method public boolean unsetPreferredService(android.app.Activity); + field public static final java.lang.String ACTION_CHANGE_DEFAULT = "android.nfc.cardemulation.action.ACTION_CHANGE_DEFAULT"; + field public static final java.lang.String CATEGORY_OTHER = "other"; + field public static final java.lang.String CATEGORY_PAYMENT = "payment"; + field public static final java.lang.String EXTRA_CATEGORY = "category"; + field public static final java.lang.String EXTRA_SERVICE_COMPONENT = "component"; + field public static final int SELECTION_MODE_ALWAYS_ASK = 1; // 0x1 + field public static final int SELECTION_MODE_ASK_IF_CONFLICT = 2; // 0x2 + field public static final int SELECTION_MODE_PREFER_DEFAULT = 0; // 0x0 + } + + public abstract class HostApduService extends android.app.Service { + ctor public HostApduService(); + method public final void notifyUnhandled(); + method public final android.os.IBinder onBind(android.content.Intent); + method public abstract void onDeactivated(int); + method public abstract byte[] processCommandApdu(byte[], android.os.Bundle); + method public final void sendResponseApdu(byte[]); + field public static final int DEACTIVATION_DESELECTED = 1; // 0x1 + field public static final int DEACTIVATION_LINK_LOSS = 0; // 0x0 + field public static final java.lang.String SERVICE_INTERFACE = "android.nfc.cardemulation.action.HOST_APDU_SERVICE"; + field public static final java.lang.String SERVICE_META_DATA = "android.nfc.cardemulation.host_apdu_service"; + } + + public abstract class OffHostApduService extends android.app.Service { + ctor public OffHostApduService(); + method public abstract android.os.IBinder onBind(android.content.Intent); + field public static final java.lang.String SERVICE_INTERFACE = "android.nfc.cardemulation.action.OFF_HOST_APDU_SERVICE"; + field public static final java.lang.String SERVICE_META_DATA = "android.nfc.cardemulation.off_host_apdu_service"; + } + +} + +package android.nfc.tech { + + abstract class BasicTagTechnology implements android.nfc.tech.TagTechnology { + method public void close() throws java.io.IOException; + method public void connect() throws java.io.IOException; + method public android.nfc.Tag getTag(); + method public boolean isConnected(); + } + + public final class IsoDep extends android.nfc.tech.BasicTagTechnology { + method public static android.nfc.tech.IsoDep get(android.nfc.Tag); + method public byte[] getHiLayerResponse(); + method public byte[] getHistoricalBytes(); + method public int getMaxTransceiveLength(); + method public int getTimeout(); + method public boolean isExtendedLengthApduSupported(); + method public void setTimeout(int); + method public byte[] transceive(byte[]) throws java.io.IOException; + } + + public final class MifareClassic extends android.nfc.tech.BasicTagTechnology { + method public boolean authenticateSectorWithKeyA(int, byte[]) throws java.io.IOException; + method public boolean authenticateSectorWithKeyB(int, byte[]) throws java.io.IOException; + method public int blockToSector(int); + method public void decrement(int, int) throws java.io.IOException; + method public static android.nfc.tech.MifareClassic get(android.nfc.Tag); + method public int getBlockCount(); + method public int getBlockCountInSector(int); + method public int getMaxTransceiveLength(); + method public int getSectorCount(); + method public int getSize(); + method public int getTimeout(); + method public int getType(); + method public void increment(int, int) throws java.io.IOException; + method public byte[] readBlock(int) throws java.io.IOException; + method public void restore(int) throws java.io.IOException; + method public int sectorToBlock(int); + method public void setTimeout(int); + method public byte[] transceive(byte[]) throws java.io.IOException; + method public void transfer(int) throws java.io.IOException; + method public void writeBlock(int, byte[]) throws java.io.IOException; + field public static final int BLOCK_SIZE = 16; // 0x10 + field public static final byte[] KEY_DEFAULT; + field public static final byte[] KEY_MIFARE_APPLICATION_DIRECTORY; + field public static final byte[] KEY_NFC_FORUM; + field public static final int SIZE_1K = 1024; // 0x400 + field public static final int SIZE_2K = 2048; // 0x800 + field public static final int SIZE_4K = 4096; // 0x1000 + field public static final int SIZE_MINI = 320; // 0x140 + field public static final int TYPE_CLASSIC = 0; // 0x0 + field public static final int TYPE_PLUS = 1; // 0x1 + field public static final int TYPE_PRO = 2; // 0x2 + field public static final int TYPE_UNKNOWN = -1; // 0xffffffff + } + + public final class MifareUltralight extends android.nfc.tech.BasicTagTechnology { + method public static android.nfc.tech.MifareUltralight get(android.nfc.Tag); + method public int getMaxTransceiveLength(); + method public int getTimeout(); + method public int getType(); + method public byte[] readPages(int) throws java.io.IOException; + method public void setTimeout(int); + method public byte[] transceive(byte[]) throws java.io.IOException; + method public void writePage(int, byte[]) throws java.io.IOException; + field public static final int PAGE_SIZE = 4; // 0x4 + field public static final int TYPE_ULTRALIGHT = 1; // 0x1 + field public static final int TYPE_ULTRALIGHT_C = 2; // 0x2 + field public static final int TYPE_UNKNOWN = -1; // 0xffffffff + } + + public final class Ndef extends android.nfc.tech.BasicTagTechnology { + method public boolean canMakeReadOnly(); + method public static android.nfc.tech.Ndef get(android.nfc.Tag); + method public android.nfc.NdefMessage getCachedNdefMessage(); + method public int getMaxSize(); + method public android.nfc.NdefMessage getNdefMessage() throws android.nfc.FormatException, java.io.IOException; + method public java.lang.String getType(); + method public boolean isWritable(); + method public boolean makeReadOnly() throws java.io.IOException; + method public void writeNdefMessage(android.nfc.NdefMessage) throws android.nfc.FormatException, java.io.IOException; + field public static final java.lang.String MIFARE_CLASSIC = "com.nxp.ndef.mifareclassic"; + field public static final java.lang.String NFC_FORUM_TYPE_1 = "org.nfcforum.ndef.type1"; + field public static final java.lang.String NFC_FORUM_TYPE_2 = "org.nfcforum.ndef.type2"; + field public static final java.lang.String NFC_FORUM_TYPE_3 = "org.nfcforum.ndef.type3"; + field public static final java.lang.String NFC_FORUM_TYPE_4 = "org.nfcforum.ndef.type4"; + } + + public final class NdefFormatable extends android.nfc.tech.BasicTagTechnology { + method public void format(android.nfc.NdefMessage) throws android.nfc.FormatException, java.io.IOException; + method public void formatReadOnly(android.nfc.NdefMessage) throws android.nfc.FormatException, java.io.IOException; + method public static android.nfc.tech.NdefFormatable get(android.nfc.Tag); + } + + public final class NfcA extends android.nfc.tech.BasicTagTechnology { + method public static android.nfc.tech.NfcA get(android.nfc.Tag); + method public byte[] getAtqa(); + method public int getMaxTransceiveLength(); + method public short getSak(); + method public int getTimeout(); + method public void setTimeout(int); + method public byte[] transceive(byte[]) throws java.io.IOException; + } + + public final class NfcB extends android.nfc.tech.BasicTagTechnology { + method public static android.nfc.tech.NfcB get(android.nfc.Tag); + method public byte[] getApplicationData(); + method public int getMaxTransceiveLength(); + method public byte[] getProtocolInfo(); + method public byte[] transceive(byte[]) throws java.io.IOException; + } + + public final class NfcBarcode extends android.nfc.tech.BasicTagTechnology { + method public static android.nfc.tech.NfcBarcode get(android.nfc.Tag); + method public byte[] getBarcode(); + method public int getType(); + field public static final int TYPE_KOVIO = 1; // 0x1 + field public static final int TYPE_UNKNOWN = -1; // 0xffffffff + } + + public final class NfcF extends android.nfc.tech.BasicTagTechnology { + method public static android.nfc.tech.NfcF get(android.nfc.Tag); + method public byte[] getManufacturer(); + method public int getMaxTransceiveLength(); + method public byte[] getSystemCode(); + method public int getTimeout(); + method public void setTimeout(int); + method public byte[] transceive(byte[]) throws java.io.IOException; + } + + public final class NfcV extends android.nfc.tech.BasicTagTechnology { + method public static android.nfc.tech.NfcV get(android.nfc.Tag); + method public byte getDsfId(); + method public int getMaxTransceiveLength(); + method public byte getResponseFlags(); + method public byte[] transceive(byte[]) throws java.io.IOException; + } + + public abstract interface TagTechnology implements java.io.Closeable { + method public abstract void close() throws java.io.IOException; + method public abstract void connect() throws java.io.IOException; + method public abstract android.nfc.Tag getTag(); + method public abstract boolean isConnected(); + } + +} + +package android.opengl { + + public class EGL14 { + ctor public EGL14(); + method public static boolean eglBindAPI(int); + method public static boolean eglBindTexImage(android.opengl.EGLDisplay, android.opengl.EGLSurface, int); + method public static boolean eglChooseConfig(android.opengl.EGLDisplay, int[], int, android.opengl.EGLConfig[], int, int, int[], int); + method public static boolean eglCopyBuffers(android.opengl.EGLDisplay, android.opengl.EGLSurface, int); + method public static android.opengl.EGLContext eglCreateContext(android.opengl.EGLDisplay, android.opengl.EGLConfig, android.opengl.EGLContext, int[], int); + method public static android.opengl.EGLSurface eglCreatePbufferFromClientBuffer(android.opengl.EGLDisplay, int, int, android.opengl.EGLConfig, int[], int); + method public static android.opengl.EGLSurface eglCreatePbufferSurface(android.opengl.EGLDisplay, android.opengl.EGLConfig, int[], int); + method public static android.opengl.EGLSurface eglCreatePixmapSurface(android.opengl.EGLDisplay, android.opengl.EGLConfig, int, int[], int); + method public static android.opengl.EGLSurface eglCreateWindowSurface(android.opengl.EGLDisplay, android.opengl.EGLConfig, java.lang.Object, int[], int); + method public static boolean eglDestroyContext(android.opengl.EGLDisplay, android.opengl.EGLContext); + method public static boolean eglDestroySurface(android.opengl.EGLDisplay, android.opengl.EGLSurface); + method public static boolean eglGetConfigAttrib(android.opengl.EGLDisplay, android.opengl.EGLConfig, int, int[], int); + method public static boolean eglGetConfigs(android.opengl.EGLDisplay, android.opengl.EGLConfig[], int, int, int[], int); + method public static android.opengl.EGLContext eglGetCurrentContext(); + method public static android.opengl.EGLDisplay eglGetCurrentDisplay(); + method public static android.opengl.EGLSurface eglGetCurrentSurface(int); + method public static android.opengl.EGLDisplay eglGetDisplay(int); + method public static int eglGetError(); + method public static boolean eglInitialize(android.opengl.EGLDisplay, int[], int, int[], int); + method public static boolean eglMakeCurrent(android.opengl.EGLDisplay, android.opengl.EGLSurface, android.opengl.EGLSurface, android.opengl.EGLContext); + method public static int eglQueryAPI(); + method public static boolean eglQueryContext(android.opengl.EGLDisplay, android.opengl.EGLContext, int, int[], int); + method public static java.lang.String eglQueryString(android.opengl.EGLDisplay, int); + method public static boolean eglQuerySurface(android.opengl.EGLDisplay, android.opengl.EGLSurface, int, int[], int); + method public static boolean eglReleaseTexImage(android.opengl.EGLDisplay, android.opengl.EGLSurface, int); + method public static boolean eglReleaseThread(); + method public static boolean eglSurfaceAttrib(android.opengl.EGLDisplay, android.opengl.EGLSurface, int, int); + method public static boolean eglSwapBuffers(android.opengl.EGLDisplay, android.opengl.EGLSurface); + method public static boolean eglSwapInterval(android.opengl.EGLDisplay, int); + method public static boolean eglTerminate(android.opengl.EGLDisplay); + method public static boolean eglWaitClient(); + method public static boolean eglWaitGL(); + method public static boolean eglWaitNative(int); + field public static final int EGL_ALPHA_MASK_SIZE = 12350; // 0x303e + field public static final int EGL_ALPHA_SIZE = 12321; // 0x3021 + field public static final int EGL_BACK_BUFFER = 12420; // 0x3084 + field public static final int EGL_BAD_ACCESS = 12290; // 0x3002 + field public static final int EGL_BAD_ALLOC = 12291; // 0x3003 + field public static final int EGL_BAD_ATTRIBUTE = 12292; // 0x3004 + field public static final int EGL_BAD_CONFIG = 12293; // 0x3005 + field public static final int EGL_BAD_CONTEXT = 12294; // 0x3006 + field public static final int EGL_BAD_CURRENT_SURFACE = 12295; // 0x3007 + field public static final int EGL_BAD_DISPLAY = 12296; // 0x3008 + field public static final int EGL_BAD_MATCH = 12297; // 0x3009 + field public static final int EGL_BAD_NATIVE_PIXMAP = 12298; // 0x300a + field public static final int EGL_BAD_NATIVE_WINDOW = 12299; // 0x300b + field public static final int EGL_BAD_PARAMETER = 12300; // 0x300c + field public static final int EGL_BAD_SURFACE = 12301; // 0x300d + field public static final int EGL_BIND_TO_TEXTURE_RGB = 12345; // 0x3039 + field public static final int EGL_BIND_TO_TEXTURE_RGBA = 12346; // 0x303a + field public static final int EGL_BLUE_SIZE = 12322; // 0x3022 + field public static final int EGL_BUFFER_DESTROYED = 12437; // 0x3095 + field public static final int EGL_BUFFER_PRESERVED = 12436; // 0x3094 + field public static final int EGL_BUFFER_SIZE = 12320; // 0x3020 + field public static final int EGL_CLIENT_APIS = 12429; // 0x308d + field public static final int EGL_COLOR_BUFFER_TYPE = 12351; // 0x303f + field public static final int EGL_CONFIG_CAVEAT = 12327; // 0x3027 + field public static final int EGL_CONFIG_ID = 12328; // 0x3028 + field public static final int EGL_CONFORMANT = 12354; // 0x3042 + field public static final int EGL_CONTEXT_CLIENT_TYPE = 12439; // 0x3097 + field public static final int EGL_CONTEXT_CLIENT_VERSION = 12440; // 0x3098 + field public static final int EGL_CONTEXT_LOST = 12302; // 0x300e + field public static final int EGL_CORE_NATIVE_ENGINE = 12379; // 0x305b + field public static final int EGL_DEFAULT_DISPLAY = 0; // 0x0 + field public static final int EGL_DEPTH_SIZE = 12325; // 0x3025 + field public static final int EGL_DISPLAY_SCALING = 10000; // 0x2710 + field public static final int EGL_DRAW = 12377; // 0x3059 + field public static final int EGL_EXTENSIONS = 12373; // 0x3055 + field public static final int EGL_FALSE = 0; // 0x0 + field public static final int EGL_GREEN_SIZE = 12323; // 0x3023 + field public static final int EGL_HEIGHT = 12374; // 0x3056 + field public static final int EGL_HORIZONTAL_RESOLUTION = 12432; // 0x3090 + field public static final int EGL_LARGEST_PBUFFER = 12376; // 0x3058 + field public static final int EGL_LEVEL = 12329; // 0x3029 + field public static final int EGL_LUMINANCE_BUFFER = 12431; // 0x308f + field public static final int EGL_LUMINANCE_SIZE = 12349; // 0x303d + field public static final int EGL_MATCH_NATIVE_PIXMAP = 12353; // 0x3041 + field public static final int EGL_MAX_PBUFFER_HEIGHT = 12330; // 0x302a + field public static final int EGL_MAX_PBUFFER_PIXELS = 12331; // 0x302b + field public static final int EGL_MAX_PBUFFER_WIDTH = 12332; // 0x302c + field public static final int EGL_MAX_SWAP_INTERVAL = 12348; // 0x303c + field public static final int EGL_MIN_SWAP_INTERVAL = 12347; // 0x303b + field public static final int EGL_MIPMAP_LEVEL = 12419; // 0x3083 + field public static final int EGL_MIPMAP_TEXTURE = 12418; // 0x3082 + field public static final int EGL_MULTISAMPLE_RESOLVE = 12441; // 0x3099 + field public static final int EGL_MULTISAMPLE_RESOLVE_BOX = 12443; // 0x309b + field public static final int EGL_MULTISAMPLE_RESOLVE_BOX_BIT = 512; // 0x200 + field public static final int EGL_MULTISAMPLE_RESOLVE_DEFAULT = 12442; // 0x309a + field public static final int EGL_NATIVE_RENDERABLE = 12333; // 0x302d + field public static final int EGL_NATIVE_VISUAL_ID = 12334; // 0x302e + field public static final int EGL_NATIVE_VISUAL_TYPE = 12335; // 0x302f + field public static final int EGL_NONE = 12344; // 0x3038 + field public static final int EGL_NON_CONFORMANT_CONFIG = 12369; // 0x3051 + field public static final int EGL_NOT_INITIALIZED = 12289; // 0x3001 + field public static android.opengl.EGLContext EGL_NO_CONTEXT; + field public static android.opengl.EGLDisplay EGL_NO_DISPLAY; + field public static android.opengl.EGLSurface EGL_NO_SURFACE; + field public static final int EGL_NO_TEXTURE = 12380; // 0x305c + field public static final int EGL_OPENGL_API = 12450; // 0x30a2 + field public static final int EGL_OPENGL_BIT = 8; // 0x8 + field public static final int EGL_OPENGL_ES2_BIT = 4; // 0x4 + field public static final int EGL_OPENGL_ES_API = 12448; // 0x30a0 + field public static final int EGL_OPENGL_ES_BIT = 1; // 0x1 + field public static final int EGL_OPENVG_API = 12449; // 0x30a1 + field public static final int EGL_OPENVG_BIT = 2; // 0x2 + field public static final int EGL_OPENVG_IMAGE = 12438; // 0x3096 + field public static final int EGL_PBUFFER_BIT = 1; // 0x1 + field public static final int EGL_PIXEL_ASPECT_RATIO = 12434; // 0x3092 + field public static final int EGL_PIXMAP_BIT = 2; // 0x2 + field public static final int EGL_READ = 12378; // 0x305a + field public static final int EGL_RED_SIZE = 12324; // 0x3024 + field public static final int EGL_RENDERABLE_TYPE = 12352; // 0x3040 + field public static final int EGL_RENDER_BUFFER = 12422; // 0x3086 + field public static final int EGL_RGB_BUFFER = 12430; // 0x308e + field public static final int EGL_SAMPLES = 12337; // 0x3031 + field public static final int EGL_SAMPLE_BUFFERS = 12338; // 0x3032 + field public static final int EGL_SINGLE_BUFFER = 12421; // 0x3085 + field public static final int EGL_SLOW_CONFIG = 12368; // 0x3050 + field public static final int EGL_STENCIL_SIZE = 12326; // 0x3026 + field public static final int EGL_SUCCESS = 12288; // 0x3000 + field public static final int EGL_SURFACE_TYPE = 12339; // 0x3033 + field public static final int EGL_SWAP_BEHAVIOR = 12435; // 0x3093 + field public static final int EGL_SWAP_BEHAVIOR_PRESERVED_BIT = 1024; // 0x400 + field public static final int EGL_TEXTURE_2D = 12383; // 0x305f + field public static final int EGL_TEXTURE_FORMAT = 12416; // 0x3080 + field public static final int EGL_TEXTURE_RGB = 12381; // 0x305d + field public static final int EGL_TEXTURE_RGBA = 12382; // 0x305e + field public static final int EGL_TEXTURE_TARGET = 12417; // 0x3081 + field public static final int EGL_TRANSPARENT_BLUE_VALUE = 12341; // 0x3035 + field public static final int EGL_TRANSPARENT_GREEN_VALUE = 12342; // 0x3036 + field public static final int EGL_TRANSPARENT_RED_VALUE = 12343; // 0x3037 + field public static final int EGL_TRANSPARENT_RGB = 12370; // 0x3052 + field public static final int EGL_TRANSPARENT_TYPE = 12340; // 0x3034 + field public static final int EGL_TRUE = 1; // 0x1 + field public static final int EGL_VENDOR = 12371; // 0x3053 + field public static final int EGL_VERSION = 12372; // 0x3054 + field public static final int EGL_VERTICAL_RESOLUTION = 12433; // 0x3091 + field public static final int EGL_VG_ALPHA_FORMAT = 12424; // 0x3088 + field public static final int EGL_VG_ALPHA_FORMAT_NONPRE = 12427; // 0x308b + field public static final int EGL_VG_ALPHA_FORMAT_PRE = 12428; // 0x308c + field public static final int EGL_VG_ALPHA_FORMAT_PRE_BIT = 64; // 0x40 + field public static final int EGL_VG_COLORSPACE = 12423; // 0x3087 + field public static final int EGL_VG_COLORSPACE_LINEAR = 12426; // 0x308a + field public static final int EGL_VG_COLORSPACE_LINEAR_BIT = 32; // 0x20 + field public static final int EGL_VG_COLORSPACE_sRGB = 12425; // 0x3089 + field public static final int EGL_WIDTH = 12375; // 0x3057 + field public static final int EGL_WINDOW_BIT = 4; // 0x4 + } + + public class EGLConfig extends android.opengl.EGLObjectHandle { + } + + public class EGLContext extends android.opengl.EGLObjectHandle { + } + + public class EGLDisplay extends android.opengl.EGLObjectHandle { + } + + public class EGLExt { + ctor public EGLExt(); + method public static boolean eglPresentationTimeANDROID(android.opengl.EGLDisplay, android.opengl.EGLSurface, long); + field public static final int EGL_CONTEXT_FLAGS_KHR = 12540; // 0x30fc + field public static final int EGL_CONTEXT_MAJOR_VERSION_KHR = 12440; // 0x3098 + field public static final int EGL_CONTEXT_MINOR_VERSION_KHR = 12539; // 0x30fb + field public static final int EGL_OPENGL_ES3_BIT_KHR = 64; // 0x40 + } + + public abstract class EGLObjectHandle { + ctor protected deprecated EGLObjectHandle(int); + ctor protected EGLObjectHandle(long); + method public deprecated int getHandle(); + method public long getNativeHandle(); + } + + public class EGLSurface extends android.opengl.EGLObjectHandle { + } + + public class ETC1 { + ctor public ETC1(); + method public static void decodeBlock(java.nio.Buffer, java.nio.Buffer); + method public static void decodeImage(java.nio.Buffer, java.nio.Buffer, int, int, int, int); + method public static void encodeBlock(java.nio.Buffer, int, java.nio.Buffer); + method public static void encodeImage(java.nio.Buffer, int, int, int, int, java.nio.Buffer); + method public static void formatHeader(java.nio.Buffer, int, int); + method public static int getEncodedDataSize(int, int); + method public static int getHeight(java.nio.Buffer); + method public static int getWidth(java.nio.Buffer); + method public static boolean isValid(java.nio.Buffer); + field public static final int DECODED_BLOCK_SIZE = 48; // 0x30 + field public static final int ENCODED_BLOCK_SIZE = 8; // 0x8 + field public static final int ETC1_RGB8_OES = 36196; // 0x8d64 + field public static final int ETC_PKM_HEADER_SIZE = 16; // 0x10 + } + + public class ETC1Util { + ctor public ETC1Util(); + method public static android.opengl.ETC1Util.ETC1Texture compressTexture(java.nio.Buffer, int, int, int, int); + method public static android.opengl.ETC1Util.ETC1Texture createTexture(java.io.InputStream) throws java.io.IOException; + method public static boolean isETC1Supported(); + method public static void loadTexture(int, int, int, int, int, java.io.InputStream) throws java.io.IOException; + method public static void loadTexture(int, int, int, int, int, android.opengl.ETC1Util.ETC1Texture); + method public static void writeTexture(android.opengl.ETC1Util.ETC1Texture, java.io.OutputStream) throws java.io.IOException; + } + + public static class ETC1Util.ETC1Texture { + ctor public ETC1Util.ETC1Texture(int, int, java.nio.ByteBuffer); + method public java.nio.ByteBuffer getData(); + method public int getHeight(); + method public int getWidth(); + } + + public class GLDebugHelper { + ctor public GLDebugHelper(); + method public static javax.microedition.khronos.opengles.GL wrap(javax.microedition.khronos.opengles.GL, int, java.io.Writer); + method public static javax.microedition.khronos.egl.EGL wrap(javax.microedition.khronos.egl.EGL, int, java.io.Writer); + field public static final int CONFIG_CHECK_GL_ERROR = 1; // 0x1 + field public static final int CONFIG_CHECK_THREAD = 2; // 0x2 + field public static final int CONFIG_LOG_ARGUMENT_NAMES = 4; // 0x4 + field public static final int ERROR_WRONG_THREAD = 28672; // 0x7000 + } + + public class GLES10 { + ctor public GLES10(); + method public static void glActiveTexture(int); + method public static void glAlphaFunc(int, float); + method public static void glAlphaFuncx(int, int); + method public static void glBindTexture(int, int); + method public static void glBlendFunc(int, int); + method public static void glClear(int); + method public static void glClearColor(float, float, float, float); + method public static void glClearColorx(int, int, int, int); + method public static void glClearDepthf(float); + method public static void glClearDepthx(int); + method public static void glClearStencil(int); + method public static void glClientActiveTexture(int); + method public static void glColor4f(float, float, float, float); + method public static void glColor4x(int, int, int, int); + method public static void glColorMask(boolean, boolean, boolean, boolean); + method public static void glColorPointer(int, int, int, java.nio.Buffer); + method public static void glCompressedTexImage2D(int, int, int, int, int, int, int, java.nio.Buffer); + method public static void glCompressedTexSubImage2D(int, int, int, int, int, int, int, int, java.nio.Buffer); + method public static void glCopyTexImage2D(int, int, int, int, int, int, int, int); + method public static void glCopyTexSubImage2D(int, int, int, int, int, int, int, int); + method public static void glCullFace(int); + method public static void glDeleteTextures(int, int[], int); + method public static void glDeleteTextures(int, java.nio.IntBuffer); + method public static void glDepthFunc(int); + method public static void glDepthMask(boolean); + method public static void glDepthRangef(float, float); + method public static void glDepthRangex(int, int); + method public static void glDisable(int); + method public static void glDisableClientState(int); + method public static void glDrawArrays(int, int, int); + method public static void glDrawElements(int, int, int, java.nio.Buffer); + method public static void glEnable(int); + method public static void glEnableClientState(int); + method public static void glFinish(); + method public static void glFlush(); + method public static void glFogf(int, float); + method public static void glFogfv(int, float[], int); + method public static void glFogfv(int, java.nio.FloatBuffer); + method public static void glFogx(int, int); + method public static void glFogxv(int, int[], int); + method public static void glFogxv(int, java.nio.IntBuffer); + method public static void glFrontFace(int); + method public static void glFrustumf(float, float, float, float, float, float); + method public static void glFrustumx(int, int, int, int, int, int); + method public static void glGenTextures(int, int[], int); + method public static void glGenTextures(int, java.nio.IntBuffer); + method public static int glGetError(); + method public static void glGetIntegerv(int, int[], int); + method public static void glGetIntegerv(int, java.nio.IntBuffer); + method public static java.lang.String glGetString(int); + method public static void glHint(int, int); + method public static void glLightModelf(int, float); + method public static void glLightModelfv(int, float[], int); + method public static void glLightModelfv(int, java.nio.FloatBuffer); + method public static void glLightModelx(int, int); + method public static void glLightModelxv(int, int[], int); + method public static void glLightModelxv(int, java.nio.IntBuffer); + method public static void glLightf(int, int, float); + method public static void glLightfv(int, int, float[], int); + method public static void glLightfv(int, int, java.nio.FloatBuffer); + method public static void glLightx(int, int, int); + method public static void glLightxv(int, int, int[], int); + method public static void glLightxv(int, int, java.nio.IntBuffer); + method public static void glLineWidth(float); + method public static void glLineWidthx(int); + method public static void glLoadIdentity(); + method public static void glLoadMatrixf(float[], int); + method public static void glLoadMatrixf(java.nio.FloatBuffer); + method public static void glLoadMatrixx(int[], int); + method public static void glLoadMatrixx(java.nio.IntBuffer); + method public static void glLogicOp(int); + method public static void glMaterialf(int, int, float); + method public static void glMaterialfv(int, int, float[], int); + method public static void glMaterialfv(int, int, java.nio.FloatBuffer); + method public static void glMaterialx(int, int, int); + method public static void glMaterialxv(int, int, int[], int); + method public static void glMaterialxv(int, int, java.nio.IntBuffer); + method public static void glMatrixMode(int); + method public static void glMultMatrixf(float[], int); + method public static void glMultMatrixf(java.nio.FloatBuffer); + method public static void glMultMatrixx(int[], int); + method public static void glMultMatrixx(java.nio.IntBuffer); + method public static void glMultiTexCoord4f(int, float, float, float, float); + method public static void glMultiTexCoord4x(int, int, int, int, int); + method public static void glNormal3f(float, float, float); + method public static void glNormal3x(int, int, int); + method public static void glNormalPointer(int, int, java.nio.Buffer); + method public static void glOrthof(float, float, float, float, float, float); + method public static void glOrthox(int, int, int, int, int, int); + method public static void glPixelStorei(int, int); + method public static void glPointSize(float); + method public static void glPointSizex(int); + method public static void glPolygonOffset(float, float); + method public static void glPolygonOffsetx(int, int); + method public static void glPopMatrix(); + method public static void glPushMatrix(); + method public static void glReadPixels(int, int, int, int, int, int, java.nio.Buffer); + method public static void glRotatef(float, float, float, float); + method public static void glRotatex(int, int, int, int); + method public static void glSampleCoverage(float, boolean); + method public static void glSampleCoveragex(int, boolean); + method public static void glScalef(float, float, float); + method public static void glScalex(int, int, int); + method public static void glScissor(int, int, int, int); + method public static void glShadeModel(int); + method public static void glStencilFunc(int, int, int); + method public static void glStencilMask(int); + method public static void glStencilOp(int, int, int); + method public static void glTexCoordPointer(int, int, int, java.nio.Buffer); + method public static void glTexEnvf(int, int, float); + method public static void glTexEnvfv(int, int, float[], int); + method public static void glTexEnvfv(int, int, java.nio.FloatBuffer); + method public static void glTexEnvx(int, int, int); + method public static void glTexEnvxv(int, int, int[], int); + method public static void glTexEnvxv(int, int, java.nio.IntBuffer); + method public static void glTexImage2D(int, int, int, int, int, int, int, int, java.nio.Buffer); + method public static void glTexParameterf(int, int, float); + method public static void glTexParameterx(int, int, int); + method public static void glTexSubImage2D(int, int, int, int, int, int, int, int, java.nio.Buffer); + method public static void glTranslatef(float, float, float); + method public static void glTranslatex(int, int, int); + method public static void glVertexPointer(int, int, int, java.nio.Buffer); + method public static void glViewport(int, int, int, int); + field public static final int GL_ADD = 260; // 0x104 + field public static final int GL_ALIASED_LINE_WIDTH_RANGE = 33902; // 0x846e + field public static final int GL_ALIASED_POINT_SIZE_RANGE = 33901; // 0x846d + field public static final int GL_ALPHA = 6406; // 0x1906 + field public static final int GL_ALPHA_BITS = 3413; // 0xd55 + field public static final int GL_ALPHA_TEST = 3008; // 0xbc0 + field public static final int GL_ALWAYS = 519; // 0x207 + field public static final int GL_AMBIENT = 4608; // 0x1200 + field public static final int GL_AMBIENT_AND_DIFFUSE = 5634; // 0x1602 + field public static final int GL_AND = 5377; // 0x1501 + field public static final int GL_AND_INVERTED = 5380; // 0x1504 + field public static final int GL_AND_REVERSE = 5378; // 0x1502 + field public static final int GL_BACK = 1029; // 0x405 + field public static final int GL_BLEND = 3042; // 0xbe2 + field public static final int GL_BLUE_BITS = 3412; // 0xd54 + field public static final int GL_BYTE = 5120; // 0x1400 + field public static final int GL_CCW = 2305; // 0x901 + field public static final int GL_CLAMP_TO_EDGE = 33071; // 0x812f + field public static final int GL_CLEAR = 5376; // 0x1500 + field public static final int GL_COLOR_ARRAY = 32886; // 0x8076 + field public static final int GL_COLOR_BUFFER_BIT = 16384; // 0x4000 + field public static final int GL_COLOR_LOGIC_OP = 3058; // 0xbf2 + field public static final int GL_COLOR_MATERIAL = 2903; // 0xb57 + field public static final int GL_COMPRESSED_TEXTURE_FORMATS = 34467; // 0x86a3 + field public static final int GL_CONSTANT_ATTENUATION = 4615; // 0x1207 + field public static final int GL_COPY = 5379; // 0x1503 + field public static final int GL_COPY_INVERTED = 5388; // 0x150c + field public static final int GL_CULL_FACE = 2884; // 0xb44 + field public static final int GL_CW = 2304; // 0x900 + field public static final int GL_DECAL = 8449; // 0x2101 + field public static final int GL_DECR = 7683; // 0x1e03 + field public static final int GL_DEPTH_BITS = 3414; // 0xd56 + field public static final int GL_DEPTH_BUFFER_BIT = 256; // 0x100 + field public static final int GL_DEPTH_TEST = 2929; // 0xb71 + field public static final int GL_DIFFUSE = 4609; // 0x1201 + field public static final int GL_DITHER = 3024; // 0xbd0 + field public static final int GL_DONT_CARE = 4352; // 0x1100 + field public static final int GL_DST_ALPHA = 772; // 0x304 + field public static final int GL_DST_COLOR = 774; // 0x306 + field public static final int GL_EMISSION = 5632; // 0x1600 + field public static final int GL_EQUAL = 514; // 0x202 + field public static final int GL_EQUIV = 5385; // 0x1509 + field public static final int GL_EXP = 2048; // 0x800 + field public static final int GL_EXP2 = 2049; // 0x801 + field public static final int GL_EXTENSIONS = 7939; // 0x1f03 + field public static final int GL_FALSE = 0; // 0x0 + field public static final int GL_FASTEST = 4353; // 0x1101 + field public static final int GL_FIXED = 5132; // 0x140c + field public static final int GL_FLAT = 7424; // 0x1d00 + field public static final int GL_FLOAT = 5126; // 0x1406 + field public static final int GL_FOG = 2912; // 0xb60 + field public static final int GL_FOG_COLOR = 2918; // 0xb66 + field public static final int GL_FOG_DENSITY = 2914; // 0xb62 + field public static final int GL_FOG_END = 2916; // 0xb64 + field public static final int GL_FOG_HINT = 3156; // 0xc54 + field public static final int GL_FOG_MODE = 2917; // 0xb65 + field public static final int GL_FOG_START = 2915; // 0xb63 + field public static final int GL_FRONT = 1028; // 0x404 + field public static final int GL_FRONT_AND_BACK = 1032; // 0x408 + field public static final int GL_GEQUAL = 518; // 0x206 + field public static final int GL_GREATER = 516; // 0x204 + field public static final int GL_GREEN_BITS = 3411; // 0xd53 + field public static final int GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES = 35739; // 0x8b9b + field public static final int GL_IMPLEMENTATION_COLOR_READ_TYPE_OES = 35738; // 0x8b9a + field public static final int GL_INCR = 7682; // 0x1e02 + field public static final int GL_INVALID_ENUM = 1280; // 0x500 + field public static final int GL_INVALID_OPERATION = 1282; // 0x502 + field public static final int GL_INVALID_VALUE = 1281; // 0x501 + field public static final int GL_INVERT = 5386; // 0x150a + field public static final int GL_KEEP = 7680; // 0x1e00 + field public static final int GL_LEQUAL = 515; // 0x203 + field public static final int GL_LESS = 513; // 0x201 + field public static final int GL_LIGHT0 = 16384; // 0x4000 + field public static final int GL_LIGHT1 = 16385; // 0x4001 + field public static final int GL_LIGHT2 = 16386; // 0x4002 + field public static final int GL_LIGHT3 = 16387; // 0x4003 + field public static final int GL_LIGHT4 = 16388; // 0x4004 + field public static final int GL_LIGHT5 = 16389; // 0x4005 + field public static final int GL_LIGHT6 = 16390; // 0x4006 + field public static final int GL_LIGHT7 = 16391; // 0x4007 + field public static final int GL_LIGHTING = 2896; // 0xb50 + field public static final int GL_LIGHT_MODEL_AMBIENT = 2899; // 0xb53 + field public static final int GL_LIGHT_MODEL_TWO_SIDE = 2898; // 0xb52 + field public static final int GL_LINEAR = 9729; // 0x2601 + field public static final int GL_LINEAR_ATTENUATION = 4616; // 0x1208 + field public static final int GL_LINEAR_MIPMAP_LINEAR = 9987; // 0x2703 + field public static final int GL_LINEAR_MIPMAP_NEAREST = 9985; // 0x2701 + field public static final int GL_LINES = 1; // 0x1 + field public static final int GL_LINE_LOOP = 2; // 0x2 + field public static final int GL_LINE_SMOOTH = 2848; // 0xb20 + field public static final int GL_LINE_SMOOTH_HINT = 3154; // 0xc52 + field public static final int GL_LINE_STRIP = 3; // 0x3 + field public static final int GL_LUMINANCE = 6409; // 0x1909 + field public static final int GL_LUMINANCE_ALPHA = 6410; // 0x190a + field public static final int GL_MAX_ELEMENTS_INDICES = 33001; // 0x80e9 + field public static final int GL_MAX_ELEMENTS_VERTICES = 33000; // 0x80e8 + field public static final int GL_MAX_LIGHTS = 3377; // 0xd31 + field public static final int GL_MAX_MODELVIEW_STACK_DEPTH = 3382; // 0xd36 + field public static final int GL_MAX_PROJECTION_STACK_DEPTH = 3384; // 0xd38 + field public static final int GL_MAX_TEXTURE_SIZE = 3379; // 0xd33 + field public static final int GL_MAX_TEXTURE_STACK_DEPTH = 3385; // 0xd39 + field public static final int GL_MAX_TEXTURE_UNITS = 34018; // 0x84e2 + field public static final int GL_MAX_VIEWPORT_DIMS = 3386; // 0xd3a + field public static final int GL_MODELVIEW = 5888; // 0x1700 + field public static final int GL_MODULATE = 8448; // 0x2100 + field public static final int GL_MULTISAMPLE = 32925; // 0x809d + field public static final int GL_NAND = 5390; // 0x150e + field public static final int GL_NEAREST = 9728; // 0x2600 + field public static final int GL_NEAREST_MIPMAP_LINEAR = 9986; // 0x2702 + field public static final int GL_NEAREST_MIPMAP_NEAREST = 9984; // 0x2700 + field public static final int GL_NEVER = 512; // 0x200 + field public static final int GL_NICEST = 4354; // 0x1102 + field public static final int GL_NOOP = 5381; // 0x1505 + field public static final int GL_NOR = 5384; // 0x1508 + field public static final int GL_NORMALIZE = 2977; // 0xba1 + field public static final int GL_NORMAL_ARRAY = 32885; // 0x8075 + field public static final int GL_NOTEQUAL = 517; // 0x205 + field public static final int GL_NO_ERROR = 0; // 0x0 + field public static final int GL_NUM_COMPRESSED_TEXTURE_FORMATS = 34466; // 0x86a2 + field public static final int GL_ONE = 1; // 0x1 + field public static final int GL_ONE_MINUS_DST_ALPHA = 773; // 0x305 + field public static final int GL_ONE_MINUS_DST_COLOR = 775; // 0x307 + field public static final int GL_ONE_MINUS_SRC_ALPHA = 771; // 0x303 + field public static final int GL_ONE_MINUS_SRC_COLOR = 769; // 0x301 + field public static final int GL_OR = 5383; // 0x1507 + field public static final int GL_OR_INVERTED = 5389; // 0x150d + field public static final int GL_OR_REVERSE = 5387; // 0x150b + field public static final int GL_OUT_OF_MEMORY = 1285; // 0x505 + field public static final int GL_PACK_ALIGNMENT = 3333; // 0xd05 + field public static final int GL_PALETTE4_R5_G6_B5_OES = 35730; // 0x8b92 + field public static final int GL_PALETTE4_RGB5_A1_OES = 35732; // 0x8b94 + field public static final int GL_PALETTE4_RGB8_OES = 35728; // 0x8b90 + field public static final int GL_PALETTE4_RGBA4_OES = 35731; // 0x8b93 + field public static final int GL_PALETTE4_RGBA8_OES = 35729; // 0x8b91 + field public static final int GL_PALETTE8_R5_G6_B5_OES = 35735; // 0x8b97 + field public static final int GL_PALETTE8_RGB5_A1_OES = 35737; // 0x8b99 + field public static final int GL_PALETTE8_RGB8_OES = 35733; // 0x8b95 + field public static final int GL_PALETTE8_RGBA4_OES = 35736; // 0x8b98 + field public static final int GL_PALETTE8_RGBA8_OES = 35734; // 0x8b96 + field public static final int GL_PERSPECTIVE_CORRECTION_HINT = 3152; // 0xc50 + field public static final int GL_POINTS = 0; // 0x0 + field public static final int GL_POINT_FADE_THRESHOLD_SIZE = 33064; // 0x8128 + field public static final int GL_POINT_SIZE = 2833; // 0xb11 + field public static final int GL_POINT_SMOOTH = 2832; // 0xb10 + field public static final int GL_POINT_SMOOTH_HINT = 3153; // 0xc51 + field public static final int GL_POLYGON_OFFSET_FILL = 32823; // 0x8037 + field public static final int GL_POLYGON_SMOOTH_HINT = 3155; // 0xc53 + field public static final int GL_POSITION = 4611; // 0x1203 + field public static final int GL_PROJECTION = 5889; // 0x1701 + field public static final int GL_QUADRATIC_ATTENUATION = 4617; // 0x1209 + field public static final int GL_RED_BITS = 3410; // 0xd52 + field public static final int GL_RENDERER = 7937; // 0x1f01 + field public static final int GL_REPEAT = 10497; // 0x2901 + field public static final int GL_REPLACE = 7681; // 0x1e01 + field public static final int GL_RESCALE_NORMAL = 32826; // 0x803a + field public static final int GL_RGB = 6407; // 0x1907 + field public static final int GL_RGBA = 6408; // 0x1908 + field public static final int GL_SAMPLE_ALPHA_TO_COVERAGE = 32926; // 0x809e + field public static final int GL_SAMPLE_ALPHA_TO_ONE = 32927; // 0x809f + field public static final int GL_SAMPLE_COVERAGE = 32928; // 0x80a0 + field public static final int GL_SCISSOR_TEST = 3089; // 0xc11 + field public static final int GL_SET = 5391; // 0x150f + field public static final int GL_SHININESS = 5633; // 0x1601 + field public static final int GL_SHORT = 5122; // 0x1402 + field public static final int GL_SMOOTH = 7425; // 0x1d01 + field public static final int GL_SMOOTH_LINE_WIDTH_RANGE = 2850; // 0xb22 + field public static final int GL_SMOOTH_POINT_SIZE_RANGE = 2834; // 0xb12 + field public static final int GL_SPECULAR = 4610; // 0x1202 + field public static final int GL_SPOT_CUTOFF = 4614; // 0x1206 + field public static final int GL_SPOT_DIRECTION = 4612; // 0x1204 + field public static final int GL_SPOT_EXPONENT = 4613; // 0x1205 + field public static final int GL_SRC_ALPHA = 770; // 0x302 + field public static final int GL_SRC_ALPHA_SATURATE = 776; // 0x308 + field public static final int GL_SRC_COLOR = 768; // 0x300 + field public static final int GL_STACK_OVERFLOW = 1283; // 0x503 + field public static final int GL_STACK_UNDERFLOW = 1284; // 0x504 + field public static final int GL_STENCIL_BITS = 3415; // 0xd57 + field public static final int GL_STENCIL_BUFFER_BIT = 1024; // 0x400 + field public static final int GL_STENCIL_TEST = 2960; // 0xb90 + field public static final int GL_SUBPIXEL_BITS = 3408; // 0xd50 + field public static final int GL_TEXTURE = 5890; // 0x1702 + field public static final int GL_TEXTURE0 = 33984; // 0x84c0 + field public static final int GL_TEXTURE1 = 33985; // 0x84c1 + field public static final int GL_TEXTURE10 = 33994; // 0x84ca + field public static final int GL_TEXTURE11 = 33995; // 0x84cb + field public static final int GL_TEXTURE12 = 33996; // 0x84cc + field public static final int GL_TEXTURE13 = 33997; // 0x84cd + field public static final int GL_TEXTURE14 = 33998; // 0x84ce + field public static final int GL_TEXTURE15 = 33999; // 0x84cf + field public static final int GL_TEXTURE16 = 34000; // 0x84d0 + field public static final int GL_TEXTURE17 = 34001; // 0x84d1 + field public static final int GL_TEXTURE18 = 34002; // 0x84d2 + field public static final int GL_TEXTURE19 = 34003; // 0x84d3 + field public static final int GL_TEXTURE2 = 33986; // 0x84c2 + field public static final int GL_TEXTURE20 = 34004; // 0x84d4 + field public static final int GL_TEXTURE21 = 34005; // 0x84d5 + field public static final int GL_TEXTURE22 = 34006; // 0x84d6 + field public static final int GL_TEXTURE23 = 34007; // 0x84d7 + field public static final int GL_TEXTURE24 = 34008; // 0x84d8 + field public static final int GL_TEXTURE25 = 34009; // 0x84d9 + field public static final int GL_TEXTURE26 = 34010; // 0x84da + field public static final int GL_TEXTURE27 = 34011; // 0x84db + field public static final int GL_TEXTURE28 = 34012; // 0x84dc + field public static final int GL_TEXTURE29 = 34013; // 0x84dd + field public static final int GL_TEXTURE3 = 33987; // 0x84c3 + field public static final int GL_TEXTURE30 = 34014; // 0x84de + field public static final int GL_TEXTURE31 = 34015; // 0x84df + field public static final int GL_TEXTURE4 = 33988; // 0x84c4 + field public static final int GL_TEXTURE5 = 33989; // 0x84c5 + field public static final int GL_TEXTURE6 = 33990; // 0x84c6 + field public static final int GL_TEXTURE7 = 33991; // 0x84c7 + field public static final int GL_TEXTURE8 = 33992; // 0x84c8 + field public static final int GL_TEXTURE9 = 33993; // 0x84c9 + field public static final int GL_TEXTURE_2D = 3553; // 0xde1 + field public static final int GL_TEXTURE_COORD_ARRAY = 32888; // 0x8078 + field public static final int GL_TEXTURE_ENV = 8960; // 0x2300 + field public static final int GL_TEXTURE_ENV_COLOR = 8705; // 0x2201 + field public static final int GL_TEXTURE_ENV_MODE = 8704; // 0x2200 + field public static final int GL_TEXTURE_MAG_FILTER = 10240; // 0x2800 + field public static final int GL_TEXTURE_MIN_FILTER = 10241; // 0x2801 + field public static final int GL_TEXTURE_WRAP_S = 10242; // 0x2802 + field public static final int GL_TEXTURE_WRAP_T = 10243; // 0x2803 + field public static final int GL_TRIANGLES = 4; // 0x4 + field public static final int GL_TRIANGLE_FAN = 6; // 0x6 + field public static final int GL_TRIANGLE_STRIP = 5; // 0x5 + field public static final int GL_TRUE = 1; // 0x1 + field public static final int GL_UNPACK_ALIGNMENT = 3317; // 0xcf5 + field public static final int GL_UNSIGNED_BYTE = 5121; // 0x1401 + field public static final int GL_UNSIGNED_SHORT = 5123; // 0x1403 + field public static final int GL_UNSIGNED_SHORT_4_4_4_4 = 32819; // 0x8033 + field public static final int GL_UNSIGNED_SHORT_5_5_5_1 = 32820; // 0x8034 + field public static final int GL_UNSIGNED_SHORT_5_6_5 = 33635; // 0x8363 + field public static final int GL_VENDOR = 7936; // 0x1f00 + field public static final int GL_VERSION = 7938; // 0x1f02 + field public static final int GL_VERTEX_ARRAY = 32884; // 0x8074 + field public static final int GL_XOR = 5382; // 0x1506 + field public static final int GL_ZERO = 0; // 0x0 + } + + public class GLES10Ext { + ctor public GLES10Ext(); + method public static int glQueryMatrixxOES(int[], int, int[], int); + method public static int glQueryMatrixxOES(java.nio.IntBuffer, java.nio.IntBuffer); + } + + public class GLES11 extends android.opengl.GLES10 { + ctor public GLES11(); + method public static void glBindBuffer(int, int); + method public static void glBufferData(int, int, java.nio.Buffer, int); + method public static void glBufferSubData(int, int, int, java.nio.Buffer); + method public static void glClipPlanef(int, float[], int); + method public static void glClipPlanef(int, java.nio.FloatBuffer); + method public static void glClipPlanex(int, int[], int); + method public static void glClipPlanex(int, java.nio.IntBuffer); + method public static void glColor4ub(byte, byte, byte, byte); + method public static void glColorPointer(int, int, int, int); + method public static void glDeleteBuffers(int, int[], int); + method public static void glDeleteBuffers(int, java.nio.IntBuffer); + method public static void glDrawElements(int, int, int, int); + method public static void glGenBuffers(int, int[], int); + method public static void glGenBuffers(int, java.nio.IntBuffer); + method public static void glGetBooleanv(int, boolean[], int); + method public static void glGetBooleanv(int, java.nio.IntBuffer); + method public static void glGetBufferParameteriv(int, int, int[], int); + method public static void glGetBufferParameteriv(int, int, java.nio.IntBuffer); + method public static void glGetClipPlanef(int, float[], int); + method public static void glGetClipPlanef(int, java.nio.FloatBuffer); + method public static void glGetClipPlanex(int, int[], int); + method public static void glGetClipPlanex(int, java.nio.IntBuffer); + method public static void glGetFixedv(int, int[], int); + method public static void glGetFixedv(int, java.nio.IntBuffer); + method public static void glGetFloatv(int, float[], int); + method public static void glGetFloatv(int, java.nio.FloatBuffer); + method public static void glGetLightfv(int, int, float[], int); + method public static void glGetLightfv(int, int, java.nio.FloatBuffer); + method public static void glGetLightxv(int, int, int[], int); + method public static void glGetLightxv(int, int, java.nio.IntBuffer); + method public static void glGetMaterialfv(int, int, float[], int); + method public static void glGetMaterialfv(int, int, java.nio.FloatBuffer); + method public static void glGetMaterialxv(int, int, int[], int); + method public static void glGetMaterialxv(int, int, java.nio.IntBuffer); + method public static void glGetTexEnvfv(int, int, float[], int); + method public static void glGetTexEnvfv(int, int, java.nio.FloatBuffer); + method public static void glGetTexEnviv(int, int, int[], int); + method public static void glGetTexEnviv(int, int, java.nio.IntBuffer); + method public static void glGetTexEnvxv(int, int, int[], int); + method public static void glGetTexEnvxv(int, int, java.nio.IntBuffer); + method public static void glGetTexParameterfv(int, int, float[], int); + method public static void glGetTexParameterfv(int, int, java.nio.FloatBuffer); + method public static void glGetTexParameteriv(int, int, int[], int); + method public static void glGetTexParameteriv(int, int, java.nio.IntBuffer); + method public static void glGetTexParameterxv(int, int, int[], int); + method public static void glGetTexParameterxv(int, int, java.nio.IntBuffer); + method public static boolean glIsBuffer(int); + method public static boolean glIsEnabled(int); + method public static boolean glIsTexture(int); + method public static void glNormalPointer(int, int, int); + method public static void glPointParameterf(int, float); + method public static void glPointParameterfv(int, float[], int); + method public static void glPointParameterfv(int, java.nio.FloatBuffer); + method public static void glPointParameterx(int, int); + method public static void glPointParameterxv(int, int[], int); + method public static void glPointParameterxv(int, java.nio.IntBuffer); + method public static void glPointSizePointerOES(int, int, java.nio.Buffer); + method public static void glTexCoordPointer(int, int, int, int); + method public static void glTexEnvi(int, int, int); + method public static void glTexEnviv(int, int, int[], int); + method public static void glTexEnviv(int, int, java.nio.IntBuffer); + method public static void glTexParameterfv(int, int, float[], int); + method public static void glTexParameterfv(int, int, java.nio.FloatBuffer); + method public static void glTexParameteri(int, int, int); + method public static void glTexParameteriv(int, int, int[], int); + method public static void glTexParameteriv(int, int, java.nio.IntBuffer); + method public static void glTexParameterxv(int, int, int[], int); + method public static void glTexParameterxv(int, int, java.nio.IntBuffer); + method public static void glVertexPointer(int, int, int, int); + field public static final int GL_ACTIVE_TEXTURE = 34016; // 0x84e0 + field public static final int GL_ADD_SIGNED = 34164; // 0x8574 + field public static final int GL_ALPHA_SCALE = 3356; // 0xd1c + field public static final int GL_ALPHA_TEST_FUNC = 3009; // 0xbc1 + field public static final int GL_ALPHA_TEST_REF = 3010; // 0xbc2 + field public static final int GL_ARRAY_BUFFER = 34962; // 0x8892 + field public static final int GL_ARRAY_BUFFER_BINDING = 34964; // 0x8894 + field public static final int GL_BLEND_DST = 3040; // 0xbe0 + field public static final int GL_BLEND_SRC = 3041; // 0xbe1 + field public static final int GL_BUFFER_ACCESS = 35003; // 0x88bb + field public static final int GL_BUFFER_SIZE = 34660; // 0x8764 + field public static final int GL_BUFFER_USAGE = 34661; // 0x8765 + field public static final int GL_CLIENT_ACTIVE_TEXTURE = 34017; // 0x84e1 + field public static final int GL_CLIP_PLANE0 = 12288; // 0x3000 + field public static final int GL_CLIP_PLANE1 = 12289; // 0x3001 + field public static final int GL_CLIP_PLANE2 = 12290; // 0x3002 + field public static final int GL_CLIP_PLANE3 = 12291; // 0x3003 + field public static final int GL_CLIP_PLANE4 = 12292; // 0x3004 + field public static final int GL_CLIP_PLANE5 = 12293; // 0x3005 + field public static final int GL_COLOR_ARRAY_BUFFER_BINDING = 34968; // 0x8898 + field public static final int GL_COLOR_ARRAY_POINTER = 32912; // 0x8090 + field public static final int GL_COLOR_ARRAY_SIZE = 32897; // 0x8081 + field public static final int GL_COLOR_ARRAY_STRIDE = 32899; // 0x8083 + field public static final int GL_COLOR_ARRAY_TYPE = 32898; // 0x8082 + field public static final int GL_COLOR_CLEAR_VALUE = 3106; // 0xc22 + field public static final int GL_COLOR_WRITEMASK = 3107; // 0xc23 + field public static final int GL_COMBINE = 34160; // 0x8570 + field public static final int GL_COMBINE_ALPHA = 34162; // 0x8572 + field public static final int GL_COMBINE_RGB = 34161; // 0x8571 + field public static final int GL_CONSTANT = 34166; // 0x8576 + field public static final int GL_COORD_REPLACE_OES = 34914; // 0x8862 + field public static final int GL_CULL_FACE_MODE = 2885; // 0xb45 + field public static final int GL_CURRENT_COLOR = 2816; // 0xb00 + field public static final int GL_CURRENT_NORMAL = 2818; // 0xb02 + field public static final int GL_CURRENT_TEXTURE_COORDS = 2819; // 0xb03 + field public static final int GL_DEPTH_CLEAR_VALUE = 2931; // 0xb73 + field public static final int GL_DEPTH_FUNC = 2932; // 0xb74 + field public static final int GL_DEPTH_RANGE = 2928; // 0xb70 + field public static final int GL_DEPTH_WRITEMASK = 2930; // 0xb72 + field public static final int GL_DOT3_RGB = 34478; // 0x86ae + field public static final int GL_DOT3_RGBA = 34479; // 0x86af + field public static final int GL_DYNAMIC_DRAW = 35048; // 0x88e8 + field public static final int GL_ELEMENT_ARRAY_BUFFER = 34963; // 0x8893 + field public static final int GL_ELEMENT_ARRAY_BUFFER_BINDING = 34965; // 0x8895 + field public static final int GL_FRONT_FACE = 2886; // 0xb46 + field public static final int GL_GENERATE_MIPMAP = 33169; // 0x8191 + field public static final int GL_GENERATE_MIPMAP_HINT = 33170; // 0x8192 + field public static final int GL_INTERPOLATE = 34165; // 0x8575 + field public static final int GL_LINE_WIDTH = 2849; // 0xb21 + field public static final int GL_LOGIC_OP_MODE = 3056; // 0xbf0 + field public static final int GL_MATRIX_MODE = 2976; // 0xba0 + field public static final int GL_MAX_CLIP_PLANES = 3378; // 0xd32 + field public static final int GL_MODELVIEW_MATRIX = 2982; // 0xba6 + field public static final int GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES = 35213; // 0x898d + field public static final int GL_MODELVIEW_STACK_DEPTH = 2979; // 0xba3 + field public static final int GL_NORMAL_ARRAY_BUFFER_BINDING = 34967; // 0x8897 + field public static final int GL_NORMAL_ARRAY_POINTER = 32911; // 0x808f + field public static final int GL_NORMAL_ARRAY_STRIDE = 32895; // 0x807f + field public static final int GL_NORMAL_ARRAY_TYPE = 32894; // 0x807e + field public static final int GL_OPERAND0_ALPHA = 34200; // 0x8598 + field public static final int GL_OPERAND0_RGB = 34192; // 0x8590 + field public static final int GL_OPERAND1_ALPHA = 34201; // 0x8599 + field public static final int GL_OPERAND1_RGB = 34193; // 0x8591 + field public static final int GL_OPERAND2_ALPHA = 34202; // 0x859a + field public static final int GL_OPERAND2_RGB = 34194; // 0x8592 + field public static final int GL_POINT_DISTANCE_ATTENUATION = 33065; // 0x8129 + field public static final int GL_POINT_FADE_THRESHOLD_SIZE = 33064; // 0x8128 + field public static final int GL_POINT_SIZE = 2833; // 0xb11 + field public static final int GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES = 35743; // 0x8b9f + field public static final int GL_POINT_SIZE_ARRAY_OES = 35740; // 0x8b9c + field public static final int GL_POINT_SIZE_ARRAY_POINTER_OES = 35212; // 0x898c + field public static final int GL_POINT_SIZE_ARRAY_STRIDE_OES = 35211; // 0x898b + field public static final int GL_POINT_SIZE_ARRAY_TYPE_OES = 35210; // 0x898a + field public static final int GL_POINT_SIZE_MAX = 33063; // 0x8127 + field public static final int GL_POINT_SIZE_MIN = 33062; // 0x8126 + field public static final int GL_POINT_SPRITE_OES = 34913; // 0x8861 + field public static final int GL_POLYGON_OFFSET_FACTOR = 32824; // 0x8038 + field public static final int GL_POLYGON_OFFSET_UNITS = 10752; // 0x2a00 + field public static final int GL_PREVIOUS = 34168; // 0x8578 + field public static final int GL_PRIMARY_COLOR = 34167; // 0x8577 + field public static final int GL_PROJECTION_MATRIX = 2983; // 0xba7 + field public static final int GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES = 35214; // 0x898e + field public static final int GL_PROJECTION_STACK_DEPTH = 2980; // 0xba4 + field public static final int GL_RGB_SCALE = 34163; // 0x8573 + field public static final int GL_SAMPLES = 32937; // 0x80a9 + field public static final int GL_SAMPLE_BUFFERS = 32936; // 0x80a8 + field public static final int GL_SAMPLE_COVERAGE_INVERT = 32939; // 0x80ab + field public static final int GL_SAMPLE_COVERAGE_VALUE = 32938; // 0x80aa + field public static final int GL_SCISSOR_BOX = 3088; // 0xc10 + field public static final int GL_SHADE_MODEL = 2900; // 0xb54 + field public static final int GL_SRC0_ALPHA = 34184; // 0x8588 + field public static final int GL_SRC0_RGB = 34176; // 0x8580 + field public static final int GL_SRC1_ALPHA = 34185; // 0x8589 + field public static final int GL_SRC1_RGB = 34177; // 0x8581 + field public static final int GL_SRC2_ALPHA = 34186; // 0x858a + field public static final int GL_SRC2_RGB = 34178; // 0x8582 + field public static final int GL_STATIC_DRAW = 35044; // 0x88e4 + field public static final int GL_STENCIL_CLEAR_VALUE = 2961; // 0xb91 + field public static final int GL_STENCIL_FAIL = 2964; // 0xb94 + field public static final int GL_STENCIL_FUNC = 2962; // 0xb92 + field public static final int GL_STENCIL_PASS_DEPTH_FAIL = 2965; // 0xb95 + field public static final int GL_STENCIL_PASS_DEPTH_PASS = 2966; // 0xb96 + field public static final int GL_STENCIL_REF = 2967; // 0xb97 + field public static final int GL_STENCIL_VALUE_MASK = 2963; // 0xb93 + field public static final int GL_STENCIL_WRITEMASK = 2968; // 0xb98 + field public static final int GL_SUBTRACT = 34023; // 0x84e7 + field public static final int GL_TEXTURE_BINDING_2D = 32873; // 0x8069 + field public static final int GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING = 34970; // 0x889a + field public static final int GL_TEXTURE_COORD_ARRAY_POINTER = 32914; // 0x8092 + field public static final int GL_TEXTURE_COORD_ARRAY_SIZE = 32904; // 0x8088 + field public static final int GL_TEXTURE_COORD_ARRAY_STRIDE = 32906; // 0x808a + field public static final int GL_TEXTURE_COORD_ARRAY_TYPE = 32905; // 0x8089 + field public static final int GL_TEXTURE_MATRIX = 2984; // 0xba8 + field public static final int GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES = 35215; // 0x898f + field public static final int GL_TEXTURE_STACK_DEPTH = 2981; // 0xba5 + field public static final int GL_VERTEX_ARRAY_BUFFER_BINDING = 34966; // 0x8896 + field public static final int GL_VERTEX_ARRAY_POINTER = 32910; // 0x808e + field public static final int GL_VERTEX_ARRAY_SIZE = 32890; // 0x807a + field public static final int GL_VERTEX_ARRAY_STRIDE = 32892; // 0x807c + field public static final int GL_VERTEX_ARRAY_TYPE = 32891; // 0x807b + field public static final int GL_VIEWPORT = 2978; // 0xba2 + field public static final int GL_WRITE_ONLY = 35001; // 0x88b9 + } + + public class GLES11Ext { + ctor public GLES11Ext(); + method public static void glAlphaFuncxOES(int, int); + method public static void glBindFramebufferOES(int, int); + method public static void glBindRenderbufferOES(int, int); + method public static void glBlendEquationOES(int); + method public static void glBlendEquationSeparateOES(int, int); + method public static void glBlendFuncSeparateOES(int, int, int, int); + method public static int glCheckFramebufferStatusOES(int); + method public static void glClearColorxOES(int, int, int, int); + method public static void glClearDepthfOES(float); + method public static void glClearDepthxOES(int); + method public static void glClipPlanefOES(int, float[], int); + method public static void glClipPlanefOES(int, java.nio.FloatBuffer); + method public static void glClipPlanexOES(int, int[], int); + method public static void glClipPlanexOES(int, java.nio.IntBuffer); + method public static void glColor4xOES(int, int, int, int); + method public static void glCurrentPaletteMatrixOES(int); + method public static void glDeleteFramebuffersOES(int, int[], int); + method public static void glDeleteFramebuffersOES(int, java.nio.IntBuffer); + method public static void glDeleteRenderbuffersOES(int, int[], int); + method public static void glDeleteRenderbuffersOES(int, java.nio.IntBuffer); + method public static void glDepthRangefOES(float, float); + method public static void glDepthRangexOES(int, int); + method public static void glDrawTexfOES(float, float, float, float, float); + method public static void glDrawTexfvOES(float[], int); + method public static void glDrawTexfvOES(java.nio.FloatBuffer); + method public static void glDrawTexiOES(int, int, int, int, int); + method public static void glDrawTexivOES(int[], int); + method public static void glDrawTexivOES(java.nio.IntBuffer); + method public static void glDrawTexsOES(short, short, short, short, short); + method public static void glDrawTexsvOES(short[], int); + method public static void glDrawTexsvOES(java.nio.ShortBuffer); + method public static void glDrawTexxOES(int, int, int, int, int); + method public static void glDrawTexxvOES(int[], int); + method public static void glDrawTexxvOES(java.nio.IntBuffer); + method public static void glEGLImageTargetRenderbufferStorageOES(int, java.nio.Buffer); + method public static void glEGLImageTargetTexture2DOES(int, java.nio.Buffer); + method public static void glFogxOES(int, int); + method public static void glFogxvOES(int, int[], int); + method public static void glFogxvOES(int, java.nio.IntBuffer); + method public static void glFramebufferRenderbufferOES(int, int, int, int); + method public static void glFramebufferTexture2DOES(int, int, int, int, int); + method public static void glFrustumfOES(float, float, float, float, float, float); + method public static void glFrustumxOES(int, int, int, int, int, int); + method public static void glGenFramebuffersOES(int, int[], int); + method public static void glGenFramebuffersOES(int, java.nio.IntBuffer); + method public static void glGenRenderbuffersOES(int, int[], int); + method public static void glGenRenderbuffersOES(int, java.nio.IntBuffer); + method public static void glGenerateMipmapOES(int); + method public static void glGetClipPlanefOES(int, float[], int); + method public static void glGetClipPlanefOES(int, java.nio.FloatBuffer); + method public static void glGetClipPlanexOES(int, int[], int); + method public static void glGetClipPlanexOES(int, java.nio.IntBuffer); + method public static void glGetFixedvOES(int, int[], int); + method public static void glGetFixedvOES(int, java.nio.IntBuffer); + method public static void glGetFramebufferAttachmentParameterivOES(int, int, int, int[], int); + method public static void glGetFramebufferAttachmentParameterivOES(int, int, int, java.nio.IntBuffer); + method public static void glGetLightxvOES(int, int, int[], int); + method public static void glGetLightxvOES(int, int, java.nio.IntBuffer); + method public static void glGetMaterialxvOES(int, int, int[], int); + method public static void glGetMaterialxvOES(int, int, java.nio.IntBuffer); + method public static void glGetRenderbufferParameterivOES(int, int, int[], int); + method public static void glGetRenderbufferParameterivOES(int, int, java.nio.IntBuffer); + method public static void glGetTexEnvxvOES(int, int, int[], int); + method public static void glGetTexEnvxvOES(int, int, java.nio.IntBuffer); + method public static void glGetTexGenfvOES(int, int, float[], int); + method public static void glGetTexGenfvOES(int, int, java.nio.FloatBuffer); + method public static void glGetTexGenivOES(int, int, int[], int); + method public static void glGetTexGenivOES(int, int, java.nio.IntBuffer); + method public static void glGetTexGenxvOES(int, int, int[], int); + method public static void glGetTexGenxvOES(int, int, java.nio.IntBuffer); + method public static void glGetTexParameterxvOES(int, int, int[], int); + method public static void glGetTexParameterxvOES(int, int, java.nio.IntBuffer); + method public static boolean glIsFramebufferOES(int); + method public static boolean glIsRenderbufferOES(int); + method public static void glLightModelxOES(int, int); + method public static void glLightModelxvOES(int, int[], int); + method public static void glLightModelxvOES(int, java.nio.IntBuffer); + method public static void glLightxOES(int, int, int); + method public static void glLightxvOES(int, int, int[], int); + method public static void glLightxvOES(int, int, java.nio.IntBuffer); + method public static void glLineWidthxOES(int); + method public static void glLoadMatrixxOES(int[], int); + method public static void glLoadMatrixxOES(java.nio.IntBuffer); + method public static void glLoadPaletteFromModelViewMatrixOES(); + method public static void glMaterialxOES(int, int, int); + method public static void glMaterialxvOES(int, int, int[], int); + method public static void glMaterialxvOES(int, int, java.nio.IntBuffer); + method public static void glMatrixIndexPointerOES(int, int, int, java.nio.Buffer); + method public static void glMultMatrixxOES(int[], int); + method public static void glMultMatrixxOES(java.nio.IntBuffer); + method public static void glMultiTexCoord4xOES(int, int, int, int, int); + method public static void glNormal3xOES(int, int, int); + method public static void glOrthofOES(float, float, float, float, float, float); + method public static void glOrthoxOES(int, int, int, int, int, int); + method public static void glPointParameterxOES(int, int); + method public static void glPointParameterxvOES(int, int[], int); + method public static void glPointParameterxvOES(int, java.nio.IntBuffer); + method public static void glPointSizexOES(int); + method public static void glPolygonOffsetxOES(int, int); + method public static void glRenderbufferStorageOES(int, int, int, int); + method public static void glRotatexOES(int, int, int, int); + method public static void glSampleCoveragexOES(int, boolean); + method public static void glScalexOES(int, int, int); + method public static void glTexEnvxOES(int, int, int); + method public static void glTexEnvxvOES(int, int, int[], int); + method public static void glTexEnvxvOES(int, int, java.nio.IntBuffer); + method public static void glTexGenfOES(int, int, float); + method public static void glTexGenfvOES(int, int, float[], int); + method public static void glTexGenfvOES(int, int, java.nio.FloatBuffer); + method public static void glTexGeniOES(int, int, int); + method public static void glTexGenivOES(int, int, int[], int); + method public static void glTexGenivOES(int, int, java.nio.IntBuffer); + method public static void glTexGenxOES(int, int, int); + method public static void glTexGenxvOES(int, int, int[], int); + method public static void glTexGenxvOES(int, int, java.nio.IntBuffer); + method public static void glTexParameterxOES(int, int, int); + method public static void glTexParameterxvOES(int, int, int[], int); + method public static void glTexParameterxvOES(int, int, java.nio.IntBuffer); + method public static void glTranslatexOES(int, int, int); + method public static void glWeightPointerOES(int, int, int, java.nio.Buffer); + field public static final int GL_3DC_XY_AMD = 34810; // 0x87fa + field public static final int GL_3DC_X_AMD = 34809; // 0x87f9 + field public static final int GL_ATC_RGBA_EXPLICIT_ALPHA_AMD = 35987; // 0x8c93 + field public static final int GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD = 34798; // 0x87ee + field public static final int GL_ATC_RGB_AMD = 35986; // 0x8c92 + field public static final int GL_BGRA = 32993; // 0x80e1 + field public static final int GL_BLEND_DST_ALPHA_OES = 32970; // 0x80ca + field public static final int GL_BLEND_DST_RGB_OES = 32968; // 0x80c8 + field public static final int GL_BLEND_EQUATION_ALPHA_OES = 34877; // 0x883d + field public static final int GL_BLEND_EQUATION_OES = 32777; // 0x8009 + field public static final int GL_BLEND_EQUATION_RGB_OES = 32777; // 0x8009 + field public static final int GL_BLEND_SRC_ALPHA_OES = 32971; // 0x80cb + field public static final int GL_BLEND_SRC_RGB_OES = 32969; // 0x80c9 + field public static final int GL_BUFFER_ACCESS_OES = 35003; // 0x88bb + field public static final int GL_BUFFER_MAPPED_OES = 35004; // 0x88bc + field public static final int GL_BUFFER_MAP_POINTER_OES = 35005; // 0x88bd + field public static final int GL_COLOR_ATTACHMENT0_OES = 36064; // 0x8ce0 + field public static final int GL_CURRENT_PALETTE_MATRIX_OES = 34883; // 0x8843 + field public static final int GL_DECR_WRAP_OES = 34056; // 0x8508 + field public static final int GL_DEPTH24_STENCIL8_OES = 35056; // 0x88f0 + field public static final int GL_DEPTH_ATTACHMENT_OES = 36096; // 0x8d00 + field public static final int GL_DEPTH_COMPONENT16_OES = 33189; // 0x81a5 + field public static final int GL_DEPTH_COMPONENT24_OES = 33190; // 0x81a6 + field public static final int GL_DEPTH_COMPONENT32_OES = 33191; // 0x81a7 + field public static final int GL_DEPTH_STENCIL_OES = 34041; // 0x84f9 + field public static final int GL_ETC1_RGB8_OES = 36196; // 0x8d64 + field public static final int GL_FIXED_OES = 5132; // 0x140c + field public static final int GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_OES = 36049; // 0x8cd1 + field public static final int GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_OES = 36048; // 0x8cd0 + field public static final int GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_OES = 36051; // 0x8cd3 + field public static final int GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_OES = 36050; // 0x8cd2 + field public static final int GL_FRAMEBUFFER_BINDING_OES = 36006; // 0x8ca6 + field public static final int GL_FRAMEBUFFER_COMPLETE_OES = 36053; // 0x8cd5 + field public static final int GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES = 36054; // 0x8cd6 + field public static final int GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_OES = 36057; // 0x8cd9 + field public static final int GL_FRAMEBUFFER_INCOMPLETE_FORMATS_OES = 36058; // 0x8cda + field public static final int GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_OES = 36055; // 0x8cd7 + field public static final int GL_FRAMEBUFFER_OES = 36160; // 0x8d40 + field public static final int GL_FRAMEBUFFER_UNSUPPORTED_OES = 36061; // 0x8cdd + field public static final int GL_FUNC_ADD_OES = 32774; // 0x8006 + field public static final int GL_FUNC_REVERSE_SUBTRACT_OES = 32779; // 0x800b + field public static final int GL_FUNC_SUBTRACT_OES = 32778; // 0x800a + field public static final int GL_INCR_WRAP_OES = 34055; // 0x8507 + field public static final int GL_INVALID_FRAMEBUFFER_OPERATION_OES = 1286; // 0x506 + field public static final int GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES = 35742; // 0x8b9e + field public static final int GL_MATRIX_INDEX_ARRAY_OES = 34884; // 0x8844 + field public static final int GL_MATRIX_INDEX_ARRAY_POINTER_OES = 34889; // 0x8849 + field public static final int GL_MATRIX_INDEX_ARRAY_SIZE_OES = 34886; // 0x8846 + field public static final int GL_MATRIX_INDEX_ARRAY_STRIDE_OES = 34888; // 0x8848 + field public static final int GL_MATRIX_INDEX_ARRAY_TYPE_OES = 34887; // 0x8847 + field public static final int GL_MATRIX_PALETTE_OES = 34880; // 0x8840 + field public static final int GL_MAX_CUBE_MAP_TEXTURE_SIZE_OES = 34076; // 0x851c + field public static final int GL_MAX_PALETTE_MATRICES_OES = 34882; // 0x8842 + field public static final int GL_MAX_RENDERBUFFER_SIZE_OES = 34024; // 0x84e8 + field public static final int GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT = 34047; // 0x84ff + field public static final int GL_MAX_VERTEX_UNITS_OES = 34468; // 0x86a4 + field public static final int GL_MIRRORED_REPEAT_OES = 33648; // 0x8370 + field public static final int GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES = 35213; // 0x898d + field public static final int GL_NONE_OES = 0; // 0x0 + field public static final int GL_NORMAL_MAP_OES = 34065; // 0x8511 + field public static final int GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES = 35214; // 0x898e + field public static final int GL_REFLECTION_MAP_OES = 34066; // 0x8512 + field public static final int GL_RENDERBUFFER_ALPHA_SIZE_OES = 36179; // 0x8d53 + field public static final int GL_RENDERBUFFER_BINDING_OES = 36007; // 0x8ca7 + field public static final int GL_RENDERBUFFER_BLUE_SIZE_OES = 36178; // 0x8d52 + field public static final int GL_RENDERBUFFER_DEPTH_SIZE_OES = 36180; // 0x8d54 + field public static final int GL_RENDERBUFFER_GREEN_SIZE_OES = 36177; // 0x8d51 + field public static final int GL_RENDERBUFFER_HEIGHT_OES = 36163; // 0x8d43 + field public static final int GL_RENDERBUFFER_INTERNAL_FORMAT_OES = 36164; // 0x8d44 + field public static final int GL_RENDERBUFFER_OES = 36161; // 0x8d41 + field public static final int GL_RENDERBUFFER_RED_SIZE_OES = 36176; // 0x8d50 + field public static final int GL_RENDERBUFFER_STENCIL_SIZE_OES = 36181; // 0x8d55 + field public static final int GL_RENDERBUFFER_WIDTH_OES = 36162; // 0x8d42 + field public static final int GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES = 36200; // 0x8d68 + field public static final int GL_RGB565_OES = 36194; // 0x8d62 + field public static final int GL_RGB5_A1_OES = 32855; // 0x8057 + field public static final int GL_RGB8_OES = 32849; // 0x8051 + field public static final int GL_RGBA4_OES = 32854; // 0x8056 + field public static final int GL_RGBA8_OES = 32856; // 0x8058 + field public static final int GL_SAMPLER_EXTERNAL_OES = 36198; // 0x8d66 + field public static final int GL_STENCIL_ATTACHMENT_OES = 36128; // 0x8d20 + field public static final int GL_STENCIL_INDEX1_OES = 36166; // 0x8d46 + field public static final int GL_STENCIL_INDEX4_OES = 36167; // 0x8d47 + field public static final int GL_STENCIL_INDEX8_OES = 36168; // 0x8d48 + field public static final int GL_TEXTURE_BINDING_CUBE_MAP_OES = 34068; // 0x8514 + field public static final int GL_TEXTURE_BINDING_EXTERNAL_OES = 36199; // 0x8d67 + field public static final int GL_TEXTURE_CROP_RECT_OES = 35741; // 0x8b9d + field public static final int GL_TEXTURE_CUBE_MAP_NEGATIVE_X_OES = 34070; // 0x8516 + field public static final int GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_OES = 34072; // 0x8518 + field public static final int GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_OES = 34074; // 0x851a + field public static final int GL_TEXTURE_CUBE_MAP_OES = 34067; // 0x8513 + field public static final int GL_TEXTURE_CUBE_MAP_POSITIVE_X_OES = 34069; // 0x8515 + field public static final int GL_TEXTURE_CUBE_MAP_POSITIVE_Y_OES = 34071; // 0x8517 + field public static final int GL_TEXTURE_CUBE_MAP_POSITIVE_Z_OES = 34073; // 0x8519 + field public static final int GL_TEXTURE_EXTERNAL_OES = 36197; // 0x8d65 + field public static final int GL_TEXTURE_GEN_MODE_OES = 9472; // 0x2500 + field public static final int GL_TEXTURE_GEN_STR_OES = 36192; // 0x8d60 + field public static final int GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES = 35215; // 0x898f + field public static final int GL_TEXTURE_MAX_ANISOTROPY_EXT = 34046; // 0x84fe + field public static final int GL_UNSIGNED_INT_24_8_OES = 34042; // 0x84fa + field public static final int GL_WEIGHT_ARRAY_BUFFER_BINDING_OES = 34974; // 0x889e + field public static final int GL_WEIGHT_ARRAY_OES = 34477; // 0x86ad + field public static final int GL_WEIGHT_ARRAY_POINTER_OES = 34476; // 0x86ac + field public static final int GL_WEIGHT_ARRAY_SIZE_OES = 34475; // 0x86ab + field public static final int GL_WEIGHT_ARRAY_STRIDE_OES = 34474; // 0x86aa + field public static final int GL_WEIGHT_ARRAY_TYPE_OES = 34473; // 0x86a9 + field public static final int GL_WRITE_ONLY_OES = 35001; // 0x88b9 + } + + public class GLES20 { + ctor public GLES20(); + method public static void glActiveTexture(int); + method public static void glAttachShader(int, int); + method public static void glBindAttribLocation(int, int, java.lang.String); + method public static void glBindBuffer(int, int); + method public static void glBindFramebuffer(int, int); + method public static void glBindRenderbuffer(int, int); + method public static void glBindTexture(int, int); + method public static void glBlendColor(float, float, float, float); + method public static void glBlendEquation(int); + method public static void glBlendEquationSeparate(int, int); + method public static void glBlendFunc(int, int); + method public static void glBlendFuncSeparate(int, int, int, int); + method public static void glBufferData(int, int, java.nio.Buffer, int); + method public static void glBufferSubData(int, int, int, java.nio.Buffer); + method public static int glCheckFramebufferStatus(int); + method public static void glClear(int); + method public static void glClearColor(float, float, float, float); + method public static void glClearDepthf(float); + method public static void glClearStencil(int); + method public static void glColorMask(boolean, boolean, boolean, boolean); + method public static void glCompileShader(int); + method public static void glCompressedTexImage2D(int, int, int, int, int, int, int, java.nio.Buffer); + method public static void glCompressedTexSubImage2D(int, int, int, int, int, int, int, int, java.nio.Buffer); + method public static void glCopyTexImage2D(int, int, int, int, int, int, int, int); + method public static void glCopyTexSubImage2D(int, int, int, int, int, int, int, int); + method public static int glCreateProgram(); + method public static int glCreateShader(int); + method public static void glCullFace(int); + method public static void glDeleteBuffers(int, int[], int); + method public static void glDeleteBuffers(int, java.nio.IntBuffer); + method public static void glDeleteFramebuffers(int, int[], int); + method public static void glDeleteFramebuffers(int, java.nio.IntBuffer); + method public static void glDeleteProgram(int); + method public static void glDeleteRenderbuffers(int, int[], int); + method public static void glDeleteRenderbuffers(int, java.nio.IntBuffer); + method public static void glDeleteShader(int); + method public static void glDeleteTextures(int, int[], int); + method public static void glDeleteTextures(int, java.nio.IntBuffer); + method public static void glDepthFunc(int); + method public static void glDepthMask(boolean); + method public static void glDepthRangef(float, float); + method public static void glDetachShader(int, int); + method public static void glDisable(int); + method public static void glDisableVertexAttribArray(int); + method public static void glDrawArrays(int, int, int); + method public static void glDrawElements(int, int, int, int); + method public static void glDrawElements(int, int, int, java.nio.Buffer); + method public static void glEnable(int); + method public static void glEnableVertexAttribArray(int); + method public static void glFinish(); + method public static void glFlush(); + method public static void glFramebufferRenderbuffer(int, int, int, int); + method public static void glFramebufferTexture2D(int, int, int, int, int); + method public static void glFrontFace(int); + method public static void glGenBuffers(int, int[], int); + method public static void glGenBuffers(int, java.nio.IntBuffer); + method public static void glGenFramebuffers(int, int[], int); + method public static void glGenFramebuffers(int, java.nio.IntBuffer); + method public static void glGenRenderbuffers(int, int[], int); + method public static void glGenRenderbuffers(int, java.nio.IntBuffer); + method public static void glGenTextures(int, int[], int); + method public static void glGenTextures(int, java.nio.IntBuffer); + method public static void glGenerateMipmap(int); + method public static void glGetActiveAttrib(int, int, int, int[], int, int[], int, int[], int, byte[], int); + method public static java.lang.String glGetActiveAttrib(int, int, int[], int, int[], int); + method public static java.lang.String glGetActiveAttrib(int, int, java.nio.IntBuffer, java.nio.IntBuffer); + method public static void glGetActiveUniform(int, int, int, int[], int, int[], int, int[], int, byte[], int); + method public static java.lang.String glGetActiveUniform(int, int, int[], int, int[], int); + method public static java.lang.String glGetActiveUniform(int, int, java.nio.IntBuffer, java.nio.IntBuffer); + method public static void glGetAttachedShaders(int, int, int[], int, int[], int); + method public static void glGetAttachedShaders(int, int, java.nio.IntBuffer, java.nio.IntBuffer); + method public static int glGetAttribLocation(int, java.lang.String); + method public static void glGetBooleanv(int, boolean[], int); + method public static void glGetBooleanv(int, java.nio.IntBuffer); + method public static void glGetBufferParameteriv(int, int, int[], int); + method public static void glGetBufferParameteriv(int, int, java.nio.IntBuffer); + method public static int glGetError(); + method public static void glGetFloatv(int, float[], int); + method public static void glGetFloatv(int, java.nio.FloatBuffer); + method public static void glGetFramebufferAttachmentParameteriv(int, int, int, int[], int); + method public static void glGetFramebufferAttachmentParameteriv(int, int, int, java.nio.IntBuffer); + method public static void glGetIntegerv(int, int[], int); + method public static void glGetIntegerv(int, java.nio.IntBuffer); + method public static java.lang.String glGetProgramInfoLog(int); + method public static void glGetProgramiv(int, int, int[], int); + method public static void glGetProgramiv(int, int, java.nio.IntBuffer); + method public static void glGetRenderbufferParameteriv(int, int, int[], int); + method public static void glGetRenderbufferParameteriv(int, int, java.nio.IntBuffer); + method public static java.lang.String glGetShaderInfoLog(int); + method public static void glGetShaderPrecisionFormat(int, int, int[], int, int[], int); + method public static void glGetShaderPrecisionFormat(int, int, java.nio.IntBuffer, java.nio.IntBuffer); + method public static void glGetShaderSource(int, int, int[], int, byte[], int); + method public static java.lang.String glGetShaderSource(int); + method public static void glGetShaderiv(int, int, int[], int); + method public static void glGetShaderiv(int, int, java.nio.IntBuffer); + method public static java.lang.String glGetString(int); + method public static void glGetTexParameterfv(int, int, float[], int); + method public static void glGetTexParameterfv(int, int, java.nio.FloatBuffer); + method public static void glGetTexParameteriv(int, int, int[], int); + method public static void glGetTexParameteriv(int, int, java.nio.IntBuffer); + method public static int glGetUniformLocation(int, java.lang.String); + method public static void glGetUniformfv(int, int, float[], int); + method public static void glGetUniformfv(int, int, java.nio.FloatBuffer); + method public static void glGetUniformiv(int, int, int[], int); + method public static void glGetUniformiv(int, int, java.nio.IntBuffer); + method public static void glGetVertexAttribfv(int, int, float[], int); + method public static void glGetVertexAttribfv(int, int, java.nio.FloatBuffer); + method public static void glGetVertexAttribiv(int, int, int[], int); + method public static void glGetVertexAttribiv(int, int, java.nio.IntBuffer); + method public static void glHint(int, int); + method public static boolean glIsBuffer(int); + method public static boolean glIsEnabled(int); + method public static boolean glIsFramebuffer(int); + method public static boolean glIsProgram(int); + method public static boolean glIsRenderbuffer(int); + method public static boolean glIsShader(int); + method public static boolean glIsTexture(int); + method public static void glLineWidth(float); + method public static void glLinkProgram(int); + method public static void glPixelStorei(int, int); + method public static void glPolygonOffset(float, float); + method public static void glReadPixels(int, int, int, int, int, int, java.nio.Buffer); + method public static void glReleaseShaderCompiler(); + method public static void glRenderbufferStorage(int, int, int, int); + method public static void glSampleCoverage(float, boolean); + method public static void glScissor(int, int, int, int); + method public static void glShaderBinary(int, int[], int, int, java.nio.Buffer, int); + method public static void glShaderBinary(int, java.nio.IntBuffer, int, java.nio.Buffer, int); + method public static void glShaderSource(int, java.lang.String); + method public static void glStencilFunc(int, int, int); + method public static void glStencilFuncSeparate(int, int, int, int); + method public static void glStencilMask(int); + method public static void glStencilMaskSeparate(int, int); + method public static void glStencilOp(int, int, int); + method public static void glStencilOpSeparate(int, int, int, int); + method public static void glTexImage2D(int, int, int, int, int, int, int, int, java.nio.Buffer); + method public static void glTexParameterf(int, int, float); + method public static void glTexParameterfv(int, int, float[], int); + method public static void glTexParameterfv(int, int, java.nio.FloatBuffer); + method public static void glTexParameteri(int, int, int); + method public static void glTexParameteriv(int, int, int[], int); + method public static void glTexParameteriv(int, int, java.nio.IntBuffer); + method public static void glTexSubImage2D(int, int, int, int, int, int, int, int, java.nio.Buffer); + method public static void glUniform1f(int, float); + method public static void glUniform1fv(int, int, float[], int); + method public static void glUniform1fv(int, int, java.nio.FloatBuffer); + method public static void glUniform1i(int, int); + method public static void glUniform1iv(int, int, int[], int); + method public static void glUniform1iv(int, int, java.nio.IntBuffer); + method public static void glUniform2f(int, float, float); + method public static void glUniform2fv(int, int, float[], int); + method public static void glUniform2fv(int, int, java.nio.FloatBuffer); + method public static void glUniform2i(int, int, int); + method public static void glUniform2iv(int, int, int[], int); + method public static void glUniform2iv(int, int, java.nio.IntBuffer); + method public static void glUniform3f(int, float, float, float); + method public static void glUniform3fv(int, int, float[], int); + method public static void glUniform3fv(int, int, java.nio.FloatBuffer); + method public static void glUniform3i(int, int, int, int); + method public static void glUniform3iv(int, int, int[], int); + method public static void glUniform3iv(int, int, java.nio.IntBuffer); + method public static void glUniform4f(int, float, float, float, float); + method public static void glUniform4fv(int, int, float[], int); + method public static void glUniform4fv(int, int, java.nio.FloatBuffer); + method public static void glUniform4i(int, int, int, int, int); + method public static void glUniform4iv(int, int, int[], int); + method public static void glUniform4iv(int, int, java.nio.IntBuffer); + method public static void glUniformMatrix2fv(int, int, boolean, float[], int); + method public static void glUniformMatrix2fv(int, int, boolean, java.nio.FloatBuffer); + method public static void glUniformMatrix3fv(int, int, boolean, float[], int); + method public static void glUniformMatrix3fv(int, int, boolean, java.nio.FloatBuffer); + method public static void glUniformMatrix4fv(int, int, boolean, float[], int); + method public static void glUniformMatrix4fv(int, int, boolean, java.nio.FloatBuffer); + method public static void glUseProgram(int); + method public static void glValidateProgram(int); + method public static void glVertexAttrib1f(int, float); + method public static void glVertexAttrib1fv(int, float[], int); + method public static void glVertexAttrib1fv(int, java.nio.FloatBuffer); + method public static void glVertexAttrib2f(int, float, float); + method public static void glVertexAttrib2fv(int, float[], int); + method public static void glVertexAttrib2fv(int, java.nio.FloatBuffer); + method public static void glVertexAttrib3f(int, float, float, float); + method public static void glVertexAttrib3fv(int, float[], int); + method public static void glVertexAttrib3fv(int, java.nio.FloatBuffer); + method public static void glVertexAttrib4f(int, float, float, float, float); + method public static void glVertexAttrib4fv(int, float[], int); + method public static void glVertexAttrib4fv(int, java.nio.FloatBuffer); + method public static void glVertexAttribPointer(int, int, int, boolean, int, int); + method public static void glVertexAttribPointer(int, int, int, boolean, int, java.nio.Buffer); + method public static void glViewport(int, int, int, int); + field public static final int GL_ACTIVE_ATTRIBUTES = 35721; // 0x8b89 + field public static final int GL_ACTIVE_ATTRIBUTE_MAX_LENGTH = 35722; // 0x8b8a + field public static final int GL_ACTIVE_TEXTURE = 34016; // 0x84e0 + field public static final int GL_ACTIVE_UNIFORMS = 35718; // 0x8b86 + field public static final int GL_ACTIVE_UNIFORM_MAX_LENGTH = 35719; // 0x8b87 + field public static final int GL_ALIASED_LINE_WIDTH_RANGE = 33902; // 0x846e + field public static final int GL_ALIASED_POINT_SIZE_RANGE = 33901; // 0x846d + field public static final int GL_ALPHA = 6406; // 0x1906 + field public static final int GL_ALPHA_BITS = 3413; // 0xd55 + field public static final int GL_ALWAYS = 519; // 0x207 + field public static final int GL_ARRAY_BUFFER = 34962; // 0x8892 + field public static final int GL_ARRAY_BUFFER_BINDING = 34964; // 0x8894 + field public static final int GL_ATTACHED_SHADERS = 35717; // 0x8b85 + field public static final int GL_BACK = 1029; // 0x405 + field public static final int GL_BLEND = 3042; // 0xbe2 + field public static final int GL_BLEND_COLOR = 32773; // 0x8005 + field public static final int GL_BLEND_DST_ALPHA = 32970; // 0x80ca + field public static final int GL_BLEND_DST_RGB = 32968; // 0x80c8 + field public static final int GL_BLEND_EQUATION = 32777; // 0x8009 + field public static final int GL_BLEND_EQUATION_ALPHA = 34877; // 0x883d + field public static final int GL_BLEND_EQUATION_RGB = 32777; // 0x8009 + field public static final int GL_BLEND_SRC_ALPHA = 32971; // 0x80cb + field public static final int GL_BLEND_SRC_RGB = 32969; // 0x80c9 + field public static final int GL_BLUE_BITS = 3412; // 0xd54 + field public static final int GL_BOOL = 35670; // 0x8b56 + field public static final int GL_BOOL_VEC2 = 35671; // 0x8b57 + field public static final int GL_BOOL_VEC3 = 35672; // 0x8b58 + field public static final int GL_BOOL_VEC4 = 35673; // 0x8b59 + field public static final int GL_BUFFER_SIZE = 34660; // 0x8764 + field public static final int GL_BUFFER_USAGE = 34661; // 0x8765 + field public static final int GL_BYTE = 5120; // 0x1400 + field public static final int GL_CCW = 2305; // 0x901 + field public static final int GL_CLAMP_TO_EDGE = 33071; // 0x812f + field public static final int GL_COLOR_ATTACHMENT0 = 36064; // 0x8ce0 + field public static final int GL_COLOR_BUFFER_BIT = 16384; // 0x4000 + field public static final int GL_COLOR_CLEAR_VALUE = 3106; // 0xc22 + field public static final int GL_COLOR_WRITEMASK = 3107; // 0xc23 + field public static final int GL_COMPILE_STATUS = 35713; // 0x8b81 + field public static final int GL_COMPRESSED_TEXTURE_FORMATS = 34467; // 0x86a3 + field public static final int GL_CONSTANT_ALPHA = 32771; // 0x8003 + field public static final int GL_CONSTANT_COLOR = 32769; // 0x8001 + field public static final int GL_CULL_FACE = 2884; // 0xb44 + field public static final int GL_CULL_FACE_MODE = 2885; // 0xb45 + field public static final int GL_CURRENT_PROGRAM = 35725; // 0x8b8d + field public static final int GL_CURRENT_VERTEX_ATTRIB = 34342; // 0x8626 + field public static final int GL_CW = 2304; // 0x900 + field public static final int GL_DECR = 7683; // 0x1e03 + field public static final int GL_DECR_WRAP = 34056; // 0x8508 + field public static final int GL_DELETE_STATUS = 35712; // 0x8b80 + field public static final int GL_DEPTH_ATTACHMENT = 36096; // 0x8d00 + field public static final int GL_DEPTH_BITS = 3414; // 0xd56 + field public static final int GL_DEPTH_BUFFER_BIT = 256; // 0x100 + field public static final int GL_DEPTH_CLEAR_VALUE = 2931; // 0xb73 + field public static final int GL_DEPTH_COMPONENT = 6402; // 0x1902 + field public static final int GL_DEPTH_COMPONENT16 = 33189; // 0x81a5 + field public static final int GL_DEPTH_FUNC = 2932; // 0xb74 + field public static final int GL_DEPTH_RANGE = 2928; // 0xb70 + field public static final int GL_DEPTH_TEST = 2929; // 0xb71 + field public static final int GL_DEPTH_WRITEMASK = 2930; // 0xb72 + field public static final int GL_DITHER = 3024; // 0xbd0 + field public static final int GL_DONT_CARE = 4352; // 0x1100 + field public static final int GL_DST_ALPHA = 772; // 0x304 + field public static final int GL_DST_COLOR = 774; // 0x306 + field public static final int GL_DYNAMIC_DRAW = 35048; // 0x88e8 + field public static final int GL_ELEMENT_ARRAY_BUFFER = 34963; // 0x8893 + field public static final int GL_ELEMENT_ARRAY_BUFFER_BINDING = 34965; // 0x8895 + field public static final int GL_EQUAL = 514; // 0x202 + field public static final int GL_EXTENSIONS = 7939; // 0x1f03 + field public static final int GL_FALSE = 0; // 0x0 + field public static final int GL_FASTEST = 4353; // 0x1101 + field public static final int GL_FIXED = 5132; // 0x140c + field public static final int GL_FLOAT = 5126; // 0x1406 + field public static final int GL_FLOAT_MAT2 = 35674; // 0x8b5a + field public static final int GL_FLOAT_MAT3 = 35675; // 0x8b5b + field public static final int GL_FLOAT_MAT4 = 35676; // 0x8b5c + field public static final int GL_FLOAT_VEC2 = 35664; // 0x8b50 + field public static final int GL_FLOAT_VEC3 = 35665; // 0x8b51 + field public static final int GL_FLOAT_VEC4 = 35666; // 0x8b52 + field public static final int GL_FRAGMENT_SHADER = 35632; // 0x8b30 + field public static final int GL_FRAMEBUFFER = 36160; // 0x8d40 + field public static final int GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 36049; // 0x8cd1 + field public static final int GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 36048; // 0x8cd0 + field public static final int GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 36051; // 0x8cd3 + field public static final int GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 36050; // 0x8cd2 + field public static final int GL_FRAMEBUFFER_BINDING = 36006; // 0x8ca6 + field public static final int GL_FRAMEBUFFER_COMPLETE = 36053; // 0x8cd5 + field public static final int GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 36054; // 0x8cd6 + field public static final int GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS = 36057; // 0x8cd9 + field public static final int GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 36055; // 0x8cd7 + field public static final int GL_FRAMEBUFFER_UNSUPPORTED = 36061; // 0x8cdd + field public static final int GL_FRONT = 1028; // 0x404 + field public static final int GL_FRONT_AND_BACK = 1032; // 0x408 + field public static final int GL_FRONT_FACE = 2886; // 0xb46 + field public static final int GL_FUNC_ADD = 32774; // 0x8006 + field public static final int GL_FUNC_REVERSE_SUBTRACT = 32779; // 0x800b + field public static final int GL_FUNC_SUBTRACT = 32778; // 0x800a + field public static final int GL_GENERATE_MIPMAP_HINT = 33170; // 0x8192 + field public static final int GL_GEQUAL = 518; // 0x206 + field public static final int GL_GREATER = 516; // 0x204 + field public static final int GL_GREEN_BITS = 3411; // 0xd53 + field public static final int GL_HIGH_FLOAT = 36338; // 0x8df2 + field public static final int GL_HIGH_INT = 36341; // 0x8df5 + field public static final int GL_IMPLEMENTATION_COLOR_READ_FORMAT = 35739; // 0x8b9b + field public static final int GL_IMPLEMENTATION_COLOR_READ_TYPE = 35738; // 0x8b9a + field public static final int GL_INCR = 7682; // 0x1e02 + field public static final int GL_INCR_WRAP = 34055; // 0x8507 + field public static final int GL_INFO_LOG_LENGTH = 35716; // 0x8b84 + field public static final int GL_INT = 5124; // 0x1404 + field public static final int GL_INT_VEC2 = 35667; // 0x8b53 + field public static final int GL_INT_VEC3 = 35668; // 0x8b54 + field public static final int GL_INT_VEC4 = 35669; // 0x8b55 + field public static final int GL_INVALID_ENUM = 1280; // 0x500 + field public static final int GL_INVALID_FRAMEBUFFER_OPERATION = 1286; // 0x506 + field public static final int GL_INVALID_OPERATION = 1282; // 0x502 + field public static final int GL_INVALID_VALUE = 1281; // 0x501 + field public static final int GL_INVERT = 5386; // 0x150a + field public static final int GL_KEEP = 7680; // 0x1e00 + field public static final int GL_LEQUAL = 515; // 0x203 + field public static final int GL_LESS = 513; // 0x201 + field public static final int GL_LINEAR = 9729; // 0x2601 + field public static final int GL_LINEAR_MIPMAP_LINEAR = 9987; // 0x2703 + field public static final int GL_LINEAR_MIPMAP_NEAREST = 9985; // 0x2701 + field public static final int GL_LINES = 1; // 0x1 + field public static final int GL_LINE_LOOP = 2; // 0x2 + field public static final int GL_LINE_STRIP = 3; // 0x3 + field public static final int GL_LINE_WIDTH = 2849; // 0xb21 + field public static final int GL_LINK_STATUS = 35714; // 0x8b82 + field public static final int GL_LOW_FLOAT = 36336; // 0x8df0 + field public static final int GL_LOW_INT = 36339; // 0x8df3 + field public static final int GL_LUMINANCE = 6409; // 0x1909 + field public static final int GL_LUMINANCE_ALPHA = 6410; // 0x190a + field public static final int GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS = 35661; // 0x8b4d + field public static final int GL_MAX_CUBE_MAP_TEXTURE_SIZE = 34076; // 0x851c + field public static final int GL_MAX_FRAGMENT_UNIFORM_VECTORS = 36349; // 0x8dfd + field public static final int GL_MAX_RENDERBUFFER_SIZE = 34024; // 0x84e8 + field public static final int GL_MAX_TEXTURE_IMAGE_UNITS = 34930; // 0x8872 + field public static final int GL_MAX_TEXTURE_SIZE = 3379; // 0xd33 + field public static final int GL_MAX_VARYING_VECTORS = 36348; // 0x8dfc + field public static final int GL_MAX_VERTEX_ATTRIBS = 34921; // 0x8869 + field public static final int GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS = 35660; // 0x8b4c + field public static final int GL_MAX_VERTEX_UNIFORM_VECTORS = 36347; // 0x8dfb + field public static final int GL_MAX_VIEWPORT_DIMS = 3386; // 0xd3a + field public static final int GL_MEDIUM_FLOAT = 36337; // 0x8df1 + field public static final int GL_MEDIUM_INT = 36340; // 0x8df4 + field public static final int GL_MIRRORED_REPEAT = 33648; // 0x8370 + field public static final int GL_NEAREST = 9728; // 0x2600 + field public static final int GL_NEAREST_MIPMAP_LINEAR = 9986; // 0x2702 + field public static final int GL_NEAREST_MIPMAP_NEAREST = 9984; // 0x2700 + field public static final int GL_NEVER = 512; // 0x200 + field public static final int GL_NICEST = 4354; // 0x1102 + field public static final int GL_NONE = 0; // 0x0 + field public static final int GL_NOTEQUAL = 517; // 0x205 + field public static final int GL_NO_ERROR = 0; // 0x0 + field public static final int GL_NUM_COMPRESSED_TEXTURE_FORMATS = 34466; // 0x86a2 + field public static final int GL_NUM_SHADER_BINARY_FORMATS = 36345; // 0x8df9 + field public static final int GL_ONE = 1; // 0x1 + field public static final int GL_ONE_MINUS_CONSTANT_ALPHA = 32772; // 0x8004 + field public static final int GL_ONE_MINUS_CONSTANT_COLOR = 32770; // 0x8002 + field public static final int GL_ONE_MINUS_DST_ALPHA = 773; // 0x305 + field public static final int GL_ONE_MINUS_DST_COLOR = 775; // 0x307 + field public static final int GL_ONE_MINUS_SRC_ALPHA = 771; // 0x303 + field public static final int GL_ONE_MINUS_SRC_COLOR = 769; // 0x301 + field public static final int GL_OUT_OF_MEMORY = 1285; // 0x505 + field public static final int GL_PACK_ALIGNMENT = 3333; // 0xd05 + field public static final int GL_POINTS = 0; // 0x0 + field public static final int GL_POLYGON_OFFSET_FACTOR = 32824; // 0x8038 + field public static final int GL_POLYGON_OFFSET_FILL = 32823; // 0x8037 + field public static final int GL_POLYGON_OFFSET_UNITS = 10752; // 0x2a00 + field public static final int GL_RED_BITS = 3410; // 0xd52 + field public static final int GL_RENDERBUFFER = 36161; // 0x8d41 + field public static final int GL_RENDERBUFFER_ALPHA_SIZE = 36179; // 0x8d53 + field public static final int GL_RENDERBUFFER_BINDING = 36007; // 0x8ca7 + field public static final int GL_RENDERBUFFER_BLUE_SIZE = 36178; // 0x8d52 + field public static final int GL_RENDERBUFFER_DEPTH_SIZE = 36180; // 0x8d54 + field public static final int GL_RENDERBUFFER_GREEN_SIZE = 36177; // 0x8d51 + field public static final int GL_RENDERBUFFER_HEIGHT = 36163; // 0x8d43 + field public static final int GL_RENDERBUFFER_INTERNAL_FORMAT = 36164; // 0x8d44 + field public static final int GL_RENDERBUFFER_RED_SIZE = 36176; // 0x8d50 + field public static final int GL_RENDERBUFFER_STENCIL_SIZE = 36181; // 0x8d55 + field public static final int GL_RENDERBUFFER_WIDTH = 36162; // 0x8d42 + field public static final int GL_RENDERER = 7937; // 0x1f01 + field public static final int GL_REPEAT = 10497; // 0x2901 + field public static final int GL_REPLACE = 7681; // 0x1e01 + field public static final int GL_RGB = 6407; // 0x1907 + field public static final int GL_RGB565 = 36194; // 0x8d62 + field public static final int GL_RGB5_A1 = 32855; // 0x8057 + field public static final int GL_RGBA = 6408; // 0x1908 + field public static final int GL_RGBA4 = 32854; // 0x8056 + field public static final int GL_SAMPLER_2D = 35678; // 0x8b5e + field public static final int GL_SAMPLER_CUBE = 35680; // 0x8b60 + field public static final int GL_SAMPLES = 32937; // 0x80a9 + field public static final int GL_SAMPLE_ALPHA_TO_COVERAGE = 32926; // 0x809e + field public static final int GL_SAMPLE_BUFFERS = 32936; // 0x80a8 + field public static final int GL_SAMPLE_COVERAGE = 32928; // 0x80a0 + field public static final int GL_SAMPLE_COVERAGE_INVERT = 32939; // 0x80ab + field public static final int GL_SAMPLE_COVERAGE_VALUE = 32938; // 0x80aa + field public static final int GL_SCISSOR_BOX = 3088; // 0xc10 + field public static final int GL_SCISSOR_TEST = 3089; // 0xc11 + field public static final int GL_SHADER_BINARY_FORMATS = 36344; // 0x8df8 + field public static final int GL_SHADER_COMPILER = 36346; // 0x8dfa + field public static final int GL_SHADER_SOURCE_LENGTH = 35720; // 0x8b88 + field public static final int GL_SHADER_TYPE = 35663; // 0x8b4f + field public static final int GL_SHADING_LANGUAGE_VERSION = 35724; // 0x8b8c + field public static final int GL_SHORT = 5122; // 0x1402 + field public static final int GL_SRC_ALPHA = 770; // 0x302 + field public static final int GL_SRC_ALPHA_SATURATE = 776; // 0x308 + field public static final int GL_SRC_COLOR = 768; // 0x300 + field public static final int GL_STATIC_DRAW = 35044; // 0x88e4 + field public static final int GL_STENCIL_ATTACHMENT = 36128; // 0x8d20 + field public static final int GL_STENCIL_BACK_FAIL = 34817; // 0x8801 + field public static final int GL_STENCIL_BACK_FUNC = 34816; // 0x8800 + field public static final int GL_STENCIL_BACK_PASS_DEPTH_FAIL = 34818; // 0x8802 + field public static final int GL_STENCIL_BACK_PASS_DEPTH_PASS = 34819; // 0x8803 + field public static final int GL_STENCIL_BACK_REF = 36003; // 0x8ca3 + field public static final int GL_STENCIL_BACK_VALUE_MASK = 36004; // 0x8ca4 + field public static final int GL_STENCIL_BACK_WRITEMASK = 36005; // 0x8ca5 + field public static final int GL_STENCIL_BITS = 3415; // 0xd57 + field public static final int GL_STENCIL_BUFFER_BIT = 1024; // 0x400 + field public static final int GL_STENCIL_CLEAR_VALUE = 2961; // 0xb91 + field public static final int GL_STENCIL_FAIL = 2964; // 0xb94 + field public static final int GL_STENCIL_FUNC = 2962; // 0xb92 + field public static final deprecated int GL_STENCIL_INDEX = 6401; // 0x1901 + field public static final int GL_STENCIL_INDEX8 = 36168; // 0x8d48 + field public static final int GL_STENCIL_PASS_DEPTH_FAIL = 2965; // 0xb95 + field public static final int GL_STENCIL_PASS_DEPTH_PASS = 2966; // 0xb96 + field public static final int GL_STENCIL_REF = 2967; // 0xb97 + field public static final int GL_STENCIL_TEST = 2960; // 0xb90 + field public static final int GL_STENCIL_VALUE_MASK = 2963; // 0xb93 + field public static final int GL_STENCIL_WRITEMASK = 2968; // 0xb98 + field public static final int GL_STREAM_DRAW = 35040; // 0x88e0 + field public static final int GL_SUBPIXEL_BITS = 3408; // 0xd50 + field public static final int GL_TEXTURE = 5890; // 0x1702 + field public static final int GL_TEXTURE0 = 33984; // 0x84c0 + field public static final int GL_TEXTURE1 = 33985; // 0x84c1 + field public static final int GL_TEXTURE10 = 33994; // 0x84ca + field public static final int GL_TEXTURE11 = 33995; // 0x84cb + field public static final int GL_TEXTURE12 = 33996; // 0x84cc + field public static final int GL_TEXTURE13 = 33997; // 0x84cd + field public static final int GL_TEXTURE14 = 33998; // 0x84ce + field public static final int GL_TEXTURE15 = 33999; // 0x84cf + field public static final int GL_TEXTURE16 = 34000; // 0x84d0 + field public static final int GL_TEXTURE17 = 34001; // 0x84d1 + field public static final int GL_TEXTURE18 = 34002; // 0x84d2 + field public static final int GL_TEXTURE19 = 34003; // 0x84d3 + field public static final int GL_TEXTURE2 = 33986; // 0x84c2 + field public static final int GL_TEXTURE20 = 34004; // 0x84d4 + field public static final int GL_TEXTURE21 = 34005; // 0x84d5 + field public static final int GL_TEXTURE22 = 34006; // 0x84d6 + field public static final int GL_TEXTURE23 = 34007; // 0x84d7 + field public static final int GL_TEXTURE24 = 34008; // 0x84d8 + field public static final int GL_TEXTURE25 = 34009; // 0x84d9 + field public static final int GL_TEXTURE26 = 34010; // 0x84da + field public static final int GL_TEXTURE27 = 34011; // 0x84db + field public static final int GL_TEXTURE28 = 34012; // 0x84dc + field public static final int GL_TEXTURE29 = 34013; // 0x84dd + field public static final int GL_TEXTURE3 = 33987; // 0x84c3 + field public static final int GL_TEXTURE30 = 34014; // 0x84de + field public static final int GL_TEXTURE31 = 34015; // 0x84df + field public static final int GL_TEXTURE4 = 33988; // 0x84c4 + field public static final int GL_TEXTURE5 = 33989; // 0x84c5 + field public static final int GL_TEXTURE6 = 33990; // 0x84c6 + field public static final int GL_TEXTURE7 = 33991; // 0x84c7 + field public static final int GL_TEXTURE8 = 33992; // 0x84c8 + field public static final int GL_TEXTURE9 = 33993; // 0x84c9 + field public static final int GL_TEXTURE_2D = 3553; // 0xde1 + field public static final int GL_TEXTURE_BINDING_2D = 32873; // 0x8069 + field public static final int GL_TEXTURE_BINDING_CUBE_MAP = 34068; // 0x8514 + field public static final int GL_TEXTURE_CUBE_MAP = 34067; // 0x8513 + field public static final int GL_TEXTURE_CUBE_MAP_NEGATIVE_X = 34070; // 0x8516 + field public static final int GL_TEXTURE_CUBE_MAP_NEGATIVE_Y = 34072; // 0x8518 + field public static final int GL_TEXTURE_CUBE_MAP_NEGATIVE_Z = 34074; // 0x851a + field public static final int GL_TEXTURE_CUBE_MAP_POSITIVE_X = 34069; // 0x8515 + field public static final int GL_TEXTURE_CUBE_MAP_POSITIVE_Y = 34071; // 0x8517 + field public static final int GL_TEXTURE_CUBE_MAP_POSITIVE_Z = 34073; // 0x8519 + field public static final int GL_TEXTURE_MAG_FILTER = 10240; // 0x2800 + field public static final int GL_TEXTURE_MIN_FILTER = 10241; // 0x2801 + field public static final int GL_TEXTURE_WRAP_S = 10242; // 0x2802 + field public static final int GL_TEXTURE_WRAP_T = 10243; // 0x2803 + field public static final int GL_TRIANGLES = 4; // 0x4 + field public static final int GL_TRIANGLE_FAN = 6; // 0x6 + field public static final int GL_TRIANGLE_STRIP = 5; // 0x5 + field public static final int GL_TRUE = 1; // 0x1 + field public static final int GL_UNPACK_ALIGNMENT = 3317; // 0xcf5 + field public static final int GL_UNSIGNED_BYTE = 5121; // 0x1401 + field public static final int GL_UNSIGNED_INT = 5125; // 0x1405 + field public static final int GL_UNSIGNED_SHORT = 5123; // 0x1403 + field public static final int GL_UNSIGNED_SHORT_4_4_4_4 = 32819; // 0x8033 + field public static final int GL_UNSIGNED_SHORT_5_5_5_1 = 32820; // 0x8034 + field public static final int GL_UNSIGNED_SHORT_5_6_5 = 33635; // 0x8363 + field public static final int GL_VALIDATE_STATUS = 35715; // 0x8b83 + field public static final int GL_VENDOR = 7936; // 0x1f00 + field public static final int GL_VERSION = 7938; // 0x1f02 + field public static final int GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 34975; // 0x889f + field public static final int GL_VERTEX_ATTRIB_ARRAY_ENABLED = 34338; // 0x8622 + field public static final int GL_VERTEX_ATTRIB_ARRAY_NORMALIZED = 34922; // 0x886a + field public static final int GL_VERTEX_ATTRIB_ARRAY_POINTER = 34373; // 0x8645 + field public static final int GL_VERTEX_ATTRIB_ARRAY_SIZE = 34339; // 0x8623 + field public static final int GL_VERTEX_ATTRIB_ARRAY_STRIDE = 34340; // 0x8624 + field public static final int GL_VERTEX_ATTRIB_ARRAY_TYPE = 34341; // 0x8625 + field public static final int GL_VERTEX_SHADER = 35633; // 0x8b31 + field public static final int GL_VIEWPORT = 2978; // 0xba2 + field public static final int GL_ZERO = 0; // 0x0 + } + + public class GLES30 extends android.opengl.GLES20 { + ctor public GLES30(); + method public static void glBeginQuery(int, int); + method public static void glBeginTransformFeedback(int); + method public static void glBindBufferBase(int, int, int); + method public static void glBindBufferRange(int, int, int, int, int); + method public static void glBindSampler(int, int); + method public static void glBindTransformFeedback(int, int); + method public static void glBindVertexArray(int); + method public static void glBlitFramebuffer(int, int, int, int, int, int, int, int, int, int); + method public static void glClearBufferfi(int, int, float, int); + method public static void glClearBufferfv(int, int, float[], int); + method public static void glClearBufferfv(int, int, java.nio.FloatBuffer); + method public static void glClearBufferiv(int, int, int[], int); + method public static void glClearBufferiv(int, int, java.nio.IntBuffer); + method public static void glClearBufferuiv(int, int, int[], int); + method public static void glClearBufferuiv(int, int, java.nio.IntBuffer); + method public static int glClientWaitSync(long, int, long); + method public static void glCompressedTexImage3D(int, int, int, int, int, int, int, int, java.nio.Buffer); + method public static void glCompressedTexImage3D(int, int, int, int, int, int, int, int, int); + method public static void glCompressedTexSubImage3D(int, int, int, int, int, int, int, int, int, int, java.nio.Buffer); + method public static void glCompressedTexSubImage3D(int, int, int, int, int, int, int, int, int, int, int); + method public static void glCopyBufferSubData(int, int, int, int, int); + method public static void glCopyTexSubImage3D(int, int, int, int, int, int, int, int, int); + method public static void glDeleteQueries(int, int[], int); + method public static void glDeleteQueries(int, java.nio.IntBuffer); + method public static void glDeleteSamplers(int, int[], int); + method public static void glDeleteSamplers(int, java.nio.IntBuffer); + method public static void glDeleteSync(long); + method public static void glDeleteTransformFeedbacks(int, int[], int); + method public static void glDeleteTransformFeedbacks(int, java.nio.IntBuffer); + method public static void glDeleteVertexArrays(int, int[], int); + method public static void glDeleteVertexArrays(int, java.nio.IntBuffer); + method public static void glDrawArraysInstanced(int, int, int, int); + method public static void glDrawBuffers(int, int[], int); + method public static void glDrawBuffers(int, java.nio.IntBuffer); + method public static void glDrawElementsInstanced(int, int, int, java.nio.Buffer, int); + method public static void glDrawElementsInstanced(int, int, int, int, int); + method public static void glDrawRangeElements(int, int, int, int, int, java.nio.Buffer); + method public static void glDrawRangeElements(int, int, int, int, int, int); + method public static void glEndQuery(int); + method public static void glEndTransformFeedback(); + method public static long glFenceSync(int, int); + method public static void glFlushMappedBufferRange(int, int, int); + method public static void glFramebufferTextureLayer(int, int, int, int, int); + method public static void glGenQueries(int, int[], int); + method public static void glGenQueries(int, java.nio.IntBuffer); + method public static void glGenSamplers(int, int[], int); + method public static void glGenSamplers(int, java.nio.IntBuffer); + method public static void glGenTransformFeedbacks(int, int[], int); + method public static void glGenTransformFeedbacks(int, java.nio.IntBuffer); + method public static void glGenVertexArrays(int, int[], int); + method public static void glGenVertexArrays(int, java.nio.IntBuffer); + method public static void glGetActiveUniformBlockName(int, int, int, int[], int, byte[], int); + method public static void glGetActiveUniformBlockName(int, int, java.nio.Buffer, java.nio.Buffer); + method public static java.lang.String glGetActiveUniformBlockName(int, int); + method public static void glGetActiveUniformBlockiv(int, int, int, int[], int); + method public static void glGetActiveUniformBlockiv(int, int, int, java.nio.IntBuffer); + method public static void glGetActiveUniformsiv(int, int, int[], int, int, int[], int); + method public static void glGetActiveUniformsiv(int, int, java.nio.IntBuffer, int, java.nio.IntBuffer); + method public static void glGetBufferParameteri64v(int, int, long[], int); + method public static void glGetBufferParameteri64v(int, int, java.nio.LongBuffer); + method public static java.nio.Buffer glGetBufferPointerv(int, int); + method public static int glGetFragDataLocation(int, java.lang.String); + method public static void glGetInteger64i_v(int, int, long[], int); + method public static void glGetInteger64i_v(int, int, java.nio.LongBuffer); + method public static void glGetInteger64v(int, long[], int); + method public static void glGetInteger64v(int, java.nio.LongBuffer); + method public static void glGetIntegeri_v(int, int, int[], int); + method public static void glGetIntegeri_v(int, int, java.nio.IntBuffer); + method public static void glGetInternalformativ(int, int, int, int, int[], int); + method public static void glGetInternalformativ(int, int, int, int, java.nio.IntBuffer); + method public static void glGetProgramBinary(int, int, int[], int, int[], int, java.nio.Buffer); + method public static void glGetProgramBinary(int, int, java.nio.IntBuffer, java.nio.IntBuffer, java.nio.Buffer); + method public static void glGetQueryObjectuiv(int, int, int[], int); + method public static void glGetQueryObjectuiv(int, int, java.nio.IntBuffer); + method public static void glGetQueryiv(int, int, int[], int); + method public static void glGetQueryiv(int, int, java.nio.IntBuffer); + method public static void glGetSamplerParameterfv(int, int, float[], int); + method public static void glGetSamplerParameterfv(int, int, java.nio.FloatBuffer); + method public static void glGetSamplerParameteriv(int, int, int[], int); + method public static void glGetSamplerParameteriv(int, int, java.nio.IntBuffer); + method public static java.lang.String glGetStringi(int, int); + method public static void glGetSynciv(long, int, int, int[], int, int[], int); + method public static void glGetSynciv(long, int, int, java.nio.IntBuffer, java.nio.IntBuffer); + method public static void glGetTransformFeedbackVarying(int, int, int, int[], int, int[], int, int[], int, byte[], int); + method public static void glGetTransformFeedbackVarying(int, int, int, java.nio.IntBuffer, java.nio.IntBuffer, java.nio.IntBuffer, byte); + method public static java.lang.String glGetTransformFeedbackVarying(int, int, int[], int, int[], int); + method public static java.lang.String glGetTransformFeedbackVarying(int, int, java.nio.IntBuffer, java.nio.IntBuffer); + method public static int glGetUniformBlockIndex(int, java.lang.String); + method public static void glGetUniformIndices(int, java.lang.String[], int[], int); + method public static void glGetUniformIndices(int, java.lang.String[], java.nio.IntBuffer); + method public static void glGetUniformuiv(int, int, int[], int); + method public static void glGetUniformuiv(int, int, java.nio.IntBuffer); + method public static void glGetVertexAttribIiv(int, int, int[], int); + method public static void glGetVertexAttribIiv(int, int, java.nio.IntBuffer); + method public static void glGetVertexAttribIuiv(int, int, int[], int); + method public static void glGetVertexAttribIuiv(int, int, java.nio.IntBuffer); + method public static void glInvalidateFramebuffer(int, int, int[], int); + method public static void glInvalidateFramebuffer(int, int, java.nio.IntBuffer); + method public static void glInvalidateSubFramebuffer(int, int, int[], int, int, int, int, int); + method public static void glInvalidateSubFramebuffer(int, int, java.nio.IntBuffer, int, int, int, int); + method public static boolean glIsQuery(int); + method public static boolean glIsSampler(int); + method public static boolean glIsSync(long); + method public static boolean glIsTransformFeedback(int); + method public static boolean glIsVertexArray(int); + method public static java.nio.Buffer glMapBufferRange(int, int, int, int); + method public static void glPauseTransformFeedback(); + method public static void glProgramBinary(int, int, java.nio.Buffer, int); + method public static void glProgramParameteri(int, int, int); + method public static void glReadBuffer(int); + method public static void glRenderbufferStorageMultisample(int, int, int, int, int); + method public static void glResumeTransformFeedback(); + method public static void glSamplerParameterf(int, int, float); + method public static void glSamplerParameterfv(int, int, float[], int); + method public static void glSamplerParameterfv(int, int, java.nio.FloatBuffer); + method public static void glSamplerParameteri(int, int, int); + method public static void glSamplerParameteriv(int, int, int[], int); + method public static void glSamplerParameteriv(int, int, java.nio.IntBuffer); + method public static void glTexImage3D(int, int, int, int, int, int, int, int, int, java.nio.Buffer); + method public static void glTexImage3D(int, int, int, int, int, int, int, int, int, int); + method public static void glTexStorage2D(int, int, int, int, int); + method public static void glTexStorage3D(int, int, int, int, int, int); + method public static void glTexSubImage3D(int, int, int, int, int, int, int, int, int, int, java.nio.Buffer); + method public static void glTexSubImage3D(int, int, int, int, int, int, int, int, int, int, int); + method public static void glTransformFeedbackVaryings(int, java.lang.String[], int); + method public static void glUniform1ui(int, int); + method public static void glUniform1uiv(int, int, int[], int); + method public static void glUniform1uiv(int, int, java.nio.IntBuffer); + method public static void glUniform2ui(int, int, int); + method public static void glUniform2uiv(int, int, int[], int); + method public static void glUniform2uiv(int, int, java.nio.IntBuffer); + method public static void glUniform3ui(int, int, int, int); + method public static void glUniform3uiv(int, int, int[], int); + method public static void glUniform3uiv(int, int, java.nio.IntBuffer); + method public static void glUniform4ui(int, int, int, int, int); + method public static void glUniform4uiv(int, int, int[], int); + method public static void glUniform4uiv(int, int, java.nio.IntBuffer); + method public static void glUniformBlockBinding(int, int, int); + method public static void glUniformMatrix2x3fv(int, int, boolean, float[], int); + method public static void glUniformMatrix2x3fv(int, int, boolean, java.nio.FloatBuffer); + method public static void glUniformMatrix2x4fv(int, int, boolean, float[], int); + method public static void glUniformMatrix2x4fv(int, int, boolean, java.nio.FloatBuffer); + method public static void glUniformMatrix3x2fv(int, int, boolean, float[], int); + method public static void glUniformMatrix3x2fv(int, int, boolean, java.nio.FloatBuffer); + method public static void glUniformMatrix3x4fv(int, int, boolean, float[], int); + method public static void glUniformMatrix3x4fv(int, int, boolean, java.nio.FloatBuffer); + method public static void glUniformMatrix4x2fv(int, int, boolean, float[], int); + method public static void glUniformMatrix4x2fv(int, int, boolean, java.nio.FloatBuffer); + method public static void glUniformMatrix4x3fv(int, int, boolean, float[], int); + method public static void glUniformMatrix4x3fv(int, int, boolean, java.nio.FloatBuffer); + method public static boolean glUnmapBuffer(int); + method public static void glVertexAttribDivisor(int, int); + method public static void glVertexAttribI4i(int, int, int, int, int); + method public static void glVertexAttribI4iv(int, int[], int); + method public static void glVertexAttribI4iv(int, java.nio.IntBuffer); + method public static void glVertexAttribI4ui(int, int, int, int, int); + method public static void glVertexAttribI4uiv(int, int[], int); + method public static void glVertexAttribI4uiv(int, java.nio.IntBuffer); + method public static void glVertexAttribIPointer(int, int, int, int, java.nio.Buffer); + method public static void glVertexAttribIPointer(int, int, int, int, int); + method public static void glWaitSync(long, int, long); + field public static final int GL_ACTIVE_UNIFORM_BLOCKS = 35382; // 0x8a36 + field public static final int GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH = 35381; // 0x8a35 + field public static final int GL_ALREADY_SIGNALED = 37146; // 0x911a + field public static final int GL_ANY_SAMPLES_PASSED = 35887; // 0x8c2f + field public static final int GL_ANY_SAMPLES_PASSED_CONSERVATIVE = 36202; // 0x8d6a + field public static final int GL_BLUE = 6405; // 0x1905 + field public static final int GL_BUFFER_ACCESS_FLAGS = 37151; // 0x911f + field public static final int GL_BUFFER_MAPPED = 35004; // 0x88bc + field public static final int GL_BUFFER_MAP_LENGTH = 37152; // 0x9120 + field public static final int GL_BUFFER_MAP_OFFSET = 37153; // 0x9121 + field public static final int GL_BUFFER_MAP_POINTER = 35005; // 0x88bd + field public static final int GL_COLOR = 6144; // 0x1800 + field public static final int GL_COLOR_ATTACHMENT1 = 36065; // 0x8ce1 + field public static final int GL_COLOR_ATTACHMENT10 = 36074; // 0x8cea + field public static final int GL_COLOR_ATTACHMENT11 = 36075; // 0x8ceb + field public static final int GL_COLOR_ATTACHMENT12 = 36076; // 0x8cec + field public static final int GL_COLOR_ATTACHMENT13 = 36077; // 0x8ced + field public static final int GL_COLOR_ATTACHMENT14 = 36078; // 0x8cee + field public static final int GL_COLOR_ATTACHMENT15 = 36079; // 0x8cef + field public static final int GL_COLOR_ATTACHMENT2 = 36066; // 0x8ce2 + field public static final int GL_COLOR_ATTACHMENT3 = 36067; // 0x8ce3 + field public static final int GL_COLOR_ATTACHMENT4 = 36068; // 0x8ce4 + field public static final int GL_COLOR_ATTACHMENT5 = 36069; // 0x8ce5 + field public static final int GL_COLOR_ATTACHMENT6 = 36070; // 0x8ce6 + field public static final int GL_COLOR_ATTACHMENT7 = 36071; // 0x8ce7 + field public static final int GL_COLOR_ATTACHMENT8 = 36072; // 0x8ce8 + field public static final int GL_COLOR_ATTACHMENT9 = 36073; // 0x8ce9 + field public static final int GL_COMPARE_REF_TO_TEXTURE = 34894; // 0x884e + field public static final int GL_COMPRESSED_R11_EAC = 37488; // 0x9270 + field public static final int GL_COMPRESSED_RG11_EAC = 37490; // 0x9272 + field public static final int GL_COMPRESSED_RGB8_ETC2 = 37492; // 0x9274 + field public static final int GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 37494; // 0x9276 + field public static final int GL_COMPRESSED_RGBA8_ETC2_EAC = 37496; // 0x9278 + field public static final int GL_COMPRESSED_SIGNED_R11_EAC = 37489; // 0x9271 + field public static final int GL_COMPRESSED_SIGNED_RG11_EAC = 37491; // 0x9273 + field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC = 37497; // 0x9279 + field public static final int GL_COMPRESSED_SRGB8_ETC2 = 37493; // 0x9275 + field public static final int GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 37495; // 0x9277 + field public static final int GL_CONDITION_SATISFIED = 37148; // 0x911c + field public static final int GL_COPY_READ_BUFFER = 36662; // 0x8f36 + field public static final int GL_COPY_READ_BUFFER_BINDING = 36662; // 0x8f36 + field public static final int GL_COPY_WRITE_BUFFER = 36663; // 0x8f37 + field public static final int GL_COPY_WRITE_BUFFER_BINDING = 36663; // 0x8f37 + field public static final int GL_CURRENT_QUERY = 34917; // 0x8865 + field public static final int GL_DEPTH = 6145; // 0x1801 + field public static final int GL_DEPTH24_STENCIL8 = 35056; // 0x88f0 + field public static final int GL_DEPTH32F_STENCIL8 = 36013; // 0x8cad + field public static final int GL_DEPTH_COMPONENT24 = 33190; // 0x81a6 + field public static final int GL_DEPTH_COMPONENT32F = 36012; // 0x8cac + field public static final int GL_DEPTH_STENCIL = 34041; // 0x84f9 + field public static final int GL_DEPTH_STENCIL_ATTACHMENT = 33306; // 0x821a + field public static final int GL_DRAW_BUFFER0 = 34853; // 0x8825 + field public static final int GL_DRAW_BUFFER1 = 34854; // 0x8826 + field public static final int GL_DRAW_BUFFER10 = 34863; // 0x882f + field public static final int GL_DRAW_BUFFER11 = 34864; // 0x8830 + field public static final int GL_DRAW_BUFFER12 = 34865; // 0x8831 + field public static final int GL_DRAW_BUFFER13 = 34866; // 0x8832 + field public static final int GL_DRAW_BUFFER14 = 34867; // 0x8833 + field public static final int GL_DRAW_BUFFER15 = 34868; // 0x8834 + field public static final int GL_DRAW_BUFFER2 = 34855; // 0x8827 + field public static final int GL_DRAW_BUFFER3 = 34856; // 0x8828 + field public static final int GL_DRAW_BUFFER4 = 34857; // 0x8829 + field public static final int GL_DRAW_BUFFER5 = 34858; // 0x882a + field public static final int GL_DRAW_BUFFER6 = 34859; // 0x882b + field public static final int GL_DRAW_BUFFER7 = 34860; // 0x882c + field public static final int GL_DRAW_BUFFER8 = 34861; // 0x882d + field public static final int GL_DRAW_BUFFER9 = 34862; // 0x882e + field public static final int GL_DRAW_FRAMEBUFFER = 36009; // 0x8ca9 + field public static final int GL_DRAW_FRAMEBUFFER_BINDING = 36006; // 0x8ca6 + field public static final int GL_DYNAMIC_COPY = 35050; // 0x88ea + field public static final int GL_DYNAMIC_READ = 35049; // 0x88e9 + field public static final int GL_FLOAT_32_UNSIGNED_INT_24_8_REV = 36269; // 0x8dad + field public static final int GL_FLOAT_MAT2x3 = 35685; // 0x8b65 + field public static final int GL_FLOAT_MAT2x4 = 35686; // 0x8b66 + field public static final int GL_FLOAT_MAT3x2 = 35687; // 0x8b67 + field public static final int GL_FLOAT_MAT3x4 = 35688; // 0x8b68 + field public static final int GL_FLOAT_MAT4x2 = 35689; // 0x8b69 + field public static final int GL_FLOAT_MAT4x3 = 35690; // 0x8b6a + field public static final int GL_FRAGMENT_SHADER_DERIVATIVE_HINT = 35723; // 0x8b8b + field public static final int GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE = 33301; // 0x8215 + field public static final int GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE = 33300; // 0x8214 + field public static final int GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING = 33296; // 0x8210 + field public static final int GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE = 33297; // 0x8211 + field public static final int GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE = 33302; // 0x8216 + field public static final int GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE = 33299; // 0x8213 + field public static final int GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE = 33298; // 0x8212 + field public static final int GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE = 33303; // 0x8217 + field public static final int GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER = 36052; // 0x8cd4 + field public static final int GL_FRAMEBUFFER_DEFAULT = 33304; // 0x8218 + field public static final int GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE = 36182; // 0x8d56 + field public static final int GL_FRAMEBUFFER_UNDEFINED = 33305; // 0x8219 + field public static final int GL_GREEN = 6404; // 0x1904 + field public static final int GL_HALF_FLOAT = 5131; // 0x140b + field public static final int GL_INTERLEAVED_ATTRIBS = 35980; // 0x8c8c + field public static final int GL_INT_2_10_10_10_REV = 36255; // 0x8d9f + field public static final int GL_INT_SAMPLER_2D = 36298; // 0x8dca + field public static final int GL_INT_SAMPLER_2D_ARRAY = 36303; // 0x8dcf + field public static final int GL_INT_SAMPLER_3D = 36299; // 0x8dcb + field public static final int GL_INT_SAMPLER_CUBE = 36300; // 0x8dcc + field public static final int GL_INVALID_INDEX = -1; // 0xffffffff + field public static final int GL_MAJOR_VERSION = 33307; // 0x821b + field public static final int GL_MAP_FLUSH_EXPLICIT_BIT = 16; // 0x10 + field public static final int GL_MAP_INVALIDATE_BUFFER_BIT = 8; // 0x8 + field public static final int GL_MAP_INVALIDATE_RANGE_BIT = 4; // 0x4 + field public static final int GL_MAP_READ_BIT = 1; // 0x1 + field public static final int GL_MAP_UNSYNCHRONIZED_BIT = 32; // 0x20 + field public static final int GL_MAP_WRITE_BIT = 2; // 0x2 + field public static final int GL_MAX = 32776; // 0x8008 + field public static final int GL_MAX_3D_TEXTURE_SIZE = 32883; // 0x8073 + field public static final int GL_MAX_ARRAY_TEXTURE_LAYERS = 35071; // 0x88ff + field public static final int GL_MAX_COLOR_ATTACHMENTS = 36063; // 0x8cdf + field public static final int GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS = 35379; // 0x8a33 + field public static final int GL_MAX_COMBINED_UNIFORM_BLOCKS = 35374; // 0x8a2e + field public static final int GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS = 35377; // 0x8a31 + field public static final int GL_MAX_DRAW_BUFFERS = 34852; // 0x8824 + field public static final int GL_MAX_ELEMENTS_INDICES = 33001; // 0x80e9 + field public static final int GL_MAX_ELEMENTS_VERTICES = 33000; // 0x80e8 + field public static final int GL_MAX_ELEMENT_INDEX = 36203; // 0x8d6b + field public static final int GL_MAX_FRAGMENT_INPUT_COMPONENTS = 37157; // 0x9125 + field public static final int GL_MAX_FRAGMENT_UNIFORM_BLOCKS = 35373; // 0x8a2d + field public static final int GL_MAX_FRAGMENT_UNIFORM_COMPONENTS = 35657; // 0x8b49 + field public static final int GL_MAX_PROGRAM_TEXEL_OFFSET = 35077; // 0x8905 + field public static final int GL_MAX_SAMPLES = 36183; // 0x8d57 + field public static final int GL_MAX_SERVER_WAIT_TIMEOUT = 37137; // 0x9111 + field public static final int GL_MAX_TEXTURE_LOD_BIAS = 34045; // 0x84fd + field public static final int GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS = 35978; // 0x8c8a + field public static final int GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS = 35979; // 0x8c8b + field public static final int GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS = 35968; // 0x8c80 + field public static final int GL_MAX_UNIFORM_BLOCK_SIZE = 35376; // 0x8a30 + field public static final int GL_MAX_UNIFORM_BUFFER_BINDINGS = 35375; // 0x8a2f + field public static final int GL_MAX_VARYING_COMPONENTS = 35659; // 0x8b4b + field public static final int GL_MAX_VERTEX_OUTPUT_COMPONENTS = 37154; // 0x9122 + field public static final int GL_MAX_VERTEX_UNIFORM_BLOCKS = 35371; // 0x8a2b + field public static final int GL_MAX_VERTEX_UNIFORM_COMPONENTS = 35658; // 0x8b4a + field public static final int GL_MIN = 32775; // 0x8007 + field public static final int GL_MINOR_VERSION = 33308; // 0x821c + field public static final int GL_MIN_PROGRAM_TEXEL_OFFSET = 35076; // 0x8904 + field public static final int GL_NUM_EXTENSIONS = 33309; // 0x821d + field public static final int GL_NUM_PROGRAM_BINARY_FORMATS = 34814; // 0x87fe + field public static final int GL_NUM_SAMPLE_COUNTS = 37760; // 0x9380 + field public static final int GL_OBJECT_TYPE = 37138; // 0x9112 + field public static final int GL_PACK_ROW_LENGTH = 3330; // 0xd02 + field public static final int GL_PACK_SKIP_PIXELS = 3332; // 0xd04 + field public static final int GL_PACK_SKIP_ROWS = 3331; // 0xd03 + field public static final int GL_PIXEL_PACK_BUFFER = 35051; // 0x88eb + field public static final int GL_PIXEL_PACK_BUFFER_BINDING = 35053; // 0x88ed + field public static final int GL_PIXEL_UNPACK_BUFFER = 35052; // 0x88ec + field public static final int GL_PIXEL_UNPACK_BUFFER_BINDING = 35055; // 0x88ef + field public static final int GL_PRIMITIVE_RESTART_FIXED_INDEX = 36201; // 0x8d69 + field public static final int GL_PROGRAM_BINARY_FORMATS = 34815; // 0x87ff + field public static final int GL_PROGRAM_BINARY_LENGTH = 34625; // 0x8741 + field public static final int GL_PROGRAM_BINARY_RETRIEVABLE_HINT = 33367; // 0x8257 + field public static final int GL_QUERY_RESULT = 34918; // 0x8866 + field public static final int GL_QUERY_RESULT_AVAILABLE = 34919; // 0x8867 + field public static final int GL_R11F_G11F_B10F = 35898; // 0x8c3a + field public static final int GL_R16F = 33325; // 0x822d + field public static final int GL_R16I = 33331; // 0x8233 + field public static final int GL_R16UI = 33332; // 0x8234 + field public static final int GL_R32F = 33326; // 0x822e + field public static final int GL_R32I = 33333; // 0x8235 + field public static final int GL_R32UI = 33334; // 0x8236 + field public static final int GL_R8 = 33321; // 0x8229 + field public static final int GL_R8I = 33329; // 0x8231 + field public static final int GL_R8UI = 33330; // 0x8232 + field public static final int GL_R8_SNORM = 36756; // 0x8f94 + field public static final int GL_RASTERIZER_DISCARD = 35977; // 0x8c89 + field public static final int GL_READ_BUFFER = 3074; // 0xc02 + field public static final int GL_READ_FRAMEBUFFER = 36008; // 0x8ca8 + field public static final int GL_READ_FRAMEBUFFER_BINDING = 36010; // 0x8caa + field public static final int GL_RED = 6403; // 0x1903 + field public static final int GL_RED_INTEGER = 36244; // 0x8d94 + field public static final int GL_RENDERBUFFER_SAMPLES = 36011; // 0x8cab + field public static final int GL_RG = 33319; // 0x8227 + field public static final int GL_RG16F = 33327; // 0x822f + field public static final int GL_RG16I = 33337; // 0x8239 + field public static final int GL_RG16UI = 33338; // 0x823a + field public static final int GL_RG32F = 33328; // 0x8230 + field public static final int GL_RG32I = 33339; // 0x823b + field public static final int GL_RG32UI = 33340; // 0x823c + field public static final int GL_RG8 = 33323; // 0x822b + field public static final int GL_RG8I = 33335; // 0x8237 + field public static final int GL_RG8UI = 33336; // 0x8238 + field public static final int GL_RG8_SNORM = 36757; // 0x8f95 + field public static final int GL_RGB10_A2 = 32857; // 0x8059 + field public static final int GL_RGB10_A2UI = 36975; // 0x906f + field public static final int GL_RGB16F = 34843; // 0x881b + field public static final int GL_RGB16I = 36233; // 0x8d89 + field public static final int GL_RGB16UI = 36215; // 0x8d77 + field public static final int GL_RGB32F = 34837; // 0x8815 + field public static final int GL_RGB32I = 36227; // 0x8d83 + field public static final int GL_RGB32UI = 36209; // 0x8d71 + field public static final int GL_RGB8 = 32849; // 0x8051 + field public static final int GL_RGB8I = 36239; // 0x8d8f + field public static final int GL_RGB8UI = 36221; // 0x8d7d + field public static final int GL_RGB8_SNORM = 36758; // 0x8f96 + field public static final int GL_RGB9_E5 = 35901; // 0x8c3d + field public static final int GL_RGBA16F = 34842; // 0x881a + field public static final int GL_RGBA16I = 36232; // 0x8d88 + field public static final int GL_RGBA16UI = 36214; // 0x8d76 + field public static final int GL_RGBA32F = 34836; // 0x8814 + field public static final int GL_RGBA32I = 36226; // 0x8d82 + field public static final int GL_RGBA32UI = 36208; // 0x8d70 + field public static final int GL_RGBA8 = 32856; // 0x8058 + field public static final int GL_RGBA8I = 36238; // 0x8d8e + field public static final int GL_RGBA8UI = 36220; // 0x8d7c + field public static final int GL_RGBA8_SNORM = 36759; // 0x8f97 + field public static final int GL_RGBA_INTEGER = 36249; // 0x8d99 + field public static final int GL_RGB_INTEGER = 36248; // 0x8d98 + field public static final int GL_RG_INTEGER = 33320; // 0x8228 + field public static final int GL_SAMPLER_2D_ARRAY = 36289; // 0x8dc1 + field public static final int GL_SAMPLER_2D_ARRAY_SHADOW = 36292; // 0x8dc4 + field public static final int GL_SAMPLER_2D_SHADOW = 35682; // 0x8b62 + field public static final int GL_SAMPLER_3D = 35679; // 0x8b5f + field public static final int GL_SAMPLER_BINDING = 35097; // 0x8919 + field public static final int GL_SAMPLER_CUBE_SHADOW = 36293; // 0x8dc5 + field public static final int GL_SEPARATE_ATTRIBS = 35981; // 0x8c8d + field public static final int GL_SIGNALED = 37145; // 0x9119 + field public static final int GL_SIGNED_NORMALIZED = 36764; // 0x8f9c + field public static final int GL_SRGB = 35904; // 0x8c40 + field public static final int GL_SRGB8 = 35905; // 0x8c41 + field public static final int GL_SRGB8_ALPHA8 = 35907; // 0x8c43 + field public static final int GL_STATIC_COPY = 35046; // 0x88e6 + field public static final int GL_STATIC_READ = 35045; // 0x88e5 + field public static final int GL_STENCIL = 6146; // 0x1802 + field public static final int GL_STREAM_COPY = 35042; // 0x88e2 + field public static final int GL_STREAM_READ = 35041; // 0x88e1 + field public static final int GL_SYNC_CONDITION = 37139; // 0x9113 + field public static final int GL_SYNC_FENCE = 37142; // 0x9116 + field public static final int GL_SYNC_FLAGS = 37141; // 0x9115 + field public static final int GL_SYNC_FLUSH_COMMANDS_BIT = 1; // 0x1 + field public static final int GL_SYNC_GPU_COMMANDS_COMPLETE = 37143; // 0x9117 + field public static final int GL_SYNC_STATUS = 37140; // 0x9114 + field public static final int GL_TEXTURE_2D_ARRAY = 35866; // 0x8c1a + field public static final int GL_TEXTURE_3D = 32879; // 0x806f + field public static final int GL_TEXTURE_BASE_LEVEL = 33084; // 0x813c + field public static final int GL_TEXTURE_BINDING_2D_ARRAY = 35869; // 0x8c1d + field public static final int GL_TEXTURE_BINDING_3D = 32874; // 0x806a + field public static final int GL_TEXTURE_COMPARE_FUNC = 34893; // 0x884d + field public static final int GL_TEXTURE_COMPARE_MODE = 34892; // 0x884c + field public static final int GL_TEXTURE_IMMUTABLE_FORMAT = 37167; // 0x912f + field public static final int GL_TEXTURE_IMMUTABLE_LEVELS = 33503; // 0x82df + field public static final int GL_TEXTURE_MAX_LEVEL = 33085; // 0x813d + field public static final int GL_TEXTURE_MAX_LOD = 33083; // 0x813b + field public static final int GL_TEXTURE_MIN_LOD = 33082; // 0x813a + field public static final int GL_TEXTURE_SWIZZLE_A = 36421; // 0x8e45 + field public static final int GL_TEXTURE_SWIZZLE_B = 36420; // 0x8e44 + field public static final int GL_TEXTURE_SWIZZLE_G = 36419; // 0x8e43 + field public static final int GL_TEXTURE_SWIZZLE_R = 36418; // 0x8e42 + field public static final int GL_TEXTURE_WRAP_R = 32882; // 0x8072 + field public static final int GL_TIMEOUT_EXPIRED = 37147; // 0x911b + field public static final long GL_TIMEOUT_IGNORED = -1L; // 0xffffffffffffffffL + field public static final int GL_TRANSFORM_FEEDBACK = 36386; // 0x8e22 + field public static final int GL_TRANSFORM_FEEDBACK_ACTIVE = 36388; // 0x8e24 + field public static final int GL_TRANSFORM_FEEDBACK_BINDING = 36389; // 0x8e25 + field public static final int GL_TRANSFORM_FEEDBACK_BUFFER = 35982; // 0x8c8e + field public static final int GL_TRANSFORM_FEEDBACK_BUFFER_BINDING = 35983; // 0x8c8f + field public static final int GL_TRANSFORM_FEEDBACK_BUFFER_MODE = 35967; // 0x8c7f + field public static final int GL_TRANSFORM_FEEDBACK_BUFFER_SIZE = 35973; // 0x8c85 + field public static final int GL_TRANSFORM_FEEDBACK_BUFFER_START = 35972; // 0x8c84 + field public static final int GL_TRANSFORM_FEEDBACK_PAUSED = 36387; // 0x8e23 + field public static final int GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN = 35976; // 0x8c88 + field public static final int GL_TRANSFORM_FEEDBACK_VARYINGS = 35971; // 0x8c83 + field public static final int GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH = 35958; // 0x8c76 + field public static final int GL_UNIFORM_ARRAY_STRIDE = 35388; // 0x8a3c + field public static final int GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS = 35394; // 0x8a42 + field public static final int GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES = 35395; // 0x8a43 + field public static final int GL_UNIFORM_BLOCK_BINDING = 35391; // 0x8a3f + field public static final int GL_UNIFORM_BLOCK_DATA_SIZE = 35392; // 0x8a40 + field public static final int GL_UNIFORM_BLOCK_INDEX = 35386; // 0x8a3a + field public static final int GL_UNIFORM_BLOCK_NAME_LENGTH = 35393; // 0x8a41 + field public static final int GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER = 35398; // 0x8a46 + field public static final int GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER = 35396; // 0x8a44 + field public static final int GL_UNIFORM_BUFFER = 35345; // 0x8a11 + field public static final int GL_UNIFORM_BUFFER_BINDING = 35368; // 0x8a28 + field public static final int GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT = 35380; // 0x8a34 + field public static final int GL_UNIFORM_BUFFER_SIZE = 35370; // 0x8a2a + field public static final int GL_UNIFORM_BUFFER_START = 35369; // 0x8a29 + field public static final int GL_UNIFORM_IS_ROW_MAJOR = 35390; // 0x8a3e + field public static final int GL_UNIFORM_MATRIX_STRIDE = 35389; // 0x8a3d + field public static final int GL_UNIFORM_NAME_LENGTH = 35385; // 0x8a39 + field public static final int GL_UNIFORM_OFFSET = 35387; // 0x8a3b + field public static final int GL_UNIFORM_SIZE = 35384; // 0x8a38 + field public static final int GL_UNIFORM_TYPE = 35383; // 0x8a37 + field public static final int GL_UNPACK_IMAGE_HEIGHT = 32878; // 0x806e + field public static final int GL_UNPACK_ROW_LENGTH = 3314; // 0xcf2 + field public static final int GL_UNPACK_SKIP_IMAGES = 32877; // 0x806d + field public static final int GL_UNPACK_SKIP_PIXELS = 3316; // 0xcf4 + field public static final int GL_UNPACK_SKIP_ROWS = 3315; // 0xcf3 + field public static final int GL_UNSIGNALED = 37144; // 0x9118 + field public static final int GL_UNSIGNED_INT_10F_11F_11F_REV = 35899; // 0x8c3b + field public static final int GL_UNSIGNED_INT_24_8 = 34042; // 0x84fa + field public static final int GL_UNSIGNED_INT_2_10_10_10_REV = 33640; // 0x8368 + field public static final int GL_UNSIGNED_INT_5_9_9_9_REV = 35902; // 0x8c3e + field public static final int GL_UNSIGNED_INT_SAMPLER_2D = 36306; // 0x8dd2 + field public static final int GL_UNSIGNED_INT_SAMPLER_2D_ARRAY = 36311; // 0x8dd7 + field public static final int GL_UNSIGNED_INT_SAMPLER_3D = 36307; // 0x8dd3 + field public static final int GL_UNSIGNED_INT_SAMPLER_CUBE = 36308; // 0x8dd4 + field public static final int GL_UNSIGNED_INT_VEC2 = 36294; // 0x8dc6 + field public static final int GL_UNSIGNED_INT_VEC3 = 36295; // 0x8dc7 + field public static final int GL_UNSIGNED_INT_VEC4 = 36296; // 0x8dc8 + field public static final int GL_UNSIGNED_NORMALIZED = 35863; // 0x8c17 + field public static final int GL_VERTEX_ARRAY_BINDING = 34229; // 0x85b5 + field public static final int GL_VERTEX_ATTRIB_ARRAY_DIVISOR = 35070; // 0x88fe + field public static final int GL_VERTEX_ATTRIB_ARRAY_INTEGER = 35069; // 0x88fd + field public static final int GL_WAIT_FAILED = 37149; // 0x911d + } + + public class GLES31 extends android.opengl.GLES30 { + method public static void glActiveShaderProgram(int, int); + method public static void glBindImageTexture(int, int, int, boolean, int, int, int); + method public static void glBindProgramPipeline(int); + method public static void glBindVertexBuffer(int, int, long, int); + method public static int glCreateShaderProgramv(int, java.lang.String[]); + method public static void glDeleteProgramPipelines(int, int[], int); + method public static void glDeleteProgramPipelines(int, java.nio.IntBuffer); + method public static void glDispatchCompute(int, int, int); + method public static void glDispatchComputeIndirect(long); + method public static void glDrawArraysIndirect(int, long); + method public static void glDrawElementsIndirect(int, int, long); + method public static void glFramebufferParameteri(int, int, int); + method public static void glGenProgramPipelines(int, int[], int); + method public static void glGenProgramPipelines(int, java.nio.IntBuffer); + method public static void glGetBooleani_v(int, int, boolean[], int); + method public static void glGetBooleani_v(int, int, java.nio.IntBuffer); + method public static void glGetFramebufferParameteriv(int, int, int[], int); + method public static void glGetFramebufferParameteriv(int, int, java.nio.IntBuffer); + method public static void glGetMultisamplefv(int, int, float[], int); + method public static void glGetMultisamplefv(int, int, java.nio.FloatBuffer); + method public static void glGetProgramInterfaceiv(int, int, int, int[], int); + method public static void glGetProgramInterfaceiv(int, int, int, java.nio.IntBuffer); + method public static java.lang.String glGetProgramPipelineInfoLog(int); + method public static void glGetProgramPipelineiv(int, int, int[], int); + method public static void glGetProgramPipelineiv(int, int, java.nio.IntBuffer); + method public static int glGetProgramResourceIndex(int, int, java.lang.String); + method public static int glGetProgramResourceLocation(int, int, java.lang.String); + method public static java.lang.String glGetProgramResourceName(int, int, int); + method public static void glGetProgramResourceiv(int, int, int, int, int[], int, int, int[], int, int[], int); + method public static void glGetProgramResourceiv(int, int, int, int, java.nio.IntBuffer, int, java.nio.IntBuffer, java.nio.IntBuffer); + method public static void glGetTexLevelParameterfv(int, int, int, float[], int); + method public static void glGetTexLevelParameterfv(int, int, int, java.nio.FloatBuffer); + method public static void glGetTexLevelParameteriv(int, int, int, int[], int); + method public static void glGetTexLevelParameteriv(int, int, int, java.nio.IntBuffer); + method public static boolean glIsProgramPipeline(int); + method public static void glMemoryBarrier(int); + method public static void glMemoryBarrierByRegion(int); + method public static void glProgramUniform1f(int, int, float); + method public static void glProgramUniform1fv(int, int, int, float[], int); + method public static void glProgramUniform1fv(int, int, int, java.nio.FloatBuffer); + method public static void glProgramUniform1i(int, int, int); + method public static void glProgramUniform1iv(int, int, int, int[], int); + method public static void glProgramUniform1iv(int, int, int, java.nio.IntBuffer); + method public static void glProgramUniform1ui(int, int, int); + method public static void glProgramUniform1uiv(int, int, int, int[], int); + method public static void glProgramUniform1uiv(int, int, int, java.nio.IntBuffer); + method public static void glProgramUniform2f(int, int, float, float); + method public static void glProgramUniform2fv(int, int, int, float[], int); + method public static void glProgramUniform2fv(int, int, int, java.nio.FloatBuffer); + method public static void glProgramUniform2i(int, int, int, int); + method public static void glProgramUniform2iv(int, int, int, int[], int); + method public static void glProgramUniform2iv(int, int, int, java.nio.IntBuffer); + method public static void glProgramUniform2ui(int, int, int, int); + method public static void glProgramUniform2uiv(int, int, int, int[], int); + method public static void glProgramUniform2uiv(int, int, int, java.nio.IntBuffer); + method public static void glProgramUniform3f(int, int, float, float, float); + method public static void glProgramUniform3fv(int, int, int, float[], int); + method public static void glProgramUniform3fv(int, int, int, java.nio.FloatBuffer); + method public static void glProgramUniform3i(int, int, int, int, int); + method public static void glProgramUniform3iv(int, int, int, int[], int); + method public static void glProgramUniform3iv(int, int, int, java.nio.IntBuffer); + method public static void glProgramUniform3ui(int, int, int, int, int); + method public static void glProgramUniform3uiv(int, int, int, int[], int); + method public static void glProgramUniform3uiv(int, int, int, java.nio.IntBuffer); + method public static void glProgramUniform4f(int, int, float, float, float, float); + method public static void glProgramUniform4fv(int, int, int, float[], int); + method public static void glProgramUniform4fv(int, int, int, java.nio.FloatBuffer); + method public static void glProgramUniform4i(int, int, int, int, int, int); + method public static void glProgramUniform4iv(int, int, int, int[], int); + method public static void glProgramUniform4iv(int, int, int, java.nio.IntBuffer); + method public static void glProgramUniform4ui(int, int, int, int, int, int); + method public static void glProgramUniform4uiv(int, int, int, int[], int); + method public static void glProgramUniform4uiv(int, int, int, java.nio.IntBuffer); + method public static void glProgramUniformMatrix2fv(int, int, int, boolean, float[], int); + method public static void glProgramUniformMatrix2fv(int, int, int, boolean, java.nio.FloatBuffer); + method public static void glProgramUniformMatrix2x3fv(int, int, int, boolean, float[], int); + method public static void glProgramUniformMatrix2x3fv(int, int, int, boolean, java.nio.FloatBuffer); + method public static void glProgramUniformMatrix2x4fv(int, int, int, boolean, float[], int); + method public static void glProgramUniformMatrix2x4fv(int, int, int, boolean, java.nio.FloatBuffer); + method public static void glProgramUniformMatrix3fv(int, int, int, boolean, float[], int); + method public static void glProgramUniformMatrix3fv(int, int, int, boolean, java.nio.FloatBuffer); + method public static void glProgramUniformMatrix3x2fv(int, int, int, boolean, float[], int); + method public static void glProgramUniformMatrix3x2fv(int, int, int, boolean, java.nio.FloatBuffer); + method public static void glProgramUniformMatrix3x4fv(int, int, int, boolean, float[], int); + method public static void glProgramUniformMatrix3x4fv(int, int, int, boolean, java.nio.FloatBuffer); + method public static void glProgramUniformMatrix4fv(int, int, int, boolean, float[], int); + method public static void glProgramUniformMatrix4fv(int, int, int, boolean, java.nio.FloatBuffer); + method public static void glProgramUniformMatrix4x2fv(int, int, int, boolean, float[], int); + method public static void glProgramUniformMatrix4x2fv(int, int, int, boolean, java.nio.FloatBuffer); + method public static void glProgramUniformMatrix4x3fv(int, int, int, boolean, float[], int); + method public static void glProgramUniformMatrix4x3fv(int, int, int, boolean, java.nio.FloatBuffer); + method public static void glSampleMaski(int, int); + method public static void glTexStorage2DMultisample(int, int, int, int, int, boolean); + method public static void glUseProgramStages(int, int, int); + method public static void glValidateProgramPipeline(int); + method public static void glVertexAttribBinding(int, int); + method public static void glVertexAttribFormat(int, int, int, boolean, int); + method public static void glVertexAttribIFormat(int, int, int, int); + method public static void glVertexBindingDivisor(int, int); + field public static final int GL_ACTIVE_ATOMIC_COUNTER_BUFFERS = 37593; // 0x92d9 + field public static final int GL_ACTIVE_PROGRAM = 33369; // 0x8259 + field public static final int GL_ACTIVE_RESOURCES = 37621; // 0x92f5 + field public static final int GL_ACTIVE_VARIABLES = 37637; // 0x9305 + field public static final int GL_ALL_SHADER_BITS = -1; // 0xffffffff + field public static final int GL_ARRAY_SIZE = 37627; // 0x92fb + field public static final int GL_ARRAY_STRIDE = 37630; // 0x92fe + field public static final int GL_ATOMIC_COUNTER_BARRIER_BIT = 4096; // 0x1000 + field public static final int GL_ATOMIC_COUNTER_BUFFER = 37568; // 0x92c0 + field public static final int GL_ATOMIC_COUNTER_BUFFER_BINDING = 37569; // 0x92c1 + field public static final int GL_ATOMIC_COUNTER_BUFFER_INDEX = 37633; // 0x9301 + field public static final int GL_ATOMIC_COUNTER_BUFFER_SIZE = 37571; // 0x92c3 + field public static final int GL_ATOMIC_COUNTER_BUFFER_START = 37570; // 0x92c2 + field public static final int GL_BLOCK_INDEX = 37629; // 0x92fd + field public static final int GL_BUFFER_BINDING = 37634; // 0x9302 + field public static final int GL_BUFFER_DATA_SIZE = 37635; // 0x9303 + field public static final int GL_BUFFER_UPDATE_BARRIER_BIT = 512; // 0x200 + field public static final int GL_BUFFER_VARIABLE = 37605; // 0x92e5 + field public static final int GL_COMMAND_BARRIER_BIT = 64; // 0x40 + field public static final int GL_COMPUTE_SHADER = 37305; // 0x91b9 + field public static final int GL_COMPUTE_SHADER_BIT = 32; // 0x20 + field public static final int GL_COMPUTE_WORK_GROUP_SIZE = 33383; // 0x8267 + field public static final int GL_DEPTH_STENCIL_TEXTURE_MODE = 37098; // 0x90ea + field public static final int GL_DISPATCH_INDIRECT_BUFFER = 37102; // 0x90ee + field public static final int GL_DISPATCH_INDIRECT_BUFFER_BINDING = 37103; // 0x90ef + field public static final int GL_DRAW_INDIRECT_BUFFER = 36671; // 0x8f3f + field public static final int GL_DRAW_INDIRECT_BUFFER_BINDING = 36675; // 0x8f43 + field public static final int GL_FRAGMENT_SHADER_BIT = 2; // 0x2 + field public static final int GL_FRAMEBUFFER_BARRIER_BIT = 1024; // 0x400 + field public static final int GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS = 37652; // 0x9314 + field public static final int GL_FRAMEBUFFER_DEFAULT_HEIGHT = 37649; // 0x9311 + field public static final int GL_FRAMEBUFFER_DEFAULT_SAMPLES = 37651; // 0x9313 + field public static final int GL_FRAMEBUFFER_DEFAULT_WIDTH = 37648; // 0x9310 + field public static final int GL_IMAGE_2D = 36941; // 0x904d + field public static final int GL_IMAGE_2D_ARRAY = 36947; // 0x9053 + field public static final int GL_IMAGE_3D = 36942; // 0x904e + field public static final int GL_IMAGE_BINDING_ACCESS = 36670; // 0x8f3e + field public static final int GL_IMAGE_BINDING_FORMAT = 36974; // 0x906e + field public static final int GL_IMAGE_BINDING_LAYER = 36669; // 0x8f3d + field public static final int GL_IMAGE_BINDING_LAYERED = 36668; // 0x8f3c + field public static final int GL_IMAGE_BINDING_LEVEL = 36667; // 0x8f3b + field public static final int GL_IMAGE_BINDING_NAME = 36666; // 0x8f3a + field public static final int GL_IMAGE_CUBE = 36944; // 0x9050 + field public static final int GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS = 37065; // 0x90c9 + field public static final int GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE = 37064; // 0x90c8 + field public static final int GL_IMAGE_FORMAT_COMPATIBILITY_TYPE = 37063; // 0x90c7 + field public static final int GL_INT_IMAGE_2D = 36952; // 0x9058 + field public static final int GL_INT_IMAGE_2D_ARRAY = 36958; // 0x905e + field public static final int GL_INT_IMAGE_3D = 36953; // 0x9059 + field public static final int GL_INT_IMAGE_CUBE = 36955; // 0x905b + field public static final int GL_INT_SAMPLER_2D_MULTISAMPLE = 37129; // 0x9109 + field public static final int GL_IS_ROW_MAJOR = 37632; // 0x9300 + field public static final int GL_LOCATION = 37646; // 0x930e + field public static final int GL_MATRIX_STRIDE = 37631; // 0x92ff + field public static final int GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS = 37596; // 0x92dc + field public static final int GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE = 37592; // 0x92d8 + field public static final int GL_MAX_COLOR_TEXTURE_SAMPLES = 37134; // 0x910e + field public static final int GL_MAX_COMBINED_ATOMIC_COUNTERS = 37591; // 0x92d7 + field public static final int GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS = 37585; // 0x92d1 + field public static final int GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS = 33382; // 0x8266 + field public static final int GL_MAX_COMBINED_IMAGE_UNIFORMS = 37071; // 0x90cf + field public static final int GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES = 36665; // 0x8f39 + field public static final int GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS = 37084; // 0x90dc + field public static final int GL_MAX_COMPUTE_ATOMIC_COUNTERS = 33381; // 0x8265 + field public static final int GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS = 33380; // 0x8264 + field public static final int GL_MAX_COMPUTE_IMAGE_UNIFORMS = 37309; // 0x91bd + field public static final int GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS = 37083; // 0x90db + field public static final int GL_MAX_COMPUTE_SHARED_MEMORY_SIZE = 33378; // 0x8262 + field public static final int GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS = 37308; // 0x91bc + field public static final int GL_MAX_COMPUTE_UNIFORM_BLOCKS = 37307; // 0x91bb + field public static final int GL_MAX_COMPUTE_UNIFORM_COMPONENTS = 33379; // 0x8263 + field public static final int GL_MAX_COMPUTE_WORK_GROUP_COUNT = 37310; // 0x91be + field public static final int GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS = 37099; // 0x90eb + field public static final int GL_MAX_COMPUTE_WORK_GROUP_SIZE = 37311; // 0x91bf + field public static final int GL_MAX_DEPTH_TEXTURE_SAMPLES = 37135; // 0x910f + field public static final int GL_MAX_FRAGMENT_ATOMIC_COUNTERS = 37590; // 0x92d6 + field public static final int GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS = 37584; // 0x92d0 + field public static final int GL_MAX_FRAGMENT_IMAGE_UNIFORMS = 37070; // 0x90ce + field public static final int GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS = 37082; // 0x90da + field public static final int GL_MAX_FRAMEBUFFER_HEIGHT = 37654; // 0x9316 + field public static final int GL_MAX_FRAMEBUFFER_SAMPLES = 37656; // 0x9318 + field public static final int GL_MAX_FRAMEBUFFER_WIDTH = 37653; // 0x9315 + field public static final int GL_MAX_IMAGE_UNITS = 36664; // 0x8f38 + field public static final int GL_MAX_INTEGER_SAMPLES = 37136; // 0x9110 + field public static final int GL_MAX_NAME_LENGTH = 37622; // 0x92f6 + field public static final int GL_MAX_NUM_ACTIVE_VARIABLES = 37623; // 0x92f7 + field public static final int GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET = 36447; // 0x8e5f + field public static final int GL_MAX_SAMPLE_MASK_WORDS = 36441; // 0x8e59 + field public static final int GL_MAX_SHADER_STORAGE_BLOCK_SIZE = 37086; // 0x90de + field public static final int GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS = 37085; // 0x90dd + field public static final int GL_MAX_UNIFORM_LOCATIONS = 33390; // 0x826e + field public static final int GL_MAX_VERTEX_ATOMIC_COUNTERS = 37586; // 0x92d2 + field public static final int GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS = 37580; // 0x92cc + field public static final int GL_MAX_VERTEX_ATTRIB_BINDINGS = 33498; // 0x82da + field public static final int GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET = 33497; // 0x82d9 + field public static final int GL_MAX_VERTEX_ATTRIB_STRIDE = 33509; // 0x82e5 + field public static final int GL_MAX_VERTEX_IMAGE_UNIFORMS = 37066; // 0x90ca + field public static final int GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS = 37078; // 0x90d6 + field public static final int GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET = 36446; // 0x8e5e + field public static final int GL_NAME_LENGTH = 37625; // 0x92f9 + field public static final int GL_NUM_ACTIVE_VARIABLES = 37636; // 0x9304 + field public static final int GL_OFFSET = 37628; // 0x92fc + field public static final int GL_PIXEL_BUFFER_BARRIER_BIT = 128; // 0x80 + field public static final int GL_PROGRAM_INPUT = 37603; // 0x92e3 + field public static final int GL_PROGRAM_OUTPUT = 37604; // 0x92e4 + field public static final int GL_PROGRAM_PIPELINE_BINDING = 33370; // 0x825a + field public static final int GL_PROGRAM_SEPARABLE = 33368; // 0x8258 + field public static final int GL_READ_ONLY = 35000; // 0x88b8 + field public static final int GL_READ_WRITE = 35002; // 0x88ba + field public static final int GL_REFERENCED_BY_COMPUTE_SHADER = 37643; // 0x930b + field public static final int GL_REFERENCED_BY_FRAGMENT_SHADER = 37642; // 0x930a + field public static final int GL_REFERENCED_BY_VERTEX_SHADER = 37638; // 0x9306 + field public static final int GL_SAMPLER_2D_MULTISAMPLE = 37128; // 0x9108 + field public static final int GL_SAMPLE_MASK = 36433; // 0x8e51 + field public static final int GL_SAMPLE_MASK_VALUE = 36434; // 0x8e52 + field public static final int GL_SAMPLE_POSITION = 36432; // 0x8e50 + field public static final int GL_SHADER_STORAGE_BARRIER_BIT = 8192; // 0x2000 + field public static final int GL_SHADER_STORAGE_BLOCK = 37606; // 0x92e6 + field public static final int GL_SHADER_STORAGE_BUFFER = 37074; // 0x90d2 + field public static final int GL_SHADER_STORAGE_BUFFER_BINDING = 37075; // 0x90d3 + field public static final int GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT = 37087; // 0x90df + field public static final int GL_SHADER_STORAGE_BUFFER_SIZE = 37077; // 0x90d5 + field public static final int GL_SHADER_STORAGE_BUFFER_START = 37076; // 0x90d4 + field public static final int GL_STENCIL_INDEX = 6401; // 0x1901 + field public static final int GL_TEXTURE_2D_MULTISAMPLE = 37120; // 0x9100 + field public static final int GL_TEXTURE_ALPHA_SIZE = 32863; // 0x805f + field public static final int GL_TEXTURE_ALPHA_TYPE = 35859; // 0x8c13 + field public static final int GL_TEXTURE_BINDING_2D_MULTISAMPLE = 37124; // 0x9104 + field public static final int GL_TEXTURE_BLUE_SIZE = 32862; // 0x805e + field public static final int GL_TEXTURE_BLUE_TYPE = 35858; // 0x8c12 + field public static final int GL_TEXTURE_COMPRESSED = 34465; // 0x86a1 + field public static final int GL_TEXTURE_DEPTH = 32881; // 0x8071 + field public static final int GL_TEXTURE_DEPTH_SIZE = 34890; // 0x884a + field public static final int GL_TEXTURE_DEPTH_TYPE = 35862; // 0x8c16 + field public static final int GL_TEXTURE_FETCH_BARRIER_BIT = 8; // 0x8 + field public static final int GL_TEXTURE_FIXED_SAMPLE_LOCATIONS = 37127; // 0x9107 + field public static final int GL_TEXTURE_GREEN_SIZE = 32861; // 0x805d + field public static final int GL_TEXTURE_GREEN_TYPE = 35857; // 0x8c11 + field public static final int GL_TEXTURE_HEIGHT = 4097; // 0x1001 + field public static final int GL_TEXTURE_INTERNAL_FORMAT = 4099; // 0x1003 + field public static final int GL_TEXTURE_RED_SIZE = 32860; // 0x805c + field public static final int GL_TEXTURE_RED_TYPE = 35856; // 0x8c10 + field public static final int GL_TEXTURE_SAMPLES = 37126; // 0x9106 + field public static final int GL_TEXTURE_SHARED_SIZE = 35903; // 0x8c3f + field public static final int GL_TEXTURE_STENCIL_SIZE = 35057; // 0x88f1 + field public static final int GL_TEXTURE_UPDATE_BARRIER_BIT = 256; // 0x100 + field public static final int GL_TEXTURE_WIDTH = 4096; // 0x1000 + field public static final int GL_TOP_LEVEL_ARRAY_SIZE = 37644; // 0x930c + field public static final int GL_TOP_LEVEL_ARRAY_STRIDE = 37645; // 0x930d + field public static final int GL_TRANSFORM_FEEDBACK_BARRIER_BIT = 2048; // 0x800 + field public static final int GL_TRANSFORM_FEEDBACK_VARYING = 37620; // 0x92f4 + field public static final int GL_TYPE = 37626; // 0x92fa + field public static final int GL_UNIFORM = 37601; // 0x92e1 + field public static final int GL_UNIFORM_BARRIER_BIT = 4; // 0x4 + field public static final int GL_UNIFORM_BLOCK = 37602; // 0x92e2 + field public static final int GL_UNSIGNED_INT_ATOMIC_COUNTER = 37595; // 0x92db + field public static final int GL_UNSIGNED_INT_IMAGE_2D = 36963; // 0x9063 + field public static final int GL_UNSIGNED_INT_IMAGE_2D_ARRAY = 36969; // 0x9069 + field public static final int GL_UNSIGNED_INT_IMAGE_3D = 36964; // 0x9064 + field public static final int GL_UNSIGNED_INT_IMAGE_CUBE = 36966; // 0x9066 + field public static final int GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE = 37130; // 0x910a + field public static final int GL_VERTEX_ATTRIB_BINDING = 33492; // 0x82d4 + field public static final int GL_VERTEX_ATTRIB_RELATIVE_OFFSET = 33493; // 0x82d5 + field public static final int GL_VERTEX_BINDING_BUFFER = 36687; // 0x8f4f + field public static final int GL_VERTEX_BINDING_DIVISOR = 33494; // 0x82d6 + field public static final int GL_VERTEX_BINDING_OFFSET = 33495; // 0x82d7 + field public static final int GL_VERTEX_BINDING_STRIDE = 33496; // 0x82d8 + field public static final int GL_VERTEX_SHADER_BIT = 1; // 0x1 + field public static final int GL_WRITE_ONLY = 35001; // 0x88b9 + } + + public class GLES31Ext { + method public static void glBlendBarrierKHR(); + method public static void glBlendEquationSeparateiEXT(int, int, int); + method public static void glBlendEquationiEXT(int, int); + method public static void glBlendFuncSeparateiEXT(int, int, int, int, int); + method public static void glBlendFunciEXT(int, int, int); + method public static void glColorMaskiEXT(int, boolean, boolean, boolean, boolean); + method public static void glCopyImageSubDataEXT(int, int, int, int, int, int, int, int, int, int, int, int, int, int, int); + method public static void glDebugMessageCallbackKHR(android.opengl.GLES31Ext.DebugProcKHR); + method public static void glDebugMessageControlKHR(int, int, int, int, int[], int, boolean); + method public static void glDebugMessageControlKHR(int, int, int, int, java.nio.IntBuffer, boolean); + method public static void glDebugMessageInsertKHR(int, int, int, int, java.lang.String); + method public static void glDisableiEXT(int, int); + method public static void glEnableiEXT(int, int); + method public static void glFramebufferTextureEXT(int, int, int, int); + method public static android.opengl.GLES31Ext.DebugProcKHR glGetDebugMessageCallbackKHR(); + method public static int glGetDebugMessageLogKHR(int, int, int[], int, int[], int, int[], int, int[], int, int[], int, byte[], int); + method public static int glGetDebugMessageLogKHR(int, java.nio.IntBuffer, java.nio.IntBuffer, java.nio.IntBuffer, java.nio.IntBuffer, java.nio.IntBuffer, java.nio.ByteBuffer); + method public static java.lang.String[] glGetDebugMessageLogKHR(int, int[], int, int[], int, int[], int, int[], int); + method public static java.lang.String[] glGetDebugMessageLogKHR(int, java.nio.IntBuffer, java.nio.IntBuffer, java.nio.IntBuffer, java.nio.IntBuffer); + method public static java.lang.String glGetObjectLabelKHR(int, int); + method public static java.lang.String glGetObjectPtrLabelKHR(long); + method public static void glGetSamplerParameterIivEXT(int, int, int[], int); + method public static void glGetSamplerParameterIivEXT(int, int, java.nio.IntBuffer); + method public static void glGetSamplerParameterIuivEXT(int, int, int[], int); + method public static void glGetSamplerParameterIuivEXT(int, int, java.nio.IntBuffer); + method public static void glGetTexParameterIivEXT(int, int, int[], int); + method public static void glGetTexParameterIivEXT(int, int, java.nio.IntBuffer); + method public static void glGetTexParameterIuivEXT(int, int, int[], int); + method public static void glGetTexParameterIuivEXT(int, int, java.nio.IntBuffer); + method public static boolean glIsEnablediEXT(int, int); + method public static void glMinSampleShadingOES(float); + method public static void glObjectLabelKHR(int, int, int, java.lang.String); + method public static void glObjectPtrLabelKHR(long, java.lang.String); + method public static void glPatchParameteriEXT(int, int); + method public static void glPopDebugGroupKHR(); + method public static void glPrimitiveBoundingBoxEXT(float, float, float, float, float, float, float, float); + method public static void glPushDebugGroupKHR(int, int, int, java.lang.String); + method public static void glSamplerParameterIivEXT(int, int, int[], int); + method public static void glSamplerParameterIivEXT(int, int, java.nio.IntBuffer); + method public static void glSamplerParameterIuivEXT(int, int, int[], int); + method public static void glSamplerParameterIuivEXT(int, int, java.nio.IntBuffer); + method public static void glTexBufferEXT(int, int, int); + method public static void glTexBufferRangeEXT(int, int, int, int, int); + method public static void glTexParameterIivEXT(int, int, int[], int); + method public static void glTexParameterIivEXT(int, int, java.nio.IntBuffer); + method public static void glTexParameterIuivEXT(int, int, int[], int); + method public static void glTexParameterIuivEXT(int, int, java.nio.IntBuffer); + method public static void glTexStorage3DMultisampleOES(int, int, int, int, int, int, boolean); + field public static final int GL_BLEND_ADVANCED_COHERENT_KHR = 37509; // 0x9285 + field public static final int GL_BUFFER_KHR = 33504; // 0x82e0 + field public static final int GL_CLAMP_TO_BORDER_EXT = 33069; // 0x812d + field public static final int GL_COLORBURN_KHR = 37530; // 0x929a + field public static final int GL_COLORDODGE_KHR = 37529; // 0x9299 + field public static final int GL_COMPRESSED_RGBA_ASTC_10x10_KHR = 37819; // 0x93bb + field public static final int GL_COMPRESSED_RGBA_ASTC_10x5_KHR = 37816; // 0x93b8 + field public static final int GL_COMPRESSED_RGBA_ASTC_10x6_KHR = 37817; // 0x93b9 + field public static final int GL_COMPRESSED_RGBA_ASTC_10x8_KHR = 37818; // 0x93ba + field public static final int GL_COMPRESSED_RGBA_ASTC_12x10_KHR = 37820; // 0x93bc + field public static final int GL_COMPRESSED_RGBA_ASTC_12x12_KHR = 37821; // 0x93bd + field public static final int GL_COMPRESSED_RGBA_ASTC_4x4_KHR = 37808; // 0x93b0 + field public static final int GL_COMPRESSED_RGBA_ASTC_5x4_KHR = 37809; // 0x93b1 + field public static final int GL_COMPRESSED_RGBA_ASTC_5x5_KHR = 37810; // 0x93b2 + field public static final int GL_COMPRESSED_RGBA_ASTC_6x5_KHR = 37811; // 0x93b3 + field public static final int GL_COMPRESSED_RGBA_ASTC_6x6_KHR = 37812; // 0x93b4 + field public static final int GL_COMPRESSED_RGBA_ASTC_8x5_KHR = 37813; // 0x93b5 + field public static final int GL_COMPRESSED_RGBA_ASTC_8x6_KHR = 37814; // 0x93b6 + field public static final int GL_COMPRESSED_RGBA_ASTC_8x8_KHR = 37815; // 0x93b7 + field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR = 37851; // 0x93db + field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR = 37848; // 0x93d8 + field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR = 37849; // 0x93d9 + field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR = 37850; // 0x93da + field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR = 37852; // 0x93dc + field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR = 37853; // 0x93dd + field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR = 37840; // 0x93d0 + field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR = 37841; // 0x93d1 + field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR = 37842; // 0x93d2 + field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR = 37843; // 0x93d3 + field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR = 37844; // 0x93d4 + field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR = 37845; // 0x93d5 + field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR = 37846; // 0x93d6 + field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR = 37847; // 0x93d7 + field public static final int GL_CONTEXT_FLAG_DEBUG_BIT_KHR = 2; // 0x2 + field public static final int GL_DARKEN_KHR = 37527; // 0x9297 + field public static final int GL_DEBUG_CALLBACK_FUNCTION_KHR = 33348; // 0x8244 + field public static final int GL_DEBUG_CALLBACK_USER_PARAM_KHR = 33349; // 0x8245 + field public static final int GL_DEBUG_GROUP_STACK_DEPTH_KHR = 33389; // 0x826d + field public static final int GL_DEBUG_LOGGED_MESSAGES_KHR = 37189; // 0x9145 + field public static final int GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_KHR = 33347; // 0x8243 + field public static final int GL_DEBUG_OUTPUT_KHR = 37600; // 0x92e0 + field public static final int GL_DEBUG_OUTPUT_SYNCHRONOUS_KHR = 33346; // 0x8242 + field public static final int GL_DEBUG_SEVERITY_HIGH_KHR = 37190; // 0x9146 + field public static final int GL_DEBUG_SEVERITY_LOW_KHR = 37192; // 0x9148 + field public static final int GL_DEBUG_SEVERITY_MEDIUM_KHR = 37191; // 0x9147 + field public static final int GL_DEBUG_SEVERITY_NOTIFICATION_KHR = 33387; // 0x826b + field public static final int GL_DEBUG_SOURCE_API_KHR = 33350; // 0x8246 + field public static final int GL_DEBUG_SOURCE_APPLICATION_KHR = 33354; // 0x824a + field public static final int GL_DEBUG_SOURCE_OTHER_KHR = 33355; // 0x824b + field public static final int GL_DEBUG_SOURCE_SHADER_COMPILER_KHR = 33352; // 0x8248 + field public static final int GL_DEBUG_SOURCE_THIRD_PARTY_KHR = 33353; // 0x8249 + field public static final int GL_DEBUG_SOURCE_WINDOW_SYSTEM_KHR = 33351; // 0x8247 + field public static final int GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_KHR = 33357; // 0x824d + field public static final int GL_DEBUG_TYPE_ERROR_KHR = 33356; // 0x824c + field public static final int GL_DEBUG_TYPE_MARKER_KHR = 33384; // 0x8268 + field public static final int GL_DEBUG_TYPE_OTHER_KHR = 33361; // 0x8251 + field public static final int GL_DEBUG_TYPE_PERFORMANCE_KHR = 33360; // 0x8250 + field public static final int GL_DEBUG_TYPE_POP_GROUP_KHR = 33386; // 0x826a + field public static final int GL_DEBUG_TYPE_PORTABILITY_KHR = 33359; // 0x824f + field public static final int GL_DEBUG_TYPE_PUSH_GROUP_KHR = 33385; // 0x8269 + field public static final int GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_KHR = 33358; // 0x824e + field public static final int GL_DECODE_EXT = 35401; // 0x8a49 + field public static final int GL_DIFFERENCE_KHR = 37534; // 0x929e + field public static final int GL_EXCLUSION_KHR = 37536; // 0x92a0 + field public static final int GL_FIRST_VERTEX_CONVENTION_EXT = 36429; // 0x8e4d + field public static final int GL_FRACTIONAL_EVEN_EXT = 36476; // 0x8e7c + field public static final int GL_FRACTIONAL_ODD_EXT = 36475; // 0x8e7b + field public static final int GL_FRAGMENT_INTERPOLATION_OFFSET_BITS_OES = 36445; // 0x8e5d + field public static final int GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT = 36263; // 0x8da7 + field public static final int GL_FRAMEBUFFER_DEFAULT_LAYERS_EXT = 37650; // 0x9312 + field public static final int GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT = 36264; // 0x8da8 + field public static final int GL_GEOMETRY_LINKED_INPUT_TYPE_EXT = 35095; // 0x8917 + field public static final int GL_GEOMETRY_LINKED_OUTPUT_TYPE_EXT = 35096; // 0x8918 + field public static final int GL_GEOMETRY_LINKED_VERTICES_OUT_EXT = 35094; // 0x8916 + field public static final int GL_GEOMETRY_SHADER_BIT_EXT = 4; // 0x4 + field public static final int GL_GEOMETRY_SHADER_EXT = 36313; // 0x8dd9 + field public static final int GL_GEOMETRY_SHADER_INVOCATIONS_EXT = 34943; // 0x887f + field public static final int GL_HARDLIGHT_KHR = 37531; // 0x929b + field public static final int GL_HSL_COLOR_KHR = 37551; // 0x92af + field public static final int GL_HSL_HUE_KHR = 37549; // 0x92ad + field public static final int GL_HSL_LUMINOSITY_KHR = 37552; // 0x92b0 + field public static final int GL_HSL_SATURATION_KHR = 37550; // 0x92ae + field public static final int GL_IMAGE_BUFFER_EXT = 36945; // 0x9051 + field public static final int GL_IMAGE_CUBE_MAP_ARRAY_EXT = 36948; // 0x9054 + field public static final int GL_INT_IMAGE_BUFFER_EXT = 36956; // 0x905c + field public static final int GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT = 36959; // 0x905f + field public static final int GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY_OES = 37132; // 0x910c + field public static final int GL_INT_SAMPLER_BUFFER_EXT = 36304; // 0x8dd0 + field public static final int GL_INT_SAMPLER_CUBE_MAP_ARRAY_EXT = 36878; // 0x900e + field public static final int GL_ISOLINES_EXT = 36474; // 0x8e7a + field public static final int GL_IS_PER_PATCH_EXT = 37607; // 0x92e7 + field public static final int GL_LAST_VERTEX_CONVENTION_EXT = 36430; // 0x8e4e + field public static final int GL_LAYER_PROVOKING_VERTEX_EXT = 33374; // 0x825e + field public static final int GL_LIGHTEN_KHR = 37528; // 0x9298 + field public static final int GL_LINES_ADJACENCY_EXT = 10; // 0xa + field public static final int GL_LINE_STRIP_ADJACENCY_EXT = 11; // 0xb + field public static final int GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS_EXT = 35378; // 0x8a32 + field public static final int GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS_EXT = 36382; // 0x8e1e + field public static final int GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS_EXT = 36383; // 0x8e1f + field public static final int GL_MAX_DEBUG_GROUP_STACK_DEPTH_KHR = 33388; // 0x826c + field public static final int GL_MAX_DEBUG_LOGGED_MESSAGES_KHR = 37188; // 0x9144 + field public static final int GL_MAX_DEBUG_MESSAGE_LENGTH_KHR = 37187; // 0x9143 + field public static final int GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_OES = 36444; // 0x8e5c + field public static final int GL_MAX_FRAMEBUFFER_LAYERS_EXT = 37655; // 0x9317 + field public static final int GL_MAX_GEOMETRY_ATOMIC_COUNTERS_EXT = 37589; // 0x92d5 + field public static final int GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS_EXT = 37583; // 0x92cf + field public static final int GL_MAX_GEOMETRY_IMAGE_UNIFORMS_EXT = 37069; // 0x90cd + field public static final int GL_MAX_GEOMETRY_INPUT_COMPONENTS_EXT = 37155; // 0x9123 + field public static final int GL_MAX_GEOMETRY_OUTPUT_COMPONENTS_EXT = 37156; // 0x9124 + field public static final int GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT = 36320; // 0x8de0 + field public static final int GL_MAX_GEOMETRY_SHADER_INVOCATIONS_EXT = 36442; // 0x8e5a + field public static final int GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS_EXT = 37079; // 0x90d7 + field public static final int GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT = 35881; // 0x8c29 + field public static final int GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT = 36321; // 0x8de1 + field public static final int GL_MAX_GEOMETRY_UNIFORM_BLOCKS_EXT = 35372; // 0x8a2c + field public static final int GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT = 36319; // 0x8ddf + field public static final int GL_MAX_LABEL_LENGTH_KHR = 33512; // 0x82e8 + field public static final int GL_MAX_PATCH_VERTICES_EXT = 36477; // 0x8e7d + field public static final int GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS_EXT = 37587; // 0x92d3 + field public static final int GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS_EXT = 37581; // 0x92cd + field public static final int GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS_EXT = 37067; // 0x90cb + field public static final int GL_MAX_TESS_CONTROL_INPUT_COMPONENTS_EXT = 34924; // 0x886c + field public static final int GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS_EXT = 36483; // 0x8e83 + field public static final int GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS_EXT = 37080; // 0x90d8 + field public static final int GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS_EXT = 36481; // 0x8e81 + field public static final int GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS_EXT = 36485; // 0x8e85 + field public static final int GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS_EXT = 36489; // 0x8e89 + field public static final int GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS_EXT = 36479; // 0x8e7f + field public static final int GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS_EXT = 37588; // 0x92d4 + field public static final int GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS_EXT = 37582; // 0x92ce + field public static final int GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS_EXT = 37068; // 0x90cc + field public static final int GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS_EXT = 34925; // 0x886d + field public static final int GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS_EXT = 36486; // 0x8e86 + field public static final int GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS_EXT = 37081; // 0x90d9 + field public static final int GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS_EXT = 36482; // 0x8e82 + field public static final int GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS_EXT = 36490; // 0x8e8a + field public static final int GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS_EXT = 36480; // 0x8e80 + field public static final int GL_MAX_TESS_GEN_LEVEL_EXT = 36478; // 0x8e7e + field public static final int GL_MAX_TESS_PATCH_COMPONENTS_EXT = 36484; // 0x8e84 + field public static final int GL_MAX_TEXTURE_BUFFER_SIZE_EXT = 35883; // 0x8c2b + field public static final int GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_OES = 36443; // 0x8e5b + field public static final int GL_MIN_SAMPLE_SHADING_VALUE_OES = 35895; // 0x8c37 + field public static final int GL_MULTIPLY_KHR = 37524; // 0x9294 + field public static final int GL_OVERLAY_KHR = 37526; // 0x9296 + field public static final int GL_PATCHES_EXT = 14; // 0xe + field public static final int GL_PATCH_VERTICES_EXT = 36466; // 0x8e72 + field public static final int GL_PRIMITIVES_GENERATED_EXT = 35975; // 0x8c87 + field public static final int GL_PRIMITIVE_BOUNDING_BOX_EXT = 37566; // 0x92be + field public static final int GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED = 33313; // 0x8221 + field public static final int GL_PROGRAM_KHR = 33506; // 0x82e2 + field public static final int GL_QUADS_EXT = 7; // 0x7 + field public static final int GL_QUERY_KHR = 33507; // 0x82e3 + field public static final int GL_REFERENCED_BY_GEOMETRY_SHADER_EXT = 37641; // 0x9309 + field public static final int GL_REFERENCED_BY_TESS_CONTROL_SHADER_EXT = 37639; // 0x9307 + field public static final int GL_REFERENCED_BY_TESS_EVALUATION_SHADER_EXT = 37640; // 0x9308 + field public static final int GL_SAMPLER_2D_MULTISAMPLE_ARRAY_OES = 37131; // 0x910b + field public static final int GL_SAMPLER_BUFFER_EXT = 36290; // 0x8dc2 + field public static final int GL_SAMPLER_CUBE_MAP_ARRAY_EXT = 36876; // 0x900c + field public static final int GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_EXT = 36877; // 0x900d + field public static final int GL_SAMPLER_KHR = 33510; // 0x82e6 + field public static final int GL_SAMPLE_SHADING_OES = 35894; // 0x8c36 + field public static final int GL_SCREEN_KHR = 37525; // 0x9295 + field public static final int GL_SHADER_KHR = 33505; // 0x82e1 + field public static final int GL_SKIP_DECODE_EXT = 35402; // 0x8a4a + field public static final int GL_SOFTLIGHT_KHR = 37532; // 0x929c + field public static final int GL_STACK_OVERFLOW_KHR = 1283; // 0x503 + field public static final int GL_STACK_UNDERFLOW_KHR = 1284; // 0x504 + field public static final int GL_STENCIL_INDEX8_OES = 36168; // 0x8d48 + field public static final int GL_STENCIL_INDEX_OES = 6401; // 0x1901 + field public static final int GL_TESS_CONTROL_OUTPUT_VERTICES_EXT = 36469; // 0x8e75 + field public static final int GL_TESS_CONTROL_SHADER_BIT_EXT = 8; // 0x8 + field public static final int GL_TESS_CONTROL_SHADER_EXT = 36488; // 0x8e88 + field public static final int GL_TESS_EVALUATION_SHADER_BIT_EXT = 16; // 0x10 + field public static final int GL_TESS_EVALUATION_SHADER_EXT = 36487; // 0x8e87 + field public static final int GL_TESS_GEN_MODE_EXT = 36470; // 0x8e76 + field public static final int GL_TESS_GEN_POINT_MODE_EXT = 36473; // 0x8e79 + field public static final int GL_TESS_GEN_SPACING_EXT = 36471; // 0x8e77 + field public static final int GL_TESS_GEN_VERTEX_ORDER_EXT = 36472; // 0x8e78 + field public static final int GL_TEXTURE_2D_MULTISAMPLE_ARRAY_OES = 37122; // 0x9102 + field public static final int GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY_OES = 37125; // 0x9105 + field public static final int GL_TEXTURE_BINDING_BUFFER_EXT = 35884; // 0x8c2c + field public static final int GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_EXT = 36874; // 0x900a + field public static final int GL_TEXTURE_BORDER_COLOR_EXT = 4100; // 0x1004 + field public static final int GL_TEXTURE_BUFFER_BINDING_EXT = 35882; // 0x8c2a + field public static final int GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT = 35885; // 0x8c2d + field public static final int GL_TEXTURE_BUFFER_EXT = 35882; // 0x8c2a + field public static final int GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT_EXT = 37279; // 0x919f + field public static final int GL_TEXTURE_BUFFER_OFFSET_EXT = 37277; // 0x919d + field public static final int GL_TEXTURE_BUFFER_SIZE_EXT = 37278; // 0x919e + field public static final int GL_TEXTURE_CUBE_MAP_ARRAY_EXT = 36873; // 0x9009 + field public static final int GL_TEXTURE_SRGB_DECODE_EXT = 35400; // 0x8a48 + field public static final int GL_TRIANGLES_ADJACENCY_EXT = 12; // 0xc + field public static final int GL_TRIANGLE_STRIP_ADJACENCY_EXT = 13; // 0xd + field public static final int GL_UNDEFINED_VERTEX_EXT = 33376; // 0x8260 + field public static final int GL_UNSIGNED_INT_IMAGE_BUFFER_EXT = 36967; // 0x9067 + field public static final int GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT = 36970; // 0x906a + field public static final int GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY_OES = 37133; // 0x910d + field public static final int GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT = 36312; // 0x8dd8 + field public static final int GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_EXT = 36879; // 0x900f + field public static final int GL_VERTEX_ARRAY_KHR = 32884; // 0x8074 + } + + public static abstract interface GLES31Ext.DebugProcKHR { + method public abstract void onMessage(int, int, int, int, java.lang.String); + } + + public class GLException extends java.lang.RuntimeException { + ctor public GLException(int); + ctor public GLException(int, java.lang.String); + } + + public class GLSurfaceView extends android.view.SurfaceView implements android.view.SurfaceHolder.Callback { + ctor public GLSurfaceView(android.content.Context); + ctor public GLSurfaceView(android.content.Context, android.util.AttributeSet); + method public int getDebugFlags(); + method public boolean getPreserveEGLContextOnPause(); + method public int getRenderMode(); + method public void onPause(); + method public void onResume(); + method public void queueEvent(java.lang.Runnable); + method public void requestRender(); + method public void setDebugFlags(int); + method public void setEGLConfigChooser(android.opengl.GLSurfaceView.EGLConfigChooser); + method public void setEGLConfigChooser(boolean); + method public void setEGLConfigChooser(int, int, int, int, int, int); + method public void setEGLContextClientVersion(int); + method public void setEGLContextFactory(android.opengl.GLSurfaceView.EGLContextFactory); + method public void setEGLWindowSurfaceFactory(android.opengl.GLSurfaceView.EGLWindowSurfaceFactory); + method public void setGLWrapper(android.opengl.GLSurfaceView.GLWrapper); + method public void setPreserveEGLContextOnPause(boolean); + method public void setRenderMode(int); + method public void setRenderer(android.opengl.GLSurfaceView.Renderer); + method public void surfaceChanged(android.view.SurfaceHolder, int, int, int); + method public void surfaceCreated(android.view.SurfaceHolder); + method public void surfaceDestroyed(android.view.SurfaceHolder); + field public static final int DEBUG_CHECK_GL_ERROR = 1; // 0x1 + field public static final int DEBUG_LOG_GL_CALLS = 2; // 0x2 + field public static final int RENDERMODE_CONTINUOUSLY = 1; // 0x1 + field public static final int RENDERMODE_WHEN_DIRTY = 0; // 0x0 + } + + public static abstract interface GLSurfaceView.EGLConfigChooser { + method public abstract javax.microedition.khronos.egl.EGLConfig chooseConfig(javax.microedition.khronos.egl.EGL10, javax.microedition.khronos.egl.EGLDisplay); + } + + public static abstract interface GLSurfaceView.EGLContextFactory { + method public abstract javax.microedition.khronos.egl.EGLContext createContext(javax.microedition.khronos.egl.EGL10, javax.microedition.khronos.egl.EGLDisplay, javax.microedition.khronos.egl.EGLConfig); + method public abstract void destroyContext(javax.microedition.khronos.egl.EGL10, javax.microedition.khronos.egl.EGLDisplay, javax.microedition.khronos.egl.EGLContext); + } + + public static abstract interface GLSurfaceView.EGLWindowSurfaceFactory { + method public abstract javax.microedition.khronos.egl.EGLSurface createWindowSurface(javax.microedition.khronos.egl.EGL10, javax.microedition.khronos.egl.EGLDisplay, javax.microedition.khronos.egl.EGLConfig, java.lang.Object); + method public abstract void destroySurface(javax.microedition.khronos.egl.EGL10, javax.microedition.khronos.egl.EGLDisplay, javax.microedition.khronos.egl.EGLSurface); + } + + public static abstract interface GLSurfaceView.GLWrapper { + method public abstract javax.microedition.khronos.opengles.GL wrap(javax.microedition.khronos.opengles.GL); + } + + public static abstract interface GLSurfaceView.Renderer { + method public abstract void onDrawFrame(javax.microedition.khronos.opengles.GL10); + method public abstract void onSurfaceChanged(javax.microedition.khronos.opengles.GL10, int, int); + method public abstract void onSurfaceCreated(javax.microedition.khronos.opengles.GL10, javax.microedition.khronos.egl.EGLConfig); + } + + public class GLU { + ctor public GLU(); + method public static java.lang.String gluErrorString(int); + method public static void gluLookAt(javax.microedition.khronos.opengles.GL10, float, float, float, float, float, float, float, float, float); + method public static void gluOrtho2D(javax.microedition.khronos.opengles.GL10, float, float, float, float); + method public static void gluPerspective(javax.microedition.khronos.opengles.GL10, float, float, float, float); + method public static int gluProject(float, float, float, float[], int, float[], int, int[], int, float[], int); + method public static int gluUnProject(float, float, float, float[], int, float[], int, int[], int, float[], int); + } + + public final class GLUtils { + method public static java.lang.String getEGLErrorString(int); + method public static int getInternalFormat(android.graphics.Bitmap); + method public static int getType(android.graphics.Bitmap); + method public static void texImage2D(int, int, int, android.graphics.Bitmap, int); + method public static void texImage2D(int, int, int, android.graphics.Bitmap, int, int); + method public static void texImage2D(int, int, android.graphics.Bitmap, int); + method public static void texSubImage2D(int, int, int, int, android.graphics.Bitmap); + method public static void texSubImage2D(int, int, int, int, android.graphics.Bitmap, int, int); + } + + public class Matrix { + ctor public deprecated Matrix(); + method public static void frustumM(float[], int, float, float, float, float, float, float); + method public static boolean invertM(float[], int, float[], int); + method public static float length(float, float, float); + method public static void multiplyMM(float[], int, float[], int, float[], int); + method public static void multiplyMV(float[], int, float[], int, float[], int); + method public static void orthoM(float[], int, float, float, float, float, float, float); + method public static void perspectiveM(float[], int, float, float, float, float); + method public static void rotateM(float[], int, float[], int, float, float, float, float); + method public static void rotateM(float[], int, float, float, float, float); + method public static void scaleM(float[], int, float[], int, float, float, float); + method public static void scaleM(float[], int, float, float, float); + method public static void setIdentityM(float[], int); + method public static void setLookAtM(float[], int, float, float, float, float, float, float, float, float, float); + method public static void setRotateEulerM(float[], int, float, float, float); + method public static void setRotateM(float[], int, float, float, float, float); + method public static void translateM(float[], int, float[], int, float, float, float); + method public static void translateM(float[], int, float, float, float); + method public static void transposeM(float[], int, float[], int); + } + + public class Visibility { + ctor public Visibility(); + method public static void computeBoundingSphere(float[], int, int, float[], int); + method public static int frustumCullSpheres(float[], int, float[], int, int, int[], int, int); + method public static int visibilityTest(float[], int, float[], int, char[], int, int); + } + +} + +package android.os { + + public abstract class AsyncTask { + ctor public AsyncTask(); + method public final boolean cancel(boolean); + method protected abstract Result doInBackground(Params...); + method public final android.os.AsyncTask execute(Params...); + method public static void execute(java.lang.Runnable); + method public final android.os.AsyncTask executeOnExecutor(java.util.concurrent.Executor, Params...); + method public final Result get() throws java.util.concurrent.ExecutionException, java.lang.InterruptedException; + method public final Result get(long, java.util.concurrent.TimeUnit) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException, java.util.concurrent.TimeoutException; + method public final android.os.AsyncTask.Status getStatus(); + method public final boolean isCancelled(); + method protected void onCancelled(Result); + method protected void onCancelled(); + method protected void onPostExecute(Result); + method protected void onPreExecute(); + method protected void onProgressUpdate(Progress...); + method protected final void publishProgress(Progress...); + field public static final java.util.concurrent.Executor SERIAL_EXECUTOR; + field public static final java.util.concurrent.Executor THREAD_POOL_EXECUTOR; + } + + public static final class AsyncTask.Status extends java.lang.Enum { + method public static android.os.AsyncTask.Status valueOf(java.lang.String); + method public static final android.os.AsyncTask.Status[] values(); + enum_constant public static final android.os.AsyncTask.Status FINISHED; + enum_constant public static final android.os.AsyncTask.Status PENDING; + enum_constant public static final android.os.AsyncTask.Status RUNNING; + } + + public class BadParcelableException extends android.util.AndroidRuntimeException { + ctor public BadParcelableException(java.lang.String); + ctor public BadParcelableException(java.lang.Exception); + } + + public class BaseBundle { + method public void clear(); + method public boolean containsKey(java.lang.String); + method public java.lang.Object get(java.lang.String); + method public boolean getBoolean(java.lang.String); + method public boolean getBoolean(java.lang.String, boolean); + method public boolean[] getBooleanArray(java.lang.String); + method public double getDouble(java.lang.String); + method public double getDouble(java.lang.String, double); + method public double[] getDoubleArray(java.lang.String); + method public int getInt(java.lang.String); + method public int getInt(java.lang.String, int); + method public int[] getIntArray(java.lang.String); + method public long getLong(java.lang.String); + method public long getLong(java.lang.String, long); + method public long[] getLongArray(java.lang.String); + method public java.lang.String getString(java.lang.String); + method public java.lang.String getString(java.lang.String, java.lang.String); + method public java.lang.String[] getStringArray(java.lang.String); + method public boolean isEmpty(); + method public java.util.Set keySet(); + method public void putAll(android.os.PersistableBundle); + method public void putBoolean(java.lang.String, boolean); + method public void putBooleanArray(java.lang.String, boolean[]); + method public void putDouble(java.lang.String, double); + method public void putDoubleArray(java.lang.String, double[]); + method public void putInt(java.lang.String, int); + method public void putIntArray(java.lang.String, int[]); + method public void putLong(java.lang.String, long); + method public void putLongArray(java.lang.String, long[]); + method public void putString(java.lang.String, java.lang.String); + method public void putStringArray(java.lang.String, java.lang.String[]); + method public void remove(java.lang.String); + method public int size(); + } + + public class BatteryManager { + ctor public BatteryManager(); + method public int getIntProperty(int); + method public long getLongProperty(int); + field public static final int BATTERY_HEALTH_COLD = 7; // 0x7 + field public static final int BATTERY_HEALTH_DEAD = 4; // 0x4 + field public static final int BATTERY_HEALTH_GOOD = 2; // 0x2 + field public static final int BATTERY_HEALTH_OVERHEAT = 3; // 0x3 + field public static final int BATTERY_HEALTH_OVER_VOLTAGE = 5; // 0x5 + field public static final int BATTERY_HEALTH_UNKNOWN = 1; // 0x1 + field public static final int BATTERY_HEALTH_UNSPECIFIED_FAILURE = 6; // 0x6 + field public static final int BATTERY_PLUGGED_AC = 1; // 0x1 + field public static final int BATTERY_PLUGGED_USB = 2; // 0x2 + field public static final int BATTERY_PLUGGED_WIRELESS = 4; // 0x4 + field public static final int BATTERY_PROPERTY_CAPACITY = 4; // 0x4 + field public static final int BATTERY_PROPERTY_CHARGE_COUNTER = 1; // 0x1 + field public static final int BATTERY_PROPERTY_CURRENT_AVERAGE = 3; // 0x3 + field public static final int BATTERY_PROPERTY_CURRENT_NOW = 2; // 0x2 + field public static final int BATTERY_PROPERTY_ENERGY_COUNTER = 5; // 0x5 + field public static final int BATTERY_STATUS_CHARGING = 2; // 0x2 + field public static final int BATTERY_STATUS_DISCHARGING = 3; // 0x3 + field public static final int BATTERY_STATUS_FULL = 5; // 0x5 + field public static final int BATTERY_STATUS_NOT_CHARGING = 4; // 0x4 + field public static final int BATTERY_STATUS_UNKNOWN = 1; // 0x1 + field public static final java.lang.String EXTRA_HEALTH = "health"; + field public static final java.lang.String EXTRA_ICON_SMALL = "icon-small"; + field public static final java.lang.String EXTRA_LEVEL = "level"; + field public static final java.lang.String EXTRA_PLUGGED = "plugged"; + field public static final java.lang.String EXTRA_PRESENT = "present"; + field public static final java.lang.String EXTRA_SCALE = "scale"; + field public static final java.lang.String EXTRA_STATUS = "status"; + field public static final java.lang.String EXTRA_TECHNOLOGY = "technology"; + field public static final java.lang.String EXTRA_TEMPERATURE = "temperature"; + field public static final java.lang.String EXTRA_VOLTAGE = "voltage"; + } + + public class Binder implements android.os.IBinder { + ctor public Binder(); + method public void attachInterface(android.os.IInterface, java.lang.String); + method public static final long clearCallingIdentity(); + method public void dump(java.io.FileDescriptor, java.lang.String[]); + method protected void dump(java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]); + method public void dumpAsync(java.io.FileDescriptor, java.lang.String[]); + method public static final void flushPendingCommands(); + method public static final int getCallingPid(); + method public static final int getCallingUid(); + method public static final android.os.UserHandle getCallingUserHandle(); + method public java.lang.String getInterfaceDescriptor(); + method public boolean isBinderAlive(); + method public static final void joinThreadPool(); + method public void linkToDeath(android.os.IBinder.DeathRecipient, int); + method protected boolean onTransact(int, android.os.Parcel, android.os.Parcel, int) throws android.os.RemoteException; + method public boolean pingBinder(); + method public android.os.IInterface queryLocalInterface(java.lang.String); + method public static final void restoreCallingIdentity(long); + method public final boolean transact(int, android.os.Parcel, android.os.Parcel, int) throws android.os.RemoteException; + method public boolean unlinkToDeath(android.os.IBinder.DeathRecipient, int); + } + + public class Build { + ctor public Build(); + method public static java.lang.String getRadioVersion(); + field public static final java.lang.String BOARD; + field public static final java.lang.String BOOTLOADER; + field public static final java.lang.String BRAND; + field public static final deprecated java.lang.String CPU_ABI; + field public static final deprecated java.lang.String CPU_ABI2; + field public static final java.lang.String DEVICE; + field public static final java.lang.String DISPLAY; + field public static final java.lang.String FINGERPRINT; + field public static final java.lang.String HARDWARE; + field public static final java.lang.String HOST; + field public static final java.lang.String ID; + field public static final java.lang.String MANUFACTURER; + field public static final java.lang.String MODEL; + field public static final java.lang.String PRODUCT; + field public static final deprecated java.lang.String RADIO; + field public static final java.lang.String SERIAL; + field public static final java.lang.String[] SUPPORTED_32_BIT_ABIS; + field public static final java.lang.String[] SUPPORTED_64_BIT_ABIS; + field public static final java.lang.String[] SUPPORTED_ABIS; + field public static final java.lang.String TAGS; + field public static final long TIME; + field public static final java.lang.String TYPE; + field public static final java.lang.String UNKNOWN = "unknown"; + field public static final java.lang.String USER; + } + + public static class Build.VERSION { + ctor public Build.VERSION(); + field public static final java.lang.String CODENAME; + field public static final java.lang.String INCREMENTAL; + field public static final java.lang.String RELEASE; + field public static final deprecated java.lang.String SDK; + field public static final int SDK_INT; + } + + public static class Build.VERSION_CODES { + ctor public Build.VERSION_CODES(); + field public static final int BASE = 1; // 0x1 + field public static final int BASE_1_1 = 2; // 0x2 + field public static final int CUPCAKE = 3; // 0x3 + field public static final int CUR_DEVELOPMENT = 10000; // 0x2710 + field public static final int DONUT = 4; // 0x4 + field public static final int ECLAIR = 5; // 0x5 + field public static final int ECLAIR_0_1 = 6; // 0x6 + field public static final int ECLAIR_MR1 = 7; // 0x7 + field public static final int FROYO = 8; // 0x8 + field public static final int GINGERBREAD = 9; // 0x9 + field public static final int GINGERBREAD_MR1 = 10; // 0xa + field public static final int HONEYCOMB = 11; // 0xb + field public static final int HONEYCOMB_MR1 = 12; // 0xc + field public static final int HONEYCOMB_MR2 = 13; // 0xd + field public static final int ICE_CREAM_SANDWICH = 14; // 0xe + field public static final int ICE_CREAM_SANDWICH_MR1 = 15; // 0xf + field public static final int JELLY_BEAN = 16; // 0x10 + field public static final int JELLY_BEAN_MR1 = 17; // 0x11 + field public static final int JELLY_BEAN_MR2 = 18; // 0x12 + field public static final int KITKAT = 19; // 0x13 + field public static final int KITKAT_WATCH = 20; // 0x14 + field public static final int LOLLIPOP = 21; // 0x15 + field public static final int LOLLIPOP_MR1 = 22; // 0x16 + } + + public final class Bundle extends android.os.BaseBundle implements java.lang.Cloneable android.os.Parcelable { + ctor public Bundle(); + ctor public Bundle(java.lang.ClassLoader); + ctor public Bundle(int); + ctor public Bundle(android.os.Bundle); + ctor public Bundle(android.os.PersistableBundle); + method public java.lang.Object clone(); + method public int describeContents(); + method public android.os.IBinder getBinder(java.lang.String); + method public android.os.Bundle getBundle(java.lang.String); + method public byte getByte(java.lang.String); + method public java.lang.Byte getByte(java.lang.String, byte); + method public byte[] getByteArray(java.lang.String); + method public char getChar(java.lang.String); + method public char getChar(java.lang.String, char); + method public char[] getCharArray(java.lang.String); + method public java.lang.CharSequence getCharSequence(java.lang.String); + method public java.lang.CharSequence getCharSequence(java.lang.String, java.lang.CharSequence); + method public java.lang.CharSequence[] getCharSequenceArray(java.lang.String); + method public java.util.ArrayList getCharSequenceArrayList(java.lang.String); + method public java.lang.ClassLoader getClassLoader(); + method public float getFloat(java.lang.String); + method public float getFloat(java.lang.String, float); + method public float[] getFloatArray(java.lang.String); + method public java.util.ArrayList getIntegerArrayList(java.lang.String); + method public T getParcelable(java.lang.String); + method public android.os.Parcelable[] getParcelableArray(java.lang.String); + method public java.util.ArrayList getParcelableArrayList(java.lang.String); + method public java.io.Serializable getSerializable(java.lang.String); + method public short getShort(java.lang.String); + method public short getShort(java.lang.String, short); + method public short[] getShortArray(java.lang.String); + method public android.util.Size getSize(java.lang.String); + method public android.util.SizeF getSizeF(java.lang.String); + method public android.util.SparseArray getSparseParcelableArray(java.lang.String); + method public java.util.ArrayList getStringArrayList(java.lang.String); + method public boolean hasFileDescriptors(); + method public void putAll(android.os.Bundle); + method public void putBinder(java.lang.String, android.os.IBinder); + method public void putBundle(java.lang.String, android.os.Bundle); + method public void putByte(java.lang.String, byte); + method public void putByteArray(java.lang.String, byte[]); + method public void putChar(java.lang.String, char); + method public void putCharArray(java.lang.String, char[]); + method public void putCharSequence(java.lang.String, java.lang.CharSequence); + method public void putCharSequenceArray(java.lang.String, java.lang.CharSequence[]); + method public void putCharSequenceArrayList(java.lang.String, java.util.ArrayList); + method public void putFloat(java.lang.String, float); + method public void putFloatArray(java.lang.String, float[]); + method public void putIntegerArrayList(java.lang.String, java.util.ArrayList); + method public void putParcelable(java.lang.String, android.os.Parcelable); + method public void putParcelableArray(java.lang.String, android.os.Parcelable[]); + method public void putParcelableArrayList(java.lang.String, java.util.ArrayList); + method public void putSerializable(java.lang.String, java.io.Serializable); + method public void putShort(java.lang.String, short); + method public void putShortArray(java.lang.String, short[]); + method public void putSize(java.lang.String, android.util.Size); + method public void putSizeF(java.lang.String, android.util.SizeF); + method public void putSparseParcelableArray(java.lang.String, android.util.SparseArray); + method public void putStringArrayList(java.lang.String, java.util.ArrayList); + method public void readFromParcel(android.os.Parcel); + method public void setClassLoader(java.lang.ClassLoader); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.Bundle EMPTY; + } + + public final class CancellationSignal { + ctor public CancellationSignal(); + method public void cancel(); + method public boolean isCanceled(); + method public void setOnCancelListener(android.os.CancellationSignal.OnCancelListener); + method public void throwIfCanceled(); + } + + public static abstract interface CancellationSignal.OnCancelListener { + method public abstract void onCancel(); + } + + public class ConditionVariable { + ctor public ConditionVariable(); + ctor public ConditionVariable(boolean); + method public void block(); + method public boolean block(long); + method public void close(); + method public void open(); + } + + public abstract class CountDownTimer { + ctor public CountDownTimer(long, long); + method public final synchronized void cancel(); + method public abstract void onFinish(); + method public abstract void onTick(long); + method public final synchronized android.os.CountDownTimer start(); + } + + public class DeadObjectException extends android.os.RemoteException { + ctor public DeadObjectException(); + } + + public final class Debug { + method public static deprecated void changeDebugPort(int); + method public static void dumpHprofData(java.lang.String) throws java.io.IOException; + method public static boolean dumpService(java.lang.String, java.io.FileDescriptor, java.lang.String[]); + method public static void enableEmulatorTraceOutput(); + method public static final int getBinderDeathObjectCount(); + method public static final int getBinderLocalObjectCount(); + method public static final int getBinderProxyObjectCount(); + method public static int getBinderReceivedTransactions(); + method public static int getBinderSentTransactions(); + method public static int getGlobalAllocCount(); + method public static int getGlobalAllocSize(); + method public static int getGlobalClassInitCount(); + method public static int getGlobalClassInitTime(); + method public static deprecated int getGlobalExternalAllocCount(); + method public static deprecated int getGlobalExternalAllocSize(); + method public static deprecated int getGlobalExternalFreedCount(); + method public static deprecated int getGlobalExternalFreedSize(); + method public static int getGlobalFreedCount(); + method public static int getGlobalFreedSize(); + method public static int getGlobalGcInvocationCount(); + method public static int getLoadedClassCount(); + method public static void getMemoryInfo(android.os.Debug.MemoryInfo); + method public static long getNativeHeapAllocatedSize(); + method public static long getNativeHeapFreeSize(); + method public static long getNativeHeapSize(); + method public static long getPss(); + method public static int getThreadAllocCount(); + method public static int getThreadAllocSize(); + method public static deprecated int getThreadExternalAllocCount(); + method public static deprecated int getThreadExternalAllocSize(); + method public static int getThreadGcInvocationCount(); + method public static boolean isDebuggerConnected(); + method public static void printLoadedClasses(int); + method public static void resetAllCounts(); + method public static void resetGlobalAllocCount(); + method public static void resetGlobalAllocSize(); + method public static void resetGlobalClassInitCount(); + method public static void resetGlobalClassInitTime(); + method public static deprecated void resetGlobalExternalAllocCount(); + method public static deprecated void resetGlobalExternalAllocSize(); + method public static deprecated void resetGlobalExternalFreedCount(); + method public static deprecated void resetGlobalExternalFreedSize(); + method public static void resetGlobalFreedCount(); + method public static void resetGlobalFreedSize(); + method public static void resetGlobalGcInvocationCount(); + method public static void resetThreadAllocCount(); + method public static void resetThreadAllocSize(); + method public static deprecated void resetThreadExternalAllocCount(); + method public static deprecated void resetThreadExternalAllocSize(); + method public static void resetThreadGcInvocationCount(); + method public static deprecated int setAllocationLimit(int); + method public static deprecated int setGlobalAllocationLimit(int); + method public static deprecated void startAllocCounting(); + method public static void startMethodTracing(); + method public static void startMethodTracing(java.lang.String); + method public static void startMethodTracing(java.lang.String, int); + method public static void startMethodTracing(java.lang.String, int, int); + method public static void startMethodTracingSampling(java.lang.String, int, int); + method public static void startNativeTracing(); + method public static deprecated void stopAllocCounting(); + method public static void stopMethodTracing(); + method public static void stopNativeTracing(); + method public static long threadCpuTimeNanos(); + method public static void waitForDebugger(); + method public static boolean waitingForDebugger(); + field public static final int SHOW_CLASSLOADER = 2; // 0x2 + field public static final int SHOW_FULL_DETAIL = 1; // 0x1 + field public static final int SHOW_INITIALIZED = 4; // 0x4 + field public static final int TRACE_COUNT_ALLOCS = 1; // 0x1 + } + + public static class Debug.InstructionCount { + ctor public Debug.InstructionCount(); + method public boolean collect(); + method public int globalMethodInvocations(); + method public int globalTotal(); + method public boolean resetAndStart(); + } + + public static class Debug.MemoryInfo implements android.os.Parcelable { + ctor public Debug.MemoryInfo(); + method public int describeContents(); + method public int getTotalPrivateClean(); + method public int getTotalPrivateDirty(); + method public int getTotalPss(); + method public int getTotalSharedClean(); + method public int getTotalSharedDirty(); + method public int getTotalSwappablePss(); + method public void readFromParcel(android.os.Parcel); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public int dalvikPrivateDirty; + field public int dalvikPss; + field public int dalvikSharedDirty; + field public int nativePrivateDirty; + field public int nativePss; + field public int nativeSharedDirty; + field public int otherPrivateDirty; + field public int otherPss; + field public int otherSharedDirty; + } + + public class DropBoxManager { + ctor protected DropBoxManager(); + method public void addData(java.lang.String, byte[], int); + method public void addFile(java.lang.String, java.io.File, int) throws java.io.IOException; + method public void addText(java.lang.String, java.lang.String); + method public android.os.DropBoxManager.Entry getNextEntry(java.lang.String, long); + method public boolean isTagEnabled(java.lang.String); + field public static final java.lang.String ACTION_DROPBOX_ENTRY_ADDED = "android.intent.action.DROPBOX_ENTRY_ADDED"; + field public static final java.lang.String EXTRA_TAG = "tag"; + field public static final java.lang.String EXTRA_TIME = "time"; + field public static final int IS_EMPTY = 1; // 0x1 + field public static final int IS_GZIPPED = 4; // 0x4 + field public static final int IS_TEXT = 2; // 0x2 + } + + public static class DropBoxManager.Entry implements java.io.Closeable android.os.Parcelable { + ctor public DropBoxManager.Entry(java.lang.String, long); + ctor public DropBoxManager.Entry(java.lang.String, long, java.lang.String); + ctor public DropBoxManager.Entry(java.lang.String, long, byte[], int); + ctor public DropBoxManager.Entry(java.lang.String, long, android.os.ParcelFileDescriptor, int); + ctor public DropBoxManager.Entry(java.lang.String, long, java.io.File, int) throws java.io.IOException; + method public void close(); + method public int describeContents(); + method public int getFlags(); + method public java.io.InputStream getInputStream() throws java.io.IOException; + method public java.lang.String getTag(); + method public java.lang.String getText(int); + method public long getTimeMillis(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public class Environment { + ctor public Environment(); + method public static java.io.File getDataDirectory(); + method public static java.io.File getDownloadCacheDirectory(); + method public static java.io.File getExternalStorageDirectory(); + method public static java.io.File getExternalStoragePublicDirectory(java.lang.String); + method public static java.lang.String getExternalStorageState(); + method public static java.lang.String getExternalStorageState(java.io.File); + method public static java.io.File getRootDirectory(); + method public static deprecated java.lang.String getStorageState(java.io.File); + method public static boolean isExternalStorageEmulated(); + method public static boolean isExternalStorageEmulated(java.io.File); + method public static boolean isExternalStorageRemovable(); + method public static boolean isExternalStorageRemovable(java.io.File); + field public static java.lang.String DIRECTORY_ALARMS; + field public static java.lang.String DIRECTORY_DCIM; + field public static java.lang.String DIRECTORY_DOCUMENTS; + field public static java.lang.String DIRECTORY_DOWNLOADS; + field public static java.lang.String DIRECTORY_MOVIES; + field public static java.lang.String DIRECTORY_MUSIC; + field public static java.lang.String DIRECTORY_NOTIFICATIONS; + field public static java.lang.String DIRECTORY_PICTURES; + field public static java.lang.String DIRECTORY_PODCASTS; + field public static java.lang.String DIRECTORY_RINGTONES; + field public static final java.lang.String MEDIA_BAD_REMOVAL = "bad_removal"; + field public static final java.lang.String MEDIA_CHECKING = "checking"; + field public static final java.lang.String MEDIA_MOUNTED = "mounted"; + field public static final java.lang.String MEDIA_MOUNTED_READ_ONLY = "mounted_ro"; + field public static final java.lang.String MEDIA_NOFS = "nofs"; + field public static final java.lang.String MEDIA_REMOVED = "removed"; + field public static final java.lang.String MEDIA_SHARED = "shared"; + field public static final java.lang.String MEDIA_UNKNOWN = "unknown"; + field public static final java.lang.String MEDIA_UNMOUNTABLE = "unmountable"; + field public static final java.lang.String MEDIA_UNMOUNTED = "unmounted"; + } + + public abstract class FileObserver { + ctor public FileObserver(java.lang.String); + ctor public FileObserver(java.lang.String, int); + method public abstract void onEvent(int, java.lang.String); + method public void startWatching(); + method public void stopWatching(); + field public static final int ACCESS = 1; // 0x1 + field public static final int ALL_EVENTS = 4095; // 0xfff + field public static final int ATTRIB = 4; // 0x4 + field public static final int CLOSE_NOWRITE = 16; // 0x10 + field public static final int CLOSE_WRITE = 8; // 0x8 + field public static final int CREATE = 256; // 0x100 + field public static final int DELETE = 512; // 0x200 + field public static final int DELETE_SELF = 1024; // 0x400 + field public static final int MODIFY = 2; // 0x2 + field public static final int MOVED_FROM = 64; // 0x40 + field public static final int MOVED_TO = 128; // 0x80 + field public static final int MOVE_SELF = 2048; // 0x800 + field public static final int OPEN = 32; // 0x20 + } + + public class Handler { + ctor public Handler(); + ctor public Handler(android.os.Handler.Callback); + ctor public Handler(android.os.Looper); + ctor public Handler(android.os.Looper, android.os.Handler.Callback); + method public void dispatchMessage(android.os.Message); + method public final void dump(android.util.Printer, java.lang.String); + method public final android.os.Looper getLooper(); + method public java.lang.String getMessageName(android.os.Message); + method public void handleMessage(android.os.Message); + method public final boolean hasMessages(int); + method public final boolean hasMessages(int, java.lang.Object); + method public final android.os.Message obtainMessage(); + method public final android.os.Message obtainMessage(int); + method public final android.os.Message obtainMessage(int, java.lang.Object); + method public final android.os.Message obtainMessage(int, int, int); + method public final android.os.Message obtainMessage(int, int, int, java.lang.Object); + method public final boolean post(java.lang.Runnable); + method public final boolean postAtFrontOfQueue(java.lang.Runnable); + method public final boolean postAtTime(java.lang.Runnable, long); + method public final boolean postAtTime(java.lang.Runnable, java.lang.Object, long); + method public final boolean postDelayed(java.lang.Runnable, long); + method public final void removeCallbacks(java.lang.Runnable); + method public final void removeCallbacks(java.lang.Runnable, java.lang.Object); + method public final void removeCallbacksAndMessages(java.lang.Object); + method public final void removeMessages(int); + method public final void removeMessages(int, java.lang.Object); + method public final boolean sendEmptyMessage(int); + method public final boolean sendEmptyMessageAtTime(int, long); + method public final boolean sendEmptyMessageDelayed(int, long); + method public final boolean sendMessage(android.os.Message); + method public final boolean sendMessageAtFrontOfQueue(android.os.Message); + method public boolean sendMessageAtTime(android.os.Message, long); + method public final boolean sendMessageDelayed(android.os.Message, long); + } + + public static abstract interface Handler.Callback { + method public abstract boolean handleMessage(android.os.Message); + } + + public class HandlerThread extends java.lang.Thread { + ctor public HandlerThread(java.lang.String); + ctor public HandlerThread(java.lang.String, int); + method public android.os.Looper getLooper(); + method public int getThreadId(); + method protected void onLooperPrepared(); + method public boolean quit(); + method public boolean quitSafely(); + } + + public abstract interface IBinder { + method public abstract void dump(java.io.FileDescriptor, java.lang.String[]) throws android.os.RemoteException; + method public abstract void dumpAsync(java.io.FileDescriptor, java.lang.String[]) throws android.os.RemoteException; + method public abstract java.lang.String getInterfaceDescriptor() throws android.os.RemoteException; + method public abstract boolean isBinderAlive(); + method public abstract void linkToDeath(android.os.IBinder.DeathRecipient, int) throws android.os.RemoteException; + method public abstract boolean pingBinder(); + method public abstract android.os.IInterface queryLocalInterface(java.lang.String); + method public abstract boolean transact(int, android.os.Parcel, android.os.Parcel, int) throws android.os.RemoteException; + method public abstract boolean unlinkToDeath(android.os.IBinder.DeathRecipient, int); + field public static final int DUMP_TRANSACTION = 1598311760; // 0x5f444d50 + field public static final int FIRST_CALL_TRANSACTION = 1; // 0x1 + field public static final int FLAG_ONEWAY = 1; // 0x1 + field public static final int INTERFACE_TRANSACTION = 1598968902; // 0x5f4e5446 + field public static final int LAST_CALL_TRANSACTION = 16777215; // 0xffffff + field public static final int LIKE_TRANSACTION = 1598835019; // 0x5f4c494b + field public static final int PING_TRANSACTION = 1599098439; // 0x5f504e47 + field public static final int TWEET_TRANSACTION = 1599362900; // 0x5f545754 + } + + public static abstract interface IBinder.DeathRecipient { + method public abstract void binderDied(); + } + + public abstract interface IInterface { + method public abstract android.os.IBinder asBinder(); + } + + public final class Looper { + method public void dump(android.util.Printer, java.lang.String); + method public static android.os.Looper getMainLooper(); + method public java.lang.Thread getThread(); + method public static void loop(); + method public static android.os.Looper myLooper(); + method public static android.os.MessageQueue myQueue(); + method public static void prepare(); + method public static void prepareMainLooper(); + method public void quit(); + method public void quitSafely(); + method public void setMessageLogging(android.util.Printer); + } + + public class MemoryFile { + ctor public MemoryFile(java.lang.String, int) throws java.io.IOException; + method public synchronized boolean allowPurging(boolean) throws java.io.IOException; + method public void close(); + method public java.io.InputStream getInputStream(); + method public java.io.OutputStream getOutputStream(); + method public boolean isPurgingAllowed(); + method public int length(); + method public int readBytes(byte[], int, int, int) throws java.io.IOException; + method public void writeBytes(byte[], int, int, int) throws java.io.IOException; + } + + public final class Message implements android.os.Parcelable { + ctor public Message(); + method public void copyFrom(android.os.Message); + method public int describeContents(); + method public java.lang.Runnable getCallback(); + method public android.os.Bundle getData(); + method public android.os.Handler getTarget(); + method public long getWhen(); + method public boolean isAsynchronous(); + method public static android.os.Message obtain(); + method public static android.os.Message obtain(android.os.Message); + method public static android.os.Message obtain(android.os.Handler); + method public static android.os.Message obtain(android.os.Handler, java.lang.Runnable); + method public static android.os.Message obtain(android.os.Handler, int); + method public static android.os.Message obtain(android.os.Handler, int, java.lang.Object); + method public static android.os.Message obtain(android.os.Handler, int, int, int); + method public static android.os.Message obtain(android.os.Handler, int, int, int, java.lang.Object); + method public android.os.Bundle peekData(); + method public void recycle(); + method public void sendToTarget(); + method public void setAsynchronous(boolean); + method public void setData(android.os.Bundle); + method public void setTarget(android.os.Handler); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public int arg1; + field public int arg2; + field public java.lang.Object obj; + field public android.os.Messenger replyTo; + field public int sendingUid; + field public int what; + } + + public final class MessageQueue { + method public void addIdleHandler(android.os.MessageQueue.IdleHandler); + method public void removeIdleHandler(android.os.MessageQueue.IdleHandler); + } + + public static abstract interface MessageQueue.IdleHandler { + method public abstract boolean queueIdle(); + } + + public final class Messenger implements android.os.Parcelable { + ctor public Messenger(android.os.Handler); + ctor public Messenger(android.os.IBinder); + method public int describeContents(); + method public android.os.IBinder getBinder(); + method public static android.os.Messenger readMessengerOrNullFromParcel(android.os.Parcel); + method public void send(android.os.Message) throws android.os.RemoteException; + method public static void writeMessengerOrNullToParcel(android.os.Messenger, android.os.Parcel); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public class NetworkOnMainThreadException extends java.lang.RuntimeException { + ctor public NetworkOnMainThreadException(); + } + + public class OperationCanceledException extends java.lang.RuntimeException { + ctor public OperationCanceledException(); + ctor public OperationCanceledException(java.lang.String); + } + + public final class Parcel { + method public final void appendFrom(android.os.Parcel, int, int); + method public final android.os.IBinder[] createBinderArray(); + method public final java.util.ArrayList createBinderArrayList(); + method public final boolean[] createBooleanArray(); + method public final byte[] createByteArray(); + method public final char[] createCharArray(); + method public final double[] createDoubleArray(); + method public final float[] createFloatArray(); + method public final int[] createIntArray(); + method public final long[] createLongArray(); + method public final java.lang.String[] createStringArray(); + method public final java.util.ArrayList createStringArrayList(); + method public final T[] createTypedArray(android.os.Parcelable.Creator); + method public final java.util.ArrayList createTypedArrayList(android.os.Parcelable.Creator); + method public final int dataAvail(); + method public final int dataCapacity(); + method public final int dataPosition(); + method public final int dataSize(); + method public final void enforceInterface(java.lang.String); + method public final boolean hasFileDescriptors(); + method public final byte[] marshall(); + method public static android.os.Parcel obtain(); + method public final java.lang.Object[] readArray(java.lang.ClassLoader); + method public final java.util.ArrayList readArrayList(java.lang.ClassLoader); + method public final void readBinderArray(android.os.IBinder[]); + method public final void readBinderList(java.util.List); + method public final void readBooleanArray(boolean[]); + method public final android.os.Bundle readBundle(); + method public final android.os.Bundle readBundle(java.lang.ClassLoader); + method public final byte readByte(); + method public final void readByteArray(byte[]); + method public final void readCharArray(char[]); + method public final double readDouble(); + method public final void readDoubleArray(double[]); + method public final void readException(); + method public final void readException(int, java.lang.String); + method public final android.os.ParcelFileDescriptor readFileDescriptor(); + method public final float readFloat(); + method public final void readFloatArray(float[]); + method public final java.util.HashMap readHashMap(java.lang.ClassLoader); + method public final int readInt(); + method public final void readIntArray(int[]); + method public final void readList(java.util.List, java.lang.ClassLoader); + method public final long readLong(); + method public final void readLongArray(long[]); + method public final void readMap(java.util.Map, java.lang.ClassLoader); + method public final T readParcelable(java.lang.ClassLoader); + method public final android.os.Parcelable[] readParcelableArray(java.lang.ClassLoader); + method public final android.os.PersistableBundle readPersistableBundle(); + method public final android.os.PersistableBundle readPersistableBundle(java.lang.ClassLoader); + method public final java.io.Serializable readSerializable(); + method public final android.util.Size readSize(); + method public final android.util.SizeF readSizeF(); + method public final android.util.SparseArray readSparseArray(java.lang.ClassLoader); + method public final android.util.SparseBooleanArray readSparseBooleanArray(); + method public final java.lang.String readString(); + method public final void readStringArray(java.lang.String[]); + method public final void readStringList(java.util.List); + method public final android.os.IBinder readStrongBinder(); + method public final void readTypedArray(T[], android.os.Parcelable.Creator); + method public final void readTypedList(java.util.List, android.os.Parcelable.Creator); + method public final java.lang.Object readValue(java.lang.ClassLoader); + method public final void recycle(); + method public final void setDataCapacity(int); + method public final void setDataPosition(int); + method public final void setDataSize(int); + method public final void unmarshall(byte[], int, int); + method public final void writeArray(java.lang.Object[]); + method public final void writeBinderArray(android.os.IBinder[]); + method public final void writeBinderList(java.util.List); + method public final void writeBooleanArray(boolean[]); + method public final void writeBundle(android.os.Bundle); + method public final void writeByte(byte); + method public final void writeByteArray(byte[]); + method public final void writeByteArray(byte[], int, int); + method public final void writeCharArray(char[]); + method public final void writeDouble(double); + method public final void writeDoubleArray(double[]); + method public final void writeException(java.lang.Exception); + method public final void writeFileDescriptor(java.io.FileDescriptor); + method public final void writeFloat(float); + method public final void writeFloatArray(float[]); + method public final void writeInt(int); + method public final void writeIntArray(int[]); + method public final void writeInterfaceToken(java.lang.String); + method public final void writeList(java.util.List); + method public final void writeLong(long); + method public final void writeLongArray(long[]); + method public final void writeMap(java.util.Map); + method public final void writeNoException(); + method public final void writeParcelable(android.os.Parcelable, int); + method public final void writeParcelableArray(T[], int); + method public final void writePersistableBundle(android.os.PersistableBundle); + method public final void writeSerializable(java.io.Serializable); + method public final void writeSize(android.util.Size); + method public final void writeSizeF(android.util.SizeF); + method public final void writeSparseArray(android.util.SparseArray); + method public final void writeSparseBooleanArray(android.util.SparseBooleanArray); + method public final void writeString(java.lang.String); + method public final void writeStringArray(java.lang.String[]); + method public final void writeStringList(java.util.List); + method public final void writeStrongBinder(android.os.IBinder); + method public final void writeStrongInterface(android.os.IInterface); + method public final void writeTypedArray(T[], int); + method public final void writeTypedList(java.util.List); + method public final void writeValue(java.lang.Object); + field public static final android.os.Parcelable.Creator STRING_CREATOR; + } + + public class ParcelFileDescriptor implements java.io.Closeable android.os.Parcelable { + ctor public ParcelFileDescriptor(android.os.ParcelFileDescriptor); + method public static android.os.ParcelFileDescriptor adoptFd(int); + method public boolean canDetectErrors(); + method public void checkError() throws java.io.IOException; + method public void close() throws java.io.IOException; + method public void closeWithError(java.lang.String) throws java.io.IOException; + method public static android.os.ParcelFileDescriptor[] createPipe() throws java.io.IOException; + method public static android.os.ParcelFileDescriptor[] createReliablePipe() throws java.io.IOException; + method public static android.os.ParcelFileDescriptor[] createReliableSocketPair() throws java.io.IOException; + method public static android.os.ParcelFileDescriptor[] createSocketPair() throws java.io.IOException; + method public int describeContents(); + method public int detachFd(); + method public static android.os.ParcelFileDescriptor dup(java.io.FileDescriptor) throws java.io.IOException; + method public android.os.ParcelFileDescriptor dup() throws java.io.IOException; + method public static android.os.ParcelFileDescriptor fromDatagramSocket(java.net.DatagramSocket); + method public static android.os.ParcelFileDescriptor fromFd(int) throws java.io.IOException; + method public static android.os.ParcelFileDescriptor fromSocket(java.net.Socket); + method public int getFd(); + method public java.io.FileDescriptor getFileDescriptor(); + method public long getStatSize(); + method public static android.os.ParcelFileDescriptor open(java.io.File, int) throws java.io.FileNotFoundException; + method public static android.os.ParcelFileDescriptor open(java.io.File, int, android.os.Handler, android.os.ParcelFileDescriptor.OnCloseListener) throws java.io.IOException; + method public static int parseMode(java.lang.String); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int MODE_APPEND = 33554432; // 0x2000000 + field public static final int MODE_CREATE = 134217728; // 0x8000000 + field public static final int MODE_READ_ONLY = 268435456; // 0x10000000 + field public static final int MODE_READ_WRITE = 805306368; // 0x30000000 + field public static final int MODE_TRUNCATE = 67108864; // 0x4000000 + field public static final deprecated int MODE_WORLD_READABLE = 1; // 0x1 + field public static final deprecated int MODE_WORLD_WRITEABLE = 2; // 0x2 + field public static final int MODE_WRITE_ONLY = 536870912; // 0x20000000 + } + + public static class ParcelFileDescriptor.AutoCloseInputStream extends java.io.FileInputStream { + ctor public ParcelFileDescriptor.AutoCloseInputStream(android.os.ParcelFileDescriptor); + } + + public static class ParcelFileDescriptor.AutoCloseOutputStream extends java.io.FileOutputStream { + ctor public ParcelFileDescriptor.AutoCloseOutputStream(android.os.ParcelFileDescriptor); + } + + public static class ParcelFileDescriptor.FileDescriptorDetachedException extends java.io.IOException { + ctor public ParcelFileDescriptor.FileDescriptorDetachedException(); + } + + public static abstract interface ParcelFileDescriptor.OnCloseListener { + method public abstract void onClose(java.io.IOException); + } + + public class ParcelFormatException extends java.lang.RuntimeException { + ctor public ParcelFormatException(); + ctor public ParcelFormatException(java.lang.String); + } + + public final class ParcelUuid implements android.os.Parcelable { + ctor public ParcelUuid(java.util.UUID); + method public int describeContents(); + method public static android.os.ParcelUuid fromString(java.lang.String); + method public java.util.UUID getUuid(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public abstract interface Parcelable { + method public abstract int describeContents(); + method public abstract void writeToParcel(android.os.Parcel, int); + field public static final int CONTENTS_FILE_DESCRIPTOR = 1; // 0x1 + field public static final int PARCELABLE_WRITE_RETURN_VALUE = 1; // 0x1 + } + + public static abstract interface Parcelable.ClassLoaderCreator implements android.os.Parcelable.Creator { + method public abstract T createFromParcel(android.os.Parcel, java.lang.ClassLoader); + } + + public static abstract interface Parcelable.Creator { + method public abstract T createFromParcel(android.os.Parcel); + method public abstract T[] newArray(int); + } + + public class PatternMatcher implements android.os.Parcelable { + ctor public PatternMatcher(java.lang.String, int); + ctor public PatternMatcher(android.os.Parcel); + method public int describeContents(); + method public final java.lang.String getPath(); + method public final int getType(); + method public boolean match(java.lang.String); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int PATTERN_LITERAL = 0; // 0x0 + field public static final int PATTERN_PREFIX = 1; // 0x1 + field public static final int PATTERN_SIMPLE_GLOB = 2; // 0x2 + } + + public final class PersistableBundle extends android.os.BaseBundle implements java.lang.Cloneable android.os.Parcelable { + ctor public PersistableBundle(); + ctor public PersistableBundle(int); + ctor public PersistableBundle(android.os.PersistableBundle); + method public java.lang.Object clone(); + method public int describeContents(); + method public android.os.PersistableBundle getPersistableBundle(java.lang.String); + method public void putPersistableBundle(java.lang.String, android.os.PersistableBundle); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.os.PersistableBundle EMPTY; + } + + public final class PowerManager { + method public boolean isInteractive(); + method public boolean isPowerSaveMode(); + method public deprecated boolean isScreenOn(); + method public boolean isWakeLockLevelSupported(int); + method public android.os.PowerManager.WakeLock newWakeLock(int, java.lang.String); + method public void reboot(java.lang.String); + method public void userActivity(long, int, int); + field public static final int ACQUIRE_CAUSES_WAKEUP = 268435456; // 0x10000000 + field public static final java.lang.String ACTION_POWER_SAVE_MODE_CHANGED = "android.os.action.POWER_SAVE_MODE_CHANGED"; + field public static final deprecated int FULL_WAKE_LOCK = 26; // 0x1a + field public static final int ON_AFTER_RELEASE = 536870912; // 0x20000000 + field public static final int PARTIAL_WAKE_LOCK = 1; // 0x1 + field public static final int PROXIMITY_SCREEN_OFF_WAKE_LOCK = 32; // 0x20 + field public static final int RELEASE_FLAG_WAIT_FOR_NO_PROXIMITY = 1; // 0x1 + field public static final deprecated int SCREEN_BRIGHT_WAKE_LOCK = 10; // 0xa + field public static final deprecated int SCREEN_DIM_WAKE_LOCK = 6; // 0x6 + field public static final int USER_ACTIVITY_EVENT_BUTTON = 1; // 0x1 + field public static final int USER_ACTIVITY_EVENT_OTHER = 0; // 0x0 + field public static final int USER_ACTIVITY_EVENT_TOUCH = 2; // 0x2 + field public static final int USER_ACTIVITY_FLAG_INDIRECT = 2; // 0x2 + field public static final int USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS = 1; // 0x1 + } + + public final class PowerManager.WakeLock { + method public void acquire(); + method public void acquire(long); + method public boolean isHeld(); + method public void release(); + method public void release(int); + method public void setReferenceCounted(boolean); + method public void setWorkSource(android.os.WorkSource); + } + + public class Process { + ctor public Process(); + method public static final long getElapsedCpuTime(); + method public static final int getGidForName(java.lang.String); + method public static final int getThreadPriority(int) throws java.lang.IllegalArgumentException; + method public static final int getUidForName(java.lang.String); + method public static final void killProcess(int); + method public static final int myPid(); + method public static final int myTid(); + method public static final int myUid(); + method public static final android.os.UserHandle myUserHandle(); + method public static final void sendSignal(int, int); + method public static final void setThreadPriority(int, int) throws java.lang.IllegalArgumentException, java.lang.SecurityException; + method public static final void setThreadPriority(int) throws java.lang.IllegalArgumentException, java.lang.SecurityException; + method public static final deprecated boolean supportsProcesses(); + field public static final int FIRST_APPLICATION_UID = 10000; // 0x2710 + field public static final int LAST_APPLICATION_UID = 19999; // 0x4e1f + field public static final int PHONE_UID = 1001; // 0x3e9 + field public static final int SIGNAL_KILL = 9; // 0x9 + field public static final int SIGNAL_QUIT = 3; // 0x3 + field public static final int SIGNAL_USR1 = 10; // 0xa + field public static final int SYSTEM_UID = 1000; // 0x3e8 + field public static final int THREAD_PRIORITY_AUDIO = -16; // 0xfffffff0 + field public static final int THREAD_PRIORITY_BACKGROUND = 10; // 0xa + field public static final int THREAD_PRIORITY_DEFAULT = 0; // 0x0 + field public static final int THREAD_PRIORITY_DISPLAY = -4; // 0xfffffffc + field public static final int THREAD_PRIORITY_FOREGROUND = -2; // 0xfffffffe + field public static final int THREAD_PRIORITY_LESS_FAVORABLE = 1; // 0x1 + field public static final int THREAD_PRIORITY_LOWEST = 19; // 0x13 + field public static final int THREAD_PRIORITY_MORE_FAVORABLE = -1; // 0xffffffff + field public static final int THREAD_PRIORITY_URGENT_AUDIO = -19; // 0xffffffed + field public static final int THREAD_PRIORITY_URGENT_DISPLAY = -8; // 0xfffffff8 + } + + public class RecoverySystem { + ctor public RecoverySystem(); + method public static void installPackage(android.content.Context, java.io.File) throws java.io.IOException; + method public static void rebootWipeCache(android.content.Context) throws java.io.IOException; + method public static void rebootWipeUserData(android.content.Context) throws java.io.IOException; + method public static void verifyPackage(java.io.File, android.os.RecoverySystem.ProgressListener, java.io.File) throws java.security.GeneralSecurityException, java.io.IOException; + } + + public static abstract interface RecoverySystem.ProgressListener { + method public abstract void onProgress(int); + } + + public class RemoteCallbackList { + ctor public RemoteCallbackList(); + method public int beginBroadcast(); + method public void finishBroadcast(); + method public java.lang.Object getBroadcastCookie(int); + method public E getBroadcastItem(int); + method public int getRegisteredCallbackCount(); + method public void kill(); + method public void onCallbackDied(E); + method public void onCallbackDied(E, java.lang.Object); + method public boolean register(E); + method public boolean register(E, java.lang.Object); + method public boolean unregister(E); + } + + public class RemoteException extends android.util.AndroidException { + ctor public RemoteException(); + ctor public RemoteException(java.lang.String); + } + + public class ResultReceiver implements android.os.Parcelable { + ctor public ResultReceiver(android.os.Handler); + method public int describeContents(); + method protected void onReceiveResult(int, android.os.Bundle); + method public void send(int, android.os.Bundle); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public class StatFs { + ctor public StatFs(java.lang.String); + method public deprecated int getAvailableBlocks(); + method public long getAvailableBlocksLong(); + method public long getAvailableBytes(); + method public deprecated int getBlockCount(); + method public long getBlockCountLong(); + method public deprecated int getBlockSize(); + method public long getBlockSizeLong(); + method public deprecated int getFreeBlocks(); + method public long getFreeBlocksLong(); + method public long getFreeBytes(); + method public long getTotalBytes(); + method public void restat(java.lang.String); + } + + public final class StrictMode { + method public static android.os.StrictMode.ThreadPolicy allowThreadDiskReads(); + method public static android.os.StrictMode.ThreadPolicy allowThreadDiskWrites(); + method public static void enableDefaults(); + method public static android.os.StrictMode.ThreadPolicy getThreadPolicy(); + method public static android.os.StrictMode.VmPolicy getVmPolicy(); + method public static void noteSlowCall(java.lang.String); + method public static void setThreadPolicy(android.os.StrictMode.ThreadPolicy); + method public static void setVmPolicy(android.os.StrictMode.VmPolicy); + } + + public static final class StrictMode.ThreadPolicy { + field public static final android.os.StrictMode.ThreadPolicy LAX; + } + + public static final class StrictMode.ThreadPolicy.Builder { + ctor public StrictMode.ThreadPolicy.Builder(); + ctor public StrictMode.ThreadPolicy.Builder(android.os.StrictMode.ThreadPolicy); + method public android.os.StrictMode.ThreadPolicy build(); + method public android.os.StrictMode.ThreadPolicy.Builder detectAll(); + method public android.os.StrictMode.ThreadPolicy.Builder detectCustomSlowCalls(); + method public android.os.StrictMode.ThreadPolicy.Builder detectDiskReads(); + method public android.os.StrictMode.ThreadPolicy.Builder detectDiskWrites(); + method public android.os.StrictMode.ThreadPolicy.Builder detectNetwork(); + method public android.os.StrictMode.ThreadPolicy.Builder penaltyDeath(); + method public android.os.StrictMode.ThreadPolicy.Builder penaltyDeathOnNetwork(); + method public android.os.StrictMode.ThreadPolicy.Builder penaltyDialog(); + method public android.os.StrictMode.ThreadPolicy.Builder penaltyDropBox(); + method public android.os.StrictMode.ThreadPolicy.Builder penaltyFlashScreen(); + method public android.os.StrictMode.ThreadPolicy.Builder penaltyLog(); + method public android.os.StrictMode.ThreadPolicy.Builder permitAll(); + method public android.os.StrictMode.ThreadPolicy.Builder permitCustomSlowCalls(); + method public android.os.StrictMode.ThreadPolicy.Builder permitDiskReads(); + method public android.os.StrictMode.ThreadPolicy.Builder permitDiskWrites(); + method public android.os.StrictMode.ThreadPolicy.Builder permitNetwork(); + } + + public static final class StrictMode.VmPolicy { + field public static final android.os.StrictMode.VmPolicy LAX; + } + + public static final class StrictMode.VmPolicy.Builder { + ctor public StrictMode.VmPolicy.Builder(); + ctor public StrictMode.VmPolicy.Builder(android.os.StrictMode.VmPolicy); + method public android.os.StrictMode.VmPolicy build(); + method public android.os.StrictMode.VmPolicy.Builder detectActivityLeaks(); + method public android.os.StrictMode.VmPolicy.Builder detectAll(); + method public android.os.StrictMode.VmPolicy.Builder detectFileUriExposure(); + method public android.os.StrictMode.VmPolicy.Builder detectLeakedClosableObjects(); + method public android.os.StrictMode.VmPolicy.Builder detectLeakedRegistrationObjects(); + method public android.os.StrictMode.VmPolicy.Builder detectLeakedSqlLiteObjects(); + method public android.os.StrictMode.VmPolicy.Builder penaltyDeath(); + method public android.os.StrictMode.VmPolicy.Builder penaltyDropBox(); + method public android.os.StrictMode.VmPolicy.Builder penaltyLog(); + method public android.os.StrictMode.VmPolicy.Builder setClassInstanceLimit(java.lang.Class, int); + } + + public final class SystemClock { + method public static long currentThreadTimeMillis(); + method public static long elapsedRealtime(); + method public static long elapsedRealtimeNanos(); + method public static boolean setCurrentTimeMillis(long); + method public static void sleep(long); + method public static long uptimeMillis(); + } + + public abstract class TokenWatcher { + ctor public TokenWatcher(android.os.Handler, java.lang.String); + method public void acquire(android.os.IBinder, java.lang.String); + method public abstract void acquired(); + method public void cleanup(android.os.IBinder, boolean); + method public void dump(); + method public void dump(java.io.PrintWriter); + method public boolean isAcquired(); + method public void release(android.os.IBinder); + method public abstract void released(); + } + + public final class Trace { + method public static void beginSection(java.lang.String); + method public static void endSection(); + } + + public class TransactionTooLargeException extends android.os.RemoteException { + ctor public TransactionTooLargeException(); + } + + public final class UserHandle implements android.os.Parcelable { + ctor public UserHandle(android.os.Parcel); + method public int describeContents(); + method public int getIdentifier(); + method public final boolean isOwner(); + method public static final int myUserId(); + method public static android.os.UserHandle readFromParcel(android.os.Parcel); + method public void writeToParcel(android.os.Parcel, int); + method public static void writeToParcel(android.os.UserHandle, android.os.Parcel); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public class UserManager { + method public android.os.Bundle getApplicationRestrictions(java.lang.String); + method public long getSerialNumberForUser(android.os.UserHandle); + method public int getUserCount(); + method public android.os.UserHandle getUserForSerialNumber(long); + method public java.lang.String getUserName(); + method public java.util.List getUserProfiles(); + method public android.os.Bundle getUserRestrictions(); + method public android.os.Bundle getUserRestrictions(android.os.UserHandle); + method public boolean hasUserRestriction(java.lang.String); + method public boolean isManagedProfile(); + method public boolean isUserAGoat(); + method public boolean isUserRunning(android.os.UserHandle); + method public boolean isUserRunningOrStopping(android.os.UserHandle); + method public boolean setRestrictionsChallenge(java.lang.String); + method public deprecated void setUserRestriction(java.lang.String, boolean); + method public deprecated void setUserRestrictions(android.os.Bundle); + method public deprecated void setUserRestrictions(android.os.Bundle, android.os.UserHandle); + field public static final java.lang.String DISALLOW_ADD_USER = "no_add_user"; + field public static final java.lang.String DISALLOW_ADJUST_VOLUME = "no_adjust_volume"; + field public static final java.lang.String DISALLOW_APPS_CONTROL = "no_control_apps"; + field public static final java.lang.String DISALLOW_CONFIG_BLUETOOTH = "no_config_bluetooth"; + field public static final java.lang.String DISALLOW_CONFIG_CELL_BROADCASTS = "no_config_cell_broadcasts"; + field public static final java.lang.String DISALLOW_CONFIG_CREDENTIALS = "no_config_credentials"; + field public static final java.lang.String DISALLOW_CONFIG_MOBILE_NETWORKS = "no_config_mobile_networks"; + field public static final java.lang.String DISALLOW_CONFIG_TETHERING = "no_config_tethering"; + field public static final java.lang.String DISALLOW_CONFIG_VPN = "no_config_vpn"; + field public static final java.lang.String DISALLOW_CONFIG_WIFI = "no_config_wifi"; + field public static final java.lang.String DISALLOW_CREATE_WINDOWS = "no_create_windows"; + field public static final java.lang.String DISALLOW_CROSS_PROFILE_COPY_PASTE = "no_cross_profile_copy_paste"; + field public static final java.lang.String DISALLOW_DEBUGGING_FEATURES = "no_debugging_features"; + field public static final java.lang.String DISALLOW_FACTORY_RESET = "no_factory_reset"; + field public static final java.lang.String DISALLOW_INSTALL_APPS = "no_install_apps"; + field public static final java.lang.String DISALLOW_INSTALL_UNKNOWN_SOURCES = "no_install_unknown_sources"; + field public static final java.lang.String DISALLOW_MODIFY_ACCOUNTS = "no_modify_accounts"; + field public static final java.lang.String DISALLOW_MOUNT_PHYSICAL_MEDIA = "no_physical_media"; + field public static final java.lang.String DISALLOW_OUTGOING_BEAM = "no_outgoing_beam"; + field public static final java.lang.String DISALLOW_OUTGOING_CALLS = "no_outgoing_calls"; + field public static final java.lang.String DISALLOW_REMOVE_USER = "no_remove_user"; + field public static final java.lang.String DISALLOW_SHARE_LOCATION = "no_share_location"; + field public static final java.lang.String DISALLOW_SMS = "no_sms"; + field public static final java.lang.String DISALLOW_UNINSTALL_APPS = "no_uninstall_apps"; + field public static final java.lang.String DISALLOW_UNMUTE_MICROPHONE = "no_unmute_microphone"; + field public static final java.lang.String DISALLOW_USB_FILE_TRANSFER = "no_usb_file_transfer"; + field public static final java.lang.String ENSURE_VERIFY_APPS = "ensure_verify_apps"; + field public static final java.lang.String KEY_RESTRICTIONS_PENDING = "restrictions_pending"; + } + + public abstract class Vibrator { + method public abstract void cancel(); + method public abstract boolean hasVibrator(); + method public void vibrate(long); + method public void vibrate(long, android.media.AudioAttributes); + method public void vibrate(long[], int); + method public void vibrate(long[], int, android.media.AudioAttributes); + } + + public class WorkSource implements android.os.Parcelable { + ctor public WorkSource(); + ctor public WorkSource(android.os.WorkSource); + method public boolean add(android.os.WorkSource); + method public void clear(); + method public int describeContents(); + method public boolean diff(android.os.WorkSource); + method public boolean remove(android.os.WorkSource); + method public void set(android.os.WorkSource); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + +} + +package android.os.storage { + + public abstract class OnObbStateChangeListener { + ctor public OnObbStateChangeListener(); + method public void onObbStateChange(java.lang.String, int); + field public static final int ERROR_ALREADY_MOUNTED = 24; // 0x18 + field public static final int ERROR_COULD_NOT_MOUNT = 21; // 0x15 + field public static final int ERROR_COULD_NOT_UNMOUNT = 22; // 0x16 + field public static final int ERROR_INTERNAL = 20; // 0x14 + field public static final int ERROR_NOT_MOUNTED = 23; // 0x17 + field public static final int ERROR_PERMISSION_DENIED = 25; // 0x19 + field public static final int MOUNTED = 1; // 0x1 + field public static final int UNMOUNTED = 2; // 0x2 + } + + public class StorageManager { + method public java.lang.String getMountedObbPath(java.lang.String); + method public boolean isObbMounted(java.lang.String); + method public boolean mountObb(java.lang.String, java.lang.String, android.os.storage.OnObbStateChangeListener); + method public boolean unmountObb(java.lang.String, boolean, android.os.storage.OnObbStateChangeListener); + } + +} + +package android.preference { + + public class CheckBoxPreference extends android.preference.TwoStatePreference { + ctor public CheckBoxPreference(android.content.Context, android.util.AttributeSet, int); + ctor public CheckBoxPreference(android.content.Context, android.util.AttributeSet, int, int); + ctor public CheckBoxPreference(android.content.Context, android.util.AttributeSet); + ctor public CheckBoxPreference(android.content.Context); + } + + public abstract class DialogPreference extends android.preference.Preference implements android.content.DialogInterface.OnClickListener android.content.DialogInterface.OnDismissListener android.preference.PreferenceManager.OnActivityDestroyListener { + ctor public DialogPreference(android.content.Context, android.util.AttributeSet, int, int); + ctor public DialogPreference(android.content.Context, android.util.AttributeSet, int); + ctor public DialogPreference(android.content.Context, android.util.AttributeSet); + ctor public DialogPreference(android.content.Context); + method public android.app.Dialog getDialog(); + method public android.graphics.drawable.Drawable getDialogIcon(); + method public int getDialogLayoutResource(); + method public java.lang.CharSequence getDialogMessage(); + method public java.lang.CharSequence getDialogTitle(); + method public java.lang.CharSequence getNegativeButtonText(); + method public java.lang.CharSequence getPositiveButtonText(); + method public void onActivityDestroy(); + method protected void onBindDialogView(android.view.View); + method public void onClick(android.content.DialogInterface, int); + method protected android.view.View onCreateDialogView(); + method protected void onDialogClosed(boolean); + method public void onDismiss(android.content.DialogInterface); + method protected void onPrepareDialogBuilder(android.app.AlertDialog.Builder); + method public void setDialogIcon(android.graphics.drawable.Drawable); + method public void setDialogIcon(int); + method public void setDialogLayoutResource(int); + method public void setDialogMessage(java.lang.CharSequence); + method public void setDialogMessage(int); + method public void setDialogTitle(java.lang.CharSequence); + method public void setDialogTitle(int); + method public void setNegativeButtonText(java.lang.CharSequence); + method public void setNegativeButtonText(int); + method public void setPositiveButtonText(java.lang.CharSequence); + method public void setPositiveButtonText(int); + method protected void showDialog(android.os.Bundle); + } + + public class EditTextPreference extends android.preference.DialogPreference { + ctor public EditTextPreference(android.content.Context, android.util.AttributeSet, int, int); + ctor public EditTextPreference(android.content.Context, android.util.AttributeSet, int); + ctor public EditTextPreference(android.content.Context, android.util.AttributeSet); + ctor public EditTextPreference(android.content.Context); + method public android.widget.EditText getEditText(); + method public java.lang.String getText(); + method protected void onAddEditTextToDialogView(android.view.View, android.widget.EditText); + method public void setText(java.lang.String); + } + + public class ListPreference extends android.preference.DialogPreference { + ctor public ListPreference(android.content.Context, android.util.AttributeSet, int, int); + ctor public ListPreference(android.content.Context, android.util.AttributeSet, int); + ctor public ListPreference(android.content.Context, android.util.AttributeSet); + ctor public ListPreference(android.content.Context); + method public int findIndexOfValue(java.lang.String); + method public java.lang.CharSequence[] getEntries(); + method public java.lang.CharSequence getEntry(); + method public java.lang.CharSequence[] getEntryValues(); + method public java.lang.String getValue(); + method public void setEntries(java.lang.CharSequence[]); + method public void setEntries(int); + method public void setEntryValues(java.lang.CharSequence[]); + method public void setEntryValues(int); + method public void setValue(java.lang.String); + method public void setValueIndex(int); + } + + public class MultiSelectListPreference extends android.preference.DialogPreference { + ctor public MultiSelectListPreference(android.content.Context, android.util.AttributeSet, int, int); + ctor public MultiSelectListPreference(android.content.Context, android.util.AttributeSet, int); + ctor public MultiSelectListPreference(android.content.Context, android.util.AttributeSet); + ctor public MultiSelectListPreference(android.content.Context); + method public int findIndexOfValue(java.lang.String); + method public java.lang.CharSequence[] getEntries(); + method public java.lang.CharSequence[] getEntryValues(); + method public java.util.Set getValues(); + method public void setEntries(java.lang.CharSequence[]); + method public void setEntries(int); + method public void setEntryValues(java.lang.CharSequence[]); + method public void setEntryValues(int); + method public void setValues(java.util.Set); + } + + public class Preference implements java.lang.Comparable { + ctor public Preference(android.content.Context, android.util.AttributeSet, int, int); + ctor public Preference(android.content.Context, android.util.AttributeSet, int); + ctor public Preference(android.content.Context, android.util.AttributeSet); + ctor public Preference(android.content.Context); + method protected boolean callChangeListener(java.lang.Object); + method public int compareTo(android.preference.Preference); + method protected android.preference.Preference findPreferenceInHierarchy(java.lang.String); + method public android.content.Context getContext(); + method public java.lang.String getDependency(); + method public android.content.SharedPreferences.Editor getEditor(); + method public android.os.Bundle getExtras(); + method public java.lang.String getFragment(); + method public android.graphics.drawable.Drawable getIcon(); + method public android.content.Intent getIntent(); + method public java.lang.String getKey(); + method public int getLayoutResource(); + method public android.preference.Preference.OnPreferenceChangeListener getOnPreferenceChangeListener(); + method public android.preference.Preference.OnPreferenceClickListener getOnPreferenceClickListener(); + method public int getOrder(); + method protected boolean getPersistedBoolean(boolean); + method protected float getPersistedFloat(float); + method protected int getPersistedInt(int); + method protected long getPersistedLong(long); + method protected java.lang.String getPersistedString(java.lang.String); + method public android.preference.PreferenceManager getPreferenceManager(); + method public android.content.SharedPreferences getSharedPreferences(); + method public boolean getShouldDisableView(); + method public java.lang.CharSequence getSummary(); + method public java.lang.CharSequence getTitle(); + method public int getTitleRes(); + method public android.view.View getView(android.view.View, android.view.ViewGroup); + method public int getWidgetLayoutResource(); + method public boolean hasKey(); + method public boolean isEnabled(); + method public boolean isPersistent(); + method public boolean isSelectable(); + method protected void notifyChanged(); + method public void notifyDependencyChange(boolean); + method protected void notifyHierarchyChanged(); + method protected void onAttachedToActivity(); + method protected void onAttachedToHierarchy(android.preference.PreferenceManager); + method protected void onBindView(android.view.View); + method protected void onClick(); + method protected android.view.View onCreateView(android.view.ViewGroup); + method public void onDependencyChanged(android.preference.Preference, boolean); + method protected java.lang.Object onGetDefaultValue(android.content.res.TypedArray, int); + method public void onParentChanged(android.preference.Preference, boolean); + method protected void onPrepareForRemoval(); + method protected void onRestoreInstanceState(android.os.Parcelable); + method protected android.os.Parcelable onSaveInstanceState(); + method protected void onSetInitialValue(boolean, java.lang.Object); + method public android.os.Bundle peekExtras(); + method protected boolean persistBoolean(boolean); + method protected boolean persistFloat(float); + method protected boolean persistInt(int); + method protected boolean persistLong(long); + method protected boolean persistString(java.lang.String); + method public void restoreHierarchyState(android.os.Bundle); + method public void saveHierarchyState(android.os.Bundle); + method public void setDefaultValue(java.lang.Object); + method public void setDependency(java.lang.String); + method public void setEnabled(boolean); + method public void setFragment(java.lang.String); + method public void setIcon(android.graphics.drawable.Drawable); + method public void setIcon(int); + method public void setIntent(android.content.Intent); + method public void setKey(java.lang.String); + method public void setLayoutResource(int); + method public void setOnPreferenceChangeListener(android.preference.Preference.OnPreferenceChangeListener); + method public void setOnPreferenceClickListener(android.preference.Preference.OnPreferenceClickListener); + method public void setOrder(int); + method public void setPersistent(boolean); + method public void setSelectable(boolean); + method public void setShouldDisableView(boolean); + method public void setSummary(java.lang.CharSequence); + method public void setSummary(int); + method public void setTitle(java.lang.CharSequence); + method public void setTitle(int); + method public void setWidgetLayoutResource(int); + method public boolean shouldCommit(); + method public boolean shouldDisableDependents(); + method protected boolean shouldPersist(); + field public static final int DEFAULT_ORDER = 2147483647; // 0x7fffffff + } + + public static class Preference.BaseSavedState extends android.view.AbsSavedState { + ctor public Preference.BaseSavedState(android.os.Parcel); + ctor public Preference.BaseSavedState(android.os.Parcelable); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public static abstract interface Preference.OnPreferenceChangeListener { + method public abstract boolean onPreferenceChange(android.preference.Preference, java.lang.Object); + } + + public static abstract interface Preference.OnPreferenceClickListener { + method public abstract boolean onPreferenceClick(android.preference.Preference); + } + + public abstract class PreferenceActivity extends android.app.ListActivity implements android.preference.PreferenceFragment.OnPreferenceStartFragmentCallback { + ctor public PreferenceActivity(); + method public deprecated void addPreferencesFromIntent(android.content.Intent); + method public deprecated void addPreferencesFromResource(int); + method public deprecated android.preference.Preference findPreference(java.lang.CharSequence); + method public void finishPreferencePanel(android.app.Fragment, int, android.content.Intent); + method public deprecated android.preference.PreferenceManager getPreferenceManager(); + method public deprecated android.preference.PreferenceScreen getPreferenceScreen(); + method public boolean hasHeaders(); + method public void invalidateHeaders(); + method public boolean isMultiPane(); + method protected boolean isValidFragment(java.lang.String); + method public void loadHeadersFromResource(int, java.util.List); + method public void onBuildHeaders(java.util.List); + method public android.content.Intent onBuildStartFragmentIntent(java.lang.String, android.os.Bundle, int, int); + method public android.preference.PreferenceActivity.Header onGetInitialHeader(); + method public android.preference.PreferenceActivity.Header onGetNewHeader(); + method public void onHeaderClick(android.preference.PreferenceActivity.Header, int); + method public boolean onIsHidingHeaders(); + method public boolean onIsMultiPane(); + method public boolean onPreferenceStartFragment(android.preference.PreferenceFragment, android.preference.Preference); + method public deprecated boolean onPreferenceTreeClick(android.preference.PreferenceScreen, android.preference.Preference); + method public void setListFooter(android.view.View); + method public void setParentTitle(java.lang.CharSequence, java.lang.CharSequence, android.view.View.OnClickListener); + method public deprecated void setPreferenceScreen(android.preference.PreferenceScreen); + method public void showBreadCrumbs(java.lang.CharSequence, java.lang.CharSequence); + method public void startPreferenceFragment(android.app.Fragment, boolean); + method public void startPreferencePanel(java.lang.String, android.os.Bundle, int, java.lang.CharSequence, android.app.Fragment, int); + method public void startWithFragment(java.lang.String, android.os.Bundle, android.app.Fragment, int); + method public void startWithFragment(java.lang.String, android.os.Bundle, android.app.Fragment, int, int, int); + method public void switchToHeader(java.lang.String, android.os.Bundle); + method public void switchToHeader(android.preference.PreferenceActivity.Header); + field public static final java.lang.String EXTRA_NO_HEADERS = ":android:no_headers"; + field public static final java.lang.String EXTRA_SHOW_FRAGMENT = ":android:show_fragment"; + field public static final java.lang.String EXTRA_SHOW_FRAGMENT_ARGUMENTS = ":android:show_fragment_args"; + field public static final java.lang.String EXTRA_SHOW_FRAGMENT_SHORT_TITLE = ":android:show_fragment_short_title"; + field public static final java.lang.String EXTRA_SHOW_FRAGMENT_TITLE = ":android:show_fragment_title"; + field public static final long HEADER_ID_UNDEFINED = -1L; // 0xffffffffffffffffL + } + + public static final class PreferenceActivity.Header implements android.os.Parcelable { + ctor public PreferenceActivity.Header(); + method public int describeContents(); + method public java.lang.CharSequence getBreadCrumbShortTitle(android.content.res.Resources); + method public java.lang.CharSequence getBreadCrumbTitle(android.content.res.Resources); + method public java.lang.CharSequence getSummary(android.content.res.Resources); + method public java.lang.CharSequence getTitle(android.content.res.Resources); + method public void readFromParcel(android.os.Parcel); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public java.lang.CharSequence breadCrumbShortTitle; + field public int breadCrumbShortTitleRes; + field public java.lang.CharSequence breadCrumbTitle; + field public int breadCrumbTitleRes; + field public android.os.Bundle extras; + field public java.lang.String fragment; + field public android.os.Bundle fragmentArguments; + field public int iconRes; + field public long id; + field public android.content.Intent intent; + field public java.lang.CharSequence summary; + field public int summaryRes; + field public java.lang.CharSequence title; + field public int titleRes; + } + + public class PreferenceCategory extends android.preference.PreferenceGroup { + ctor public PreferenceCategory(android.content.Context, android.util.AttributeSet, int, int); + ctor public PreferenceCategory(android.content.Context, android.util.AttributeSet, int); + ctor public PreferenceCategory(android.content.Context, android.util.AttributeSet); + ctor public PreferenceCategory(android.content.Context); + } + + public abstract class PreferenceFragment extends android.app.Fragment { + ctor public PreferenceFragment(); + method public void addPreferencesFromIntent(android.content.Intent); + method public void addPreferencesFromResource(int); + method public android.preference.Preference findPreference(java.lang.CharSequence); + method public android.preference.PreferenceManager getPreferenceManager(); + method public android.preference.PreferenceScreen getPreferenceScreen(); + method public boolean onPreferenceTreeClick(android.preference.PreferenceScreen, android.preference.Preference); + method public void setPreferenceScreen(android.preference.PreferenceScreen); + } + + public static abstract interface PreferenceFragment.OnPreferenceStartFragmentCallback { + method public abstract boolean onPreferenceStartFragment(android.preference.PreferenceFragment, android.preference.Preference); + } + + public abstract class PreferenceGroup extends android.preference.Preference { + ctor public PreferenceGroup(android.content.Context, android.util.AttributeSet, int, int); + ctor public PreferenceGroup(android.content.Context, android.util.AttributeSet, int); + ctor public PreferenceGroup(android.content.Context, android.util.AttributeSet); + method public void addItemFromInflater(android.preference.Preference); + method public boolean addPreference(android.preference.Preference); + method protected void dispatchRestoreInstanceState(android.os.Bundle); + method protected void dispatchSaveInstanceState(android.os.Bundle); + method public android.preference.Preference findPreference(java.lang.CharSequence); + method public android.preference.Preference getPreference(int); + method public int getPreferenceCount(); + method protected boolean isOnSameScreenAsChildren(); + method public boolean isOrderingAsAdded(); + method protected boolean onPrepareAddPreference(android.preference.Preference); + method public void removeAll(); + method public boolean removePreference(android.preference.Preference); + method public void setOrderingAsAdded(boolean); + } + + public class PreferenceManager { + method public android.preference.PreferenceScreen createPreferenceScreen(android.content.Context); + method public android.preference.Preference findPreference(java.lang.CharSequence); + method public static android.content.SharedPreferences getDefaultSharedPreferences(android.content.Context); + method public android.content.SharedPreferences getSharedPreferences(); + method public int getSharedPreferencesMode(); + method public java.lang.String getSharedPreferencesName(); + method public static void setDefaultValues(android.content.Context, int, boolean); + method public static void setDefaultValues(android.content.Context, java.lang.String, int, int, boolean); + method public void setSharedPreferencesMode(int); + method public void setSharedPreferencesName(java.lang.String); + field public static final java.lang.String KEY_HAS_SET_DEFAULT_VALUES = "_has_set_default_values"; + field public static final java.lang.String METADATA_KEY_PREFERENCES = "android.preference"; + } + + public static abstract interface PreferenceManager.OnActivityDestroyListener { + method public abstract void onActivityDestroy(); + } + + public static abstract interface PreferenceManager.OnActivityResultListener { + method public abstract boolean onActivityResult(int, int, android.content.Intent); + } + + public static abstract interface PreferenceManager.OnActivityStopListener { + method public abstract void onActivityStop(); + } + + public final class PreferenceScreen extends android.preference.PreferenceGroup implements android.widget.AdapterView.OnItemClickListener android.content.DialogInterface.OnDismissListener { + method public void bind(android.widget.ListView); + method public android.app.Dialog getDialog(); + method public android.widget.ListAdapter getRootAdapter(); + method protected android.widget.ListAdapter onCreateRootAdapter(); + method public void onDismiss(android.content.DialogInterface); + method public void onItemClick(android.widget.AdapterView, android.view.View, int, long); + } + + public class RingtonePreference extends android.preference.Preference implements android.preference.PreferenceManager.OnActivityResultListener { + ctor public RingtonePreference(android.content.Context, android.util.AttributeSet, int, int); + ctor public RingtonePreference(android.content.Context, android.util.AttributeSet, int); + ctor public RingtonePreference(android.content.Context, android.util.AttributeSet); + ctor public RingtonePreference(android.content.Context); + method public int getRingtoneType(); + method public boolean getShowDefault(); + method public boolean getShowSilent(); + method public boolean onActivityResult(int, int, android.content.Intent); + method protected void onPrepareRingtonePickerIntent(android.content.Intent); + method protected android.net.Uri onRestoreRingtone(); + method protected void onSaveRingtone(android.net.Uri); + method public void setRingtoneType(int); + method public void setShowDefault(boolean); + method public void setShowSilent(boolean); + } + + public class SwitchPreference extends android.preference.TwoStatePreference { + ctor public SwitchPreference(android.content.Context, android.util.AttributeSet, int, int); + ctor public SwitchPreference(android.content.Context, android.util.AttributeSet, int); + ctor public SwitchPreference(android.content.Context, android.util.AttributeSet); + ctor public SwitchPreference(android.content.Context); + method public java.lang.CharSequence getSwitchTextOff(); + method public java.lang.CharSequence getSwitchTextOn(); + method public void setSwitchTextOff(java.lang.CharSequence); + method public void setSwitchTextOff(int); + method public void setSwitchTextOn(java.lang.CharSequence); + method public void setSwitchTextOn(int); + } + + public abstract class TwoStatePreference extends android.preference.Preference { + ctor public TwoStatePreference(android.content.Context, android.util.AttributeSet, int, int); + ctor public TwoStatePreference(android.content.Context, android.util.AttributeSet, int); + ctor public TwoStatePreference(android.content.Context, android.util.AttributeSet); + ctor public TwoStatePreference(android.content.Context); + method public boolean getDisableDependentsState(); + method public java.lang.CharSequence getSummaryOff(); + method public java.lang.CharSequence getSummaryOn(); + method public boolean isChecked(); + method public void setChecked(boolean); + method public void setDisableDependentsState(boolean); + method public void setSummaryOff(java.lang.CharSequence); + method public void setSummaryOff(int); + method public void setSummaryOn(java.lang.CharSequence); + method public void setSummaryOn(int); + } + +} + +package android.print { + + public final class PageRange implements android.os.Parcelable { + ctor public PageRange(int, int); + method public int describeContents(); + method public int getEnd(); + method public int getStart(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.print.PageRange ALL_PAGES; + field public static final android.os.Parcelable.Creator CREATOR; + } + + public final class PrintAttributes implements android.os.Parcelable { + method public int describeContents(); + method public int getColorMode(); + method public android.print.PrintAttributes.MediaSize getMediaSize(); + method public android.print.PrintAttributes.Margins getMinMargins(); + method public android.print.PrintAttributes.Resolution getResolution(); + method public void writeToParcel(android.os.Parcel, int); + field public static final int COLOR_MODE_COLOR = 2; // 0x2 + field public static final int COLOR_MODE_MONOCHROME = 1; // 0x1 + field public static final android.os.Parcelable.Creator CREATOR; + } + + public static final class PrintAttributes.Builder { + ctor public PrintAttributes.Builder(); + method public android.print.PrintAttributes build(); + method public android.print.PrintAttributes.Builder setColorMode(int); + method public android.print.PrintAttributes.Builder setMediaSize(android.print.PrintAttributes.MediaSize); + method public android.print.PrintAttributes.Builder setMinMargins(android.print.PrintAttributes.Margins); + method public android.print.PrintAttributes.Builder setResolution(android.print.PrintAttributes.Resolution); + } + + public static final class PrintAttributes.Margins { + ctor public PrintAttributes.Margins(int, int, int, int); + method public int getBottomMils(); + method public int getLeftMils(); + method public int getRightMils(); + method public int getTopMils(); + field public static final android.print.PrintAttributes.Margins NO_MARGINS; + } + + public static final class PrintAttributes.MediaSize { + ctor public PrintAttributes.MediaSize(java.lang.String, java.lang.String, int, int); + method public android.print.PrintAttributes.MediaSize asLandscape(); + method public android.print.PrintAttributes.MediaSize asPortrait(); + method public int getHeightMils(); + method public java.lang.String getId(); + method public java.lang.String getLabel(android.content.pm.PackageManager); + method public int getWidthMils(); + method public boolean isPortrait(); + field public static final android.print.PrintAttributes.MediaSize ISO_A0; + field public static final android.print.PrintAttributes.MediaSize ISO_A1; + field public static final android.print.PrintAttributes.MediaSize ISO_A10; + field public static final android.print.PrintAttributes.MediaSize ISO_A2; + field public static final android.print.PrintAttributes.MediaSize ISO_A3; + field public static final android.print.PrintAttributes.MediaSize ISO_A4; + field public static final android.print.PrintAttributes.MediaSize ISO_A5; + field public static final android.print.PrintAttributes.MediaSize ISO_A6; + field public static final android.print.PrintAttributes.MediaSize ISO_A7; + field public static final android.print.PrintAttributes.MediaSize ISO_A8; + field public static final android.print.PrintAttributes.MediaSize ISO_A9; + field public static final android.print.PrintAttributes.MediaSize ISO_B0; + field public static final android.print.PrintAttributes.MediaSize ISO_B1; + field public static final android.print.PrintAttributes.MediaSize ISO_B10; + field public static final android.print.PrintAttributes.MediaSize ISO_B2; + field public static final android.print.PrintAttributes.MediaSize ISO_B3; + field public static final android.print.PrintAttributes.MediaSize ISO_B4; + field public static final android.print.PrintAttributes.MediaSize ISO_B5; + field public static final android.print.PrintAttributes.MediaSize ISO_B6; + field public static final android.print.PrintAttributes.MediaSize ISO_B7; + field public static final android.print.PrintAttributes.MediaSize ISO_B8; + field public static final android.print.PrintAttributes.MediaSize ISO_B9; + field public static final android.print.PrintAttributes.MediaSize ISO_C0; + field public static final android.print.PrintAttributes.MediaSize ISO_C1; + field public static final android.print.PrintAttributes.MediaSize ISO_C10; + field public static final android.print.PrintAttributes.MediaSize ISO_C2; + field public static final android.print.PrintAttributes.MediaSize ISO_C3; + field public static final android.print.PrintAttributes.MediaSize ISO_C4; + field public static final android.print.PrintAttributes.MediaSize ISO_C5; + field public static final android.print.PrintAttributes.MediaSize ISO_C6; + field public static final android.print.PrintAttributes.MediaSize ISO_C7; + field public static final android.print.PrintAttributes.MediaSize ISO_C8; + field public static final android.print.PrintAttributes.MediaSize ISO_C9; + field public static final android.print.PrintAttributes.MediaSize JIS_B0; + field public static final android.print.PrintAttributes.MediaSize JIS_B1; + field public static final android.print.PrintAttributes.MediaSize JIS_B10; + field public static final android.print.PrintAttributes.MediaSize JIS_B2; + field public static final android.print.PrintAttributes.MediaSize JIS_B3; + field public static final android.print.PrintAttributes.MediaSize JIS_B4; + field public static final android.print.PrintAttributes.MediaSize JIS_B5; + field public static final android.print.PrintAttributes.MediaSize JIS_B6; + field public static final android.print.PrintAttributes.MediaSize JIS_B7; + field public static final android.print.PrintAttributes.MediaSize JIS_B8; + field public static final android.print.PrintAttributes.MediaSize JIS_B9; + field public static final android.print.PrintAttributes.MediaSize JIS_EXEC; + field public static final android.print.PrintAttributes.MediaSize JPN_CHOU2; + field public static final android.print.PrintAttributes.MediaSize JPN_CHOU3; + field public static final android.print.PrintAttributes.MediaSize JPN_CHOU4; + field public static final android.print.PrintAttributes.MediaSize JPN_HAGAKI; + field public static final android.print.PrintAttributes.MediaSize JPN_KAHU; + field public static final android.print.PrintAttributes.MediaSize JPN_KAKU2; + field public static final android.print.PrintAttributes.MediaSize JPN_OUFUKU; + field public static final android.print.PrintAttributes.MediaSize JPN_YOU4; + field public static final android.print.PrintAttributes.MediaSize NA_FOOLSCAP; + field public static final android.print.PrintAttributes.MediaSize NA_GOVT_LETTER; + field public static final android.print.PrintAttributes.MediaSize NA_INDEX_3X5; + field public static final android.print.PrintAttributes.MediaSize NA_INDEX_4X6; + field public static final android.print.PrintAttributes.MediaSize NA_INDEX_5X8; + field public static final android.print.PrintAttributes.MediaSize NA_JUNIOR_LEGAL; + field public static final android.print.PrintAttributes.MediaSize NA_LEDGER; + field public static final android.print.PrintAttributes.MediaSize NA_LEGAL; + field public static final android.print.PrintAttributes.MediaSize NA_LETTER; + field public static final android.print.PrintAttributes.MediaSize NA_MONARCH; + field public static final android.print.PrintAttributes.MediaSize NA_QUARTO; + field public static final android.print.PrintAttributes.MediaSize NA_TABLOID; + field public static final android.print.PrintAttributes.MediaSize OM_DAI_PA_KAI; + field public static final android.print.PrintAttributes.MediaSize OM_JUURO_KU_KAI; + field public static final android.print.PrintAttributes.MediaSize OM_PA_KAI; + field public static final android.print.PrintAttributes.MediaSize PRC_1; + field public static final android.print.PrintAttributes.MediaSize PRC_10; + field public static final android.print.PrintAttributes.MediaSize PRC_16K; + field public static final android.print.PrintAttributes.MediaSize PRC_2; + field public static final android.print.PrintAttributes.MediaSize PRC_3; + field public static final android.print.PrintAttributes.MediaSize PRC_4; + field public static final android.print.PrintAttributes.MediaSize PRC_5; + field public static final android.print.PrintAttributes.MediaSize PRC_6; + field public static final android.print.PrintAttributes.MediaSize PRC_7; + field public static final android.print.PrintAttributes.MediaSize PRC_8; + field public static final android.print.PrintAttributes.MediaSize PRC_9; + field public static final android.print.PrintAttributes.MediaSize ROC_16K; + field public static final android.print.PrintAttributes.MediaSize ROC_8K; + field public static final android.print.PrintAttributes.MediaSize UNKNOWN_LANDSCAPE; + field public static final android.print.PrintAttributes.MediaSize UNKNOWN_PORTRAIT; + } + + public static final class PrintAttributes.Resolution { + ctor public PrintAttributes.Resolution(java.lang.String, java.lang.String, int, int); + method public int getHorizontalDpi(); + method public java.lang.String getId(); + method public java.lang.String getLabel(); + method public int getVerticalDpi(); + } + + public abstract class PrintDocumentAdapter { + ctor public PrintDocumentAdapter(); + method public void onFinish(); + method public abstract void onLayout(android.print.PrintAttributes, android.print.PrintAttributes, android.os.CancellationSignal, android.print.PrintDocumentAdapter.LayoutResultCallback, android.os.Bundle); + method public void onStart(); + method public abstract void onWrite(android.print.PageRange[], android.os.ParcelFileDescriptor, android.os.CancellationSignal, android.print.PrintDocumentAdapter.WriteResultCallback); + field public static final java.lang.String EXTRA_PRINT_PREVIEW = "EXTRA_PRINT_PREVIEW"; + } + + public static abstract class PrintDocumentAdapter.LayoutResultCallback { + method public void onLayoutCancelled(); + method public void onLayoutFailed(java.lang.CharSequence); + method public void onLayoutFinished(android.print.PrintDocumentInfo, boolean); + } + + public static abstract class PrintDocumentAdapter.WriteResultCallback { + method public void onWriteCancelled(); + method public void onWriteFailed(java.lang.CharSequence); + method public void onWriteFinished(android.print.PageRange[]); + } + + public final class PrintDocumentInfo implements android.os.Parcelable { + method public int describeContents(); + method public int getContentType(); + method public long getDataSize(); + method public java.lang.String getName(); + method public int getPageCount(); + method public void writeToParcel(android.os.Parcel, int); + field public static final int CONTENT_TYPE_DOCUMENT = 0; // 0x0 + field public static final int CONTENT_TYPE_PHOTO = 1; // 0x1 + field public static final int CONTENT_TYPE_UNKNOWN = -1; // 0xffffffff + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int PAGE_COUNT_UNKNOWN = -1; // 0xffffffff + } + + public static final class PrintDocumentInfo.Builder { + ctor public PrintDocumentInfo.Builder(java.lang.String); + method public android.print.PrintDocumentInfo build(); + method public android.print.PrintDocumentInfo.Builder setContentType(int); + method public android.print.PrintDocumentInfo.Builder setPageCount(int); + } + + public final class PrintJob { + method public void cancel(); + method public android.print.PrintJobId getId(); + method public android.print.PrintJobInfo getInfo(); + method public boolean isBlocked(); + method public boolean isCancelled(); + method public boolean isCompleted(); + method public boolean isFailed(); + method public boolean isQueued(); + method public boolean isStarted(); + method public void restart(); + } + + public final class PrintJobId implements android.os.Parcelable { + method public int describeContents(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public final class PrintJobInfo implements android.os.Parcelable { + method public int describeContents(); + method public android.print.PrintAttributes getAttributes(); + method public int getCopies(); + method public long getCreationTime(); + method public android.print.PrintJobId getId(); + method public java.lang.String getLabel(); + method public android.print.PageRange[] getPages(); + method public android.print.PrinterId getPrinterId(); + method public int getState(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int STATE_BLOCKED = 4; // 0x4 + field public static final int STATE_CANCELED = 7; // 0x7 + field public static final int STATE_COMPLETED = 5; // 0x5 + field public static final int STATE_CREATED = 1; // 0x1 + field public static final int STATE_FAILED = 6; // 0x6 + field public static final int STATE_QUEUED = 2; // 0x2 + field public static final int STATE_STARTED = 3; // 0x3 + } + + public static final class PrintJobInfo.Builder { + ctor public PrintJobInfo.Builder(android.print.PrintJobInfo); + method public android.print.PrintJobInfo build(); + method public void putAdvancedOption(java.lang.String, java.lang.String); + method public void putAdvancedOption(java.lang.String, int); + method public void setAttributes(android.print.PrintAttributes); + method public void setCopies(int); + method public void setPages(android.print.PageRange[]); + } + + public final class PrintManager { + method public java.util.List getPrintJobs(); + method public android.print.PrintJob print(java.lang.String, android.print.PrintDocumentAdapter, android.print.PrintAttributes); + } + + public final class PrinterCapabilitiesInfo implements android.os.Parcelable { + method public int describeContents(); + method public int getColorModes(); + method public android.print.PrintAttributes getDefaults(); + method public java.util.List getMediaSizes(); + method public android.print.PrintAttributes.Margins getMinMargins(); + method public java.util.List getResolutions(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public static final class PrinterCapabilitiesInfo.Builder { + ctor public PrinterCapabilitiesInfo.Builder(android.print.PrinterId); + method public android.print.PrinterCapabilitiesInfo.Builder addMediaSize(android.print.PrintAttributes.MediaSize, boolean); + method public android.print.PrinterCapabilitiesInfo.Builder addResolution(android.print.PrintAttributes.Resolution, boolean); + method public android.print.PrinterCapabilitiesInfo build(); + method public android.print.PrinterCapabilitiesInfo.Builder setColorModes(int, int); + method public android.print.PrinterCapabilitiesInfo.Builder setMinMargins(android.print.PrintAttributes.Margins); + } + + public final class PrinterId implements android.os.Parcelable { + method public int describeContents(); + method public java.lang.String getLocalId(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public final class PrinterInfo implements android.os.Parcelable { + method public int describeContents(); + method public android.print.PrinterCapabilitiesInfo getCapabilities(); + method public java.lang.String getDescription(); + method public android.print.PrinterId getId(); + method public java.lang.String getName(); + method public int getStatus(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int STATUS_BUSY = 2; // 0x2 + field public static final int STATUS_IDLE = 1; // 0x1 + field public static final int STATUS_UNAVAILABLE = 3; // 0x3 + } + + public static final class PrinterInfo.Builder { + ctor public PrinterInfo.Builder(android.print.PrinterId, java.lang.String, int); + ctor public PrinterInfo.Builder(android.print.PrinterInfo); + method public android.print.PrinterInfo build(); + method public android.print.PrinterInfo.Builder setCapabilities(android.print.PrinterCapabilitiesInfo); + method public android.print.PrinterInfo.Builder setDescription(java.lang.String); + method public android.print.PrinterInfo.Builder setName(java.lang.String); + method public android.print.PrinterInfo.Builder setStatus(int); + } + +} + +package android.print.pdf { + + public class PrintedPdfDocument extends android.graphics.pdf.PdfDocument { + ctor public PrintedPdfDocument(android.content.Context, android.print.PrintAttributes); + method public android.graphics.Rect getPageContentRect(); + method public int getPageHeight(); + method public int getPageWidth(); + method public android.graphics.pdf.PdfDocument.Page startPage(int); + } + +} + +package android.printservice { + + public final class PrintDocument { + method public android.os.ParcelFileDescriptor getData(); + method public android.print.PrintDocumentInfo getInfo(); + } + + public final class PrintJob { + method public boolean block(java.lang.String); + method public boolean cancel(); + method public boolean complete(); + method public boolean fail(java.lang.String); + method public int getAdvancedIntOption(java.lang.String); + method public java.lang.String getAdvancedStringOption(java.lang.String); + method public android.printservice.PrintDocument getDocument(); + method public android.print.PrintJobId getId(); + method public android.print.PrintJobInfo getInfo(); + method public java.lang.String getTag(); + method public boolean hasAdvancedOption(java.lang.String); + method public boolean isBlocked(); + method public boolean isCancelled(); + method public boolean isCompleted(); + method public boolean isFailed(); + method public boolean isQueued(); + method public boolean isStarted(); + method public boolean setTag(java.lang.String); + method public boolean start(); + } + + public abstract class PrintService extends android.app.Service { + ctor public PrintService(); + method protected final void attachBaseContext(android.content.Context); + method public final android.print.PrinterId generatePrinterId(java.lang.String); + method public final java.util.List getActivePrintJobs(); + method public final android.os.IBinder onBind(android.content.Intent); + method protected void onConnected(); + method protected abstract android.printservice.PrinterDiscoverySession onCreatePrinterDiscoverySession(); + method protected void onDisconnected(); + method protected abstract void onPrintJobQueued(android.printservice.PrintJob); + method protected abstract void onRequestCancelPrintJob(android.printservice.PrintJob); + field public static final java.lang.String EXTRA_PRINTER_INFO = "android.intent.extra.print.EXTRA_PRINTER_INFO"; + field public static final java.lang.String EXTRA_PRINT_JOB_INFO = "android.intent.extra.print.PRINT_JOB_INFO"; + field public static final java.lang.String SERVICE_INTERFACE = "android.printservice.PrintService"; + field public static final java.lang.String SERVICE_META_DATA = "android.printservice"; + } + + public abstract class PrinterDiscoverySession { + ctor public PrinterDiscoverySession(); + method public final void addPrinters(java.util.List); + method public final java.util.List getPrinters(); + method public final java.util.List getTrackedPrinters(); + method public final boolean isDestroyed(); + method public final boolean isPrinterDiscoveryStarted(); + method public abstract void onDestroy(); + method public abstract void onStartPrinterDiscovery(java.util.List); + method public abstract void onStartPrinterStateTracking(android.print.PrinterId); + method public abstract void onStopPrinterDiscovery(); + method public abstract void onStopPrinterStateTracking(android.print.PrinterId); + method public abstract void onValidatePrinters(java.util.List); + method public final void removePrinters(java.util.List); + } + +} + +package android.provider { + + public final class AlarmClock { + ctor public AlarmClock(); + field public static final java.lang.String ACTION_SET_ALARM = "android.intent.action.SET_ALARM"; + field public static final java.lang.String ACTION_SET_TIMER = "android.intent.action.SET_TIMER"; + field public static final java.lang.String ACTION_SHOW_ALARMS = "android.intent.action.SHOW_ALARMS"; + field public static final java.lang.String EXTRA_DAYS = "android.intent.extra.alarm.DAYS"; + field public static final java.lang.String EXTRA_HOUR = "android.intent.extra.alarm.HOUR"; + field public static final java.lang.String EXTRA_LENGTH = "android.intent.extra.alarm.LENGTH"; + field public static final java.lang.String EXTRA_MESSAGE = "android.intent.extra.alarm.MESSAGE"; + field public static final java.lang.String EXTRA_MINUTES = "android.intent.extra.alarm.MINUTES"; + field public static final java.lang.String EXTRA_RINGTONE = "android.intent.extra.alarm.RINGTONE"; + field public static final java.lang.String EXTRA_SKIP_UI = "android.intent.extra.alarm.SKIP_UI"; + field public static final java.lang.String EXTRA_VIBRATE = "android.intent.extra.alarm.VIBRATE"; + field public static final java.lang.String VALUE_RINGTONE_SILENT = "silent"; + } + + public abstract interface BaseColumns { + field public static final java.lang.String _COUNT = "_count"; + field public static final java.lang.String _ID = "_id"; + } + + public class Browser { + ctor public Browser(); + method public static final void addSearchUrl(android.content.ContentResolver, java.lang.String); + method public static final boolean canClearHistory(android.content.ContentResolver); + method public static final void clearHistory(android.content.ContentResolver); + method public static final void clearSearches(android.content.ContentResolver); + method public static final void deleteFromHistory(android.content.ContentResolver, java.lang.String); + method public static final void deleteHistoryTimeFrame(android.content.ContentResolver, long, long); + method public static final android.database.Cursor getAllBookmarks(android.content.ContentResolver) throws java.lang.IllegalStateException; + method public static final android.database.Cursor getAllVisitedUrls(android.content.ContentResolver) throws java.lang.IllegalStateException; + method public static final void requestAllIcons(android.content.ContentResolver, java.lang.String, android.webkit.WebIconDatabase.IconListener); + method public static final void saveBookmark(android.content.Context, java.lang.String, java.lang.String); + method public static final void sendString(android.content.Context, java.lang.String); + method public static final void truncateHistory(android.content.ContentResolver); + method public static final void updateVisitedHistory(android.content.ContentResolver, java.lang.String, boolean); + field public static final android.net.Uri BOOKMARKS_URI; + field public static final java.lang.String EXTRA_APPLICATION_ID = "com.android.browser.application_id"; + field public static final java.lang.String EXTRA_CREATE_NEW_TAB = "create_new_tab"; + field public static final java.lang.String EXTRA_HEADERS = "com.android.browser.headers"; + field public static final java.lang.String[] HISTORY_PROJECTION; + field public static final int HISTORY_PROJECTION_BOOKMARK_INDEX = 4; // 0x4 + field public static final int HISTORY_PROJECTION_DATE_INDEX = 3; // 0x3 + field public static final int HISTORY_PROJECTION_FAVICON_INDEX = 6; // 0x6 + field public static final int HISTORY_PROJECTION_ID_INDEX = 0; // 0x0 + field public static final int HISTORY_PROJECTION_TITLE_INDEX = 5; // 0x5 + field public static final int HISTORY_PROJECTION_URL_INDEX = 1; // 0x1 + field public static final int HISTORY_PROJECTION_VISITS_INDEX = 2; // 0x2 + field public static final java.lang.String INITIAL_ZOOM_LEVEL = "browser.initialZoomLevel"; + field public static final java.lang.String[] SEARCHES_PROJECTION; + field public static final int SEARCHES_PROJECTION_DATE_INDEX = 2; // 0x2 + field public static final int SEARCHES_PROJECTION_SEARCH_INDEX = 1; // 0x1 + field public static final android.net.Uri SEARCHES_URI; + field public static final java.lang.String[] TRUNCATE_HISTORY_PROJECTION; + field public static final int TRUNCATE_HISTORY_PROJECTION_ID_INDEX = 0; // 0x0 + field public static final int TRUNCATE_N_OLDEST = 5; // 0x5 + } + + public static class Browser.BookmarkColumns implements android.provider.BaseColumns { + ctor public Browser.BookmarkColumns(); + field public static final java.lang.String BOOKMARK = "bookmark"; + field public static final java.lang.String CREATED = "created"; + field public static final java.lang.String DATE = "date"; + field public static final java.lang.String FAVICON = "favicon"; + field public static final java.lang.String TITLE = "title"; + field public static final java.lang.String URL = "url"; + field public static final java.lang.String VISITS = "visits"; + } + + public static class Browser.SearchColumns implements android.provider.BaseColumns { + ctor public Browser.SearchColumns(); + field public static final java.lang.String DATE = "date"; + field public static final java.lang.String SEARCH = "search"; + field public static final deprecated java.lang.String URL = "url"; + } + + public final class CalendarContract { + field public static final java.lang.String ACCOUNT_TYPE_LOCAL = "LOCAL"; + field public static final java.lang.String ACTION_EVENT_REMINDER = "android.intent.action.EVENT_REMINDER"; + field public static final java.lang.String ACTION_HANDLE_CUSTOM_EVENT = "android.provider.calendar.action.HANDLE_CUSTOM_EVENT"; + field public static final java.lang.String AUTHORITY = "com.android.calendar"; + field public static final java.lang.String CALLER_IS_SYNCADAPTER = "caller_is_syncadapter"; + field public static final android.net.Uri CONTENT_URI; + field public static final java.lang.String EXTRA_CUSTOM_APP_URI = "customAppUri"; + field public static final java.lang.String EXTRA_EVENT_ALL_DAY = "allDay"; + field public static final java.lang.String EXTRA_EVENT_BEGIN_TIME = "beginTime"; + field public static final java.lang.String EXTRA_EVENT_END_TIME = "endTime"; + } + + public static final class CalendarContract.Attendees implements android.provider.BaseColumns android.provider.CalendarContract.AttendeesColumns android.provider.CalendarContract.EventsColumns { + method public static final android.database.Cursor query(android.content.ContentResolver, long, java.lang.String[]); + field public static final android.net.Uri CONTENT_URI; + } + + protected static abstract interface CalendarContract.AttendeesColumns { + field public static final java.lang.String ATTENDEE_EMAIL = "attendeeEmail"; + field public static final java.lang.String ATTENDEE_IDENTITY = "attendeeIdentity"; + field public static final java.lang.String ATTENDEE_ID_NAMESPACE = "attendeeIdNamespace"; + field public static final java.lang.String ATTENDEE_NAME = "attendeeName"; + field public static final java.lang.String ATTENDEE_RELATIONSHIP = "attendeeRelationship"; + field public static final java.lang.String ATTENDEE_STATUS = "attendeeStatus"; + field public static final int ATTENDEE_STATUS_ACCEPTED = 1; // 0x1 + field public static final int ATTENDEE_STATUS_DECLINED = 2; // 0x2 + field public static final int ATTENDEE_STATUS_INVITED = 3; // 0x3 + field public static final int ATTENDEE_STATUS_NONE = 0; // 0x0 + field public static final int ATTENDEE_STATUS_TENTATIVE = 4; // 0x4 + field public static final java.lang.String ATTENDEE_TYPE = "attendeeType"; + field public static final java.lang.String EVENT_ID = "event_id"; + field public static final int RELATIONSHIP_ATTENDEE = 1; // 0x1 + field public static final int RELATIONSHIP_NONE = 0; // 0x0 + field public static final int RELATIONSHIP_ORGANIZER = 2; // 0x2 + field public static final int RELATIONSHIP_PERFORMER = 3; // 0x3 + field public static final int RELATIONSHIP_SPEAKER = 4; // 0x4 + field public static final int TYPE_NONE = 0; // 0x0 + field public static final int TYPE_OPTIONAL = 2; // 0x2 + field public static final int TYPE_REQUIRED = 1; // 0x1 + field public static final int TYPE_RESOURCE = 3; // 0x3 + } + + public static final class CalendarContract.CalendarAlerts implements android.provider.BaseColumns android.provider.CalendarContract.CalendarAlertsColumns android.provider.CalendarContract.CalendarColumns android.provider.CalendarContract.EventsColumns { + field public static final android.net.Uri CONTENT_URI; + field public static final android.net.Uri CONTENT_URI_BY_INSTANCE; + } + + protected static abstract interface CalendarContract.CalendarAlertsColumns { + field public static final java.lang.String ALARM_TIME = "alarmTime"; + field public static final java.lang.String BEGIN = "begin"; + field public static final java.lang.String CREATION_TIME = "creationTime"; + field public static final java.lang.String DEFAULT_SORT_ORDER = "begin ASC,title ASC"; + field public static final java.lang.String END = "end"; + field public static final java.lang.String EVENT_ID = "event_id"; + field public static final java.lang.String MINUTES = "minutes"; + field public static final java.lang.String NOTIFY_TIME = "notifyTime"; + field public static final java.lang.String RECEIVED_TIME = "receivedTime"; + field public static final java.lang.String STATE = "state"; + field public static final int STATE_DISMISSED = 2; // 0x2 + field public static final int STATE_FIRED = 1; // 0x1 + field public static final int STATE_SCHEDULED = 0; // 0x0 + } + + public static final class CalendarContract.CalendarCache implements android.provider.CalendarContract.CalendarCacheColumns { + field public static final java.lang.String KEY_TIMEZONE_INSTANCES = "timezoneInstances"; + field public static final java.lang.String KEY_TIMEZONE_INSTANCES_PREVIOUS = "timezoneInstancesPrevious"; + field public static final java.lang.String KEY_TIMEZONE_TYPE = "timezoneType"; + field public static final java.lang.String TIMEZONE_TYPE_AUTO = "auto"; + field public static final java.lang.String TIMEZONE_TYPE_HOME = "home"; + field public static final android.net.Uri URI; + } + + protected static abstract interface CalendarContract.CalendarCacheColumns { + field public static final java.lang.String KEY = "key"; + field public static final java.lang.String VALUE = "value"; + } + + protected static abstract interface CalendarContract.CalendarColumns { + field public static final java.lang.String ALLOWED_ATTENDEE_TYPES = "allowedAttendeeTypes"; + field public static final java.lang.String ALLOWED_AVAILABILITY = "allowedAvailability"; + field public static final java.lang.String ALLOWED_REMINDERS = "allowedReminders"; + field public static final java.lang.String CALENDAR_ACCESS_LEVEL = "calendar_access_level"; + field public static final java.lang.String CALENDAR_COLOR = "calendar_color"; + field public static final java.lang.String CALENDAR_COLOR_KEY = "calendar_color_index"; + field public static final java.lang.String CALENDAR_DISPLAY_NAME = "calendar_displayName"; + field public static final java.lang.String CALENDAR_TIME_ZONE = "calendar_timezone"; + field public static final int CAL_ACCESS_CONTRIBUTOR = 500; // 0x1f4 + field public static final int CAL_ACCESS_EDITOR = 600; // 0x258 + field public static final int CAL_ACCESS_FREEBUSY = 100; // 0x64 + field public static final int CAL_ACCESS_NONE = 0; // 0x0 + field public static final int CAL_ACCESS_OVERRIDE = 400; // 0x190 + field public static final int CAL_ACCESS_OWNER = 700; // 0x2bc + field public static final int CAL_ACCESS_READ = 200; // 0xc8 + field public static final int CAL_ACCESS_RESPOND = 300; // 0x12c + field public static final int CAL_ACCESS_ROOT = 800; // 0x320 + field public static final java.lang.String CAN_MODIFY_TIME_ZONE = "canModifyTimeZone"; + field public static final java.lang.String CAN_ORGANIZER_RESPOND = "canOrganizerRespond"; + field public static final java.lang.String IS_PRIMARY = "isPrimary"; + field public static final java.lang.String MAX_REMINDERS = "maxReminders"; + field public static final java.lang.String OWNER_ACCOUNT = "ownerAccount"; + field public static final java.lang.String SYNC_EVENTS = "sync_events"; + field public static final java.lang.String VISIBLE = "visible"; + } + + public static final class CalendarContract.CalendarEntity implements android.provider.BaseColumns android.provider.CalendarContract.CalendarColumns android.provider.CalendarContract.SyncColumns { + method public static android.content.EntityIterator newEntityIterator(android.database.Cursor); + field public static final android.net.Uri CONTENT_URI; + } + + protected static abstract interface CalendarContract.CalendarSyncColumns { + field public static final java.lang.String CAL_SYNC1 = "cal_sync1"; + field public static final java.lang.String CAL_SYNC10 = "cal_sync10"; + field public static final java.lang.String CAL_SYNC2 = "cal_sync2"; + field public static final java.lang.String CAL_SYNC3 = "cal_sync3"; + field public static final java.lang.String CAL_SYNC4 = "cal_sync4"; + field public static final java.lang.String CAL_SYNC5 = "cal_sync5"; + field public static final java.lang.String CAL_SYNC6 = "cal_sync6"; + field public static final java.lang.String CAL_SYNC7 = "cal_sync7"; + field public static final java.lang.String CAL_SYNC8 = "cal_sync8"; + field public static final java.lang.String CAL_SYNC9 = "cal_sync9"; + } + + public static final class CalendarContract.Calendars implements android.provider.BaseColumns android.provider.CalendarContract.CalendarColumns android.provider.CalendarContract.SyncColumns { + field public static final java.lang.String CALENDAR_LOCATION = "calendar_location"; + field public static final android.net.Uri CONTENT_URI; + field public static final java.lang.String DEFAULT_SORT_ORDER = "calendar_displayName"; + field public static final java.lang.String NAME = "name"; + } + + public static final class CalendarContract.Colors implements android.provider.CalendarContract.ColorsColumns { + field public static final android.net.Uri CONTENT_URI; + } + + protected static abstract interface CalendarContract.ColorsColumns implements android.provider.SyncStateContract.Columns { + field public static final java.lang.String COLOR = "color"; + field public static final java.lang.String COLOR_KEY = "color_index"; + field public static final java.lang.String COLOR_TYPE = "color_type"; + field public static final int TYPE_CALENDAR = 0; // 0x0 + field public static final int TYPE_EVENT = 1; // 0x1 + } + + public static final class CalendarContract.EventDays implements android.provider.CalendarContract.EventDaysColumns { + method public static final android.database.Cursor query(android.content.ContentResolver, int, int, java.lang.String[]); + field public static final android.net.Uri CONTENT_URI; + } + + protected static abstract interface CalendarContract.EventDaysColumns { + field public static final java.lang.String ENDDAY = "endDay"; + field public static final java.lang.String STARTDAY = "startDay"; + } + + public static final class CalendarContract.Events implements android.provider.BaseColumns android.provider.CalendarContract.CalendarColumns android.provider.CalendarContract.EventsColumns android.provider.CalendarContract.SyncColumns { + field public static final android.net.Uri CONTENT_EXCEPTION_URI; + field public static final android.net.Uri CONTENT_URI; + } + + protected static abstract interface CalendarContract.EventsColumns { + field public static final int ACCESS_CONFIDENTIAL = 1; // 0x1 + field public static final int ACCESS_DEFAULT = 0; // 0x0 + field public static final java.lang.String ACCESS_LEVEL = "accessLevel"; + field public static final int ACCESS_PRIVATE = 2; // 0x2 + field public static final int ACCESS_PUBLIC = 3; // 0x3 + field public static final java.lang.String ALL_DAY = "allDay"; + field public static final java.lang.String AVAILABILITY = "availability"; + field public static final int AVAILABILITY_BUSY = 0; // 0x0 + field public static final int AVAILABILITY_FREE = 1; // 0x1 + field public static final int AVAILABILITY_TENTATIVE = 2; // 0x2 + field public static final java.lang.String CALENDAR_ID = "calendar_id"; + field public static final java.lang.String CAN_INVITE_OTHERS = "canInviteOthers"; + field public static final java.lang.String CUSTOM_APP_PACKAGE = "customAppPackage"; + field public static final java.lang.String CUSTOM_APP_URI = "customAppUri"; + field public static final java.lang.String DESCRIPTION = "description"; + field public static final java.lang.String DISPLAY_COLOR = "displayColor"; + field public static final java.lang.String DTEND = "dtend"; + field public static final java.lang.String DTSTART = "dtstart"; + field public static final java.lang.String DURATION = "duration"; + field public static final java.lang.String EVENT_COLOR = "eventColor"; + field public static final java.lang.String EVENT_COLOR_KEY = "eventColor_index"; + field public static final java.lang.String EVENT_END_TIMEZONE = "eventEndTimezone"; + field public static final java.lang.String EVENT_LOCATION = "eventLocation"; + field public static final java.lang.String EVENT_TIMEZONE = "eventTimezone"; + field public static final java.lang.String EXDATE = "exdate"; + field public static final java.lang.String EXRULE = "exrule"; + field public static final java.lang.String GUESTS_CAN_INVITE_OTHERS = "guestsCanInviteOthers"; + field public static final java.lang.String GUESTS_CAN_MODIFY = "guestsCanModify"; + field public static final java.lang.String GUESTS_CAN_SEE_GUESTS = "guestsCanSeeGuests"; + field public static final java.lang.String HAS_ALARM = "hasAlarm"; + field public static final java.lang.String HAS_ATTENDEE_DATA = "hasAttendeeData"; + field public static final java.lang.String HAS_EXTENDED_PROPERTIES = "hasExtendedProperties"; + field public static final java.lang.String IS_ORGANIZER = "isOrganizer"; + field public static final java.lang.String LAST_DATE = "lastDate"; + field public static final java.lang.String LAST_SYNCED = "lastSynced"; + field public static final java.lang.String ORGANIZER = "organizer"; + field public static final java.lang.String ORIGINAL_ALL_DAY = "originalAllDay"; + field public static final java.lang.String ORIGINAL_ID = "original_id"; + field public static final java.lang.String ORIGINAL_INSTANCE_TIME = "originalInstanceTime"; + field public static final java.lang.String ORIGINAL_SYNC_ID = "original_sync_id"; + field public static final java.lang.String RDATE = "rdate"; + field public static final java.lang.String RRULE = "rrule"; + field public static final java.lang.String SELF_ATTENDEE_STATUS = "selfAttendeeStatus"; + field public static final java.lang.String STATUS = "eventStatus"; + field public static final int STATUS_CANCELED = 2; // 0x2 + field public static final int STATUS_CONFIRMED = 1; // 0x1 + field public static final int STATUS_TENTATIVE = 0; // 0x0 + field public static final java.lang.String SYNC_DATA1 = "sync_data1"; + field public static final java.lang.String SYNC_DATA10 = "sync_data10"; + field public static final java.lang.String SYNC_DATA2 = "sync_data2"; + field public static final java.lang.String SYNC_DATA3 = "sync_data3"; + field public static final java.lang.String SYNC_DATA4 = "sync_data4"; + field public static final java.lang.String SYNC_DATA5 = "sync_data5"; + field public static final java.lang.String SYNC_DATA6 = "sync_data6"; + field public static final java.lang.String SYNC_DATA7 = "sync_data7"; + field public static final java.lang.String SYNC_DATA8 = "sync_data8"; + field public static final java.lang.String SYNC_DATA9 = "sync_data9"; + field public static final java.lang.String TITLE = "title"; + field public static final java.lang.String UID_2445 = "uid2445"; + } + + public static final class CalendarContract.EventsEntity implements android.provider.BaseColumns android.provider.CalendarContract.EventsColumns android.provider.CalendarContract.SyncColumns { + method public static android.content.EntityIterator newEntityIterator(android.database.Cursor, android.content.ContentResolver); + method public static android.content.EntityIterator newEntityIterator(android.database.Cursor, android.content.ContentProviderClient); + field public static final android.net.Uri CONTENT_URI; + } + + public static final class CalendarContract.ExtendedProperties implements android.provider.BaseColumns android.provider.CalendarContract.EventsColumns android.provider.CalendarContract.ExtendedPropertiesColumns { + field public static final android.net.Uri CONTENT_URI; + } + + protected static abstract interface CalendarContract.ExtendedPropertiesColumns { + field public static final java.lang.String EVENT_ID = "event_id"; + field public static final java.lang.String NAME = "name"; + field public static final java.lang.String VALUE = "value"; + } + + public static final class CalendarContract.Instances implements android.provider.BaseColumns android.provider.CalendarContract.CalendarColumns android.provider.CalendarContract.EventsColumns { + method public static final android.database.Cursor query(android.content.ContentResolver, java.lang.String[], long, long); + method public static final android.database.Cursor query(android.content.ContentResolver, java.lang.String[], long, long, java.lang.String); + field public static final java.lang.String BEGIN = "begin"; + field public static final android.net.Uri CONTENT_BY_DAY_URI; + field public static final android.net.Uri CONTENT_SEARCH_BY_DAY_URI; + field public static final android.net.Uri CONTENT_SEARCH_URI; + field public static final android.net.Uri CONTENT_URI; + field public static final java.lang.String END = "end"; + field public static final java.lang.String END_DAY = "endDay"; + field public static final java.lang.String END_MINUTE = "endMinute"; + field public static final java.lang.String EVENT_ID = "event_id"; + field public static final java.lang.String START_DAY = "startDay"; + field public static final java.lang.String START_MINUTE = "startMinute"; + } + + public static final class CalendarContract.Reminders implements android.provider.BaseColumns android.provider.CalendarContract.EventsColumns android.provider.CalendarContract.RemindersColumns { + method public static final android.database.Cursor query(android.content.ContentResolver, long, java.lang.String[]); + field public static final android.net.Uri CONTENT_URI; + } + + protected static abstract interface CalendarContract.RemindersColumns { + field public static final java.lang.String EVENT_ID = "event_id"; + field public static final java.lang.String METHOD = "method"; + field public static final int METHOD_ALARM = 4; // 0x4 + field public static final int METHOD_ALERT = 1; // 0x1 + field public static final int METHOD_DEFAULT = 0; // 0x0 + field public static final int METHOD_EMAIL = 2; // 0x2 + field public static final int METHOD_SMS = 3; // 0x3 + field public static final java.lang.String MINUTES = "minutes"; + field public static final int MINUTES_DEFAULT = -1; // 0xffffffff + } + + protected static abstract interface CalendarContract.SyncColumns implements android.provider.CalendarContract.CalendarSyncColumns { + 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 CAN_PARTIALLY_UPDATE = "canPartiallyUpdate"; + field public static final java.lang.String DELETED = "deleted"; + field public static final java.lang.String DIRTY = "dirty"; + field public static final java.lang.String MUTATORS = "mutators"; + field public static final java.lang.String _SYNC_ID = "_sync_id"; + } + + public static final class CalendarContract.SyncState implements android.provider.SyncStateContract.Columns { + field public static final android.net.Uri CONTENT_URI; + } + + public class CallLog { + ctor public CallLog(); + field public static final java.lang.String AUTHORITY = "call_log"; + field public static final android.net.Uri CONTENT_URI; + } + + public static class CallLog.Calls implements android.provider.BaseColumns { + ctor public CallLog.Calls(); + method public static java.lang.String getLastOutgoingCall(android.content.Context); + field public static final java.lang.String CACHED_FORMATTED_NUMBER = "formatted_number"; + field public static final java.lang.String CACHED_LOOKUP_URI = "lookup_uri"; + field public static final java.lang.String CACHED_MATCHED_NUMBER = "matched_number"; + field public static final java.lang.String CACHED_NAME = "name"; + field public static final java.lang.String CACHED_NORMALIZED_NUMBER = "normalized_number"; + field public static final java.lang.String CACHED_NUMBER_LABEL = "numberlabel"; + field public static final java.lang.String CACHED_NUMBER_TYPE = "numbertype"; + field public static final java.lang.String CACHED_PHOTO_ID = "photo_id"; + field public static final android.net.Uri CONTENT_FILTER_URI; + field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/calls"; + field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/calls"; + field public static final android.net.Uri CONTENT_URI; + field public static final android.net.Uri CONTENT_URI_WITH_VOICEMAIL; + field public static final java.lang.String COUNTRY_ISO = "countryiso"; + field public static final java.lang.String DATA_USAGE = "data_usage"; + field public static final java.lang.String DATE = "date"; + field public static final java.lang.String DEFAULT_SORT_ORDER = "date DESC"; + field public static final java.lang.String DURATION = "duration"; + field public static final java.lang.String EXTRA_CALL_TYPE_FILTER = "android.provider.extra.CALL_TYPE_FILTER"; + field public static final java.lang.String FEATURES = "features"; + field public static final int FEATURES_VIDEO = 1; // 0x1 + field public static final java.lang.String GEOCODED_LOCATION = "geocoded_location"; + field public static final int INCOMING_TYPE = 1; // 0x1 + field public static final java.lang.String IS_READ = "is_read"; + field public static final java.lang.String LIMIT_PARAM_KEY = "limit"; + field public static final int MISSED_TYPE = 3; // 0x3 + field public static final java.lang.String NEW = "new"; + field public static final java.lang.String NUMBER = "number"; + field public static final java.lang.String NUMBER_PRESENTATION = "presentation"; + field public static final java.lang.String OFFSET_PARAM_KEY = "offset"; + field public static final int OUTGOING_TYPE = 2; // 0x2 + field public static final java.lang.String PHONE_ACCOUNT_COMPONENT_NAME = "subscription_component_name"; + field public static final java.lang.String PHONE_ACCOUNT_ID = "subscription_id"; + field public static final int PRESENTATION_ALLOWED = 1; // 0x1 + field public static final int PRESENTATION_PAYPHONE = 4; // 0x4 + field public static final int PRESENTATION_RESTRICTED = 2; // 0x2 + field public static final int PRESENTATION_UNKNOWN = 3; // 0x3 + field public static final java.lang.String TRANSCRIPTION = "transcription"; + field public static final java.lang.String TYPE = "type"; + field public static final int VOICEMAIL_TYPE = 4; // 0x4 + field public static final java.lang.String VOICEMAIL_URI = "voicemail_uri"; + } + + public deprecated class Contacts { + field public static final deprecated java.lang.String AUTHORITY = "contacts"; + field public static final deprecated android.net.Uri CONTENT_URI; + field public static final deprecated int KIND_EMAIL = 1; // 0x1 + field public static final deprecated int KIND_IM = 3; // 0x3 + field public static final deprecated int KIND_ORGANIZATION = 4; // 0x4 + field public static final deprecated int KIND_PHONE = 5; // 0x5 + field public static final deprecated int KIND_POSTAL = 2; // 0x2 + } + + public static final deprecated class Contacts.ContactMethods implements android.provider.BaseColumns android.provider.Contacts.ContactMethodsColumns android.provider.Contacts.PeopleColumns { + method public deprecated void addPostalLocation(android.content.Context, long, double, double); + method public static deprecated java.lang.Object decodeImProtocol(java.lang.String); + method public static deprecated java.lang.String encodeCustomImProtocol(java.lang.String); + method public static deprecated java.lang.String encodePredefinedImProtocol(int); + method public static final deprecated java.lang.CharSequence getDisplayLabel(android.content.Context, int, int, java.lang.CharSequence); + field public static final deprecated java.lang.String CONTENT_EMAIL_ITEM_TYPE = "vnd.android.cursor.item/email"; + field public static final deprecated java.lang.String CONTENT_EMAIL_TYPE = "vnd.android.cursor.dir/email"; + field public static final deprecated android.net.Uri CONTENT_EMAIL_URI; + field public static final deprecated java.lang.String CONTENT_IM_ITEM_TYPE = "vnd.android.cursor.item/jabber-im"; + field public static final deprecated java.lang.String CONTENT_POSTAL_ITEM_TYPE = "vnd.android.cursor.item/postal-address"; + field public static final deprecated java.lang.String CONTENT_POSTAL_TYPE = "vnd.android.cursor.dir/postal-address"; + field public static final deprecated java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/contact-methods"; + field public static final deprecated android.net.Uri CONTENT_URI; + field public static final deprecated java.lang.String DEFAULT_SORT_ORDER = "name ASC"; + field public static final deprecated java.lang.String PERSON_ID = "person"; + field public static final deprecated java.lang.String POSTAL_LOCATION_LATITUDE = "data"; + field public static final deprecated java.lang.String POSTAL_LOCATION_LONGITUDE = "aux_data"; + field public static final deprecated int PROTOCOL_AIM = 0; // 0x0 + field public static final deprecated int PROTOCOL_GOOGLE_TALK = 5; // 0x5 + field public static final deprecated int PROTOCOL_ICQ = 6; // 0x6 + field public static final deprecated int PROTOCOL_JABBER = 7; // 0x7 + field public static final deprecated int PROTOCOL_MSN = 1; // 0x1 + field public static final deprecated int PROTOCOL_QQ = 4; // 0x4 + field public static final deprecated int PROTOCOL_SKYPE = 3; // 0x3 + field public static final deprecated int PROTOCOL_YAHOO = 2; // 0x2 + } + + public static abstract deprecated interface Contacts.ContactMethodsColumns { + field public static final deprecated java.lang.String AUX_DATA = "aux_data"; + field public static final deprecated java.lang.String DATA = "data"; + field public static final deprecated java.lang.String ISPRIMARY = "isprimary"; + field public static final deprecated java.lang.String KIND = "kind"; + field public static final deprecated java.lang.String LABEL = "label"; + field public static final deprecated java.lang.String TYPE = "type"; + field public static final deprecated int TYPE_CUSTOM = 0; // 0x0 + field public static final deprecated int TYPE_HOME = 1; // 0x1 + field public static final deprecated int TYPE_OTHER = 3; // 0x3 + field public static final deprecated int TYPE_WORK = 2; // 0x2 + } + + public static final deprecated class Contacts.Extensions implements android.provider.BaseColumns android.provider.Contacts.ExtensionsColumns { + field public static final deprecated java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/contact_extensions"; + field public static final deprecated java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/contact_extensions"; + field public static final deprecated android.net.Uri CONTENT_URI; + field public static final deprecated java.lang.String DEFAULT_SORT_ORDER = "person, name ASC"; + field public static final deprecated java.lang.String PERSON_ID = "person"; + } + + public static abstract deprecated interface Contacts.ExtensionsColumns { + field public static final deprecated java.lang.String NAME = "name"; + field public static final deprecated java.lang.String VALUE = "value"; + } + + public static final deprecated class Contacts.GroupMembership implements android.provider.BaseColumns android.provider.Contacts.GroupsColumns { + field public static final deprecated java.lang.String CONTENT_DIRECTORY = "groupmembership"; + field public static final deprecated java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/contactsgroupmembership"; + field public static final deprecated java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/contactsgroupmembership"; + field public static final deprecated android.net.Uri CONTENT_URI; + field public static final deprecated java.lang.String DEFAULT_SORT_ORDER = "group_id ASC"; + field public static final deprecated java.lang.String GROUP_ID = "group_id"; + field public static final deprecated java.lang.String GROUP_SYNC_ACCOUNT = "group_sync_account"; + field public static final deprecated java.lang.String GROUP_SYNC_ACCOUNT_TYPE = "group_sync_account_type"; + field public static final deprecated java.lang.String GROUP_SYNC_ID = "group_sync_id"; + field public static final deprecated java.lang.String PERSON_ID = "person"; + field public static final deprecated android.net.Uri RAW_CONTENT_URI; + } + + public static final deprecated class Contacts.Groups implements android.provider.BaseColumns android.provider.Contacts.GroupsColumns { + field public static final deprecated java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/contactsgroup"; + field public static final deprecated java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/contactsgroup"; + field public static final deprecated android.net.Uri CONTENT_URI; + field public static final deprecated java.lang.String DEFAULT_SORT_ORDER = "name ASC"; + field public static final deprecated android.net.Uri DELETED_CONTENT_URI; + field public static final deprecated java.lang.String GROUP_ANDROID_STARRED = "Starred in Android"; + field public static final deprecated java.lang.String GROUP_MY_CONTACTS = "Contacts"; + } + + public static abstract deprecated interface Contacts.GroupsColumns { + field public static final deprecated java.lang.String NAME = "name"; + field public static final deprecated java.lang.String NOTES = "notes"; + field public static final deprecated java.lang.String SHOULD_SYNC = "should_sync"; + field public static final deprecated java.lang.String SYSTEM_ID = "system_id"; + } + + public static final deprecated class Contacts.Intents { + ctor public deprecated Contacts.Intents(); + field public static final deprecated java.lang.String ATTACH_IMAGE = "com.android.contacts.action.ATTACH_IMAGE"; + field public static final deprecated java.lang.String EXTRA_CREATE_DESCRIPTION = "com.android.contacts.action.CREATE_DESCRIPTION"; + field public static final deprecated java.lang.String EXTRA_FORCE_CREATE = "com.android.contacts.action.FORCE_CREATE"; + field public static final deprecated java.lang.String SEARCH_SUGGESTION_CLICKED = "android.provider.Contacts.SEARCH_SUGGESTION_CLICKED"; + field public static final deprecated java.lang.String SEARCH_SUGGESTION_CREATE_CONTACT_CLICKED = "android.provider.Contacts.SEARCH_SUGGESTION_CREATE_CONTACT_CLICKED"; + field public static final deprecated java.lang.String SEARCH_SUGGESTION_DIAL_NUMBER_CLICKED = "android.provider.Contacts.SEARCH_SUGGESTION_DIAL_NUMBER_CLICKED"; + field public static final deprecated java.lang.String SHOW_OR_CREATE_CONTACT = "com.android.contacts.action.SHOW_OR_CREATE_CONTACT"; + } + + public static final deprecated class Contacts.Intents.Insert { + ctor public deprecated Contacts.Intents.Insert(); + field public static final deprecated java.lang.String ACTION = "android.intent.action.INSERT"; + field public static final deprecated java.lang.String COMPANY = "company"; + field public static final deprecated java.lang.String EMAIL = "email"; + field public static final deprecated java.lang.String EMAIL_ISPRIMARY = "email_isprimary"; + field public static final deprecated java.lang.String EMAIL_TYPE = "email_type"; + field public static final deprecated java.lang.String FULL_MODE = "full_mode"; + field public static final deprecated java.lang.String IM_HANDLE = "im_handle"; + field public static final deprecated java.lang.String IM_ISPRIMARY = "im_isprimary"; + field public static final deprecated java.lang.String IM_PROTOCOL = "im_protocol"; + field public static final deprecated java.lang.String JOB_TITLE = "job_title"; + field public static final deprecated java.lang.String NAME = "name"; + field public static final deprecated java.lang.String NOTES = "notes"; + field public static final deprecated java.lang.String PHONE = "phone"; + field public static final deprecated java.lang.String PHONETIC_NAME = "phonetic_name"; + field public static final deprecated java.lang.String PHONE_ISPRIMARY = "phone_isprimary"; + field public static final deprecated java.lang.String PHONE_TYPE = "phone_type"; + field public static final deprecated java.lang.String POSTAL = "postal"; + field public static final deprecated java.lang.String POSTAL_ISPRIMARY = "postal_isprimary"; + field public static final deprecated java.lang.String POSTAL_TYPE = "postal_type"; + field public static final deprecated java.lang.String SECONDARY_EMAIL = "secondary_email"; + field public static final deprecated java.lang.String SECONDARY_EMAIL_TYPE = "secondary_email_type"; + field public static final deprecated java.lang.String SECONDARY_PHONE = "secondary_phone"; + field public static final deprecated java.lang.String SECONDARY_PHONE_TYPE = "secondary_phone_type"; + field public static final deprecated java.lang.String TERTIARY_EMAIL = "tertiary_email"; + field public static final deprecated java.lang.String TERTIARY_EMAIL_TYPE = "tertiary_email_type"; + field public static final deprecated java.lang.String TERTIARY_PHONE = "tertiary_phone"; + field public static final deprecated java.lang.String TERTIARY_PHONE_TYPE = "tertiary_phone_type"; + } + + public static final deprecated class Contacts.Intents.UI { + ctor public deprecated Contacts.Intents.UI(); + field public static final deprecated java.lang.String FILTER_CONTACTS_ACTION = "com.android.contacts.action.FILTER_CONTACTS"; + field public static final deprecated java.lang.String FILTER_TEXT_EXTRA_KEY = "com.android.contacts.extra.FILTER_TEXT"; + field public static final deprecated java.lang.String GROUP_NAME_EXTRA_KEY = "com.android.contacts.extra.GROUP"; + field public static final deprecated java.lang.String LIST_ALL_CONTACTS_ACTION = "com.android.contacts.action.LIST_ALL_CONTACTS"; + field public static final deprecated java.lang.String LIST_CONTACTS_WITH_PHONES_ACTION = "com.android.contacts.action.LIST_CONTACTS_WITH_PHONES"; + field public static final deprecated java.lang.String LIST_DEFAULT = "com.android.contacts.action.LIST_DEFAULT"; + field public static final deprecated java.lang.String LIST_FREQUENT_ACTION = "com.android.contacts.action.LIST_FREQUENT"; + field public static final deprecated java.lang.String LIST_GROUP_ACTION = "com.android.contacts.action.LIST_GROUP"; + field public static final deprecated java.lang.String LIST_STARRED_ACTION = "com.android.contacts.action.LIST_STARRED"; + field public static final deprecated java.lang.String LIST_STREQUENT_ACTION = "com.android.contacts.action.LIST_STREQUENT"; + field public static final deprecated java.lang.String TITLE_EXTRA_KEY = "com.android.contacts.extra.TITLE_EXTRA"; + } + + public static abstract deprecated interface Contacts.OrganizationColumns { + field public static final deprecated java.lang.String COMPANY = "company"; + field public static final deprecated java.lang.String ISPRIMARY = "isprimary"; + field public static final deprecated java.lang.String LABEL = "label"; + field public static final deprecated java.lang.String PERSON_ID = "person"; + field public static final deprecated java.lang.String TITLE = "title"; + field public static final deprecated java.lang.String TYPE = "type"; + field public static final deprecated int TYPE_CUSTOM = 0; // 0x0 + field public static final deprecated int TYPE_OTHER = 2; // 0x2 + field public static final deprecated int TYPE_WORK = 1; // 0x1 + } + + public static final deprecated class Contacts.Organizations implements android.provider.BaseColumns android.provider.Contacts.OrganizationColumns { + method public static final deprecated java.lang.CharSequence getDisplayLabel(android.content.Context, int, java.lang.CharSequence); + field public static final deprecated java.lang.String CONTENT_DIRECTORY = "organizations"; + field public static final deprecated android.net.Uri CONTENT_URI; + field public static final deprecated java.lang.String DEFAULT_SORT_ORDER = "company, title, isprimary ASC"; + } + + public static final deprecated class Contacts.People implements android.provider.BaseColumns android.provider.Contacts.PeopleColumns android.provider.Contacts.PhonesColumns android.provider.Contacts.PresenceColumns { + method public static deprecated android.net.Uri addToGroup(android.content.ContentResolver, long, java.lang.String); + method public static deprecated android.net.Uri addToGroup(android.content.ContentResolver, long, long); + method public static deprecated android.net.Uri addToMyContactsGroup(android.content.ContentResolver, long); + method public static deprecated android.net.Uri createPersonInMyContactsGroup(android.content.ContentResolver, android.content.ContentValues); + method public static deprecated android.graphics.Bitmap loadContactPhoto(android.content.Context, android.net.Uri, int, android.graphics.BitmapFactory.Options); + method public static deprecated void markAsContacted(android.content.ContentResolver, long); + method public static deprecated java.io.InputStream openContactPhotoInputStream(android.content.ContentResolver, android.net.Uri); + method public static deprecated android.database.Cursor queryGroups(android.content.ContentResolver, long); + method public static deprecated void setPhotoData(android.content.ContentResolver, android.net.Uri, byte[]); + field public static final deprecated android.net.Uri CONTENT_FILTER_URI; + field public static final deprecated java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/person"; + field public static final deprecated java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/person"; + field public static final deprecated android.net.Uri CONTENT_URI; + field public static final deprecated java.lang.String DEFAULT_SORT_ORDER = "name ASC"; + field public static final deprecated android.net.Uri DELETED_CONTENT_URI; + field public static final deprecated java.lang.String PRIMARY_EMAIL_ID = "primary_email"; + field public static final deprecated java.lang.String PRIMARY_ORGANIZATION_ID = "primary_organization"; + field public static final deprecated java.lang.String PRIMARY_PHONE_ID = "primary_phone"; + } + + public static final deprecated class Contacts.People.ContactMethods implements android.provider.BaseColumns android.provider.Contacts.ContactMethodsColumns android.provider.Contacts.PeopleColumns { + field public static final deprecated java.lang.String CONTENT_DIRECTORY = "contact_methods"; + field public static final deprecated java.lang.String DEFAULT_SORT_ORDER = "data ASC"; + } + + public static deprecated class Contacts.People.Extensions implements android.provider.BaseColumns android.provider.Contacts.ExtensionsColumns { + field public static final deprecated java.lang.String CONTENT_DIRECTORY = "extensions"; + field public static final deprecated java.lang.String DEFAULT_SORT_ORDER = "name ASC"; + field public static final deprecated java.lang.String PERSON_ID = "person"; + } + + public static final deprecated class Contacts.People.Phones implements android.provider.BaseColumns android.provider.Contacts.PeopleColumns android.provider.Contacts.PhonesColumns { + field public static final deprecated java.lang.String CONTENT_DIRECTORY = "phones"; + field public static final deprecated java.lang.String DEFAULT_SORT_ORDER = "number ASC"; + } + + public static abstract deprecated interface Contacts.PeopleColumns { + field public static final deprecated java.lang.String CUSTOM_RINGTONE = "custom_ringtone"; + field public static final deprecated java.lang.String DISPLAY_NAME = "display_name"; + field public static final deprecated java.lang.String LAST_TIME_CONTACTED = "last_time_contacted"; + field public static final deprecated java.lang.String NAME = "name"; + field public static final deprecated java.lang.String NOTES = "notes"; + field public static final deprecated java.lang.String PHONETIC_NAME = "phonetic_name"; + field public static final deprecated java.lang.String PHOTO_VERSION = "photo_version"; + field public static final deprecated java.lang.String SEND_TO_VOICEMAIL = "send_to_voicemail"; + field public static final deprecated java.lang.String STARRED = "starred"; + field public static final deprecated java.lang.String TIMES_CONTACTED = "times_contacted"; + } + + public static final deprecated class Contacts.Phones implements android.provider.BaseColumns android.provider.Contacts.PeopleColumns android.provider.Contacts.PhonesColumns { + method public static final deprecated java.lang.CharSequence getDisplayLabel(android.content.Context, int, java.lang.CharSequence, java.lang.CharSequence[]); + method public static final deprecated java.lang.CharSequence getDisplayLabel(android.content.Context, int, java.lang.CharSequence); + field public static final deprecated android.net.Uri CONTENT_FILTER_URL; + field public static final deprecated java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/phone"; + field public static final deprecated java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/phone"; + field public static final deprecated android.net.Uri CONTENT_URI; + field public static final deprecated java.lang.String DEFAULT_SORT_ORDER = "name ASC"; + field public static final deprecated java.lang.String PERSON_ID = "person"; + } + + public static abstract deprecated interface Contacts.PhonesColumns { + field public static final deprecated java.lang.String ISPRIMARY = "isprimary"; + field public static final deprecated java.lang.String LABEL = "label"; + field public static final deprecated java.lang.String NUMBER = "number"; + field public static final deprecated java.lang.String NUMBER_KEY = "number_key"; + field public static final deprecated java.lang.String TYPE = "type"; + field public static final deprecated int TYPE_CUSTOM = 0; // 0x0 + field public static final deprecated int TYPE_FAX_HOME = 5; // 0x5 + field public static final deprecated int TYPE_FAX_WORK = 4; // 0x4 + field public static final deprecated int TYPE_HOME = 1; // 0x1 + field public static final deprecated int TYPE_MOBILE = 2; // 0x2 + field public static final deprecated int TYPE_OTHER = 7; // 0x7 + field public static final deprecated int TYPE_PAGER = 6; // 0x6 + field public static final deprecated int TYPE_WORK = 3; // 0x3 + } + + public static final deprecated class Contacts.Photos implements android.provider.BaseColumns android.provider.Contacts.PhotosColumns { + field public static final deprecated java.lang.String CONTENT_DIRECTORY = "photo"; + field public static final deprecated android.net.Uri CONTENT_URI; + field public static final deprecated java.lang.String DEFAULT_SORT_ORDER = "person ASC"; + } + + public static abstract deprecated interface Contacts.PhotosColumns { + field public static final deprecated java.lang.String DATA = "data"; + field public static final deprecated java.lang.String DOWNLOAD_REQUIRED = "download_required"; + field public static final deprecated java.lang.String EXISTS_ON_SERVER = "exists_on_server"; + field public static final deprecated java.lang.String LOCAL_VERSION = "local_version"; + field public static final deprecated java.lang.String PERSON_ID = "person"; + field public static final deprecated java.lang.String SYNC_ERROR = "sync_error"; + } + + public static abstract deprecated interface Contacts.PresenceColumns { + field public static final int AVAILABLE = 5; // 0x5 + field public static final int AWAY = 2; // 0x2 + field public static final int DO_NOT_DISTURB = 4; // 0x4 + field public static final int IDLE = 3; // 0x3 + field public static final deprecated java.lang.String IM_ACCOUNT = "im_account"; + field public static final deprecated java.lang.String IM_HANDLE = "im_handle"; + field public static final deprecated java.lang.String IM_PROTOCOL = "im_protocol"; + field public static final int INVISIBLE = 1; // 0x1 + field public static final int OFFLINE = 0; // 0x0 + field public static final java.lang.String PRESENCE_CUSTOM_STATUS = "status"; + field public static final java.lang.String PRESENCE_STATUS = "mode"; + field public static final java.lang.String PRIORITY = "priority"; + } + + public static final deprecated class Contacts.Settings implements android.provider.BaseColumns android.provider.Contacts.SettingsColumns { + method public static deprecated java.lang.String getSetting(android.content.ContentResolver, java.lang.String, java.lang.String); + method public static deprecated void setSetting(android.content.ContentResolver, java.lang.String, java.lang.String, java.lang.String); + field public static final deprecated java.lang.String CONTENT_DIRECTORY = "settings"; + field public static final deprecated android.net.Uri CONTENT_URI; + field public static final deprecated java.lang.String DEFAULT_SORT_ORDER = "key ASC"; + field public static final deprecated java.lang.String SYNC_EVERYTHING = "syncEverything"; + } + + public static abstract deprecated interface Contacts.SettingsColumns { + field public static final deprecated java.lang.String KEY = "key"; + field public static final deprecated java.lang.String VALUE = "value"; + field public static final deprecated java.lang.String _SYNC_ACCOUNT = "_sync_account"; + field public static final deprecated java.lang.String _SYNC_ACCOUNT_TYPE = "_sync_account_type"; + } + + public final class ContactsContract { + ctor public ContactsContract(); + method public static boolean isProfileId(long); + field public static final java.lang.String AUTHORITY = "com.android.contacts"; + field public static final android.net.Uri AUTHORITY_URI; + field public static final java.lang.String CALLER_IS_SYNCADAPTER = "caller_is_syncadapter"; + field public static final java.lang.String DEFERRED_SNIPPETING = "deferred_snippeting"; + field public static final java.lang.String DEFERRED_SNIPPETING_QUERY = "deferred_snippeting_query"; + field public static final java.lang.String DIRECTORY_PARAM_KEY = "directory"; + field public static final java.lang.String LIMIT_PARAM_KEY = "limit"; + field public static final java.lang.String PRIMARY_ACCOUNT_NAME = "name_for_primary_account"; + field public static final java.lang.String PRIMARY_ACCOUNT_TYPE = "type_for_primary_account"; + field public static final java.lang.String REMOVE_DUPLICATE_ENTRIES = "remove_duplicate_entries"; + field public static final java.lang.String STREQUENT_PHONE_ONLY = "strequent_phone_only"; + } + + public static final class ContactsContract.AggregationExceptions implements android.provider.BaseColumns { + field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/aggregation_exception"; + field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/aggregation_exception"; + field public static final android.net.Uri CONTENT_URI; + field public static final java.lang.String RAW_CONTACT_ID1 = "raw_contact_id1"; + field public static final java.lang.String RAW_CONTACT_ID2 = "raw_contact_id2"; + field public static final java.lang.String TYPE = "type"; + field public static final int TYPE_AUTOMATIC = 0; // 0x0 + field public static final int TYPE_KEEP_SEPARATE = 2; // 0x2 + field public static final int TYPE_KEEP_TOGETHER = 1; // 0x1 + } + + protected static abstract interface ContactsContract.BaseSyncColumns { + field public static final java.lang.String SYNC1 = "sync1"; + field public static final java.lang.String SYNC2 = "sync2"; + field public static final java.lang.String SYNC3 = "sync3"; + field public static final java.lang.String SYNC4 = "sync4"; + } + + public static final class ContactsContract.CommonDataKinds { + } + + public static abstract interface ContactsContract.CommonDataKinds.BaseTypes { + field public static final int TYPE_CUSTOM = 0; // 0x0 + } + + public static final class ContactsContract.CommonDataKinds.Callable implements android.provider.ContactsContract.CommonDataKinds.CommonColumns android.provider.ContactsContract.DataColumnsWithJoins { + ctor public ContactsContract.CommonDataKinds.Callable(); + field public static final android.net.Uri CONTENT_FILTER_URI; + field public static final android.net.Uri CONTENT_URI; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES"; + } + + protected static abstract interface ContactsContract.CommonDataKinds.CommonColumns implements android.provider.ContactsContract.CommonDataKinds.BaseTypes { + field public static final java.lang.String DATA = "data1"; + field public static final java.lang.String LABEL = "data3"; + field public static final java.lang.String TYPE = "data2"; + } + + public static final class ContactsContract.CommonDataKinds.Contactables implements android.provider.ContactsContract.CommonDataKinds.CommonColumns android.provider.ContactsContract.DataColumnsWithJoins { + ctor public ContactsContract.CommonDataKinds.Contactables(); + field public static final android.net.Uri CONTENT_FILTER_URI; + field public static final android.net.Uri CONTENT_URI; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES"; + field public static final java.lang.String VISIBLE_CONTACTS_ONLY = "visible_contacts_only"; + } + + public static final class ContactsContract.CommonDataKinds.Email implements android.provider.ContactsContract.CommonDataKinds.CommonColumns android.provider.ContactsContract.DataColumnsWithJoins { + method public static final java.lang.CharSequence getTypeLabel(android.content.res.Resources, int, java.lang.CharSequence); + method public static final int getTypeLabelResource(int); + field public static final java.lang.String ADDRESS = "data1"; + field public static final android.net.Uri CONTENT_FILTER_URI; + field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/email_v2"; + field public static final android.net.Uri CONTENT_LOOKUP_URI; + field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/email_v2"; + field public static final android.net.Uri CONTENT_URI; + field public static final java.lang.String DISPLAY_NAME = "data4"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES"; + field public static final int TYPE_HOME = 1; // 0x1 + field public static final int TYPE_MOBILE = 4; // 0x4 + field public static final int TYPE_OTHER = 3; // 0x3 + field public static final int TYPE_WORK = 2; // 0x2 + } + + public static final class ContactsContract.CommonDataKinds.Event implements android.provider.ContactsContract.CommonDataKinds.CommonColumns android.provider.ContactsContract.DataColumnsWithJoins { + method public static final java.lang.CharSequence getTypeLabel(android.content.res.Resources, int, java.lang.CharSequence); + method public static int getTypeResource(java.lang.Integer); + field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/contact_event"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES"; + field public static final java.lang.String START_DATE = "data1"; + field public static final int TYPE_ANNIVERSARY = 1; // 0x1 + field public static final int TYPE_BIRTHDAY = 3; // 0x3 + field public static final int TYPE_OTHER = 2; // 0x2 + } + + public static final class ContactsContract.CommonDataKinds.GroupMembership implements android.provider.ContactsContract.DataColumnsWithJoins { + field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/group_membership"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES"; + field public static final java.lang.String GROUP_ROW_ID = "data1"; + field public static final java.lang.String GROUP_SOURCE_ID = "group_sourceid"; + } + + public static final class ContactsContract.CommonDataKinds.Identity implements android.provider.ContactsContract.DataColumnsWithJoins { + field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/identity"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES"; + field public static final java.lang.String IDENTITY = "data1"; + field public static final java.lang.String NAMESPACE = "data2"; + } + + public static final class ContactsContract.CommonDataKinds.Im implements android.provider.ContactsContract.CommonDataKinds.CommonColumns android.provider.ContactsContract.DataColumnsWithJoins { + method public static final java.lang.CharSequence getProtocolLabel(android.content.res.Resources, int, java.lang.CharSequence); + method public static final int getProtocolLabelResource(int); + method public static final java.lang.CharSequence getTypeLabel(android.content.res.Resources, int, java.lang.CharSequence); + method public static final int getTypeLabelResource(int); + field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/im"; + field public static final java.lang.String CUSTOM_PROTOCOL = "data6"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES"; + field public static final java.lang.String PROTOCOL = "data5"; + field public static final int PROTOCOL_AIM = 0; // 0x0 + field public static final int PROTOCOL_CUSTOM = -1; // 0xffffffff + field public static final int PROTOCOL_GOOGLE_TALK = 5; // 0x5 + field public static final int PROTOCOL_ICQ = 6; // 0x6 + field public static final int PROTOCOL_JABBER = 7; // 0x7 + field public static final int PROTOCOL_MSN = 1; // 0x1 + field public static final int PROTOCOL_NETMEETING = 8; // 0x8 + field public static final int PROTOCOL_QQ = 4; // 0x4 + field public static final int PROTOCOL_SKYPE = 3; // 0x3 + field public static final int PROTOCOL_YAHOO = 2; // 0x2 + field public static final int TYPE_HOME = 1; // 0x1 + field public static final int TYPE_OTHER = 3; // 0x3 + field public static final int TYPE_WORK = 2; // 0x2 + } + + public static final class ContactsContract.CommonDataKinds.Nickname implements android.provider.ContactsContract.CommonDataKinds.CommonColumns android.provider.ContactsContract.DataColumnsWithJoins { + field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/nickname"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES"; + field public static final java.lang.String NAME = "data1"; + field public static final int TYPE_DEFAULT = 1; // 0x1 + field public static final int TYPE_INITIALS = 5; // 0x5 + field public static final int TYPE_MAIDEN_NAME = 3; // 0x3 + field public static final deprecated int TYPE_MAINDEN_NAME = 3; // 0x3 + field public static final int TYPE_OTHER_NAME = 2; // 0x2 + field public static final int TYPE_SHORT_NAME = 4; // 0x4 + } + + public static final class ContactsContract.CommonDataKinds.Note implements android.provider.ContactsContract.DataColumnsWithJoins { + field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/note"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES"; + field public static final java.lang.String NOTE = "data1"; + } + + public static final class ContactsContract.CommonDataKinds.Organization implements android.provider.ContactsContract.CommonDataKinds.CommonColumns android.provider.ContactsContract.DataColumnsWithJoins { + method public static final java.lang.CharSequence getTypeLabel(android.content.res.Resources, int, java.lang.CharSequence); + method public static final int getTypeLabelResource(int); + field public static final java.lang.String COMPANY = "data1"; + field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/organization"; + field public static final java.lang.String DEPARTMENT = "data5"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES"; + field public static final java.lang.String JOB_DESCRIPTION = "data6"; + field public static final java.lang.String OFFICE_LOCATION = "data9"; + field public static final java.lang.String PHONETIC_NAME = "data8"; + field public static final java.lang.String SYMBOL = "data7"; + field public static final java.lang.String TITLE = "data4"; + field public static final int TYPE_OTHER = 2; // 0x2 + field public static final int TYPE_WORK = 1; // 0x1 + } + + public static final class ContactsContract.CommonDataKinds.Phone implements android.provider.ContactsContract.CommonDataKinds.CommonColumns android.provider.ContactsContract.DataColumnsWithJoins { + method public static final java.lang.CharSequence getTypeLabel(android.content.res.Resources, int, java.lang.CharSequence); + method public static final int getTypeLabelResource(int); + field public static final android.net.Uri CONTENT_FILTER_URI; + field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/phone_v2"; + field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/phone_v2"; + field public static final android.net.Uri CONTENT_URI; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES"; + field public static final java.lang.String NORMALIZED_NUMBER = "data4"; + field public static final java.lang.String NUMBER = "data1"; + field public static final java.lang.String SEARCH_DISPLAY_NAME_KEY = "search_display_name"; + field public static final java.lang.String SEARCH_PHONE_NUMBER_KEY = "search_phone_number"; + field public static final int TYPE_ASSISTANT = 19; // 0x13 + field public static final int TYPE_CALLBACK = 8; // 0x8 + field public static final int TYPE_CAR = 9; // 0x9 + field public static final int TYPE_COMPANY_MAIN = 10; // 0xa + field public static final int TYPE_FAX_HOME = 5; // 0x5 + field public static final int TYPE_FAX_WORK = 4; // 0x4 + field public static final int TYPE_HOME = 1; // 0x1 + field public static final int TYPE_ISDN = 11; // 0xb + field public static final int TYPE_MAIN = 12; // 0xc + field public static final int TYPE_MMS = 20; // 0x14 + field public static final int TYPE_MOBILE = 2; // 0x2 + field public static final int TYPE_OTHER = 7; // 0x7 + field public static final int TYPE_OTHER_FAX = 13; // 0xd + field public static final int TYPE_PAGER = 6; // 0x6 + field public static final int TYPE_RADIO = 14; // 0xe + field public static final int TYPE_TELEX = 15; // 0xf + field public static final int TYPE_TTY_TDD = 16; // 0x10 + field public static final int TYPE_WORK = 3; // 0x3 + field public static final int TYPE_WORK_MOBILE = 17; // 0x11 + field public static final int TYPE_WORK_PAGER = 18; // 0x12 + } + + public static final class ContactsContract.CommonDataKinds.Photo implements android.provider.ContactsContract.DataColumnsWithJoins { + field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/photo"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES"; + field public static final java.lang.String PHOTO = "data15"; + field public static final java.lang.String PHOTO_FILE_ID = "data14"; + } + + public static final class ContactsContract.CommonDataKinds.Relation implements android.provider.ContactsContract.CommonDataKinds.CommonColumns android.provider.ContactsContract.DataColumnsWithJoins { + method public static final java.lang.CharSequence getTypeLabel(android.content.res.Resources, int, java.lang.CharSequence); + method public static final int getTypeLabelResource(int); + field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/relation"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES"; + field public static final java.lang.String NAME = "data1"; + field public static final int TYPE_ASSISTANT = 1; // 0x1 + field public static final int TYPE_BROTHER = 2; // 0x2 + field public static final int TYPE_CHILD = 3; // 0x3 + field public static final int TYPE_DOMESTIC_PARTNER = 4; // 0x4 + field public static final int TYPE_FATHER = 5; // 0x5 + field public static final int TYPE_FRIEND = 6; // 0x6 + field public static final int TYPE_MANAGER = 7; // 0x7 + field public static final int TYPE_MOTHER = 8; // 0x8 + field public static final int TYPE_PARENT = 9; // 0x9 + field public static final int TYPE_PARTNER = 10; // 0xa + field public static final int TYPE_REFERRED_BY = 11; // 0xb + field public static final int TYPE_RELATIVE = 12; // 0xc + field public static final int TYPE_SISTER = 13; // 0xd + field public static final int TYPE_SPOUSE = 14; // 0xe + } + + public static final class ContactsContract.CommonDataKinds.SipAddress implements android.provider.ContactsContract.CommonDataKinds.CommonColumns android.provider.ContactsContract.DataColumnsWithJoins { + method public static final java.lang.CharSequence getTypeLabel(android.content.res.Resources, int, java.lang.CharSequence); + method public static final int getTypeLabelResource(int); + field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/sip_address"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES"; + field public static final java.lang.String SIP_ADDRESS = "data1"; + field public static final int TYPE_HOME = 1; // 0x1 + field public static final int TYPE_OTHER = 3; // 0x3 + field public static final int TYPE_WORK = 2; // 0x2 + } + + public static final class ContactsContract.CommonDataKinds.StructuredName implements android.provider.ContactsContract.DataColumnsWithJoins { + field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/name"; + field public static final java.lang.String DISPLAY_NAME = "data1"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES"; + field public static final java.lang.String FAMILY_NAME = "data3"; + field public static final java.lang.String FULL_NAME_STYLE = "data10"; + field public static final java.lang.String GIVEN_NAME = "data2"; + field public static final java.lang.String MIDDLE_NAME = "data5"; + field public static final java.lang.String PHONETIC_FAMILY_NAME = "data9"; + field public static final java.lang.String PHONETIC_GIVEN_NAME = "data7"; + field public static final java.lang.String PHONETIC_MIDDLE_NAME = "data8"; + field public static final java.lang.String PREFIX = "data4"; + field public static final java.lang.String SUFFIX = "data6"; + } + + public static final class ContactsContract.CommonDataKinds.StructuredPostal implements android.provider.ContactsContract.CommonDataKinds.CommonColumns android.provider.ContactsContract.DataColumnsWithJoins { + method public static final java.lang.CharSequence getTypeLabel(android.content.res.Resources, int, java.lang.CharSequence); + method public static final int getTypeLabelResource(int); + field public static final java.lang.String CITY = "data7"; + field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/postal-address_v2"; + field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/postal-address_v2"; + field public static final android.net.Uri CONTENT_URI; + field public static final java.lang.String COUNTRY = "data10"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES"; + field public static final java.lang.String FORMATTED_ADDRESS = "data1"; + field public static final java.lang.String NEIGHBORHOOD = "data6"; + field public static final java.lang.String POBOX = "data5"; + field public static final java.lang.String POSTCODE = "data9"; + field public static final java.lang.String REGION = "data8"; + field public static final java.lang.String STREET = "data4"; + field public static final int TYPE_HOME = 1; // 0x1 + field public static final int TYPE_OTHER = 3; // 0x3 + field public static final int TYPE_WORK = 2; // 0x2 + } + + public static final class ContactsContract.CommonDataKinds.Website implements android.provider.ContactsContract.CommonDataKinds.CommonColumns android.provider.ContactsContract.DataColumnsWithJoins { + field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/website"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES"; + field public static final int TYPE_BLOG = 2; // 0x2 + field public static final int TYPE_FTP = 6; // 0x6 + field public static final int TYPE_HOME = 4; // 0x4 + field public static final int TYPE_HOMEPAGE = 1; // 0x1 + field public static final int TYPE_OTHER = 7; // 0x7 + field public static final int TYPE_PROFILE = 3; // 0x3 + field public static final int TYPE_WORK = 5; // 0x5 + field public static final java.lang.String URL = "data1"; + } + + protected static abstract interface ContactsContract.ContactNameColumns { + field public static final java.lang.String DISPLAY_NAME_ALTERNATIVE = "display_name_alt"; + field public static final java.lang.String DISPLAY_NAME_PRIMARY = "display_name"; + field public static final java.lang.String DISPLAY_NAME_SOURCE = "display_name_source"; + field public static final java.lang.String PHONETIC_NAME = "phonetic_name"; + field public static final java.lang.String PHONETIC_NAME_STYLE = "phonetic_name_style"; + field public static final java.lang.String SORT_KEY_ALTERNATIVE = "sort_key_alt"; + field public static final java.lang.String SORT_KEY_PRIMARY = "sort_key"; + } + + protected static abstract interface ContactsContract.ContactOptionsColumns { + field public static final java.lang.String CUSTOM_RINGTONE = "custom_ringtone"; + field public static final java.lang.String LAST_TIME_CONTACTED = "last_time_contacted"; + field public static final java.lang.String PINNED = "pinned"; + field public static final java.lang.String SEND_TO_VOICEMAIL = "send_to_voicemail"; + field public static final java.lang.String STARRED = "starred"; + field public static final java.lang.String TIMES_CONTACTED = "times_contacted"; + } + + protected static abstract interface ContactsContract.ContactStatusColumns { + field public static final java.lang.String CONTACT_CHAT_CAPABILITY = "contact_chat_capability"; + field public static final java.lang.String CONTACT_PRESENCE = "contact_presence"; + field public static final java.lang.String CONTACT_STATUS = "contact_status"; + field public static final java.lang.String CONTACT_STATUS_ICON = "contact_status_icon"; + field public static final java.lang.String CONTACT_STATUS_LABEL = "contact_status_label"; + field public static final java.lang.String CONTACT_STATUS_RES_PACKAGE = "contact_status_res_package"; + field public static final java.lang.String CONTACT_STATUS_TIMESTAMP = "contact_status_ts"; + } + + public static class ContactsContract.Contacts implements android.provider.BaseColumns android.provider.ContactsContract.ContactNameColumns android.provider.ContactsContract.ContactOptionsColumns android.provider.ContactsContract.ContactStatusColumns android.provider.ContactsContract.ContactsColumns { + method public static android.net.Uri getLookupUri(android.content.ContentResolver, android.net.Uri); + method public static android.net.Uri getLookupUri(long, java.lang.String); + method public static boolean isEnterpriseContactId(long); + method public static android.net.Uri lookupContact(android.content.ContentResolver, android.net.Uri); + method public static deprecated void markAsContacted(android.content.ContentResolver, long); + method public static java.io.InputStream openContactPhotoInputStream(android.content.ContentResolver, android.net.Uri, boolean); + method public static java.io.InputStream openContactPhotoInputStream(android.content.ContentResolver, android.net.Uri); + field public static final android.net.Uri CONTENT_FILTER_URI; + field public static final android.net.Uri CONTENT_FREQUENT_URI; + field public static final android.net.Uri CONTENT_GROUP_URI; + field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/contact"; + field public static final android.net.Uri CONTENT_LOOKUP_URI; + field public static final android.net.Uri CONTENT_MULTI_VCARD_URI; + field public static final android.net.Uri CONTENT_STREQUENT_FILTER_URI; + field public static final android.net.Uri CONTENT_STREQUENT_URI; + field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/contact"; + field public static final android.net.Uri CONTENT_URI; + field public static final java.lang.String CONTENT_VCARD_TYPE = "text/x-vcard"; + field public static final android.net.Uri CONTENT_VCARD_URI; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES"; + } + + public static final class ContactsContract.Contacts.AggregationSuggestions implements android.provider.BaseColumns android.provider.ContactsContract.ContactOptionsColumns android.provider.ContactsContract.ContactStatusColumns android.provider.ContactsContract.ContactsColumns { + field public static final java.lang.String CONTENT_DIRECTORY = "suggestions"; + } + + public static final class ContactsContract.Contacts.Data implements android.provider.BaseColumns android.provider.ContactsContract.DataColumns { + field public static final java.lang.String CONTENT_DIRECTORY = "data"; + } + + public static final class ContactsContract.Contacts.Entity implements android.provider.BaseColumns android.provider.ContactsContract.BaseSyncColumns android.provider.ContactsContract.ContactNameColumns android.provider.ContactsContract.ContactOptionsColumns android.provider.ContactsContract.ContactStatusColumns android.provider.ContactsContract.ContactsColumns android.provider.ContactsContract.DataColumns android.provider.ContactsContract.DataUsageStatColumns android.provider.ContactsContract.RawContactsColumns android.provider.ContactsContract.StatusColumns android.provider.ContactsContract.SyncColumns { + field public static final java.lang.String CONTENT_DIRECTORY = "entities"; + field public static final java.lang.String DATA_ID = "data_id"; + field public static final java.lang.String RAW_CONTACT_ID = "raw_contact_id"; + } + + public static final class ContactsContract.Contacts.Photo implements android.provider.BaseColumns android.provider.ContactsContract.DataColumnsWithJoins { + field public static final java.lang.String CONTENT_DIRECTORY = "photo"; + field public static final java.lang.String DISPLAY_PHOTO = "display_photo"; + field public static final java.lang.String PHOTO = "data15"; + field public static final java.lang.String PHOTO_FILE_ID = "data14"; + } + + public static final deprecated class ContactsContract.Contacts.StreamItems implements android.provider.ContactsContract.StreamItemsColumns { + field public static final deprecated java.lang.String CONTENT_DIRECTORY = "stream_items"; + } + + protected static abstract interface ContactsContract.ContactsColumns { + field public static final java.lang.String CONTACT_LAST_UPDATED_TIMESTAMP = "contact_last_updated_timestamp"; + field public static final java.lang.String DISPLAY_NAME = "display_name"; + field public static final java.lang.String HAS_PHONE_NUMBER = "has_phone_number"; + field public static final java.lang.String IN_DEFAULT_DIRECTORY = "in_default_directory"; + field public static final java.lang.String IN_VISIBLE_GROUP = "in_visible_group"; + field public static final java.lang.String IS_USER_PROFILE = "is_user_profile"; + field public static final java.lang.String LOOKUP_KEY = "lookup"; + field public static final java.lang.String NAME_RAW_CONTACT_ID = "name_raw_contact_id"; + field public static final java.lang.String PHOTO_FILE_ID = "photo_file_id"; + field public static final java.lang.String PHOTO_ID = "photo_id"; + field public static final java.lang.String PHOTO_THUMBNAIL_URI = "photo_thumb_uri"; + field public static final java.lang.String PHOTO_URI = "photo_uri"; + } + + public static final class ContactsContract.Data implements android.provider.ContactsContract.DataColumnsWithJoins { + method public static android.net.Uri getContactLookupUri(android.content.ContentResolver, android.net.Uri); + field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/data"; + field public static final android.net.Uri CONTENT_URI; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS"; + field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES"; + field public static final java.lang.String VISIBLE_CONTACTS_ONLY = "visible_contacts_only"; + } + + protected static abstract interface ContactsContract.DataColumns { + field public static final java.lang.String DATA1 = "data1"; + field public static final java.lang.String DATA10 = "data10"; + field public static final java.lang.String DATA11 = "data11"; + field public static final java.lang.String DATA12 = "data12"; + field public static final java.lang.String DATA13 = "data13"; + field public static final java.lang.String DATA14 = "data14"; + field public static final java.lang.String DATA15 = "data15"; + field public static final java.lang.String DATA2 = "data2"; + field public static final java.lang.String DATA3 = "data3"; + field public static final java.lang.String DATA4 = "data4"; + field public static final java.lang.String DATA5 = "data5"; + field public static final java.lang.String DATA6 = "data6"; + field public static final java.lang.String DATA7 = "data7"; + field public static final java.lang.String DATA8 = "data8"; + field public static final java.lang.String DATA9 = "data9"; + field public static final java.lang.String DATA_VERSION = "data_version"; + field public static final java.lang.String IS_PRIMARY = "is_primary"; + field public static final java.lang.String IS_READ_ONLY = "is_read_only"; + field public static final java.lang.String IS_SUPER_PRIMARY = "is_super_primary"; + field public static final java.lang.String MIMETYPE = "mimetype"; + field public static final java.lang.String RAW_CONTACT_ID = "raw_contact_id"; + field public static final java.lang.String RES_PACKAGE = "res_package"; + field public static final java.lang.String SYNC1 = "data_sync1"; + field public static final java.lang.String SYNC2 = "data_sync2"; + field public static final java.lang.String SYNC3 = "data_sync3"; + field public static final java.lang.String SYNC4 = "data_sync4"; + } + + protected static abstract interface ContactsContract.DataColumnsWithJoins implements android.provider.BaseColumns android.provider.ContactsContract.ContactNameColumns android.provider.ContactsContract.ContactOptionsColumns android.provider.ContactsContract.ContactStatusColumns android.provider.ContactsContract.ContactsColumns android.provider.ContactsContract.DataColumns android.provider.ContactsContract.DataUsageStatColumns android.provider.ContactsContract.RawContactsColumns android.provider.ContactsContract.StatusColumns { + } + + public static final class ContactsContract.DataUsageFeedback { + ctor public ContactsContract.DataUsageFeedback(); + field public static final android.net.Uri DELETE_USAGE_URI; + field public static final android.net.Uri FEEDBACK_URI; + field public static final java.lang.String USAGE_TYPE = "type"; + field public static final java.lang.String USAGE_TYPE_CALL = "call"; + field public static final java.lang.String USAGE_TYPE_LONG_TEXT = "long_text"; + field public static final java.lang.String USAGE_TYPE_SHORT_TEXT = "short_text"; + } + + protected static abstract interface ContactsContract.DataUsageStatColumns { + field public static final java.lang.String LAST_TIME_USED = "last_time_used"; + field public static final java.lang.String TIMES_USED = "times_used"; + } + + public static final class ContactsContract.DeletedContacts implements android.provider.ContactsContract.DeletedContactsColumns { + field public static final android.net.Uri CONTENT_URI; + field public static final long DAYS_KEPT_MILLISECONDS = 2592000000L; // 0x9a7ec800L + } + + protected static abstract interface ContactsContract.DeletedContactsColumns { + field public static final java.lang.String CONTACT_DELETED_TIMESTAMP = "contact_deleted_timestamp"; + field public static final java.lang.String CONTACT_ID = "contact_id"; + } + + public static final class ContactsContract.Directory implements android.provider.BaseColumns { + method public static void notifyDirectoryChange(android.content.ContentResolver); + field public static final java.lang.String ACCOUNT_NAME = "accountName"; + field public static final java.lang.String ACCOUNT_TYPE = "accountType"; + field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/contact_directory"; + field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/contact_directories"; + field public static final android.net.Uri CONTENT_URI; + field public static final long DEFAULT = 0L; // 0x0L + field public static final java.lang.String DIRECTORY_AUTHORITY = "authority"; + field public static final java.lang.String DISPLAY_NAME = "displayName"; + field public static final java.lang.String EXPORT_SUPPORT = "exportSupport"; + field public static final int EXPORT_SUPPORT_ANY_ACCOUNT = 2; // 0x2 + field public static final int EXPORT_SUPPORT_NONE = 0; // 0x0 + field public static final int EXPORT_SUPPORT_SAME_ACCOUNT_ONLY = 1; // 0x1 + field public static final long LOCAL_INVISIBLE = 1L; // 0x1L + field public static final java.lang.String PACKAGE_NAME = "packageName"; + field public static final java.lang.String PHOTO_SUPPORT = "photoSupport"; + field public static final int PHOTO_SUPPORT_FULL = 3; // 0x3 + field public static final int PHOTO_SUPPORT_FULL_SIZE_ONLY = 2; // 0x2 + field public static final int PHOTO_SUPPORT_NONE = 0; // 0x0 + field public static final int PHOTO_SUPPORT_THUMBNAIL_ONLY = 1; // 0x1 + field public static final java.lang.String SHORTCUT_SUPPORT = "shortcutSupport"; + field public static final int SHORTCUT_SUPPORT_DATA_ITEMS_ONLY = 1; // 0x1 + field public static final int SHORTCUT_SUPPORT_FULL = 2; // 0x2 + field public static final int SHORTCUT_SUPPORT_NONE = 0; // 0x0 + field public static final java.lang.String TYPE_RESOURCE_ID = "typeResourceId"; + } + + public static abstract interface ContactsContract.DisplayNameSources { + field public static final int EMAIL = 10; // 0xa + field public static final int NICKNAME = 35; // 0x23 + field public static final int ORGANIZATION = 30; // 0x1e + field public static final int PHONE = 20; // 0x14 + field public static final int STRUCTURED_NAME = 40; // 0x28 + field public static final int UNDEFINED = 0; // 0x0 + } + + public static final class ContactsContract.DisplayPhoto { + field public static final android.net.Uri CONTENT_MAX_DIMENSIONS_URI; + field public static final android.net.Uri CONTENT_URI; + field public static final java.lang.String DISPLAY_MAX_DIM = "display_max_dim"; + field public static final java.lang.String THUMBNAIL_MAX_DIM = "thumbnail_max_dim"; + } + + public static abstract interface ContactsContract.FullNameStyle { + field public static final int CHINESE = 3; // 0x3 + field public static final int CJK = 2; // 0x2 + field public static final int JAPANESE = 4; // 0x4 + field public static final int KOREAN = 5; // 0x5 + field public static final int UNDEFINED = 0; // 0x0 + field public static final int WESTERN = 1; // 0x1 + } + + public static final class ContactsContract.Groups implements android.provider.BaseColumns android.provider.ContactsContract.GroupsColumns android.provider.ContactsContract.SyncColumns { + method public static android.content.EntityIterator newEntityIterator(android.database.Cursor); + field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/group"; + field public static final android.net.Uri CONTENT_SUMMARY_URI; + field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/group"; + field public static final android.net.Uri CONTENT_URI; + } + + protected static abstract interface ContactsContract.GroupsColumns { + field public static final java.lang.String AUTO_ADD = "auto_add"; + field public static final java.lang.String DATA_SET = "data_set"; + field public static final java.lang.String DELETED = "deleted"; + field public static final java.lang.String FAVORITES = "favorites"; + field public static final java.lang.String GROUP_IS_READ_ONLY = "group_is_read_only"; + field public static final java.lang.String GROUP_VISIBLE = "group_visible"; + field public static final java.lang.String NOTES = "notes"; + field public static final java.lang.String RES_PACKAGE = "res_package"; + field public static final java.lang.String SHOULD_SYNC = "should_sync"; + field public static final java.lang.String SUMMARY_COUNT = "summ_count"; + field public static final java.lang.String SUMMARY_WITH_PHONES = "summ_phones"; + field public static final java.lang.String SYSTEM_ID = "system_id"; + field public static final java.lang.String TITLE = "title"; + field public static final java.lang.String TITLE_RES = "title_res"; + } + + public static final class ContactsContract.Intents { + ctor public ContactsContract.Intents(); + field public static final java.lang.String ATTACH_IMAGE = "com.android.contacts.action.ATTACH_IMAGE"; + field public static final java.lang.String CONTACTS_DATABASE_CREATED = "android.provider.Contacts.DATABASE_CREATED"; + field public static final java.lang.String EXTRA_CREATE_DESCRIPTION = "com.android.contacts.action.CREATE_DESCRIPTION"; + field public static final java.lang.String EXTRA_FORCE_CREATE = "com.android.contacts.action.FORCE_CREATE"; + field public static final java.lang.String INVITE_CONTACT = "com.android.contacts.action.INVITE_CONTACT"; + field public static final java.lang.String SEARCH_SUGGESTION_CLICKED = "android.provider.Contacts.SEARCH_SUGGESTION_CLICKED"; + field public static final java.lang.String SEARCH_SUGGESTION_CREATE_CONTACT_CLICKED = "android.provider.Contacts.SEARCH_SUGGESTION_CREATE_CONTACT_CLICKED"; + field public static final java.lang.String SEARCH_SUGGESTION_DIAL_NUMBER_CLICKED = "android.provider.Contacts.SEARCH_SUGGESTION_DIAL_NUMBER_CLICKED"; + field public static final java.lang.String SHOW_OR_CREATE_CONTACT = "com.android.contacts.action.SHOW_OR_CREATE_CONTACT"; + } + + public static final class ContactsContract.Intents.Insert { + ctor public ContactsContract.Intents.Insert(); + field public static final java.lang.String ACTION = "android.intent.action.INSERT"; + field public static final java.lang.String COMPANY = "company"; + field public static final java.lang.String DATA = "data"; + field public static final java.lang.String EMAIL = "email"; + field public static final java.lang.String EMAIL_ISPRIMARY = "email_isprimary"; + field public static final java.lang.String EMAIL_TYPE = "email_type"; + field public static final java.lang.String FULL_MODE = "full_mode"; + field public static final java.lang.String IM_HANDLE = "im_handle"; + field public static final java.lang.String IM_ISPRIMARY = "im_isprimary"; + field public static final java.lang.String IM_PROTOCOL = "im_protocol"; + field public static final java.lang.String JOB_TITLE = "job_title"; + field public static final java.lang.String NAME = "name"; + field public static final java.lang.String NOTES = "notes"; + field public static final java.lang.String PHONE = "phone"; + field public static final java.lang.String PHONETIC_NAME = "phonetic_name"; + field public static final java.lang.String PHONE_ISPRIMARY = "phone_isprimary"; + field public static final java.lang.String PHONE_TYPE = "phone_type"; + field public static final java.lang.String POSTAL = "postal"; + field public static final java.lang.String POSTAL_ISPRIMARY = "postal_isprimary"; + field public static final java.lang.String POSTAL_TYPE = "postal_type"; + field public static final java.lang.String SECONDARY_EMAIL = "secondary_email"; + field public static final java.lang.String SECONDARY_EMAIL_TYPE = "secondary_email_type"; + field public static final java.lang.String SECONDARY_PHONE = "secondary_phone"; + field public static final java.lang.String SECONDARY_PHONE_TYPE = "secondary_phone_type"; + field public static final java.lang.String TERTIARY_EMAIL = "tertiary_email"; + field public static final java.lang.String TERTIARY_EMAIL_TYPE = "tertiary_email_type"; + field public static final java.lang.String TERTIARY_PHONE = "tertiary_phone"; + field public static final java.lang.String TERTIARY_PHONE_TYPE = "tertiary_phone_type"; + } + + public static final class ContactsContract.PhoneLookup implements android.provider.BaseColumns android.provider.ContactsContract.ContactOptionsColumns android.provider.ContactsContract.ContactsColumns android.provider.ContactsContract.PhoneLookupColumns { + field public static final android.net.Uri CONTENT_FILTER_URI; + field public static final android.net.Uri ENTERPRISE_CONTENT_FILTER_URI; + field public static final java.lang.String QUERY_PARAMETER_SIP_ADDRESS = "sip"; + } + + protected static abstract interface ContactsContract.PhoneLookupColumns { + field public static final java.lang.String LABEL = "label"; + field public static final java.lang.String NORMALIZED_NUMBER = "normalized_number"; + field public static final java.lang.String NUMBER = "number"; + field public static final java.lang.String TYPE = "type"; + } + + public static abstract interface ContactsContract.PhoneticNameStyle { + field public static final int JAPANESE = 4; // 0x4 + field public static final int KOREAN = 5; // 0x5 + field public static final int PINYIN = 3; // 0x3 + field public static final int UNDEFINED = 0; // 0x0 + } + + public static final class ContactsContract.PinnedPositions { + ctor public ContactsContract.PinnedPositions(); + method public static void pin(android.content.ContentResolver, long, int); + method public static void undemote(android.content.ContentResolver, long); + field public static final int DEMOTED = -1; // 0xffffffff + field public static final int UNPINNED = 0; // 0x0 + } + + public static final deprecated class ContactsContract.Presence extends android.provider.ContactsContract.StatusUpdates { + ctor public ContactsContract.Presence(); + } + + protected static abstract interface ContactsContract.PresenceColumns { + field public static final java.lang.String CUSTOM_PROTOCOL = "custom_protocol"; + field public static final java.lang.String DATA_ID = "presence_data_id"; + field public static final java.lang.String IM_ACCOUNT = "im_account"; + field public static final java.lang.String IM_HANDLE = "im_handle"; + field public static final java.lang.String PROTOCOL = "protocol"; + } + + public static final class ContactsContract.Profile implements android.provider.BaseColumns android.provider.ContactsContract.ContactNameColumns android.provider.ContactsContract.ContactOptionsColumns android.provider.ContactsContract.ContactStatusColumns android.provider.ContactsContract.ContactsColumns { + field public static final android.net.Uri CONTENT_RAW_CONTACTS_URI; + field public static final android.net.Uri CONTENT_URI; + field public static final android.net.Uri CONTENT_VCARD_URI; + field public static final long MIN_ID = 9223372034707292160L; // 0x7fffffff80000000L + } + + public static final class ContactsContract.ProfileSyncState implements android.provider.SyncStateContract.Columns { + method public static byte[] get(android.content.ContentProviderClient, android.accounts.Account) throws android.os.RemoteException; + method public static android.util.Pair getWithUri(android.content.ContentProviderClient, android.accounts.Account) throws android.os.RemoteException; + method public static android.content.ContentProviderOperation newSetOperation(android.accounts.Account, byte[]); + method public static void set(android.content.ContentProviderClient, android.accounts.Account, byte[]) throws android.os.RemoteException; + field public static final java.lang.String CONTENT_DIRECTORY = "syncstate"; + field public static final android.net.Uri CONTENT_URI; + } + + public static final class ContactsContract.QuickContact { + ctor public ContactsContract.QuickContact(); + method public static void showQuickContact(android.content.Context, android.view.View, android.net.Uri, int, java.lang.String[]); + method public static void showQuickContact(android.content.Context, android.graphics.Rect, android.net.Uri, int, java.lang.String[]); + field public static final java.lang.String ACTION_QUICK_CONTACT = "android.provider.action.QUICK_CONTACT"; + field public static final java.lang.String EXTRA_EXCLUDE_MIMES = "android.provider.extra.EXCLUDE_MIMES"; + field public static final int MODE_LARGE = 3; // 0x3 + field public static final int MODE_MEDIUM = 2; // 0x2 + field public static final int MODE_SMALL = 1; // 0x1 + } + + public static final class ContactsContract.RawContacts implements android.provider.BaseColumns android.provider.ContactsContract.ContactNameColumns android.provider.ContactsContract.ContactOptionsColumns android.provider.ContactsContract.RawContactsColumns android.provider.ContactsContract.SyncColumns { + method public static android.net.Uri getContactLookupUri(android.content.ContentResolver, android.net.Uri); + method public static android.content.EntityIterator newEntityIterator(android.database.Cursor); + field public static final int AGGREGATION_MODE_DEFAULT = 0; // 0x0 + field public static final int AGGREGATION_MODE_DISABLED = 3; // 0x3 + field public static final deprecated int AGGREGATION_MODE_IMMEDIATE = 1; // 0x1 + field public static final int AGGREGATION_MODE_SUSPENDED = 2; // 0x2 + field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/raw_contact"; + field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/raw_contact"; + field public static final android.net.Uri CONTENT_URI; + } + + public static final class ContactsContract.RawContacts.Data implements android.provider.BaseColumns android.provider.ContactsContract.DataColumns { + field public static final java.lang.String CONTENT_DIRECTORY = "data"; + } + + public static final class ContactsContract.RawContacts.DisplayPhoto { + field public static final java.lang.String CONTENT_DIRECTORY = "display_photo"; + } + + public static final class ContactsContract.RawContacts.Entity implements android.provider.BaseColumns android.provider.ContactsContract.DataColumns { + field public static final java.lang.String CONTENT_DIRECTORY = "entity"; + field public static final java.lang.String DATA_ID = "data_id"; + } + + public static final deprecated class ContactsContract.RawContacts.StreamItems implements android.provider.BaseColumns android.provider.ContactsContract.StreamItemsColumns { + field public static final deprecated java.lang.String CONTENT_DIRECTORY = "stream_items"; + } + + protected static abstract interface ContactsContract.RawContactsColumns { + field public static final java.lang.String ACCOUNT_TYPE_AND_DATA_SET = "account_type_and_data_set"; + field public static final java.lang.String AGGREGATION_MODE = "aggregation_mode"; + field public static final java.lang.String CONTACT_ID = "contact_id"; + field public static final java.lang.String DATA_SET = "data_set"; + field public static final java.lang.String DELETED = "deleted"; + field public static final java.lang.String RAW_CONTACT_IS_READ_ONLY = "raw_contact_is_read_only"; + field public static final java.lang.String RAW_CONTACT_IS_USER_PROFILE = "raw_contact_is_user_profile"; + } + + public static final class ContactsContract.RawContactsEntity implements android.provider.BaseColumns android.provider.ContactsContract.DataColumns android.provider.ContactsContract.RawContactsColumns { + field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/raw_contact_entity"; + field public static final android.net.Uri CONTENT_URI; + field public static final java.lang.String DATA_ID = "data_id"; + field public static final android.net.Uri PROFILE_CONTENT_URI; + } + + public static class ContactsContract.SearchSnippets { + ctor public ContactsContract.SearchSnippets(); + field public static final java.lang.String DEFERRED_SNIPPETING_KEY = "deferred_snippeting"; + field public static final java.lang.String SNIPPET = "snippet"; + } + + public static final class ContactsContract.Settings implements android.provider.ContactsContract.SettingsColumns { + field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/setting"; + field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/setting"; + field public static final android.net.Uri CONTENT_URI; + } + + protected static abstract interface ContactsContract.SettingsColumns { + 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 ANY_UNSYNCED = "any_unsynced"; + field public static final java.lang.String DATA_SET = "data_set"; + field public static final java.lang.String SHOULD_SYNC = "should_sync"; + field public static final java.lang.String UNGROUPED_COUNT = "summ_count"; + field public static final java.lang.String UNGROUPED_VISIBLE = "ungrouped_visible"; + field public static final java.lang.String UNGROUPED_WITH_PHONES = "summ_phones"; + } + + protected static abstract interface ContactsContract.StatusColumns { + field public static final int AVAILABLE = 5; // 0x5 + field public static final int AWAY = 2; // 0x2 + field public static final int CAPABILITY_HAS_CAMERA = 4; // 0x4 + field public static final int CAPABILITY_HAS_VIDEO = 2; // 0x2 + field public static final int CAPABILITY_HAS_VOICE = 1; // 0x1 + field public static final java.lang.String CHAT_CAPABILITY = "chat_capability"; + field public static final int DO_NOT_DISTURB = 4; // 0x4 + field public static final int IDLE = 3; // 0x3 + field public static final int INVISIBLE = 1; // 0x1 + field public static final int OFFLINE = 0; // 0x0 + field public static final java.lang.String PRESENCE = "mode"; + field public static final deprecated java.lang.String PRESENCE_CUSTOM_STATUS = "status"; + field public static final deprecated java.lang.String PRESENCE_STATUS = "mode"; + field public static final java.lang.String STATUS = "status"; + field public static final java.lang.String STATUS_ICON = "status_icon"; + field public static final java.lang.String STATUS_LABEL = "status_label"; + field public static final java.lang.String STATUS_RES_PACKAGE = "status_res_package"; + field public static final java.lang.String STATUS_TIMESTAMP = "status_ts"; + } + + public static class ContactsContract.StatusUpdates implements android.provider.ContactsContract.PresenceColumns android.provider.ContactsContract.StatusColumns { + method public static final int getPresenceIconResourceId(int); + method public static final int getPresencePrecedence(int); + field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/status-update"; + field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/status-update"; + field public static final android.net.Uri CONTENT_URI; + field public static final android.net.Uri PROFILE_CONTENT_URI; + } + + public static final deprecated class ContactsContract.StreamItemPhotos implements android.provider.BaseColumns android.provider.ContactsContract.StreamItemPhotosColumns { + field public static final deprecated java.lang.String PHOTO = "photo"; + } + + protected static abstract deprecated interface ContactsContract.StreamItemPhotosColumns { + field public static final deprecated java.lang.String PHOTO_FILE_ID = "photo_file_id"; + field public static final deprecated java.lang.String PHOTO_URI = "photo_uri"; + field public static final deprecated java.lang.String SORT_INDEX = "sort_index"; + field public static final deprecated java.lang.String STREAM_ITEM_ID = "stream_item_id"; + field public static final deprecated java.lang.String SYNC1 = "stream_item_photo_sync1"; + field public static final deprecated java.lang.String SYNC2 = "stream_item_photo_sync2"; + field public static final deprecated java.lang.String SYNC3 = "stream_item_photo_sync3"; + field public static final deprecated java.lang.String SYNC4 = "stream_item_photo_sync4"; + } + + public static final deprecated class ContactsContract.StreamItems implements android.provider.BaseColumns android.provider.ContactsContract.StreamItemsColumns { + field public static final deprecated java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/stream_item"; + field public static final deprecated android.net.Uri CONTENT_LIMIT_URI; + field public static final deprecated android.net.Uri CONTENT_PHOTO_URI; + field public static final deprecated java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/stream_item"; + field public static final deprecated android.net.Uri CONTENT_URI; + field public static final deprecated java.lang.String MAX_ITEMS = "max_items"; + } + + public static final deprecated class ContactsContract.StreamItems.StreamItemPhotos implements android.provider.BaseColumns android.provider.ContactsContract.StreamItemPhotosColumns { + field public static final deprecated java.lang.String CONTENT_DIRECTORY = "photo"; + field public static final deprecated java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/stream_item_photo"; + field public static final deprecated java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/stream_item_photo"; + } + + protected static abstract deprecated interface ContactsContract.StreamItemsColumns { + field public static final deprecated java.lang.String ACCOUNT_NAME = "account_name"; + field public static final deprecated java.lang.String ACCOUNT_TYPE = "account_type"; + field public static final deprecated java.lang.String COMMENTS = "comments"; + field public static final deprecated java.lang.String CONTACT_ID = "contact_id"; + field public static final deprecated java.lang.String CONTACT_LOOKUP_KEY = "contact_lookup"; + field public static final deprecated java.lang.String DATA_SET = "data_set"; + field public static final deprecated java.lang.String RAW_CONTACT_ID = "raw_contact_id"; + field public static final deprecated java.lang.String RAW_CONTACT_SOURCE_ID = "raw_contact_source_id"; + field public static final deprecated java.lang.String RES_ICON = "icon"; + field public static final deprecated java.lang.String RES_LABEL = "label"; + field public static final deprecated java.lang.String RES_PACKAGE = "res_package"; + field public static final deprecated java.lang.String SYNC1 = "stream_item_sync1"; + field public static final deprecated java.lang.String SYNC2 = "stream_item_sync2"; + field public static final deprecated java.lang.String SYNC3 = "stream_item_sync3"; + field public static final deprecated java.lang.String SYNC4 = "stream_item_sync4"; + field public static final deprecated java.lang.String TEXT = "text"; + field public static final deprecated 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"; + field public static final java.lang.String DIRTY = "dirty"; + field public static final java.lang.String SOURCE_ID = "sourceid"; + field public static final java.lang.String VERSION = "version"; + } + + public static final class ContactsContract.SyncState implements android.provider.SyncStateContract.Columns { + method public static byte[] get(android.content.ContentProviderClient, android.accounts.Account) throws android.os.RemoteException; + method public static android.util.Pair getWithUri(android.content.ContentProviderClient, android.accounts.Account) throws android.os.RemoteException; + method public static android.content.ContentProviderOperation newSetOperation(android.accounts.Account, byte[]); + method public static void set(android.content.ContentProviderClient, android.accounts.Account, byte[]) throws android.os.RemoteException; + field public static final java.lang.String CONTENT_DIRECTORY = "syncstate"; + field public static final android.net.Uri CONTENT_URI; + } + + public final class DocumentsContract { + method public static android.net.Uri buildChildDocumentsUri(java.lang.String, java.lang.String); + method public static android.net.Uri buildChildDocumentsUriUsingTree(android.net.Uri, java.lang.String); + method public static android.net.Uri buildDocumentUri(java.lang.String, java.lang.String); + method public static android.net.Uri buildDocumentUriUsingTree(android.net.Uri, java.lang.String); + method public static android.net.Uri buildRecentDocumentsUri(java.lang.String, java.lang.String); + method public static android.net.Uri buildRootUri(java.lang.String, java.lang.String); + method public static android.net.Uri buildRootsUri(java.lang.String); + method public static android.net.Uri buildSearchDocumentsUri(java.lang.String, java.lang.String, java.lang.String); + method public static android.net.Uri buildTreeDocumentUri(java.lang.String, java.lang.String); + method public static android.net.Uri createDocument(android.content.ContentResolver, android.net.Uri, java.lang.String, java.lang.String); + method public static boolean deleteDocument(android.content.ContentResolver, android.net.Uri); + method public static java.lang.String getDocumentId(android.net.Uri); + method public static android.graphics.Bitmap getDocumentThumbnail(android.content.ContentResolver, android.net.Uri, android.graphics.Point, android.os.CancellationSignal); + method public static java.lang.String getRootId(android.net.Uri); + method public static java.lang.String getSearchDocumentsQuery(android.net.Uri); + method public static java.lang.String getTreeDocumentId(android.net.Uri); + method public static boolean isDocumentUri(android.content.Context, android.net.Uri); + method public static android.net.Uri renameDocument(android.content.ContentResolver, android.net.Uri, java.lang.String); + field public static final java.lang.String EXTRA_ERROR = "error"; + field public static final java.lang.String EXTRA_INFO = "info"; + field public static final java.lang.String EXTRA_LOADING = "loading"; + field public static final java.lang.String PROVIDER_INTERFACE = "android.content.action.DOCUMENTS_PROVIDER"; + } + + public static final class DocumentsContract.Document { + field public static final java.lang.String COLUMN_DISPLAY_NAME = "_display_name"; + field public static final java.lang.String COLUMN_DOCUMENT_ID = "document_id"; + field public static final java.lang.String COLUMN_FLAGS = "flags"; + field public static final java.lang.String COLUMN_ICON = "icon"; + field public static final java.lang.String COLUMN_LAST_MODIFIED = "last_modified"; + field public static final java.lang.String COLUMN_MIME_TYPE = "mime_type"; + field public static final java.lang.String COLUMN_SIZE = "_size"; + field public static final java.lang.String COLUMN_SUMMARY = "summary"; + field public static final int FLAG_DIR_PREFERS_GRID = 16; // 0x10 + field public static final int FLAG_DIR_PREFERS_LAST_MODIFIED = 32; // 0x20 + field public static final int FLAG_DIR_SUPPORTS_CREATE = 8; // 0x8 + field public static final int FLAG_SUPPORTS_DELETE = 4; // 0x4 + field public static final int FLAG_SUPPORTS_RENAME = 64; // 0x40 + field public static final int FLAG_SUPPORTS_THUMBNAIL = 1; // 0x1 + field public static final int FLAG_SUPPORTS_WRITE = 2; // 0x2 + field public static final java.lang.String MIME_TYPE_DIR = "vnd.android.document/directory"; + } + + public static final class DocumentsContract.Root { + field public static final java.lang.String COLUMN_AVAILABLE_BYTES = "available_bytes"; + field public static final java.lang.String COLUMN_DOCUMENT_ID = "document_id"; + field public static final java.lang.String COLUMN_FLAGS = "flags"; + field public static final java.lang.String COLUMN_ICON = "icon"; + field public static final java.lang.String COLUMN_MIME_TYPES = "mime_types"; + field public static final java.lang.String COLUMN_ROOT_ID = "root_id"; + field public static final java.lang.String COLUMN_SUMMARY = "summary"; + field public static final java.lang.String COLUMN_TITLE = "title"; + field public static final int FLAG_LOCAL_ONLY = 2; // 0x2 + field public static final int FLAG_SUPPORTS_CREATE = 1; // 0x1 + field public static final int FLAG_SUPPORTS_IS_CHILD = 16; // 0x10 + field public static final int FLAG_SUPPORTS_RECENTS = 4; // 0x4 + field public static final int FLAG_SUPPORTS_SEARCH = 8; // 0x8 + } + + public abstract class DocumentsProvider extends android.content.ContentProvider { + ctor public DocumentsProvider(); + method public java.lang.String createDocument(java.lang.String, java.lang.String, java.lang.String) throws java.io.FileNotFoundException; + method public final int delete(android.net.Uri, java.lang.String, java.lang.String[]); + method public void deleteDocument(java.lang.String) throws java.io.FileNotFoundException; + method public java.lang.String getDocumentType(java.lang.String) throws java.io.FileNotFoundException; + method public final java.lang.String getType(android.net.Uri); + method public final android.net.Uri insert(android.net.Uri, android.content.ContentValues); + method public boolean isChildDocument(java.lang.String, java.lang.String); + method public final android.content.res.AssetFileDescriptor openAssetFile(android.net.Uri, java.lang.String) throws java.io.FileNotFoundException; + method public final android.content.res.AssetFileDescriptor openAssetFile(android.net.Uri, java.lang.String, android.os.CancellationSignal) throws java.io.FileNotFoundException; + method public abstract android.os.ParcelFileDescriptor openDocument(java.lang.String, java.lang.String, android.os.CancellationSignal) throws java.io.FileNotFoundException; + method public android.content.res.AssetFileDescriptor openDocumentThumbnail(java.lang.String, android.graphics.Point, android.os.CancellationSignal) throws java.io.FileNotFoundException; + method public final android.os.ParcelFileDescriptor openFile(android.net.Uri, java.lang.String) throws java.io.FileNotFoundException; + method public final android.os.ParcelFileDescriptor openFile(android.net.Uri, java.lang.String, android.os.CancellationSignal) throws java.io.FileNotFoundException; + method public final android.content.res.AssetFileDescriptor openTypedAssetFile(android.net.Uri, java.lang.String, android.os.Bundle) throws java.io.FileNotFoundException; + method public final android.content.res.AssetFileDescriptor openTypedAssetFile(android.net.Uri, java.lang.String, android.os.Bundle, android.os.CancellationSignal) throws java.io.FileNotFoundException; + method public final android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String); + method public abstract android.database.Cursor queryChildDocuments(java.lang.String, java.lang.String[], java.lang.String) throws java.io.FileNotFoundException; + method public abstract android.database.Cursor queryDocument(java.lang.String, java.lang.String[]) throws java.io.FileNotFoundException; + method public android.database.Cursor queryRecentDocuments(java.lang.String, java.lang.String[]) throws java.io.FileNotFoundException; + method public abstract android.database.Cursor queryRoots(java.lang.String[]) throws java.io.FileNotFoundException; + method public android.database.Cursor querySearchDocuments(java.lang.String, java.lang.String, java.lang.String[]) throws java.io.FileNotFoundException; + method public java.lang.String renameDocument(java.lang.String, java.lang.String) throws java.io.FileNotFoundException; + method public final void revokeDocumentPermission(java.lang.String); + method public final int update(android.net.Uri, android.content.ContentValues, java.lang.String, java.lang.String[]); + } + + public final deprecated class LiveFolders implements android.provider.BaseColumns { + field public static final java.lang.String ACTION_CREATE_LIVE_FOLDER = "android.intent.action.CREATE_LIVE_FOLDER"; + field public static final java.lang.String DESCRIPTION = "description"; + field public static final int DISPLAY_MODE_GRID = 1; // 0x1 + field public static final int DISPLAY_MODE_LIST = 2; // 0x2 + field public static final java.lang.String EXTRA_LIVE_FOLDER_BASE_INTENT = "android.intent.extra.livefolder.BASE_INTENT"; + field public static final java.lang.String EXTRA_LIVE_FOLDER_DISPLAY_MODE = "android.intent.extra.livefolder.DISPLAY_MODE"; + field public static final java.lang.String EXTRA_LIVE_FOLDER_ICON = "android.intent.extra.livefolder.ICON"; + field public static final java.lang.String EXTRA_LIVE_FOLDER_NAME = "android.intent.extra.livefolder.NAME"; + field public static final java.lang.String ICON_BITMAP = "icon_bitmap"; + field public static final java.lang.String ICON_PACKAGE = "icon_package"; + field public static final java.lang.String ICON_RESOURCE = "icon_resource"; + field public static final java.lang.String INTENT = "intent"; + field public static final java.lang.String NAME = "name"; + } + + public final class MediaStore { + ctor public MediaStore(); + method public static android.net.Uri getMediaScannerUri(); + method public static java.lang.String getVersion(android.content.Context); + field public static final java.lang.String ACTION_IMAGE_CAPTURE = "android.media.action.IMAGE_CAPTURE"; + field public static final java.lang.String ACTION_IMAGE_CAPTURE_SECURE = "android.media.action.IMAGE_CAPTURE_SECURE"; + field public static final java.lang.String ACTION_VIDEO_CAPTURE = "android.media.action.VIDEO_CAPTURE"; + field public static final java.lang.String AUTHORITY = "media"; + field public static final java.lang.String EXTRA_DURATION_LIMIT = "android.intent.extra.durationLimit"; + field public static final java.lang.String EXTRA_FINISH_ON_COMPLETION = "android.intent.extra.finishOnCompletion"; + field public static final java.lang.String EXTRA_FULL_SCREEN = "android.intent.extra.fullScreen"; + field public static final java.lang.String EXTRA_MEDIA_ALBUM = "android.intent.extra.album"; + field public static final java.lang.String EXTRA_MEDIA_ARTIST = "android.intent.extra.artist"; + field public static final java.lang.String EXTRA_MEDIA_FOCUS = "android.intent.extra.focus"; + field public static final java.lang.String EXTRA_MEDIA_GENRE = "android.intent.extra.genre"; + field public static final java.lang.String EXTRA_MEDIA_PLAYLIST = "android.intent.extra.playlist"; + field public static final java.lang.String EXTRA_MEDIA_RADIO_CHANNEL = "android.intent.extra.radio_channel"; + field public static final java.lang.String EXTRA_MEDIA_TITLE = "android.intent.extra.title"; + field public static final java.lang.String EXTRA_OUTPUT = "output"; + field public static final java.lang.String EXTRA_SCREEN_ORIENTATION = "android.intent.extra.screenOrientation"; + field public static final java.lang.String EXTRA_SHOW_ACTION_ICONS = "android.intent.extra.showActionIcons"; + field public static final java.lang.String EXTRA_SIZE_LIMIT = "android.intent.extra.sizeLimit"; + field public static final java.lang.String EXTRA_VIDEO_QUALITY = "android.intent.extra.videoQuality"; + field public static final java.lang.String INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH = "android.media.action.MEDIA_PLAY_FROM_SEARCH"; + field public static final java.lang.String INTENT_ACTION_MEDIA_SEARCH = "android.intent.action.MEDIA_SEARCH"; + field public static final deprecated java.lang.String INTENT_ACTION_MUSIC_PLAYER = "android.intent.action.MUSIC_PLAYER"; + field public static final java.lang.String INTENT_ACTION_STILL_IMAGE_CAMERA = "android.media.action.STILL_IMAGE_CAMERA"; + field public static final java.lang.String INTENT_ACTION_STILL_IMAGE_CAMERA_SECURE = "android.media.action.STILL_IMAGE_CAMERA_SECURE"; + field public static final java.lang.String INTENT_ACTION_TEXT_OPEN_FROM_SEARCH = "android.media.action.TEXT_OPEN_FROM_SEARCH"; + field public static final java.lang.String INTENT_ACTION_VIDEO_CAMERA = "android.media.action.VIDEO_CAMERA"; + field public static final java.lang.String INTENT_ACTION_VIDEO_PLAY_FROM_SEARCH = "android.media.action.VIDEO_PLAY_FROM_SEARCH"; + field public static final java.lang.String MEDIA_IGNORE_FILENAME = ".nomedia"; + field public static final java.lang.String MEDIA_SCANNER_VOLUME = "volume"; + field public static final java.lang.String UNKNOWN_STRING = ""; + } + + public static final class MediaStore.Audio { + ctor public MediaStore.Audio(); + method public static java.lang.String keyFor(java.lang.String); + } + + public static abstract interface MediaStore.Audio.AlbumColumns { + field public static final java.lang.String ALBUM = "album"; + field public static final java.lang.String ALBUM_ART = "album_art"; + field public static final java.lang.String ALBUM_ID = "album_id"; + field public static final java.lang.String ALBUM_KEY = "album_key"; + field public static final java.lang.String ARTIST = "artist"; + field public static final java.lang.String FIRST_YEAR = "minyear"; + field public static final java.lang.String LAST_YEAR = "maxyear"; + field public static final java.lang.String NUMBER_OF_SONGS = "numsongs"; + field public static final java.lang.String NUMBER_OF_SONGS_FOR_ARTIST = "numsongs_by_artist"; + } + + public static final class MediaStore.Audio.Albums implements android.provider.BaseColumns android.provider.MediaStore.Audio.AlbumColumns { + ctor public MediaStore.Audio.Albums(); + method public static android.net.Uri getContentUri(java.lang.String); + field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/albums"; + field public static final java.lang.String DEFAULT_SORT_ORDER = "album_key"; + field public static final java.lang.String ENTRY_CONTENT_TYPE = "vnd.android.cursor.item/album"; + field public static final android.net.Uri EXTERNAL_CONTENT_URI; + field public static final android.net.Uri INTERNAL_CONTENT_URI; + } + + public static abstract interface MediaStore.Audio.ArtistColumns { + field public static final java.lang.String ARTIST = "artist"; + field public static final java.lang.String ARTIST_KEY = "artist_key"; + field public static final java.lang.String NUMBER_OF_ALBUMS = "number_of_albums"; + field public static final java.lang.String NUMBER_OF_TRACKS = "number_of_tracks"; + } + + public static final class MediaStore.Audio.Artists implements android.provider.BaseColumns android.provider.MediaStore.Audio.ArtistColumns { + ctor public MediaStore.Audio.Artists(); + method public static android.net.Uri getContentUri(java.lang.String); + field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/artists"; + field public static final java.lang.String DEFAULT_SORT_ORDER = "artist_key"; + field public static final java.lang.String ENTRY_CONTENT_TYPE = "vnd.android.cursor.item/artist"; + field public static final android.net.Uri EXTERNAL_CONTENT_URI; + field public static final android.net.Uri INTERNAL_CONTENT_URI; + } + + public static final class MediaStore.Audio.Artists.Albums implements android.provider.MediaStore.Audio.AlbumColumns { + ctor public MediaStore.Audio.Artists.Albums(); + method public static final android.net.Uri getContentUri(java.lang.String, long); + } + + public static abstract interface MediaStore.Audio.AudioColumns implements android.provider.MediaStore.MediaColumns { + field public static final java.lang.String ALBUM = "album"; + field public static final java.lang.String ALBUM_ID = "album_id"; + field public static final java.lang.String ALBUM_KEY = "album_key"; + field public static final java.lang.String ARTIST = "artist"; + field public static final java.lang.String ARTIST_ID = "artist_id"; + field public static final java.lang.String ARTIST_KEY = "artist_key"; + field public static final java.lang.String BOOKMARK = "bookmark"; + field public static final java.lang.String COMPOSER = "composer"; + field public static final java.lang.String DURATION = "duration"; + field public static final java.lang.String IS_ALARM = "is_alarm"; + field public static final java.lang.String IS_MUSIC = "is_music"; + field public static final java.lang.String IS_NOTIFICATION = "is_notification"; + field public static final java.lang.String IS_PODCAST = "is_podcast"; + field public static final java.lang.String IS_RINGTONE = "is_ringtone"; + field public static final java.lang.String TITLE_KEY = "title_key"; + field public static final java.lang.String TRACK = "track"; + field public static final java.lang.String YEAR = "year"; + } + + public static final class MediaStore.Audio.Genres implements android.provider.BaseColumns android.provider.MediaStore.Audio.GenresColumns { + ctor public MediaStore.Audio.Genres(); + method public static android.net.Uri getContentUri(java.lang.String); + method public static android.net.Uri getContentUriForAudioId(java.lang.String, int); + field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/genre"; + field public static final java.lang.String DEFAULT_SORT_ORDER = "name"; + field public static final java.lang.String ENTRY_CONTENT_TYPE = "vnd.android.cursor.item/genre"; + field public static final android.net.Uri EXTERNAL_CONTENT_URI; + field public static final android.net.Uri INTERNAL_CONTENT_URI; + } + + public static final class MediaStore.Audio.Genres.Members implements android.provider.MediaStore.Audio.AudioColumns { + ctor public MediaStore.Audio.Genres.Members(); + method public static final android.net.Uri getContentUri(java.lang.String, long); + field public static final java.lang.String AUDIO_ID = "audio_id"; + field public static final java.lang.String CONTENT_DIRECTORY = "members"; + field public static final java.lang.String DEFAULT_SORT_ORDER = "title_key"; + field public static final java.lang.String GENRE_ID = "genre_id"; + } + + public static abstract interface MediaStore.Audio.GenresColumns { + field public static final java.lang.String NAME = "name"; + } + + public static final class MediaStore.Audio.Media implements android.provider.MediaStore.Audio.AudioColumns { + ctor public MediaStore.Audio.Media(); + method public static android.net.Uri getContentUri(java.lang.String); + method public static android.net.Uri getContentUriForPath(java.lang.String); + field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/audio"; + field public static final java.lang.String DEFAULT_SORT_ORDER = "title_key"; + field public static final java.lang.String ENTRY_CONTENT_TYPE = "vnd.android.cursor.item/audio"; + field public static final android.net.Uri EXTERNAL_CONTENT_URI; + field public static final java.lang.String EXTRA_MAX_BYTES = "android.provider.MediaStore.extra.MAX_BYTES"; + field public static final android.net.Uri INTERNAL_CONTENT_URI; + field public static final java.lang.String RECORD_SOUND_ACTION = "android.provider.MediaStore.RECORD_SOUND"; + } + + public static final class MediaStore.Audio.Playlists implements android.provider.BaseColumns android.provider.MediaStore.Audio.PlaylistsColumns { + ctor public MediaStore.Audio.Playlists(); + method public static android.net.Uri getContentUri(java.lang.String); + field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/playlist"; + field public static final java.lang.String DEFAULT_SORT_ORDER = "name"; + field public static final java.lang.String ENTRY_CONTENT_TYPE = "vnd.android.cursor.item/playlist"; + field public static final android.net.Uri EXTERNAL_CONTENT_URI; + field public static final android.net.Uri INTERNAL_CONTENT_URI; + } + + public static final class MediaStore.Audio.Playlists.Members implements android.provider.MediaStore.Audio.AudioColumns { + ctor public MediaStore.Audio.Playlists.Members(); + method public static final android.net.Uri getContentUri(java.lang.String, long); + method public static final boolean moveItem(android.content.ContentResolver, long, int, int); + field public static final java.lang.String AUDIO_ID = "audio_id"; + field public static final java.lang.String CONTENT_DIRECTORY = "members"; + field public static final java.lang.String DEFAULT_SORT_ORDER = "play_order"; + field public static final java.lang.String PLAYLIST_ID = "playlist_id"; + field public static final java.lang.String PLAY_ORDER = "play_order"; + field public static final java.lang.String _ID = "_id"; + } + + public static abstract interface MediaStore.Audio.PlaylistsColumns { + field public static final java.lang.String DATA = "_data"; + field public static final java.lang.String DATE_ADDED = "date_added"; + field public static final java.lang.String DATE_MODIFIED = "date_modified"; + field public static final java.lang.String NAME = "name"; + } + + public static final class MediaStore.Audio.Radio { + field public static final java.lang.String ENTRY_CONTENT_TYPE = "vnd.android.cursor.item/radio"; + } + + public static final class MediaStore.Files { + ctor public MediaStore.Files(); + method public static android.net.Uri getContentUri(java.lang.String); + method public static final android.net.Uri getContentUri(java.lang.String, long); + } + + public static abstract interface MediaStore.Files.FileColumns implements android.provider.MediaStore.MediaColumns { + field public static final java.lang.String MEDIA_TYPE = "media_type"; + field public static final int MEDIA_TYPE_AUDIO = 2; // 0x2 + field public static final int MEDIA_TYPE_IMAGE = 1; // 0x1 + field public static final int MEDIA_TYPE_NONE = 0; // 0x0 + field public static final int MEDIA_TYPE_PLAYLIST = 4; // 0x4 + field public static final int MEDIA_TYPE_VIDEO = 3; // 0x3 + field public static final java.lang.String MIME_TYPE = "mime_type"; + field public static final java.lang.String PARENT = "parent"; + field public static final java.lang.String TITLE = "title"; + } + + public static final class MediaStore.Images { + ctor public MediaStore.Images(); + } + + public static abstract interface MediaStore.Images.ImageColumns implements android.provider.MediaStore.MediaColumns { + field public static final java.lang.String BUCKET_DISPLAY_NAME = "bucket_display_name"; + field public static final java.lang.String BUCKET_ID = "bucket_id"; + field public static final java.lang.String DATE_TAKEN = "datetaken"; + field public static final java.lang.String DESCRIPTION = "description"; + field public static final java.lang.String IS_PRIVATE = "isprivate"; + field public static final java.lang.String LATITUDE = "latitude"; + field public static final java.lang.String LONGITUDE = "longitude"; + field public static final java.lang.String MINI_THUMB_MAGIC = "mini_thumb_magic"; + field public static final java.lang.String ORIENTATION = "orientation"; + field public static final java.lang.String PICASA_ID = "picasa_id"; + } + + public static final class MediaStore.Images.Media implements android.provider.MediaStore.Images.ImageColumns { + ctor public MediaStore.Images.Media(); + method public static final android.graphics.Bitmap getBitmap(android.content.ContentResolver, android.net.Uri) throws java.io.FileNotFoundException, java.io.IOException; + method public static android.net.Uri getContentUri(java.lang.String); + method public static final java.lang.String insertImage(android.content.ContentResolver, java.lang.String, java.lang.String, java.lang.String) throws java.io.FileNotFoundException; + method public static final java.lang.String insertImage(android.content.ContentResolver, android.graphics.Bitmap, java.lang.String, java.lang.String); + method public static final android.database.Cursor query(android.content.ContentResolver, android.net.Uri, java.lang.String[]); + method public static final android.database.Cursor query(android.content.ContentResolver, android.net.Uri, java.lang.String[], java.lang.String, java.lang.String); + method public static final android.database.Cursor query(android.content.ContentResolver, android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String); + field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/image"; + field public static final java.lang.String DEFAULT_SORT_ORDER = "bucket_display_name"; + field public static final android.net.Uri EXTERNAL_CONTENT_URI; + field public static final android.net.Uri INTERNAL_CONTENT_URI; + } + + public static class MediaStore.Images.Thumbnails implements android.provider.BaseColumns { + ctor public MediaStore.Images.Thumbnails(); + method public static void cancelThumbnailRequest(android.content.ContentResolver, long); + method public static void cancelThumbnailRequest(android.content.ContentResolver, long, long); + method public static android.net.Uri getContentUri(java.lang.String); + method public static android.graphics.Bitmap getThumbnail(android.content.ContentResolver, long, int, android.graphics.BitmapFactory.Options); + method public static android.graphics.Bitmap getThumbnail(android.content.ContentResolver, long, long, int, android.graphics.BitmapFactory.Options); + method public static final android.database.Cursor query(android.content.ContentResolver, android.net.Uri, java.lang.String[]); + method public static final android.database.Cursor queryMiniThumbnail(android.content.ContentResolver, long, int, java.lang.String[]); + method public static final android.database.Cursor queryMiniThumbnails(android.content.ContentResolver, android.net.Uri, int, java.lang.String[]); + field public static final java.lang.String DATA = "_data"; + field public static final java.lang.String DEFAULT_SORT_ORDER = "image_id ASC"; + field public static final android.net.Uri EXTERNAL_CONTENT_URI; + field public static final int FULL_SCREEN_KIND = 2; // 0x2 + field public static final java.lang.String HEIGHT = "height"; + field public static final java.lang.String IMAGE_ID = "image_id"; + field public static final android.net.Uri INTERNAL_CONTENT_URI; + field public static final java.lang.String KIND = "kind"; + field public static final int MICRO_KIND = 3; // 0x3 + field public static final int MINI_KIND = 1; // 0x1 + field public static final java.lang.String THUMB_DATA = "thumb_data"; + field public static final java.lang.String WIDTH = "width"; + } + + public static abstract interface MediaStore.MediaColumns implements android.provider.BaseColumns { + field public static final java.lang.String DATA = "_data"; + field public static final java.lang.String DATE_ADDED = "date_added"; + field public static final java.lang.String DATE_MODIFIED = "date_modified"; + field public static final java.lang.String DISPLAY_NAME = "_display_name"; + field public static final java.lang.String HEIGHT = "height"; + field public static final java.lang.String MIME_TYPE = "mime_type"; + field public static final java.lang.String SIZE = "_size"; + field public static final java.lang.String TITLE = "title"; + field public static final java.lang.String WIDTH = "width"; + } + + public static final class MediaStore.Video { + ctor public MediaStore.Video(); + method public static final android.database.Cursor query(android.content.ContentResolver, android.net.Uri, java.lang.String[]); + field public static final java.lang.String DEFAULT_SORT_ORDER = "_display_name"; + } + + public static final class MediaStore.Video.Media implements android.provider.MediaStore.Video.VideoColumns { + ctor public MediaStore.Video.Media(); + method public static android.net.Uri getContentUri(java.lang.String); + field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/video"; + field public static final java.lang.String DEFAULT_SORT_ORDER = "title"; + field public static final android.net.Uri EXTERNAL_CONTENT_URI; + field public static final android.net.Uri INTERNAL_CONTENT_URI; + } + + public static class MediaStore.Video.Thumbnails implements android.provider.BaseColumns { + ctor public MediaStore.Video.Thumbnails(); + method public static void cancelThumbnailRequest(android.content.ContentResolver, long); + method public static void cancelThumbnailRequest(android.content.ContentResolver, long, long); + method public static android.net.Uri getContentUri(java.lang.String); + method public static android.graphics.Bitmap getThumbnail(android.content.ContentResolver, long, int, android.graphics.BitmapFactory.Options); + method public static android.graphics.Bitmap getThumbnail(android.content.ContentResolver, long, long, int, android.graphics.BitmapFactory.Options); + field public static final java.lang.String DATA = "_data"; + field public static final java.lang.String DEFAULT_SORT_ORDER = "video_id ASC"; + field public static final android.net.Uri EXTERNAL_CONTENT_URI; + field public static final int FULL_SCREEN_KIND = 2; // 0x2 + field public static final java.lang.String HEIGHT = "height"; + field public static final android.net.Uri INTERNAL_CONTENT_URI; + field public static final java.lang.String KIND = "kind"; + field public static final int MICRO_KIND = 3; // 0x3 + field public static final int MINI_KIND = 1; // 0x1 + field public static final java.lang.String VIDEO_ID = "video_id"; + field public static final java.lang.String WIDTH = "width"; + } + + public static abstract interface MediaStore.Video.VideoColumns implements android.provider.MediaStore.MediaColumns { + field public static final java.lang.String ALBUM = "album"; + field public static final java.lang.String ARTIST = "artist"; + field public static final java.lang.String BOOKMARK = "bookmark"; + field public static final java.lang.String BUCKET_DISPLAY_NAME = "bucket_display_name"; + field public static final java.lang.String BUCKET_ID = "bucket_id"; + field public static final java.lang.String CATEGORY = "category"; + field public static final java.lang.String DATE_TAKEN = "datetaken"; + field public static final java.lang.String DESCRIPTION = "description"; + field public static final java.lang.String DURATION = "duration"; + field public static final java.lang.String IS_PRIVATE = "isprivate"; + field public static final java.lang.String LANGUAGE = "language"; + field public static final java.lang.String LATITUDE = "latitude"; + field public static final java.lang.String LONGITUDE = "longitude"; + field public static final java.lang.String MINI_THUMB_MAGIC = "mini_thumb_magic"; + field public static final java.lang.String RESOLUTION = "resolution"; + field public static final java.lang.String TAGS = "tags"; + } + + public abstract interface OpenableColumns { + field public static final java.lang.String DISPLAY_NAME = "_display_name"; + field public static final java.lang.String SIZE = "_size"; + } + + public class SearchRecentSuggestions { + ctor public SearchRecentSuggestions(android.content.Context, java.lang.String, int); + method public void clearHistory(); + method public void saveRecentQuery(java.lang.String, java.lang.String); + method protected void truncateHistory(android.content.ContentResolver, int); + field public static final java.lang.String[] QUERIES_PROJECTION_1LINE; + field public static final java.lang.String[] QUERIES_PROJECTION_2LINE; + field public static final int QUERIES_PROJECTION_DATE_INDEX = 1; // 0x1 + field public static final int QUERIES_PROJECTION_DISPLAY1_INDEX = 3; // 0x3 + field public static final int QUERIES_PROJECTION_DISPLAY2_INDEX = 4; // 0x4 + field public static final int QUERIES_PROJECTION_QUERY_INDEX = 2; // 0x2 + } + + public final class Settings { + ctor public Settings(); + field public static final java.lang.String ACTION_ACCESSIBILITY_SETTINGS = "android.settings.ACCESSIBILITY_SETTINGS"; + field public static final java.lang.String ACTION_ADD_ACCOUNT = "android.settings.ADD_ACCOUNT_SETTINGS"; + field public static final java.lang.String ACTION_AIRPLANE_MODE_SETTINGS = "android.settings.AIRPLANE_MODE_SETTINGS"; + field public static final java.lang.String ACTION_APN_SETTINGS = "android.settings.APN_SETTINGS"; + field public static final java.lang.String ACTION_APPLICATION_DETAILS_SETTINGS = "android.settings.APPLICATION_DETAILS_SETTINGS"; + field public static final java.lang.String ACTION_APPLICATION_DEVELOPMENT_SETTINGS = "android.settings.APPLICATION_DEVELOPMENT_SETTINGS"; + field public static final java.lang.String ACTION_APPLICATION_SETTINGS = "android.settings.APPLICATION_SETTINGS"; + field public static final java.lang.String ACTION_BATTERY_SAVER_SETTINGS = "android.settings.BATTERY_SAVER_SETTINGS"; + field public static final java.lang.String ACTION_BLUETOOTH_SETTINGS = "android.settings.BLUETOOTH_SETTINGS"; + field public static final java.lang.String ACTION_CAPTIONING_SETTINGS = "android.settings.CAPTIONING_SETTINGS"; + field public static final java.lang.String ACTION_CAST_SETTINGS = "android.settings.CAST_SETTINGS"; + field public static final java.lang.String ACTION_DATA_ROAMING_SETTINGS = "android.settings.DATA_ROAMING_SETTINGS"; + field public static final java.lang.String ACTION_DATE_SETTINGS = "android.settings.DATE_SETTINGS"; + field public static final java.lang.String ACTION_DEVICE_INFO_SETTINGS = "android.settings.DEVICE_INFO_SETTINGS"; + field public static final java.lang.String ACTION_DISPLAY_SETTINGS = "android.settings.DISPLAY_SETTINGS"; + field public static final java.lang.String ACTION_DREAM_SETTINGS = "android.settings.DREAM_SETTINGS"; + field public static final java.lang.String ACTION_HOME_SETTINGS = "android.settings.HOME_SETTINGS"; + field public static final java.lang.String ACTION_INPUT_METHOD_SETTINGS = "android.settings.INPUT_METHOD_SETTINGS"; + field public static final java.lang.String ACTION_INPUT_METHOD_SUBTYPE_SETTINGS = "android.settings.INPUT_METHOD_SUBTYPE_SETTINGS"; + field public static final java.lang.String ACTION_INTERNAL_STORAGE_SETTINGS = "android.settings.INTERNAL_STORAGE_SETTINGS"; + field public static final java.lang.String ACTION_LOCALE_SETTINGS = "android.settings.LOCALE_SETTINGS"; + field public static final java.lang.String ACTION_LOCATION_SOURCE_SETTINGS = "android.settings.LOCATION_SOURCE_SETTINGS"; + field public static final java.lang.String ACTION_MANAGE_ALL_APPLICATIONS_SETTINGS = "android.settings.MANAGE_ALL_APPLICATIONS_SETTINGS"; + field public static final java.lang.String ACTION_MANAGE_APPLICATIONS_SETTINGS = "android.settings.MANAGE_APPLICATIONS_SETTINGS"; + field public static final java.lang.String ACTION_MEMORY_CARD_SETTINGS = "android.settings.MEMORY_CARD_SETTINGS"; + field public static final java.lang.String ACTION_NETWORK_OPERATOR_SETTINGS = "android.settings.NETWORK_OPERATOR_SETTINGS"; + field public static final java.lang.String ACTION_NFCSHARING_SETTINGS = "android.settings.NFCSHARING_SETTINGS"; + field public static final java.lang.String ACTION_NFC_PAYMENT_SETTINGS = "android.settings.NFC_PAYMENT_SETTINGS"; + field public static final java.lang.String ACTION_NFC_SETTINGS = "android.settings.NFC_SETTINGS"; + field public static final java.lang.String ACTION_NOTIFICATION_LISTENER_SETTINGS = "android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS"; + field public static final java.lang.String ACTION_PRINT_SETTINGS = "android.settings.ACTION_PRINT_SETTINGS"; + field public static final java.lang.String ACTION_PRIVACY_SETTINGS = "android.settings.PRIVACY_SETTINGS"; + field public static final java.lang.String ACTION_QUICK_LAUNCH_SETTINGS = "android.settings.QUICK_LAUNCH_SETTINGS"; + field public static final java.lang.String ACTION_SEARCH_SETTINGS = "android.search.action.SEARCH_SETTINGS"; + field public static final java.lang.String ACTION_SECURITY_SETTINGS = "android.settings.SECURITY_SETTINGS"; + field public static final java.lang.String ACTION_SETTINGS = "android.settings.SETTINGS"; + field public static final java.lang.String ACTION_SHOW_REGULATORY_INFO = "android.settings.SHOW_REGULATORY_INFO"; + field public static final java.lang.String ACTION_SOUND_SETTINGS = "android.settings.SOUND_SETTINGS"; + field public static final java.lang.String ACTION_SYNC_SETTINGS = "android.settings.SYNC_SETTINGS"; + field public static final java.lang.String ACTION_USAGE_ACCESS_SETTINGS = "android.settings.USAGE_ACCESS_SETTINGS"; + field public static final java.lang.String ACTION_USER_DICTIONARY_SETTINGS = "android.settings.USER_DICTIONARY_SETTINGS"; + field public static final java.lang.String ACTION_VOICE_CONTROL_AIRPLANE_MODE = "android.settings.VOICE_CONTROL_AIRPLANE_MODE"; + field public static final java.lang.String ACTION_VOICE_INPUT_SETTINGS = "android.settings.VOICE_INPUT_SETTINGS"; + field public static final java.lang.String ACTION_WIFI_IP_SETTINGS = "android.settings.WIFI_IP_SETTINGS"; + field public static final java.lang.String ACTION_WIFI_SETTINGS = "android.settings.WIFI_SETTINGS"; + field public static final java.lang.String ACTION_WIRELESS_SETTINGS = "android.settings.WIRELESS_SETTINGS"; + field public static final java.lang.String AUTHORITY = "settings"; + field public static final java.lang.String EXTRA_ACCOUNT_TYPES = "account_types"; + field public static final java.lang.String EXTRA_AIRPLANE_MODE_ENABLED = "airplane_mode_enabled"; + field public static final java.lang.String EXTRA_AUTHORITIES = "authorities"; + field public static final java.lang.String EXTRA_INPUT_METHOD_ID = "input_method_id"; + } + + public static final class Settings.Global extends android.provider.Settings.NameValueTable { + ctor public Settings.Global(); + method public static float getFloat(android.content.ContentResolver, java.lang.String, float); + method public static float getFloat(android.content.ContentResolver, java.lang.String) throws android.provider.Settings.SettingNotFoundException; + method public static int getInt(android.content.ContentResolver, java.lang.String, int); + method public static int getInt(android.content.ContentResolver, java.lang.String) throws android.provider.Settings.SettingNotFoundException; + method public static long getLong(android.content.ContentResolver, java.lang.String, long); + method public static long getLong(android.content.ContentResolver, java.lang.String) throws android.provider.Settings.SettingNotFoundException; + method public static java.lang.String getString(android.content.ContentResolver, java.lang.String); + method public static android.net.Uri getUriFor(java.lang.String); + method public static boolean putFloat(android.content.ContentResolver, java.lang.String, float); + method public static boolean putInt(android.content.ContentResolver, java.lang.String, int); + method public static boolean putLong(android.content.ContentResolver, java.lang.String, long); + method public static boolean putString(android.content.ContentResolver, java.lang.String, java.lang.String); + field public static final java.lang.String ADB_ENABLED = "adb_enabled"; + field public static final java.lang.String AIRPLANE_MODE_ON = "airplane_mode_on"; + field public static final java.lang.String AIRPLANE_MODE_RADIOS = "airplane_mode_radios"; + field public static final java.lang.String ALWAYS_FINISH_ACTIVITIES = "always_finish_activities"; + field public static final java.lang.String ANIMATOR_DURATION_SCALE = "animator_duration_scale"; + field public static final java.lang.String AUTO_TIME = "auto_time"; + field public static final java.lang.String AUTO_TIME_ZONE = "auto_time_zone"; + field public static final java.lang.String BLUETOOTH_ON = "bluetooth_on"; + field public static final android.net.Uri CONTENT_URI; + field public static final java.lang.String DATA_ROAMING = "data_roaming"; + field public static final java.lang.String DEBUG_APP = "debug_app"; + field public static final java.lang.String DEVELOPMENT_SETTINGS_ENABLED = "development_settings_enabled"; + field public static final java.lang.String DEVICE_PROVISIONED = "device_provisioned"; + field public static final java.lang.String HTTP_PROXY = "http_proxy"; + field public static final deprecated java.lang.String INSTALL_NON_MARKET_APPS = "install_non_market_apps"; + field public static final java.lang.String MODE_RINGER = "mode_ringer"; + field public static final java.lang.String NETWORK_PREFERENCE = "network_preference"; + field public static final java.lang.String RADIO_BLUETOOTH = "bluetooth"; + field public static final java.lang.String RADIO_CELL = "cell"; + field public static final java.lang.String RADIO_NFC = "nfc"; + field public static final java.lang.String RADIO_WIFI = "wifi"; + field public static final java.lang.String SHOW_PROCESSES = "show_processes"; + field public static final java.lang.String STAY_ON_WHILE_PLUGGED_IN = "stay_on_while_plugged_in"; + field public static final java.lang.String SYS_PROP_SETTING_VERSION = "sys.settings_global_version"; + field public static final java.lang.String THEATER_MODE_ON = "theater_mode_on"; + field public static final java.lang.String TRANSITION_ANIMATION_SCALE = "transition_animation_scale"; + field public static final java.lang.String USB_MASS_STORAGE_ENABLED = "usb_mass_storage_enabled"; + field public static final java.lang.String USE_GOOGLE_MAIL = "use_google_mail"; + field public static final java.lang.String WAIT_FOR_DEBUGGER = "wait_for_debugger"; + field public static final java.lang.String WIFI_MAX_DHCP_RETRY_COUNT = "wifi_max_dhcp_retry_count"; + field public static final java.lang.String WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS = "wifi_mobile_data_transition_wakelock_timeout_ms"; + field public static final java.lang.String WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON = "wifi_networks_available_notification_on"; + field public static final java.lang.String WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY = "wifi_networks_available_repeat_delay"; + field public static final java.lang.String WIFI_NUM_OPEN_NETWORKS_KEPT = "wifi_num_open_networks_kept"; + field public static final java.lang.String WIFI_ON = "wifi_on"; + field public static final java.lang.String WIFI_SLEEP_POLICY = "wifi_sleep_policy"; + field public static final int WIFI_SLEEP_POLICY_DEFAULT = 0; // 0x0 + field public static final int WIFI_SLEEP_POLICY_NEVER = 2; // 0x2 + field public static final int WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED = 1; // 0x1 + field public static final java.lang.String WIFI_WATCHDOG_ON = "wifi_watchdog_on"; + field public static final java.lang.String WINDOW_ANIMATION_SCALE = "window_animation_scale"; + } + + public static class Settings.NameValueTable implements android.provider.BaseColumns { + ctor public Settings.NameValueTable(); + method public static android.net.Uri getUriFor(android.net.Uri, java.lang.String); + method protected static boolean putString(android.content.ContentResolver, android.net.Uri, java.lang.String, java.lang.String); + field public static final java.lang.String NAME = "name"; + field public static final java.lang.String VALUE = "value"; + } + + public static final class Settings.Secure extends android.provider.Settings.NameValueTable { + ctor public Settings.Secure(); + method public static float getFloat(android.content.ContentResolver, java.lang.String, float); + method public static float getFloat(android.content.ContentResolver, java.lang.String) throws android.provider.Settings.SettingNotFoundException; + method public static int getInt(android.content.ContentResolver, java.lang.String, int); + method public static int getInt(android.content.ContentResolver, java.lang.String) throws android.provider.Settings.SettingNotFoundException; + method public static long getLong(android.content.ContentResolver, java.lang.String, long); + method public static long getLong(android.content.ContentResolver, java.lang.String) throws android.provider.Settings.SettingNotFoundException; + method public static java.lang.String getString(android.content.ContentResolver, java.lang.String); + method public static android.net.Uri getUriFor(java.lang.String); + method public static final deprecated boolean isLocationProviderEnabled(android.content.ContentResolver, java.lang.String); + method public static boolean putFloat(android.content.ContentResolver, java.lang.String, float); + method public static boolean putInt(android.content.ContentResolver, java.lang.String, int); + method public static boolean putLong(android.content.ContentResolver, java.lang.String, long); + method public static boolean putString(android.content.ContentResolver, java.lang.String, java.lang.String); + method public static final deprecated void setLocationProviderEnabled(android.content.ContentResolver, java.lang.String, boolean); + field public static final java.lang.String ACCESSIBILITY_DISPLAY_INVERSION_ENABLED = "accessibility_display_inversion_enabled"; + field public static final java.lang.String ACCESSIBILITY_ENABLED = "accessibility_enabled"; + field public static final java.lang.String ACCESSIBILITY_SPEAK_PASSWORD = "speak_password"; + field public static final deprecated java.lang.String ADB_ENABLED = "adb_enabled"; + field public static final java.lang.String ALLOWED_GEOLOCATION_ORIGINS = "allowed_geolocation_origins"; + field public static final java.lang.String ALLOW_MOCK_LOCATION = "mock_location"; + field public static final java.lang.String ANDROID_ID = "android_id"; + field public static final deprecated java.lang.String BACKGROUND_DATA = "background_data"; + field public static final deprecated java.lang.String BLUETOOTH_ON = "bluetooth_on"; + field public static final android.net.Uri CONTENT_URI; + field public static final deprecated java.lang.String DATA_ROAMING = "data_roaming"; + field public static final java.lang.String DEFAULT_INPUT_METHOD = "default_input_method"; + field public static final deprecated java.lang.String DEVELOPMENT_SETTINGS_ENABLED = "development_settings_enabled"; + field public static final deprecated java.lang.String DEVICE_PROVISIONED = "device_provisioned"; + field public static final java.lang.String ENABLED_ACCESSIBILITY_SERVICES = "enabled_accessibility_services"; + field public static final java.lang.String ENABLED_INPUT_METHODS = "enabled_input_methods"; + field public static final deprecated java.lang.String HTTP_PROXY = "http_proxy"; + field public static final java.lang.String INPUT_METHOD_SELECTOR_VISIBILITY = "input_method_selector_visibility"; + field public static final java.lang.String INSTALL_NON_MARKET_APPS = "install_non_market_apps"; + field public static final java.lang.String LOCATION_MODE = "location_mode"; + field public static final int LOCATION_MODE_BATTERY_SAVING = 2; // 0x2 + field public static final int LOCATION_MODE_HIGH_ACCURACY = 3; // 0x3 + field public static final int LOCATION_MODE_OFF = 0; // 0x0 + field public static final int LOCATION_MODE_SENSORS_ONLY = 1; // 0x1 + field public static final deprecated java.lang.String LOCATION_PROVIDERS_ALLOWED = "location_providers_allowed"; + field public static final java.lang.String LOCK_PATTERN_ENABLED = "lock_pattern_autolock"; + field public static final deprecated java.lang.String LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED = "lock_pattern_tactile_feedback_enabled"; + field public static final java.lang.String LOCK_PATTERN_VISIBLE = "lock_pattern_visible_pattern"; + field public static final deprecated java.lang.String LOGGING_ID = "logging_id"; + field public static final deprecated java.lang.String NETWORK_PREFERENCE = "network_preference"; + field public static final java.lang.String PARENTAL_CONTROL_ENABLED = "parental_control_enabled"; + field public static final java.lang.String PARENTAL_CONTROL_LAST_UPDATE = "parental_control_last_update"; + field public static final java.lang.String PARENTAL_CONTROL_REDIRECT_URL = "parental_control_redirect_url"; + field public static final java.lang.String SELECTED_INPUT_METHOD_SUBTYPE = "selected_input_method_subtype"; + field public static final java.lang.String SETTINGS_CLASSNAME = "settings_classname"; + field public static final java.lang.String SKIP_FIRST_USE_HINTS = "skip_first_use_hints"; + field public static final java.lang.String SYS_PROP_SETTING_VERSION = "sys.settings_secure_version"; + field public static final java.lang.String TOUCH_EXPLORATION_ENABLED = "touch_exploration_enabled"; + field public static final deprecated java.lang.String TTS_DEFAULT_COUNTRY = "tts_default_country"; + field public static final deprecated java.lang.String TTS_DEFAULT_LANG = "tts_default_lang"; + field public static final java.lang.String TTS_DEFAULT_PITCH = "tts_default_pitch"; + field public static final java.lang.String TTS_DEFAULT_RATE = "tts_default_rate"; + field public static final java.lang.String TTS_DEFAULT_SYNTH = "tts_default_synth"; + field public static final deprecated java.lang.String TTS_DEFAULT_VARIANT = "tts_default_variant"; + field public static final java.lang.String TTS_ENABLED_PLUGINS = "tts_enabled_plugins"; + field public static final deprecated java.lang.String TTS_USE_DEFAULTS = "tts_use_defaults"; + field public static final deprecated java.lang.String USB_MASS_STORAGE_ENABLED = "usb_mass_storage_enabled"; + field public static final deprecated java.lang.String USE_GOOGLE_MAIL = "use_google_mail"; + field public static final deprecated java.lang.String WIFI_MAX_DHCP_RETRY_COUNT = "wifi_max_dhcp_retry_count"; + field public static final deprecated java.lang.String WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS = "wifi_mobile_data_transition_wakelock_timeout_ms"; + field public static final deprecated java.lang.String WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON = "wifi_networks_available_notification_on"; + field public static final deprecated java.lang.String WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY = "wifi_networks_available_repeat_delay"; + field public static final deprecated java.lang.String WIFI_NUM_OPEN_NETWORKS_KEPT = "wifi_num_open_networks_kept"; + field public static final deprecated java.lang.String WIFI_ON = "wifi_on"; + field public static final deprecated java.lang.String WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE = "wifi_watchdog_acceptable_packet_loss_percentage"; + field public static final deprecated java.lang.String WIFI_WATCHDOG_AP_COUNT = "wifi_watchdog_ap_count"; + field public static final deprecated java.lang.String WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS = "wifi_watchdog_background_check_delay_ms"; + field public static final deprecated java.lang.String WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED = "wifi_watchdog_background_check_enabled"; + field public static final deprecated java.lang.String WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS = "wifi_watchdog_background_check_timeout_ms"; + field public static final deprecated java.lang.String WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT = "wifi_watchdog_initial_ignored_ping_count"; + field public static final deprecated java.lang.String WIFI_WATCHDOG_MAX_AP_CHECKS = "wifi_watchdog_max_ap_checks"; + field public static final deprecated java.lang.String WIFI_WATCHDOG_ON = "wifi_watchdog_on"; + field public static final deprecated java.lang.String WIFI_WATCHDOG_PING_COUNT = "wifi_watchdog_ping_count"; + field public static final deprecated java.lang.String WIFI_WATCHDOG_PING_DELAY_MS = "wifi_watchdog_ping_delay_ms"; + field public static final deprecated java.lang.String WIFI_WATCHDOG_PING_TIMEOUT_MS = "wifi_watchdog_ping_timeout_ms"; + field public static final deprecated java.lang.String WIFI_WATCHDOG_WATCH_LIST = "wifi_watchdog_watch_list"; + } + + public static class Settings.SettingNotFoundException extends android.util.AndroidException { + ctor public Settings.SettingNotFoundException(java.lang.String); + } + + public static final class Settings.System extends android.provider.Settings.NameValueTable { + ctor public Settings.System(); + method public static void getConfiguration(android.content.ContentResolver, android.content.res.Configuration); + method public static float getFloat(android.content.ContentResolver, java.lang.String, float); + method public static float getFloat(android.content.ContentResolver, java.lang.String) throws android.provider.Settings.SettingNotFoundException; + method public static int getInt(android.content.ContentResolver, java.lang.String, int); + method public static int getInt(android.content.ContentResolver, java.lang.String) throws android.provider.Settings.SettingNotFoundException; + method public static long getLong(android.content.ContentResolver, java.lang.String, long); + method public static long getLong(android.content.ContentResolver, java.lang.String) throws android.provider.Settings.SettingNotFoundException; + method public static deprecated boolean getShowGTalkServiceStatus(android.content.ContentResolver); + method public static java.lang.String getString(android.content.ContentResolver, java.lang.String); + method public static android.net.Uri getUriFor(java.lang.String); + method public static boolean putConfiguration(android.content.ContentResolver, android.content.res.Configuration); + method public static boolean putFloat(android.content.ContentResolver, java.lang.String, float); + method public static boolean putInt(android.content.ContentResolver, java.lang.String, int); + method public static boolean putLong(android.content.ContentResolver, java.lang.String, long); + method public static boolean putString(android.content.ContentResolver, java.lang.String, java.lang.String); + method public static deprecated void setShowGTalkServiceStatus(android.content.ContentResolver, boolean); + field public static final java.lang.String ACCELEROMETER_ROTATION = "accelerometer_rotation"; + field public static final deprecated java.lang.String ADB_ENABLED = "adb_enabled"; + field public static final deprecated java.lang.String AIRPLANE_MODE_ON = "airplane_mode_on"; + field public static final deprecated java.lang.String AIRPLANE_MODE_RADIOS = "airplane_mode_radios"; + field public static final java.lang.String ALARM_ALERT = "alarm_alert"; + field public static final deprecated java.lang.String ALWAYS_FINISH_ACTIVITIES = "always_finish_activities"; + field public static final deprecated java.lang.String ANDROID_ID = "android_id"; + field public static final deprecated java.lang.String ANIMATOR_DURATION_SCALE = "animator_duration_scale"; + field public static final java.lang.String APPEND_FOR_LAST_AUDIBLE = "_last_audible"; + field public static final deprecated java.lang.String AUTO_TIME = "auto_time"; + field public static final deprecated java.lang.String AUTO_TIME_ZONE = "auto_time_zone"; + field public static final java.lang.String BLUETOOTH_DISCOVERABILITY = "bluetooth_discoverability"; + field public static final java.lang.String BLUETOOTH_DISCOVERABILITY_TIMEOUT = "bluetooth_discoverability_timeout"; + field public static final deprecated java.lang.String BLUETOOTH_ON = "bluetooth_on"; + field public static final android.net.Uri CONTENT_URI; + field public static final deprecated java.lang.String DATA_ROAMING = "data_roaming"; + field public static final java.lang.String DATE_FORMAT = "date_format"; + field public static final deprecated java.lang.String DEBUG_APP = "debug_app"; + field public static final android.net.Uri DEFAULT_ALARM_ALERT_URI; + field public static final android.net.Uri DEFAULT_NOTIFICATION_URI; + field public static final android.net.Uri DEFAULT_RINGTONE_URI; + field public static final deprecated java.lang.String DEVICE_PROVISIONED = "device_provisioned"; + field public static final deprecated java.lang.String DIM_SCREEN = "dim_screen"; + field public static final java.lang.String DTMF_TONE_WHEN_DIALING = "dtmf_tone"; + field public static final java.lang.String END_BUTTON_BEHAVIOR = "end_button_behavior"; + field public static final java.lang.String FONT_SCALE = "font_scale"; + field public static final java.lang.String HAPTIC_FEEDBACK_ENABLED = "haptic_feedback_enabled"; + field public static final deprecated java.lang.String HTTP_PROXY = "http_proxy"; + field public static final deprecated java.lang.String INSTALL_NON_MARKET_APPS = "install_non_market_apps"; + field public static final deprecated java.lang.String LOCATION_PROVIDERS_ALLOWED = "location_providers_allowed"; + field public static final deprecated java.lang.String LOCK_PATTERN_ENABLED = "lock_pattern_autolock"; + field public static final deprecated java.lang.String LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED = "lock_pattern_tactile_feedback_enabled"; + field public static final deprecated java.lang.String LOCK_PATTERN_VISIBLE = "lock_pattern_visible_pattern"; + field public static final deprecated java.lang.String LOGGING_ID = "logging_id"; + field public static final deprecated java.lang.String MODE_RINGER = "mode_ringer"; + field public static final java.lang.String MODE_RINGER_STREAMS_AFFECTED = "mode_ringer_streams_affected"; + field public static final java.lang.String MUTE_STREAMS_AFFECTED = "mute_streams_affected"; + field public static final deprecated java.lang.String NETWORK_PREFERENCE = "network_preference"; + field public static final deprecated java.lang.String NEXT_ALARM_FORMATTED = "next_alarm_formatted"; + field public static final java.lang.String NOTIFICATION_SOUND = "notification_sound"; + field public static final deprecated java.lang.String PARENTAL_CONTROL_ENABLED = "parental_control_enabled"; + field public static final deprecated java.lang.String PARENTAL_CONTROL_LAST_UPDATE = "parental_control_last_update"; + field public static final deprecated java.lang.String PARENTAL_CONTROL_REDIRECT_URL = "parental_control_redirect_url"; + field public static final deprecated java.lang.String RADIO_BLUETOOTH = "bluetooth"; + field public static final deprecated java.lang.String RADIO_CELL = "cell"; + field public static final deprecated java.lang.String RADIO_NFC = "nfc"; + field public static final deprecated java.lang.String RADIO_WIFI = "wifi"; + field public static final java.lang.String RINGTONE = "ringtone"; + field public static final java.lang.String SCREEN_BRIGHTNESS = "screen_brightness"; + field public static final java.lang.String SCREEN_BRIGHTNESS_MODE = "screen_brightness_mode"; + field public static final int SCREEN_BRIGHTNESS_MODE_AUTOMATIC = 1; // 0x1 + field public static final int SCREEN_BRIGHTNESS_MODE_MANUAL = 0; // 0x0 + field public static final java.lang.String SCREEN_OFF_TIMEOUT = "screen_off_timeout"; + field public static final deprecated java.lang.String SETTINGS_CLASSNAME = "settings_classname"; + field public static final java.lang.String SETUP_WIZARD_HAS_RUN = "setup_wizard_has_run"; + field public static final java.lang.String SHOW_GTALK_SERVICE_STATUS = "SHOW_GTALK_SERVICE_STATUS"; + field public static final deprecated java.lang.String SHOW_PROCESSES = "show_processes"; + field public static final deprecated java.lang.String SHOW_WEB_SUGGESTIONS = "show_web_suggestions"; + field public static final java.lang.String SOUND_EFFECTS_ENABLED = "sound_effects_enabled"; + field public static final deprecated java.lang.String STAY_ON_WHILE_PLUGGED_IN = "stay_on_while_plugged_in"; + field public static final java.lang.String SYS_PROP_SETTING_VERSION = "sys.settings_system_version"; + field public static final java.lang.String TEXT_AUTO_CAPS = "auto_caps"; + field public static final java.lang.String TEXT_AUTO_PUNCTUATE = "auto_punctuate"; + field public static final java.lang.String TEXT_AUTO_REPLACE = "auto_replace"; + field public static final java.lang.String TEXT_SHOW_PASSWORD = "show_password"; + field public static final java.lang.String TIME_12_24 = "time_12_24"; + field public static final deprecated java.lang.String TRANSITION_ANIMATION_SCALE = "transition_animation_scale"; + field public static final deprecated java.lang.String USB_MASS_STORAGE_ENABLED = "usb_mass_storage_enabled"; + field public static final java.lang.String USER_ROTATION = "user_rotation"; + field public static final deprecated java.lang.String USE_GOOGLE_MAIL = "use_google_mail"; + field public static final java.lang.String VIBRATE_ON = "vibrate_on"; + field public static final java.lang.String VOLUME_ALARM = "volume_alarm"; + field public static final java.lang.String VOLUME_BLUETOOTH_SCO = "volume_bluetooth_sco"; + field public static final java.lang.String VOLUME_MUSIC = "volume_music"; + field public static final java.lang.String VOLUME_NOTIFICATION = "volume_notification"; + field public static final java.lang.String VOLUME_RING = "volume_ring"; + field public static final java.lang.String[] VOLUME_SETTINGS; + field public static final java.lang.String VOLUME_SYSTEM = "volume_system"; + field public static final java.lang.String VOLUME_VOICE = "volume_voice"; + field public static final deprecated java.lang.String WAIT_FOR_DEBUGGER = "wait_for_debugger"; + field public static final deprecated java.lang.String WALLPAPER_ACTIVITY = "wallpaper_activity"; + field public static final deprecated java.lang.String WIFI_MAX_DHCP_RETRY_COUNT = "wifi_max_dhcp_retry_count"; + field public static final deprecated java.lang.String WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS = "wifi_mobile_data_transition_wakelock_timeout_ms"; + field public static final deprecated java.lang.String WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON = "wifi_networks_available_notification_on"; + field public static final deprecated java.lang.String WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY = "wifi_networks_available_repeat_delay"; + field public static final deprecated java.lang.String WIFI_NUM_OPEN_NETWORKS_KEPT = "wifi_num_open_networks_kept"; + field public static final deprecated java.lang.String WIFI_ON = "wifi_on"; + field public static final deprecated java.lang.String WIFI_SLEEP_POLICY = "wifi_sleep_policy"; + field public static final deprecated int WIFI_SLEEP_POLICY_DEFAULT = 0; // 0x0 + field public static final deprecated int WIFI_SLEEP_POLICY_NEVER = 2; // 0x2 + field public static final deprecated int WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED = 1; // 0x1 + field public static final deprecated java.lang.String WIFI_STATIC_DNS1 = "wifi_static_dns1"; + field public static final deprecated java.lang.String WIFI_STATIC_DNS2 = "wifi_static_dns2"; + field public static final deprecated java.lang.String WIFI_STATIC_GATEWAY = "wifi_static_gateway"; + field public static final deprecated java.lang.String WIFI_STATIC_IP = "wifi_static_ip"; + field public static final deprecated java.lang.String WIFI_STATIC_NETMASK = "wifi_static_netmask"; + field public static final deprecated java.lang.String WIFI_USE_STATIC_IP = "wifi_use_static_ip"; + field public static final deprecated java.lang.String WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE = "wifi_watchdog_acceptable_packet_loss_percentage"; + field public static final deprecated java.lang.String WIFI_WATCHDOG_AP_COUNT = "wifi_watchdog_ap_count"; + field public static final deprecated java.lang.String WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS = "wifi_watchdog_background_check_delay_ms"; + field public static final deprecated java.lang.String WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED = "wifi_watchdog_background_check_enabled"; + field public static final deprecated java.lang.String WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS = "wifi_watchdog_background_check_timeout_ms"; + field public static final deprecated java.lang.String WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT = "wifi_watchdog_initial_ignored_ping_count"; + field public static final deprecated java.lang.String WIFI_WATCHDOG_MAX_AP_CHECKS = "wifi_watchdog_max_ap_checks"; + field public static final deprecated java.lang.String WIFI_WATCHDOG_ON = "wifi_watchdog_on"; + field public static final deprecated java.lang.String WIFI_WATCHDOG_PING_COUNT = "wifi_watchdog_ping_count"; + field public static final deprecated java.lang.String WIFI_WATCHDOG_PING_DELAY_MS = "wifi_watchdog_ping_delay_ms"; + field public static final deprecated java.lang.String WIFI_WATCHDOG_PING_TIMEOUT_MS = "wifi_watchdog_ping_timeout_ms"; + field public static final deprecated java.lang.String WINDOW_ANIMATION_SCALE = "window_animation_scale"; + } + + public class SyncStateContract { + ctor public SyncStateContract(); + } + + public static abstract interface SyncStateContract.Columns implements android.provider.BaseColumns { + 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 DATA = "data"; + } + + public static class SyncStateContract.Constants implements android.provider.SyncStateContract.Columns { + ctor public SyncStateContract.Constants(); + field public static final java.lang.String CONTENT_DIRECTORY = "syncstate"; + } + + public static final class SyncStateContract.Helpers { + ctor public SyncStateContract.Helpers(); + method public static byte[] get(android.content.ContentProviderClient, android.net.Uri, android.accounts.Account) throws android.os.RemoteException; + method public static android.util.Pair getWithUri(android.content.ContentProviderClient, android.net.Uri, android.accounts.Account) throws android.os.RemoteException; + method public static android.net.Uri insert(android.content.ContentProviderClient, android.net.Uri, android.accounts.Account, byte[]) throws android.os.RemoteException; + method public static android.content.ContentProviderOperation newSetOperation(android.net.Uri, android.accounts.Account, byte[]); + method public static android.content.ContentProviderOperation newUpdateOperation(android.net.Uri, byte[]); + method public static void set(android.content.ContentProviderClient, android.net.Uri, android.accounts.Account, byte[]) throws android.os.RemoteException; + method public static void update(android.content.ContentProviderClient, android.net.Uri, byte[]) throws android.os.RemoteException; + } + + public final class Telephony { + } + + public static abstract interface Telephony.BaseMmsColumns implements android.provider.BaseColumns { + field public static final java.lang.String CONTENT_CLASS = "ct_cls"; + field public static final java.lang.String CONTENT_LOCATION = "ct_l"; + field public static final java.lang.String CONTENT_TYPE = "ct_t"; + field public static final java.lang.String CREATOR = "creator"; + field public static final java.lang.String DATE = "date"; + field public static final java.lang.String DATE_SENT = "date_sent"; + field public static final java.lang.String DELIVERY_REPORT = "d_rpt"; + field public static final java.lang.String DELIVERY_TIME = "d_tm"; + field public static final java.lang.String EXPIRY = "exp"; + field public static final java.lang.String LOCKED = "locked"; + field public static final java.lang.String MESSAGE_BOX = "msg_box"; + field public static final int MESSAGE_BOX_ALL = 0; // 0x0 + field public static final int MESSAGE_BOX_DRAFTS = 3; // 0x3 + field public static final int MESSAGE_BOX_FAILED = 5; // 0x5 + field public static final int MESSAGE_BOX_INBOX = 1; // 0x1 + field public static final int MESSAGE_BOX_OUTBOX = 4; // 0x4 + field public static final int MESSAGE_BOX_SENT = 2; // 0x2 + field public static final java.lang.String MESSAGE_CLASS = "m_cls"; + field public static final java.lang.String MESSAGE_ID = "m_id"; + field public static final java.lang.String MESSAGE_SIZE = "m_size"; + field public static final java.lang.String MESSAGE_TYPE = "m_type"; + field public static final java.lang.String MMS_VERSION = "v"; + field public static final java.lang.String PRIORITY = "pri"; + field public static final java.lang.String READ = "read"; + field public static final java.lang.String READ_REPORT = "rr"; + field public static final java.lang.String READ_STATUS = "read_status"; + field public static final java.lang.String REPORT_ALLOWED = "rpt_a"; + field public static final java.lang.String RESPONSE_STATUS = "resp_st"; + field public static final java.lang.String RESPONSE_TEXT = "resp_txt"; + field public static final java.lang.String RETRIEVE_STATUS = "retr_st"; + field public static final java.lang.String RETRIEVE_TEXT = "retr_txt"; + field public static final java.lang.String RETRIEVE_TEXT_CHARSET = "retr_txt_cs"; + field public static final java.lang.String SEEN = "seen"; + field public static final java.lang.String STATUS = "st"; + field public static final java.lang.String SUBJECT = "sub"; + field public static final java.lang.String SUBJECT_CHARSET = "sub_cs"; + field public static final java.lang.String SUBSCRIPTION_ID = "sub_id"; + field public static final java.lang.String TEXT_ONLY = "text_only"; + field public static final java.lang.String THREAD_ID = "thread_id"; + field public static final java.lang.String TRANSACTION_ID = "tr_id"; + } + + public static abstract interface Telephony.CanonicalAddressesColumns implements android.provider.BaseColumns { + field public static final java.lang.String ADDRESS = "address"; + } + + public static final class Telephony.Carriers implements android.provider.BaseColumns { + field public static final java.lang.String APN = "apn"; + field public static final java.lang.String AUTH_TYPE = "authtype"; + field public static final java.lang.String BEARER = "bearer"; + field public static final java.lang.String CARRIER_ENABLED = "carrier_enabled"; + field public static final android.net.Uri CONTENT_URI; + field public static final java.lang.String CURRENT = "current"; + field public static final java.lang.String DEFAULT_SORT_ORDER = "name ASC"; + field public static final java.lang.String MCC = "mcc"; + field public static final java.lang.String MMSC = "mmsc"; + field public static final java.lang.String MMSPORT = "mmsport"; + field public static final java.lang.String MMSPROXY = "mmsproxy"; + field public static final java.lang.String MNC = "mnc"; + field public static final java.lang.String MVNO_MATCH_DATA = "mvno_match_data"; + field public static final java.lang.String MVNO_TYPE = "mvno_type"; + field public static final java.lang.String NAME = "name"; + field public static final java.lang.String NUMERIC = "numeric"; + field public static final java.lang.String PASSWORD = "password"; + field public static final java.lang.String PORT = "port"; + field public static final java.lang.String PROTOCOL = "protocol"; + field public static final java.lang.String PROXY = "proxy"; + field public static final java.lang.String ROAMING_PROTOCOL = "roaming_protocol"; + field public static final java.lang.String SERVER = "server"; + field public static final java.lang.String SUBSCRIPTION_ID = "sub_id"; + field public static final java.lang.String TYPE = "type"; + field public static final java.lang.String USER = "user"; + } + + public static final class Telephony.Mms implements android.provider.Telephony.BaseMmsColumns { + field public static final android.net.Uri CONTENT_URI; + field public static final java.lang.String DEFAULT_SORT_ORDER = "date DESC"; + field public static final android.net.Uri REPORT_REQUEST_URI; + field public static final android.net.Uri REPORT_STATUS_URI; + } + + public static final class Telephony.Mms.Addr implements android.provider.BaseColumns { + field public static final java.lang.String ADDRESS = "address"; + field public static final java.lang.String CHARSET = "charset"; + field public static final java.lang.String CONTACT_ID = "contact_id"; + field public static final java.lang.String MSG_ID = "msg_id"; + field public static final java.lang.String TYPE = "type"; + } + + public static final class Telephony.Mms.Draft implements android.provider.Telephony.BaseMmsColumns { + field public static final android.net.Uri CONTENT_URI; + field public static final java.lang.String DEFAULT_SORT_ORDER = "date DESC"; + } + + public static final class Telephony.Mms.Inbox implements android.provider.Telephony.BaseMmsColumns { + field public static final android.net.Uri CONTENT_URI; + field public static final java.lang.String DEFAULT_SORT_ORDER = "date DESC"; + } + + public static final class Telephony.Mms.Intents { + field public static final java.lang.String CONTENT_CHANGED_ACTION = "android.intent.action.CONTENT_CHANGED"; + field public static final java.lang.String DELETED_CONTENTS = "deleted_contents"; + } + + public static final class Telephony.Mms.Outbox implements android.provider.Telephony.BaseMmsColumns { + field public static final android.net.Uri CONTENT_URI; + field public static final java.lang.String DEFAULT_SORT_ORDER = "date DESC"; + } + + public static final class Telephony.Mms.Part implements android.provider.BaseColumns { + field public static final java.lang.String CHARSET = "chset"; + field public static final java.lang.String CONTENT_DISPOSITION = "cd"; + field public static final java.lang.String CONTENT_ID = "cid"; + field public static final java.lang.String CONTENT_LOCATION = "cl"; + field public static final java.lang.String CONTENT_TYPE = "ct"; + field public static final java.lang.String CT_START = "ctt_s"; + field public static final java.lang.String CT_TYPE = "ctt_t"; + field public static final java.lang.String FILENAME = "fn"; + field public static final java.lang.String MSG_ID = "mid"; + field public static final java.lang.String NAME = "name"; + field public static final java.lang.String SEQ = "seq"; + field public static final java.lang.String TEXT = "text"; + field public static final java.lang.String _DATA = "_data"; + } + + public static final class Telephony.Mms.Rate { + field public static final android.net.Uri CONTENT_URI; + field public static final java.lang.String SENT_TIME = "sent_time"; + } + + public static final class Telephony.Mms.Sent implements android.provider.Telephony.BaseMmsColumns { + field public static final android.net.Uri CONTENT_URI; + field public static final java.lang.String DEFAULT_SORT_ORDER = "date DESC"; + } + + public static final class Telephony.MmsSms implements android.provider.BaseColumns { + field public static final android.net.Uri CONTENT_CONVERSATIONS_URI; + field public static final android.net.Uri CONTENT_DRAFT_URI; + field public static final android.net.Uri CONTENT_FILTER_BYPHONE_URI; + field public static final android.net.Uri CONTENT_LOCKED_URI; + field public static final android.net.Uri CONTENT_UNDELIVERED_URI; + field public static final android.net.Uri CONTENT_URI; + field public static final int ERR_TYPE_GENERIC = 1; // 0x1 + field public static final int ERR_TYPE_GENERIC_PERMANENT = 10; // 0xa + field public static final int ERR_TYPE_MMS_PROTO_PERMANENT = 12; // 0xc + field public static final int ERR_TYPE_MMS_PROTO_TRANSIENT = 3; // 0x3 + field public static final int ERR_TYPE_SMS_PROTO_PERMANENT = 11; // 0xb + field public static final int ERR_TYPE_SMS_PROTO_TRANSIENT = 2; // 0x2 + field public static final int ERR_TYPE_TRANSPORT_FAILURE = 4; // 0x4 + field public static final int MMS_PROTO = 1; // 0x1 + field public static final int NO_ERROR = 0; // 0x0 + field public static final android.net.Uri SEARCH_URI; + field public static final int SMS_PROTO = 0; // 0x0 + field public static final java.lang.String TYPE_DISCRIMINATOR_COLUMN = "transport_type"; + } + + public static final class Telephony.MmsSms.PendingMessages implements android.provider.BaseColumns { + field public static final android.net.Uri CONTENT_URI; + field public static final java.lang.String DUE_TIME = "due_time"; + field public static final java.lang.String ERROR_CODE = "err_code"; + field public static final java.lang.String ERROR_TYPE = "err_type"; + field public static final java.lang.String LAST_TRY = "last_try"; + field public static final java.lang.String MSG_ID = "msg_id"; + field public static final java.lang.String MSG_TYPE = "msg_type"; + field public static final java.lang.String PROTO_TYPE = "proto_type"; + field public static final java.lang.String RETRY_INDEX = "retry_index"; + field public static final java.lang.String SUBSCRIPTION_ID = "pending_sub_id"; + } + + public static final class Telephony.Sms implements android.provider.BaseColumns android.provider.Telephony.TextBasedSmsColumns { + method public static java.lang.String getDefaultSmsPackage(android.content.Context); + field public static final android.net.Uri CONTENT_URI; + field public static final java.lang.String DEFAULT_SORT_ORDER = "date DESC"; + } + + public static final class Telephony.Sms.Conversations implements android.provider.BaseColumns android.provider.Telephony.TextBasedSmsColumns { + field public static final android.net.Uri CONTENT_URI; + field public static final java.lang.String DEFAULT_SORT_ORDER = "date DESC"; + field public static final java.lang.String MESSAGE_COUNT = "msg_count"; + field public static final java.lang.String SNIPPET = "snippet"; + } + + public static final class Telephony.Sms.Draft implements android.provider.BaseColumns android.provider.Telephony.TextBasedSmsColumns { + field public static final android.net.Uri CONTENT_URI; + field public static final java.lang.String DEFAULT_SORT_ORDER = "date DESC"; + } + + public static final class Telephony.Sms.Inbox implements android.provider.BaseColumns android.provider.Telephony.TextBasedSmsColumns { + field public static final android.net.Uri CONTENT_URI; + field public static final java.lang.String DEFAULT_SORT_ORDER = "date DESC"; + } + + public static final class Telephony.Sms.Intents { + method public static android.telephony.SmsMessage[] getMessagesFromIntent(android.content.Intent); + field public static final java.lang.String ACTION_CHANGE_DEFAULT = "android.provider.Telephony.ACTION_CHANGE_DEFAULT"; + field public static final java.lang.String DATA_SMS_RECEIVED_ACTION = "android.intent.action.DATA_SMS_RECEIVED"; + field public static final java.lang.String EXTRA_PACKAGE_NAME = "package"; + field public static final int RESULT_SMS_DUPLICATED = 5; // 0x5 + field public static final int RESULT_SMS_GENERIC_ERROR = 2; // 0x2 + field public static final int RESULT_SMS_HANDLED = 1; // 0x1 + field public static final int RESULT_SMS_OUT_OF_MEMORY = 3; // 0x3 + field public static final int RESULT_SMS_UNSUPPORTED = 4; // 0x4 + field public static final java.lang.String SIM_FULL_ACTION = "android.provider.Telephony.SIM_FULL"; + field public static final java.lang.String SMS_CB_RECEIVED_ACTION = "android.provider.Telephony.SMS_CB_RECEIVED"; + field public static final java.lang.String SMS_DELIVER_ACTION = "android.provider.Telephony.SMS_DELIVER"; + field public static final java.lang.String SMS_EMERGENCY_CB_RECEIVED_ACTION = "android.provider.Telephony.SMS_EMERGENCY_CB_RECEIVED"; + field public static final java.lang.String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED"; + field public static final java.lang.String SMS_REJECTED_ACTION = "android.provider.Telephony.SMS_REJECTED"; + field public static final java.lang.String SMS_SERVICE_CATEGORY_PROGRAM_DATA_RECEIVED_ACTION = "android.provider.Telephony.SMS_SERVICE_CATEGORY_PROGRAM_DATA_RECEIVED"; + field public static final java.lang.String WAP_PUSH_DELIVER_ACTION = "android.provider.Telephony.WAP_PUSH_DELIVER"; + field public static final java.lang.String WAP_PUSH_RECEIVED_ACTION = "android.provider.Telephony.WAP_PUSH_RECEIVED"; + } + + public static final class Telephony.Sms.Outbox implements android.provider.BaseColumns android.provider.Telephony.TextBasedSmsColumns { + field public static final android.net.Uri CONTENT_URI; + field public static final java.lang.String DEFAULT_SORT_ORDER = "date DESC"; + } + + public static final class Telephony.Sms.Sent implements android.provider.BaseColumns android.provider.Telephony.TextBasedSmsColumns { + field public static final android.net.Uri CONTENT_URI; + field public static final java.lang.String DEFAULT_SORT_ORDER = "date DESC"; + } + + public static abstract interface Telephony.TextBasedSmsColumns { + field public static final java.lang.String ADDRESS = "address"; + field public static final java.lang.String BODY = "body"; + field public static final java.lang.String CREATOR = "creator"; + field public static final java.lang.String DATE = "date"; + field public static final java.lang.String DATE_SENT = "date_sent"; + field public static final java.lang.String ERROR_CODE = "error_code"; + field public static final java.lang.String LOCKED = "locked"; + field public static final int MESSAGE_TYPE_ALL = 0; // 0x0 + field public static final int MESSAGE_TYPE_DRAFT = 3; // 0x3 + field public static final int MESSAGE_TYPE_FAILED = 5; // 0x5 + field public static final int MESSAGE_TYPE_INBOX = 1; // 0x1 + field public static final int MESSAGE_TYPE_OUTBOX = 4; // 0x4 + field public static final int MESSAGE_TYPE_QUEUED = 6; // 0x6 + field public static final int MESSAGE_TYPE_SENT = 2; // 0x2 + field public static final java.lang.String PERSON = "person"; + field public static final java.lang.String PROTOCOL = "protocol"; + field public static final java.lang.String READ = "read"; + field public static final java.lang.String REPLY_PATH_PRESENT = "reply_path_present"; + field public static final java.lang.String SEEN = "seen"; + field public static final java.lang.String SERVICE_CENTER = "service_center"; + field public static final java.lang.String STATUS = "status"; + field public static final int STATUS_COMPLETE = 0; // 0x0 + field public static final int STATUS_FAILED = 64; // 0x40 + field public static final int STATUS_NONE = -1; // 0xffffffff + field public static final int STATUS_PENDING = 32; // 0x20 + field public static final java.lang.String SUBJECT = "subject"; + field public static final java.lang.String SUBSCRIPTION_ID = "sub_id"; + field public static final java.lang.String THREAD_ID = "thread_id"; + field public static final java.lang.String TYPE = "type"; + } + + public static final class Telephony.Threads implements android.provider.Telephony.ThreadsColumns { + field public static final int BROADCAST_THREAD = 1; // 0x1 + field public static final int COMMON_THREAD = 0; // 0x0 + field public static final android.net.Uri CONTENT_URI; + field public static final android.net.Uri OBSOLETE_THREADS_URI; + } + + public static abstract interface Telephony.ThreadsColumns implements android.provider.BaseColumns { + field public static final java.lang.String ARCHIVED = "archived"; + field public static final java.lang.String DATE = "date"; + field public static final java.lang.String ERROR = "error"; + field public static final java.lang.String HAS_ATTACHMENT = "has_attachment"; + field public static final java.lang.String MESSAGE_COUNT = "message_count"; + field public static final java.lang.String READ = "read"; + field public static final java.lang.String RECIPIENT_IDS = "recipient_ids"; + field public static final java.lang.String SNIPPET = "snippet"; + field public static final java.lang.String SNIPPET_CHARSET = "snippet_cs"; + field public static final java.lang.String TYPE = "type"; + } + + public class UserDictionary { + ctor public UserDictionary(); + field public static final java.lang.String AUTHORITY = "user_dictionary"; + field public static final android.net.Uri CONTENT_URI; + } + + public static class UserDictionary.Words implements android.provider.BaseColumns { + ctor public UserDictionary.Words(); + method public static deprecated void addWord(android.content.Context, java.lang.String, int, int); + method public static void addWord(android.content.Context, java.lang.String, int, java.lang.String, java.util.Locale); + field public static final java.lang.String APP_ID = "appid"; + field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/vnd.google.userword"; + field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.google.userword"; + field public static final android.net.Uri CONTENT_URI; + field public static final java.lang.String DEFAULT_SORT_ORDER = "frequency DESC"; + field public static final java.lang.String FREQUENCY = "frequency"; + field public static final java.lang.String LOCALE = "locale"; + field public static final deprecated int LOCALE_TYPE_ALL = 0; // 0x0 + field public static final deprecated int LOCALE_TYPE_CURRENT = 1; // 0x1 + field public static final java.lang.String SHORTCUT = "shortcut"; + field public static final java.lang.String WORD = "word"; + field public static final java.lang.String _ID = "_id"; + } + + public class VoicemailContract { + field public static final java.lang.String ACTION_FETCH_VOICEMAIL = "android.intent.action.FETCH_VOICEMAIL"; + field public static final java.lang.String ACTION_NEW_VOICEMAIL = "android.intent.action.NEW_VOICEMAIL"; + field public static final java.lang.String AUTHORITY = "com.android.voicemail"; + field public static final java.lang.String EXTRA_SELF_CHANGE = "com.android.voicemail.extra.SELF_CHANGE"; + field public static final java.lang.String PARAM_KEY_SOURCE_PACKAGE = "source_package"; + } + + public static final class VoicemailContract.Status implements android.provider.BaseColumns { + method public static android.net.Uri buildSourceUri(java.lang.String); + field public static final java.lang.String CONFIGURATION_STATE = "configuration_state"; + field public static final int CONFIGURATION_STATE_CAN_BE_CONFIGURED = 2; // 0x2 + field public static final int CONFIGURATION_STATE_NOT_CONFIGURED = 1; // 0x1 + field public static final int CONFIGURATION_STATE_OK = 0; // 0x0 + field public static final android.net.Uri CONTENT_URI; + field public static final java.lang.String DATA_CHANNEL_STATE = "data_channel_state"; + field public static final int DATA_CHANNEL_STATE_NO_CONNECTION = 1; // 0x1 + field public static final int DATA_CHANNEL_STATE_OK = 0; // 0x0 + field public static final java.lang.String DIR_TYPE = "vnd.android.cursor.dir/voicemail.source.status"; + field public static final java.lang.String ITEM_TYPE = "vnd.android.cursor.item/voicemail.source.status"; + field public static final java.lang.String NOTIFICATION_CHANNEL_STATE = "notification_channel_state"; + field public static final int NOTIFICATION_CHANNEL_STATE_MESSAGE_WAITING = 2; // 0x2 + field public static final int NOTIFICATION_CHANNEL_STATE_NO_CONNECTION = 1; // 0x1 + field public static final int NOTIFICATION_CHANNEL_STATE_OK = 0; // 0x0 + field public static final java.lang.String SETTINGS_URI = "settings_uri"; + field public static final java.lang.String SOURCE_PACKAGE = "source_package"; + field public static final java.lang.String VOICEMAIL_ACCESS_URI = "voicemail_access_uri"; + } + + public static final class VoicemailContract.Voicemails implements android.provider.BaseColumns android.provider.OpenableColumns { + method public static android.net.Uri buildSourceUri(java.lang.String); + field public static final android.net.Uri CONTENT_URI; + field public static final java.lang.String DATE = "date"; + field public static final java.lang.String DIR_TYPE = "vnd.android.cursor.dir/voicemails"; + field public static final java.lang.String DURATION = "duration"; + field public static final java.lang.String HAS_CONTENT = "has_content"; + field public static final java.lang.String IS_READ = "is_read"; + field public static final java.lang.String ITEM_TYPE = "vnd.android.cursor.item/voicemail"; + field public static final java.lang.String MIME_TYPE = "mime_type"; + field public static final java.lang.String NUMBER = "number"; + field public static final java.lang.String SOURCE_DATA = "source_data"; + field public static final java.lang.String SOURCE_PACKAGE = "source_package"; + field public static final java.lang.String TRANSCRIPTION = "transcription"; + } + +} + +package android.renderscript { + + public class Allocation extends android.renderscript.BaseObj { + method public void copy1DRangeFrom(int, int, java.lang.Object); + method public void copy1DRangeFrom(int, int, int[]); + method public void copy1DRangeFrom(int, int, short[]); + method public void copy1DRangeFrom(int, int, byte[]); + method public void copy1DRangeFrom(int, int, float[]); + method public void copy1DRangeFrom(int, int, android.renderscript.Allocation, int); + method public void copy1DRangeFromUnchecked(int, int, java.lang.Object); + method public void copy1DRangeFromUnchecked(int, int, int[]); + method public void copy1DRangeFromUnchecked(int, int, short[]); + method public void copy1DRangeFromUnchecked(int, int, byte[]); + method public void copy1DRangeFromUnchecked(int, int, float[]); + method public void copy2DRangeFrom(int, int, int, int, java.lang.Object); + method public void copy2DRangeFrom(int, int, int, int, byte[]); + method public void copy2DRangeFrom(int, int, int, int, short[]); + method public void copy2DRangeFrom(int, int, int, int, int[]); + method public void copy2DRangeFrom(int, int, int, int, float[]); + method public void copy2DRangeFrom(int, int, int, int, android.renderscript.Allocation, int, int); + method public void copy2DRangeFrom(int, int, android.graphics.Bitmap); + method public void copyFrom(android.renderscript.BaseObj[]); + method public void copyFrom(java.lang.Object); + method public void copyFrom(int[]); + method public void copyFrom(short[]); + method public void copyFrom(byte[]); + method public void copyFrom(float[]); + method public void copyFrom(android.graphics.Bitmap); + method public void copyFrom(android.renderscript.Allocation); + method public void copyFromUnchecked(java.lang.Object); + method public void copyFromUnchecked(int[]); + method public void copyFromUnchecked(short[]); + method public void copyFromUnchecked(byte[]); + method public void copyFromUnchecked(float[]); + method public void copyTo(android.graphics.Bitmap); + method public void copyTo(java.lang.Object); + method public void copyTo(byte[]); + method public void copyTo(short[]); + method public void copyTo(int[]); + method public void copyTo(float[]); + method public static android.renderscript.Allocation createCubemapFromBitmap(android.renderscript.RenderScript, android.graphics.Bitmap, android.renderscript.Allocation.MipmapControl, int); + method public static android.renderscript.Allocation createCubemapFromBitmap(android.renderscript.RenderScript, android.graphics.Bitmap); + method public static android.renderscript.Allocation createCubemapFromCubeFaces(android.renderscript.RenderScript, android.graphics.Bitmap, android.graphics.Bitmap, android.graphics.Bitmap, android.graphics.Bitmap, android.graphics.Bitmap, android.graphics.Bitmap, android.renderscript.Allocation.MipmapControl, int); + method public static android.renderscript.Allocation createCubemapFromCubeFaces(android.renderscript.RenderScript, android.graphics.Bitmap, android.graphics.Bitmap, android.graphics.Bitmap, android.graphics.Bitmap, android.graphics.Bitmap, android.graphics.Bitmap); + method public static android.renderscript.Allocation createFromBitmap(android.renderscript.RenderScript, android.graphics.Bitmap, android.renderscript.Allocation.MipmapControl, int); + method public static android.renderscript.Allocation createFromBitmap(android.renderscript.RenderScript, android.graphics.Bitmap); + method public static android.renderscript.Allocation createFromBitmapResource(android.renderscript.RenderScript, android.content.res.Resources, int, android.renderscript.Allocation.MipmapControl, int); + method public static android.renderscript.Allocation createFromBitmapResource(android.renderscript.RenderScript, android.content.res.Resources, int); + method public static android.renderscript.Allocation createFromString(android.renderscript.RenderScript, java.lang.String, int); + method public static android.renderscript.Allocation createSized(android.renderscript.RenderScript, android.renderscript.Element, int, int); + method public static android.renderscript.Allocation createSized(android.renderscript.RenderScript, android.renderscript.Element, int); + method public static android.renderscript.Allocation createTyped(android.renderscript.RenderScript, android.renderscript.Type, android.renderscript.Allocation.MipmapControl, int); + method public static android.renderscript.Allocation createTyped(android.renderscript.RenderScript, android.renderscript.Type, int); + method public static android.renderscript.Allocation createTyped(android.renderscript.RenderScript, android.renderscript.Type); + method public void generateMipmaps(); + method public int getBytesSize(); + method public android.renderscript.Element getElement(); + method public android.view.Surface getSurface(); + method public android.renderscript.Type getType(); + method public int getUsage(); + method public void ioReceive(); + method public void ioSend(); + method public deprecated synchronized void resize(int); + method public void setFromFieldPacker(int, android.renderscript.FieldPacker); + method public void setFromFieldPacker(int, int, android.renderscript.FieldPacker); + method public void setOnBufferAvailableListener(android.renderscript.Allocation.OnBufferAvailableListener); + method public void setSurface(android.view.Surface); + method public void syncAll(int); + field public static final int USAGE_GRAPHICS_CONSTANTS = 8; // 0x8 + field public static final int USAGE_GRAPHICS_RENDER_TARGET = 16; // 0x10 + field public static final int USAGE_GRAPHICS_TEXTURE = 2; // 0x2 + field public static final int USAGE_GRAPHICS_VERTEX = 4; // 0x4 + field public static final int USAGE_IO_INPUT = 32; // 0x20 + field public static final int USAGE_IO_OUTPUT = 64; // 0x40 + field public static final int USAGE_SCRIPT = 1; // 0x1 + field public static final int USAGE_SHARED = 128; // 0x80 + } + + public static final class Allocation.MipmapControl extends java.lang.Enum { + method public static android.renderscript.Allocation.MipmapControl valueOf(java.lang.String); + method public static final android.renderscript.Allocation.MipmapControl[] values(); + enum_constant public static final android.renderscript.Allocation.MipmapControl MIPMAP_FULL; + enum_constant public static final android.renderscript.Allocation.MipmapControl MIPMAP_NONE; + enum_constant public static final android.renderscript.Allocation.MipmapControl MIPMAP_ON_SYNC_TO_TEXTURE; + } + + public static abstract interface Allocation.OnBufferAvailableListener { + method public abstract void onBufferAvailable(android.renderscript.Allocation); + } + + public class AllocationAdapter extends android.renderscript.Allocation { + method public static android.renderscript.AllocationAdapter create1D(android.renderscript.RenderScript, android.renderscript.Allocation); + method public static android.renderscript.AllocationAdapter create2D(android.renderscript.RenderScript, android.renderscript.Allocation); + method public void setFace(android.renderscript.Type.CubemapFace); + method public void setLOD(int); + method public void setY(int); + method public void setZ(int); + } + + public class BaseObj { + method public void destroy(); + method public java.lang.String getName(); + method public void setName(java.lang.String); + } + + public class Byte2 { + ctor public Byte2(); + ctor public Byte2(byte, byte); + field public byte x; + field public byte y; + } + + public class Byte3 { + ctor public Byte3(); + ctor public Byte3(byte, byte, byte); + field public byte x; + field public byte y; + field public byte z; + } + + public class Byte4 { + ctor public Byte4(); + ctor public Byte4(byte, byte, byte, byte); + field public byte w; + field public byte x; + field public byte y; + field public byte z; + } + + public class Double2 { + ctor public Double2(); + ctor public Double2(double, double); + field public double x; + field public double y; + } + + public class Double3 { + ctor public Double3(); + ctor public Double3(double, double, double); + field public double x; + field public double y; + field public double z; + } + + public class Double4 { + ctor public Double4(); + ctor public Double4(double, double, double, double); + field public double w; + field public double x; + field public double y; + field public double z; + } + + public class Element extends android.renderscript.BaseObj { + method public static android.renderscript.Element ALLOCATION(android.renderscript.RenderScript); + method public static android.renderscript.Element A_8(android.renderscript.RenderScript); + method public static android.renderscript.Element BOOLEAN(android.renderscript.RenderScript); + method public static android.renderscript.Element ELEMENT(android.renderscript.RenderScript); + method public static android.renderscript.Element F32(android.renderscript.RenderScript); + method public static android.renderscript.Element F32_2(android.renderscript.RenderScript); + method public static android.renderscript.Element F32_3(android.renderscript.RenderScript); + method public static android.renderscript.Element F32_4(android.renderscript.RenderScript); + method public static android.renderscript.Element F64(android.renderscript.RenderScript); + method public static android.renderscript.Element F64_2(android.renderscript.RenderScript); + method public static android.renderscript.Element F64_3(android.renderscript.RenderScript); + method public static android.renderscript.Element F64_4(android.renderscript.RenderScript); + method public static android.renderscript.Element FONT(android.renderscript.RenderScript); + method public static android.renderscript.Element I16(android.renderscript.RenderScript); + method public static android.renderscript.Element I16_2(android.renderscript.RenderScript); + method public static android.renderscript.Element I16_3(android.renderscript.RenderScript); + method public static android.renderscript.Element I16_4(android.renderscript.RenderScript); + method public static android.renderscript.Element I32(android.renderscript.RenderScript); + method public static android.renderscript.Element I32_2(android.renderscript.RenderScript); + method public static android.renderscript.Element I32_3(android.renderscript.RenderScript); + method public static android.renderscript.Element I32_4(android.renderscript.RenderScript); + method public static android.renderscript.Element I64(android.renderscript.RenderScript); + method public static android.renderscript.Element I64_2(android.renderscript.RenderScript); + method public static android.renderscript.Element I64_3(android.renderscript.RenderScript); + method public static android.renderscript.Element I64_4(android.renderscript.RenderScript); + method public static android.renderscript.Element I8(android.renderscript.RenderScript); + method public static android.renderscript.Element I8_2(android.renderscript.RenderScript); + method public static android.renderscript.Element I8_3(android.renderscript.RenderScript); + method public static android.renderscript.Element I8_4(android.renderscript.RenderScript); + method public static deprecated android.renderscript.Element MATRIX4X4(android.renderscript.RenderScript); + method public static android.renderscript.Element MATRIX_2X2(android.renderscript.RenderScript); + method public static android.renderscript.Element MATRIX_3X3(android.renderscript.RenderScript); + method public static android.renderscript.Element MATRIX_4X4(android.renderscript.RenderScript); + method public static android.renderscript.Element MESH(android.renderscript.RenderScript); + method public static android.renderscript.Element PROGRAM_FRAGMENT(android.renderscript.RenderScript); + method public static android.renderscript.Element PROGRAM_RASTER(android.renderscript.RenderScript); + method public static android.renderscript.Element PROGRAM_STORE(android.renderscript.RenderScript); + method public static android.renderscript.Element PROGRAM_VERTEX(android.renderscript.RenderScript); + method public static android.renderscript.Element RGBA_4444(android.renderscript.RenderScript); + method public static android.renderscript.Element RGBA_5551(android.renderscript.RenderScript); + method public static android.renderscript.Element RGBA_8888(android.renderscript.RenderScript); + method public static android.renderscript.Element RGB_565(android.renderscript.RenderScript); + method public static android.renderscript.Element RGB_888(android.renderscript.RenderScript); + method public static android.renderscript.Element SAMPLER(android.renderscript.RenderScript); + method public static android.renderscript.Element SCRIPT(android.renderscript.RenderScript); + method public static android.renderscript.Element TYPE(android.renderscript.RenderScript); + method public static android.renderscript.Element U16(android.renderscript.RenderScript); + method public static android.renderscript.Element U16_2(android.renderscript.RenderScript); + method public static android.renderscript.Element U16_3(android.renderscript.RenderScript); + method public static android.renderscript.Element U16_4(android.renderscript.RenderScript); + method public static android.renderscript.Element U32(android.renderscript.RenderScript); + method public static android.renderscript.Element U32_2(android.renderscript.RenderScript); + method public static android.renderscript.Element U32_3(android.renderscript.RenderScript); + method public static android.renderscript.Element U32_4(android.renderscript.RenderScript); + method public static android.renderscript.Element U64(android.renderscript.RenderScript); + method public static android.renderscript.Element U64_2(android.renderscript.RenderScript); + method public static android.renderscript.Element U64_3(android.renderscript.RenderScript); + method public static android.renderscript.Element U64_4(android.renderscript.RenderScript); + method public static android.renderscript.Element U8(android.renderscript.RenderScript); + method public static android.renderscript.Element U8_2(android.renderscript.RenderScript); + method public static android.renderscript.Element U8_3(android.renderscript.RenderScript); + method public static android.renderscript.Element U8_4(android.renderscript.RenderScript); + method public static android.renderscript.Element YUV(android.renderscript.RenderScript); + method public static android.renderscript.Element createPixel(android.renderscript.RenderScript, android.renderscript.Element.DataType, android.renderscript.Element.DataKind); + method public static android.renderscript.Element createVector(android.renderscript.RenderScript, android.renderscript.Element.DataType, int); + method public int getBytesSize(); + method public android.renderscript.Element.DataKind getDataKind(); + method public android.renderscript.Element.DataType getDataType(); + method public android.renderscript.Element getSubElement(int); + method public int getSubElementArraySize(int); + method public int getSubElementCount(); + method public java.lang.String getSubElementName(int); + method public int getSubElementOffsetBytes(int); + method public int getVectorSize(); + method public boolean isCompatible(android.renderscript.Element); + method public boolean isComplex(); + } + + public static class Element.Builder { + ctor public Element.Builder(android.renderscript.RenderScript); + method public android.renderscript.Element.Builder add(android.renderscript.Element, java.lang.String, int); + method public android.renderscript.Element.Builder add(android.renderscript.Element, java.lang.String); + method public android.renderscript.Element create(); + } + + public static final class Element.DataKind extends java.lang.Enum { + method public static android.renderscript.Element.DataKind valueOf(java.lang.String); + method public static final android.renderscript.Element.DataKind[] values(); + enum_constant public static final android.renderscript.Element.DataKind PIXEL_A; + enum_constant public static final android.renderscript.Element.DataKind PIXEL_DEPTH; + enum_constant public static final android.renderscript.Element.DataKind PIXEL_L; + enum_constant public static final android.renderscript.Element.DataKind PIXEL_LA; + enum_constant public static final android.renderscript.Element.DataKind PIXEL_RGB; + enum_constant public static final android.renderscript.Element.DataKind PIXEL_RGBA; + enum_constant public static final android.renderscript.Element.DataKind PIXEL_YUV; + enum_constant public static final android.renderscript.Element.DataKind USER; + } + + public static final class Element.DataType extends java.lang.Enum { + method public static android.renderscript.Element.DataType valueOf(java.lang.String); + method public static final android.renderscript.Element.DataType[] values(); + enum_constant public static final android.renderscript.Element.DataType BOOLEAN; + enum_constant public static final android.renderscript.Element.DataType FLOAT_32; + enum_constant public static final android.renderscript.Element.DataType FLOAT_64; + enum_constant public static final android.renderscript.Element.DataType MATRIX_2X2; + enum_constant public static final android.renderscript.Element.DataType MATRIX_3X3; + enum_constant public static final android.renderscript.Element.DataType MATRIX_4X4; + enum_constant public static final android.renderscript.Element.DataType NONE; + enum_constant public static final android.renderscript.Element.DataType RS_ALLOCATION; + enum_constant public static final android.renderscript.Element.DataType RS_ELEMENT; + enum_constant public static final android.renderscript.Element.DataType RS_FONT; + enum_constant public static final android.renderscript.Element.DataType RS_MESH; + enum_constant public static final android.renderscript.Element.DataType RS_PROGRAM_FRAGMENT; + enum_constant public static final android.renderscript.Element.DataType RS_PROGRAM_RASTER; + enum_constant public static final android.renderscript.Element.DataType RS_PROGRAM_STORE; + enum_constant public static final android.renderscript.Element.DataType RS_PROGRAM_VERTEX; + enum_constant public static final android.renderscript.Element.DataType RS_SAMPLER; + enum_constant public static final android.renderscript.Element.DataType RS_SCRIPT; + enum_constant public static final android.renderscript.Element.DataType RS_TYPE; + enum_constant public static final android.renderscript.Element.DataType SIGNED_16; + enum_constant public static final android.renderscript.Element.DataType SIGNED_32; + enum_constant public static final android.renderscript.Element.DataType SIGNED_64; + enum_constant public static final android.renderscript.Element.DataType SIGNED_8; + enum_constant public static final android.renderscript.Element.DataType UNSIGNED_16; + enum_constant public static final android.renderscript.Element.DataType UNSIGNED_32; + enum_constant public static final android.renderscript.Element.DataType UNSIGNED_4_4_4_4; + enum_constant public static final android.renderscript.Element.DataType UNSIGNED_5_5_5_1; + enum_constant public static final android.renderscript.Element.DataType UNSIGNED_5_6_5; + enum_constant public static final android.renderscript.Element.DataType UNSIGNED_64; + enum_constant public static final android.renderscript.Element.DataType UNSIGNED_8; + } + + public class FieldPacker { + ctor public FieldPacker(int); + ctor public FieldPacker(byte[]); + method public void addBoolean(boolean); + method public void addF32(float); + method public void addF32(android.renderscript.Float2); + method public void addF32(android.renderscript.Float3); + method public void addF32(android.renderscript.Float4); + method public void addF64(double); + method public void addF64(android.renderscript.Double2); + method public void addF64(android.renderscript.Double3); + method public void addF64(android.renderscript.Double4); + method public void addI16(short); + method public void addI16(android.renderscript.Short2); + method public void addI16(android.renderscript.Short3); + method public void addI16(android.renderscript.Short4); + method public void addI32(int); + method public void addI32(android.renderscript.Int2); + method public void addI32(android.renderscript.Int3); + method public void addI32(android.renderscript.Int4); + method public void addI64(long); + method public void addI64(android.renderscript.Long2); + method public void addI64(android.renderscript.Long3); + method public void addI64(android.renderscript.Long4); + method public void addI8(byte); + method public void addI8(android.renderscript.Byte2); + method public void addI8(android.renderscript.Byte3); + method public void addI8(android.renderscript.Byte4); + method public void addMatrix(android.renderscript.Matrix4f); + method public void addMatrix(android.renderscript.Matrix3f); + method public void addMatrix(android.renderscript.Matrix2f); + method public void addObj(android.renderscript.BaseObj); + method public void addU16(int); + method public void addU16(android.renderscript.Int2); + method public void addU16(android.renderscript.Int3); + method public void addU16(android.renderscript.Int4); + method public void addU32(long); + method public void addU32(android.renderscript.Long2); + method public void addU32(android.renderscript.Long3); + method public void addU32(android.renderscript.Long4); + method public void addU64(long); + method public void addU64(android.renderscript.Long2); + method public void addU64(android.renderscript.Long3); + method public void addU64(android.renderscript.Long4); + method public void addU8(short); + method public void addU8(android.renderscript.Short2); + method public void addU8(android.renderscript.Short3); + method public void addU8(android.renderscript.Short4); + method public void align(int); + method public final byte[] getData(); + method public void reset(); + method public void reset(int); + method public void skip(int); + method public boolean subBoolean(); + method public android.renderscript.Byte2 subByte2(); + method public android.renderscript.Byte3 subByte3(); + method public android.renderscript.Byte4 subByte4(); + method public android.renderscript.Double2 subDouble2(); + method public android.renderscript.Double3 subDouble3(); + method public android.renderscript.Double4 subDouble4(); + method public float subF32(); + method public double subF64(); + method public android.renderscript.Float2 subFloat2(); + method public android.renderscript.Float3 subFloat3(); + method public android.renderscript.Float4 subFloat4(); + method public short subI16(); + method public int subI32(); + method public long subI64(); + method public byte subI8(); + method public android.renderscript.Int2 subInt2(); + method public android.renderscript.Int3 subInt3(); + method public android.renderscript.Int4 subInt4(); + method public android.renderscript.Long2 subLong2(); + method public android.renderscript.Long3 subLong3(); + method public android.renderscript.Long4 subLong4(); + method public android.renderscript.Matrix2f subMatrix2f(); + method public android.renderscript.Matrix3f subMatrix3f(); + method public android.renderscript.Matrix4f subMatrix4f(); + method public android.renderscript.Short2 subShort2(); + method public android.renderscript.Short3 subShort3(); + method public android.renderscript.Short4 subShort4(); + method public void subalign(int); + } + + public class Float2 { + ctor public Float2(); + ctor public Float2(float, float); + field public float x; + field public float y; + } + + public class Float3 { + ctor public Float3(); + ctor public Float3(float, float, float); + field public float x; + field public float y; + field public float z; + } + + public class Float4 { + ctor public Float4(); + ctor public Float4(float, float, float, float); + field public float w; + field public float x; + field public float y; + field public float z; + } + + public class Int2 { + ctor public Int2(); + ctor public Int2(int, int); + field public int x; + field public int y; + } + + public class Int3 { + ctor public Int3(); + ctor public Int3(int, int, int); + field public int x; + field public int y; + field public int z; + } + + public class Int4 { + ctor public Int4(); + ctor public Int4(int, int, int, int); + field public int w; + field public int x; + field public int y; + field public int z; + } + + public class Long2 { + ctor public Long2(); + ctor public Long2(long, long); + field public long x; + field public long y; + } + + public class Long3 { + ctor public Long3(); + ctor public Long3(long, long, long); + field public long x; + field public long y; + field public long z; + } + + public class Long4 { + ctor public Long4(); + ctor public Long4(long, long, long, long); + field public long w; + field public long x; + field public long y; + field public long z; + } + + public class Matrix2f { + ctor public Matrix2f(); + ctor public Matrix2f(float[]); + method public float get(int, int); + method public float[] getArray(); + method public void load(android.renderscript.Matrix2f); + method public void loadIdentity(); + method public void loadMultiply(android.renderscript.Matrix2f, android.renderscript.Matrix2f); + method public void loadRotate(float); + method public void loadScale(float, float); + method public void multiply(android.renderscript.Matrix2f); + method public void rotate(float); + method public void scale(float, float); + method public void set(int, int, float); + method public void transpose(); + } + + public class Matrix3f { + ctor public Matrix3f(); + ctor public Matrix3f(float[]); + method public float get(int, int); + method public float[] getArray(); + method public void load(android.renderscript.Matrix3f); + method public void loadIdentity(); + method public void loadMultiply(android.renderscript.Matrix3f, android.renderscript.Matrix3f); + method public void loadRotate(float, float, float, float); + method public void loadRotate(float); + method public void loadScale(float, float); + method public void loadScale(float, float, float); + method public void loadTranslate(float, float); + method public void multiply(android.renderscript.Matrix3f); + method public void rotate(float, float, float, float); + method public void rotate(float); + method public void scale(float, float); + method public void scale(float, float, float); + method public void set(int, int, float); + method public void translate(float, float); + method public void transpose(); + } + + public class Matrix4f { + ctor public Matrix4f(); + ctor public Matrix4f(float[]); + method public float get(int, int); + method public float[] getArray(); + method public boolean inverse(); + method public boolean inverseTranspose(); + method public void load(android.renderscript.Matrix4f); + method public void loadFrustum(float, float, float, float, float, float); + method public void loadIdentity(); + method public void loadMultiply(android.renderscript.Matrix4f, android.renderscript.Matrix4f); + method public void loadOrtho(float, float, float, float, float, float); + method public void loadOrthoWindow(int, int); + method public void loadPerspective(float, float, float, float); + method public void loadProjectionNormalized(int, int); + method public void loadRotate(float, float, float, float); + method public void loadScale(float, float, float); + method public void loadTranslate(float, float, float); + method public void multiply(android.renderscript.Matrix4f); + method public void rotate(float, float, float, float); + method public void scale(float, float, float); + method public void set(int, int, float); + method public void translate(float, float, float); + method public void transpose(); + } + + public class RSDriverException extends android.renderscript.RSRuntimeException { + ctor public RSDriverException(java.lang.String); + } + + public class RSIllegalArgumentException extends android.renderscript.RSRuntimeException { + ctor public RSIllegalArgumentException(java.lang.String); + } + + public class RSInvalidStateException extends android.renderscript.RSRuntimeException { + ctor public RSInvalidStateException(java.lang.String); + } + + public class RSRuntimeException extends java.lang.RuntimeException { + ctor public RSRuntimeException(java.lang.String); + } + + public class RenderScript { + method public void contextDump(); + method public static android.renderscript.RenderScript create(android.content.Context); + method public static android.renderscript.RenderScript create(android.content.Context, android.renderscript.RenderScript.ContextType); + method public static android.renderscript.RenderScript create(android.content.Context, android.renderscript.RenderScript.ContextType, int); + method public void destroy(); + method public void finish(); + method public final android.content.Context getApplicationContext(); + method public android.renderscript.RenderScript.RSErrorHandler getErrorHandler(); + method public android.renderscript.RenderScript.RSMessageHandler getMessageHandler(); + method public void sendMessage(int, int[]); + method public void setErrorHandler(android.renderscript.RenderScript.RSErrorHandler); + method public void setMessageHandler(android.renderscript.RenderScript.RSMessageHandler); + method public void setPriority(android.renderscript.RenderScript.Priority); + field public static final int CREATE_FLAG_LOW_LATENCY = 2; // 0x2 + field public static final int CREATE_FLAG_LOW_POWER = 4; // 0x4 + field public static final int CREATE_FLAG_NONE = 0; // 0x0 + } + + public static final class RenderScript.ContextType extends java.lang.Enum { + method public static android.renderscript.RenderScript.ContextType valueOf(java.lang.String); + method public static final android.renderscript.RenderScript.ContextType[] values(); + enum_constant public static final android.renderscript.RenderScript.ContextType DEBUG; + enum_constant public static final android.renderscript.RenderScript.ContextType NORMAL; + enum_constant public static final android.renderscript.RenderScript.ContextType PROFILE; + } + + public static final class RenderScript.Priority extends java.lang.Enum { + method public static android.renderscript.RenderScript.Priority valueOf(java.lang.String); + method public static final android.renderscript.RenderScript.Priority[] values(); + enum_constant public static final android.renderscript.RenderScript.Priority LOW; + enum_constant public static final android.renderscript.RenderScript.Priority NORMAL; + } + + public static class RenderScript.RSErrorHandler implements java.lang.Runnable { + ctor public RenderScript.RSErrorHandler(); + method public void run(); + field protected java.lang.String mErrorMessage; + field protected int mErrorNum; + } + + public static class RenderScript.RSMessageHandler implements java.lang.Runnable { + ctor public RenderScript.RSMessageHandler(); + method public void run(); + field protected int[] mData; + field protected int mID; + field protected int mLength; + } + + public class Sampler extends android.renderscript.BaseObj { + method public static android.renderscript.Sampler CLAMP_LINEAR(android.renderscript.RenderScript); + method public static android.renderscript.Sampler CLAMP_LINEAR_MIP_LINEAR(android.renderscript.RenderScript); + method public static android.renderscript.Sampler CLAMP_NEAREST(android.renderscript.RenderScript); + method public static android.renderscript.Sampler MIRRORED_REPEAT_LINEAR(android.renderscript.RenderScript); + method public static android.renderscript.Sampler MIRRORED_REPEAT_LINEAR_MIP_LINEAR(android.renderscript.RenderScript); + method public static android.renderscript.Sampler MIRRORED_REPEAT_NEAREST(android.renderscript.RenderScript); + method public static android.renderscript.Sampler WRAP_LINEAR(android.renderscript.RenderScript); + method public static android.renderscript.Sampler WRAP_LINEAR_MIP_LINEAR(android.renderscript.RenderScript); + method public static android.renderscript.Sampler WRAP_NEAREST(android.renderscript.RenderScript); + method public float getAnisotropy(); + method public android.renderscript.Sampler.Value getMagnification(); + method public android.renderscript.Sampler.Value getMinification(); + method public android.renderscript.Sampler.Value getWrapS(); + method public android.renderscript.Sampler.Value getWrapT(); + } + + public static class Sampler.Builder { + ctor public Sampler.Builder(android.renderscript.RenderScript); + method public android.renderscript.Sampler create(); + method public void setAnisotropy(float); + method public void setMagnification(android.renderscript.Sampler.Value); + method public void setMinification(android.renderscript.Sampler.Value); + method public void setWrapS(android.renderscript.Sampler.Value); + method public void setWrapT(android.renderscript.Sampler.Value); + } + + public static final class Sampler.Value extends java.lang.Enum { + method public static android.renderscript.Sampler.Value valueOf(java.lang.String); + method public static final android.renderscript.Sampler.Value[] values(); + enum_constant public static final android.renderscript.Sampler.Value CLAMP; + enum_constant public static final android.renderscript.Sampler.Value LINEAR; + enum_constant public static final android.renderscript.Sampler.Value LINEAR_MIP_LINEAR; + enum_constant public static final android.renderscript.Sampler.Value LINEAR_MIP_NEAREST; + enum_constant public static final android.renderscript.Sampler.Value MIRRORED_REPEAT; + enum_constant public static final android.renderscript.Sampler.Value NEAREST; + enum_constant public static final android.renderscript.Sampler.Value WRAP; + } + + public class Script extends android.renderscript.BaseObj { + method public void bindAllocation(android.renderscript.Allocation, int); + method protected android.renderscript.Script.FieldID createFieldID(int, android.renderscript.Element); + method protected android.renderscript.Script.KernelID createKernelID(int, int, android.renderscript.Element, android.renderscript.Element); + method protected void forEach(int, android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.FieldPacker); + method protected void forEach(int, android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.FieldPacker, android.renderscript.Script.LaunchOptions); + method public boolean getVarB(int); + method public double getVarD(int); + method public float getVarF(int); + method public int getVarI(int); + method public long getVarJ(int); + method public void getVarV(int, android.renderscript.FieldPacker); + method protected void invoke(int); + method protected void invoke(int, android.renderscript.FieldPacker); + method public void setTimeZone(java.lang.String); + method public void setVar(int, float); + method public void setVar(int, double); + method public void setVar(int, int); + method public void setVar(int, long); + method public void setVar(int, boolean); + method public void setVar(int, android.renderscript.BaseObj); + method public void setVar(int, android.renderscript.FieldPacker); + method public void setVar(int, android.renderscript.FieldPacker, android.renderscript.Element, int[]); + } + + public static class Script.Builder { + } + + public static class Script.FieldBase { + ctor protected Script.FieldBase(); + method public android.renderscript.Allocation getAllocation(); + method public android.renderscript.Element getElement(); + method public android.renderscript.Type getType(); + method protected void init(android.renderscript.RenderScript, int); + method protected void init(android.renderscript.RenderScript, int, int); + method public void updateAllocation(); + field protected android.renderscript.Allocation mAllocation; + field protected android.renderscript.Element mElement; + } + + public static final class Script.FieldID extends android.renderscript.BaseObj { + } + + public static final class Script.KernelID extends android.renderscript.BaseObj { + } + + public static final class Script.LaunchOptions { + ctor public Script.LaunchOptions(); + method public int getXEnd(); + method public int getXStart(); + method public int getYEnd(); + method public int getYStart(); + method public int getZEnd(); + method public int getZStart(); + method public android.renderscript.Script.LaunchOptions setX(int, int); + method public android.renderscript.Script.LaunchOptions setY(int, int); + method public android.renderscript.Script.LaunchOptions setZ(int, int); + } + + public class ScriptC extends android.renderscript.Script { + ctor protected ScriptC(int, android.renderscript.RenderScript); + ctor protected ScriptC(long, android.renderscript.RenderScript); + ctor protected ScriptC(android.renderscript.RenderScript, android.content.res.Resources, int); + ctor protected ScriptC(android.renderscript.RenderScript, java.lang.String, byte[], byte[]); + } + + public final class ScriptGroup extends android.renderscript.BaseObj { + method public void execute(); + method public void setInput(android.renderscript.Script.KernelID, android.renderscript.Allocation); + method public void setOutput(android.renderscript.Script.KernelID, android.renderscript.Allocation); + } + + public static final class ScriptGroup.Builder { + ctor public ScriptGroup.Builder(android.renderscript.RenderScript); + method public android.renderscript.ScriptGroup.Builder addConnection(android.renderscript.Type, android.renderscript.Script.KernelID, android.renderscript.Script.FieldID); + method public android.renderscript.ScriptGroup.Builder addConnection(android.renderscript.Type, android.renderscript.Script.KernelID, android.renderscript.Script.KernelID); + method public android.renderscript.ScriptGroup.Builder addKernel(android.renderscript.Script.KernelID); + method public android.renderscript.ScriptGroup create(); + } + + public abstract class ScriptIntrinsic extends android.renderscript.Script { + } + + public final class ScriptIntrinsic3DLUT extends android.renderscript.ScriptIntrinsic { + method public static android.renderscript.ScriptIntrinsic3DLUT create(android.renderscript.RenderScript, android.renderscript.Element); + method public void forEach(android.renderscript.Allocation, android.renderscript.Allocation); + method public void forEach(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions); + method public android.renderscript.Script.KernelID getKernelID(); + method public void setLUT(android.renderscript.Allocation); + } + + public class ScriptIntrinsicBlend extends android.renderscript.ScriptIntrinsic { + method public static android.renderscript.ScriptIntrinsicBlend create(android.renderscript.RenderScript, android.renderscript.Element); + method public void forEachAdd(android.renderscript.Allocation, android.renderscript.Allocation); + method public void forEachAdd(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions); + method public void forEachClear(android.renderscript.Allocation, android.renderscript.Allocation); + method public void forEachClear(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions); + method public void forEachDst(android.renderscript.Allocation, android.renderscript.Allocation); + method public void forEachDst(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions); + method public void forEachDstAtop(android.renderscript.Allocation, android.renderscript.Allocation); + method public void forEachDstAtop(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions); + method public void forEachDstIn(android.renderscript.Allocation, android.renderscript.Allocation); + method public void forEachDstIn(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions); + method public void forEachDstOut(android.renderscript.Allocation, android.renderscript.Allocation); + method public void forEachDstOut(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions); + method public void forEachDstOver(android.renderscript.Allocation, android.renderscript.Allocation); + method public void forEachDstOver(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions); + method public void forEachMultiply(android.renderscript.Allocation, android.renderscript.Allocation); + method public void forEachMultiply(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions); + method public void forEachSrc(android.renderscript.Allocation, android.renderscript.Allocation); + method public void forEachSrc(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions); + method public void forEachSrcAtop(android.renderscript.Allocation, android.renderscript.Allocation); + method public void forEachSrcAtop(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions); + method public void forEachSrcIn(android.renderscript.Allocation, android.renderscript.Allocation); + method public void forEachSrcIn(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions); + method public void forEachSrcOut(android.renderscript.Allocation, android.renderscript.Allocation); + method public void forEachSrcOut(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions); + method public void forEachSrcOver(android.renderscript.Allocation, android.renderscript.Allocation); + method public void forEachSrcOver(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions); + method public void forEachSubtract(android.renderscript.Allocation, android.renderscript.Allocation); + method public void forEachSubtract(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions); + method public void forEachXor(android.renderscript.Allocation, android.renderscript.Allocation); + method public void forEachXor(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions); + method public android.renderscript.Script.KernelID getKernelIDAdd(); + method public android.renderscript.Script.KernelID getKernelIDClear(); + method public android.renderscript.Script.KernelID getKernelIDDst(); + method public android.renderscript.Script.KernelID getKernelIDDstAtop(); + method public android.renderscript.Script.KernelID getKernelIDDstIn(); + method public android.renderscript.Script.KernelID getKernelIDDstOut(); + method public android.renderscript.Script.KernelID getKernelIDDstOver(); + method public android.renderscript.Script.KernelID getKernelIDMultiply(); + method public android.renderscript.Script.KernelID getKernelIDSrc(); + method public android.renderscript.Script.KernelID getKernelIDSrcAtop(); + method public android.renderscript.Script.KernelID getKernelIDSrcIn(); + method public android.renderscript.Script.KernelID getKernelIDSrcOut(); + method public android.renderscript.Script.KernelID getKernelIDSrcOver(); + method public android.renderscript.Script.KernelID getKernelIDSubtract(); + method public android.renderscript.Script.KernelID getKernelIDXor(); + } + + public final class ScriptIntrinsicBlur extends android.renderscript.ScriptIntrinsic { + method public static android.renderscript.ScriptIntrinsicBlur create(android.renderscript.RenderScript, android.renderscript.Element); + method public void forEach(android.renderscript.Allocation); + method public void forEach(android.renderscript.Allocation, android.renderscript.Script.LaunchOptions); + method public android.renderscript.Script.FieldID getFieldID_Input(); + method public android.renderscript.Script.KernelID getKernelID(); + method public void setInput(android.renderscript.Allocation); + method public void setRadius(float); + } + + public final class ScriptIntrinsicColorMatrix extends android.renderscript.ScriptIntrinsic { + method public static deprecated android.renderscript.ScriptIntrinsicColorMatrix create(android.renderscript.RenderScript, android.renderscript.Element); + method public static android.renderscript.ScriptIntrinsicColorMatrix create(android.renderscript.RenderScript); + method public void forEach(android.renderscript.Allocation, android.renderscript.Allocation); + method public void forEach(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions); + method public android.renderscript.Script.KernelID getKernelID(); + method public void setAdd(android.renderscript.Float4); + method public void setAdd(float, float, float, float); + method public void setColorMatrix(android.renderscript.Matrix4f); + method public void setColorMatrix(android.renderscript.Matrix3f); + method public void setGreyscale(); + method public void setRGBtoYUV(); + method public void setYUVtoRGB(); + } + + public final class ScriptIntrinsicConvolve3x3 extends android.renderscript.ScriptIntrinsic { + method public static android.renderscript.ScriptIntrinsicConvolve3x3 create(android.renderscript.RenderScript, android.renderscript.Element); + method public void forEach(android.renderscript.Allocation); + method public void forEach(android.renderscript.Allocation, android.renderscript.Script.LaunchOptions); + method public android.renderscript.Script.FieldID getFieldID_Input(); + method public android.renderscript.Script.KernelID getKernelID(); + method public void setCoefficients(float[]); + method public void setInput(android.renderscript.Allocation); + } + + public final class ScriptIntrinsicConvolve5x5 extends android.renderscript.ScriptIntrinsic { + method public static android.renderscript.ScriptIntrinsicConvolve5x5 create(android.renderscript.RenderScript, android.renderscript.Element); + method public void forEach(android.renderscript.Allocation); + method public void forEach(android.renderscript.Allocation, android.renderscript.Script.LaunchOptions); + method public android.renderscript.Script.FieldID getFieldID_Input(); + method public android.renderscript.Script.KernelID getKernelID(); + method public void setCoefficients(float[]); + method public void setInput(android.renderscript.Allocation); + } + + public final class ScriptIntrinsicHistogram extends android.renderscript.ScriptIntrinsic { + method public static android.renderscript.ScriptIntrinsicHistogram create(android.renderscript.RenderScript, android.renderscript.Element); + method public void forEach(android.renderscript.Allocation); + method public void forEach(android.renderscript.Allocation, android.renderscript.Script.LaunchOptions); + method public void forEach_Dot(android.renderscript.Allocation); + method public void forEach_Dot(android.renderscript.Allocation, android.renderscript.Script.LaunchOptions); + method public android.renderscript.Script.FieldID getFieldID_Input(); + method public android.renderscript.Script.KernelID getKernelID_Separate(); + method public void setDotCoefficients(float, float, float, float); + method public void setOutput(android.renderscript.Allocation); + } + + public final class ScriptIntrinsicLUT extends android.renderscript.ScriptIntrinsic { + method public static android.renderscript.ScriptIntrinsicLUT create(android.renderscript.RenderScript, android.renderscript.Element); + method public void forEach(android.renderscript.Allocation, android.renderscript.Allocation); + method public void forEach(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions); + method public android.renderscript.Script.KernelID getKernelID(); + method public void setAlpha(int, int); + method public void setBlue(int, int); + method public void setGreen(int, int); + method public void setRed(int, int); + } + + public final class ScriptIntrinsicResize extends android.renderscript.ScriptIntrinsic { + method public static android.renderscript.ScriptIntrinsicResize create(android.renderscript.RenderScript); + method public void forEach_bicubic(android.renderscript.Allocation); + method public void forEach_bicubic(android.renderscript.Allocation, android.renderscript.Script.LaunchOptions); + method public android.renderscript.Script.FieldID getFieldID_Input(); + method public android.renderscript.Script.KernelID getKernelID_bicubic(); + method public void setInput(android.renderscript.Allocation); + } + + public final class ScriptIntrinsicYuvToRGB extends android.renderscript.ScriptIntrinsic { + method public static android.renderscript.ScriptIntrinsicYuvToRGB create(android.renderscript.RenderScript, android.renderscript.Element); + method public void forEach(android.renderscript.Allocation); + method public android.renderscript.Script.FieldID getFieldID_Input(); + method public android.renderscript.Script.KernelID getKernelID(); + method public void setInput(android.renderscript.Allocation); + } + + public class Short2 { + ctor public Short2(); + ctor public Short2(short, short); + field public short x; + field public short y; + } + + public class Short3 { + ctor public Short3(); + ctor public Short3(short, short, short); + field public short x; + field public short y; + field public short z; + } + + public class Short4 { + ctor public Short4(); + ctor public Short4(short, short, short, short); + field public short w; + field public short x; + field public short y; + field public short z; + } + + public class Type extends android.renderscript.BaseObj { + method public static android.renderscript.Type createX(android.renderscript.RenderScript, android.renderscript.Element, int); + method public static android.renderscript.Type createXY(android.renderscript.RenderScript, android.renderscript.Element, int, int); + method public static android.renderscript.Type createXYZ(android.renderscript.RenderScript, android.renderscript.Element, int, int, int); + method public int getCount(); + method public android.renderscript.Element getElement(); + method public int getX(); + method public int getY(); + method public int getYuv(); + method public int getZ(); + method public boolean hasFaces(); + method public boolean hasMipmaps(); + } + + public static class Type.Builder { + ctor public Type.Builder(android.renderscript.RenderScript, android.renderscript.Element); + method public android.renderscript.Type create(); + method public android.renderscript.Type.Builder setFaces(boolean); + method public android.renderscript.Type.Builder setMipmaps(boolean); + method public android.renderscript.Type.Builder setX(int); + method public android.renderscript.Type.Builder setY(int); + method public android.renderscript.Type.Builder setYuvFormat(int); + method public android.renderscript.Type.Builder setZ(int); + } + + public static final class Type.CubemapFace extends java.lang.Enum { + method public static android.renderscript.Type.CubemapFace valueOf(java.lang.String); + method public static final android.renderscript.Type.CubemapFace[] values(); + enum_constant public static final android.renderscript.Type.CubemapFace NEGATIVE_X; + enum_constant public static final android.renderscript.Type.CubemapFace NEGATIVE_Y; + enum_constant public static final android.renderscript.Type.CubemapFace NEGATIVE_Z; + enum_constant public static final android.renderscript.Type.CubemapFace POSITIVE_X; + enum_constant public static final android.renderscript.Type.CubemapFace POSITIVE_Y; + enum_constant public static final android.renderscript.Type.CubemapFace POSITIVE_Z; + enum_constant public static final deprecated android.renderscript.Type.CubemapFace POSITVE_X; + enum_constant public static final deprecated android.renderscript.Type.CubemapFace POSITVE_Y; + enum_constant public static final deprecated android.renderscript.Type.CubemapFace POSITVE_Z; + } + +} + +package android.sax { + + public class Element { + method public android.sax.Element getChild(java.lang.String); + method public android.sax.Element getChild(java.lang.String, java.lang.String); + method public android.sax.Element requireChild(java.lang.String); + method public android.sax.Element requireChild(java.lang.String, java.lang.String); + method public void setElementListener(android.sax.ElementListener); + method public void setEndElementListener(android.sax.EndElementListener); + method public void setEndTextElementListener(android.sax.EndTextElementListener); + method public void setStartElementListener(android.sax.StartElementListener); + method public void setTextElementListener(android.sax.TextElementListener); + } + + public abstract interface ElementListener implements android.sax.EndElementListener android.sax.StartElementListener { + } + + public abstract interface EndElementListener { + method public abstract void end(); + } + + public abstract interface EndTextElementListener { + method public abstract void end(java.lang.String); + } + + public class RootElement extends android.sax.Element { + ctor public RootElement(java.lang.String, java.lang.String); + ctor public RootElement(java.lang.String); + method public org.xml.sax.ContentHandler getContentHandler(); + } + + public abstract interface StartElementListener { + method public abstract void start(org.xml.sax.Attributes); + } + + public abstract interface TextElementListener implements android.sax.EndTextElementListener android.sax.StartElementListener { + } + +} + +package android.security { + + public final class KeyChain { + ctor public KeyChain(); + method public static void choosePrivateKeyAlias(android.app.Activity, android.security.KeyChainAliasCallback, java.lang.String[], java.security.Principal[], java.lang.String, int, java.lang.String); + method public static android.content.Intent createInstallIntent(); + method public static java.security.cert.X509Certificate[] getCertificateChain(android.content.Context, java.lang.String) throws java.lang.InterruptedException, android.security.KeyChainException; + method public static java.security.PrivateKey getPrivateKey(android.content.Context, java.lang.String) throws java.lang.InterruptedException, android.security.KeyChainException; + method public static boolean isBoundKeyAlgorithm(java.lang.String); + method public static boolean isKeyAlgorithmSupported(java.lang.String); + field public static final java.lang.String ACTION_STORAGE_CHANGED = "android.security.STORAGE_CHANGED"; + field public static final java.lang.String EXTRA_CERTIFICATE = "CERT"; + field public static final java.lang.String EXTRA_NAME = "name"; + field public static final java.lang.String EXTRA_PKCS12 = "PKCS12"; + } + + public abstract interface KeyChainAliasCallback { + method public abstract void alias(java.lang.String); + } + + public class KeyChainException extends java.lang.Exception { + ctor public KeyChainException(); + ctor public KeyChainException(java.lang.String); + ctor public KeyChainException(java.lang.String, java.lang.Throwable); + ctor public KeyChainException(java.lang.Throwable); + } + + public final class KeyPairGeneratorSpec implements java.security.spec.AlgorithmParameterSpec { + method public java.security.spec.AlgorithmParameterSpec getAlgorithmParameterSpec(); + method public android.content.Context getContext(); + method public java.util.Date getEndDate(); + method public int getKeySize(); + method public java.lang.String getKeyType(); + method public java.lang.String getKeystoreAlias(); + method public java.math.BigInteger getSerialNumber(); + method public java.util.Date getStartDate(); + method public javax.security.auth.x500.X500Principal getSubjectDN(); + method public boolean isEncryptionRequired(); + } + + public static final class KeyPairGeneratorSpec.Builder { + ctor public KeyPairGeneratorSpec.Builder(android.content.Context); + method public android.security.KeyPairGeneratorSpec build(); + method public android.security.KeyPairGeneratorSpec.Builder setAlgorithmParameterSpec(java.security.spec.AlgorithmParameterSpec); + method public android.security.KeyPairGeneratorSpec.Builder setAlias(java.lang.String); + method public android.security.KeyPairGeneratorSpec.Builder setEncryptionRequired(); + method public android.security.KeyPairGeneratorSpec.Builder setEndDate(java.util.Date); + method public android.security.KeyPairGeneratorSpec.Builder setKeySize(int); + method public android.security.KeyPairGeneratorSpec.Builder setKeyType(java.lang.String) throws java.security.NoSuchAlgorithmException; + method public android.security.KeyPairGeneratorSpec.Builder setSerialNumber(java.math.BigInteger); + method public android.security.KeyPairGeneratorSpec.Builder setStartDate(java.util.Date); + method public android.security.KeyPairGeneratorSpec.Builder setSubject(javax.security.auth.x500.X500Principal); + } + + public final class KeyStoreParameter implements java.security.KeyStore.ProtectionParameter { + method public boolean isEncryptionRequired(); + } + + public static final class KeyStoreParameter.Builder { + ctor public KeyStoreParameter.Builder(android.content.Context); + method public android.security.KeyStoreParameter build(); + method public android.security.KeyStoreParameter.Builder setEncryptionRequired(boolean); + } + +} + +package android.service.carrier { + + public abstract class CarrierMessagingService extends android.app.Service { + ctor public CarrierMessagingService(); + method public android.os.IBinder onBind(android.content.Intent); + method public void onDownloadMms(android.net.Uri, int, android.net.Uri, android.service.carrier.CarrierMessagingService.ResultCallback); + method public void onFilterSms(android.service.carrier.MessagePdu, java.lang.String, int, int, android.service.carrier.CarrierMessagingService.ResultCallback); + method public void onSendDataSms(byte[], int, java.lang.String, int, android.service.carrier.CarrierMessagingService.ResultCallback); + method public void onSendMms(android.net.Uri, int, android.net.Uri, android.service.carrier.CarrierMessagingService.ResultCallback); + method public void onSendMultipartTextSms(java.util.List, int, java.lang.String, android.service.carrier.CarrierMessagingService.ResultCallback); + method public void onSendTextSms(java.lang.String, int, java.lang.String, android.service.carrier.CarrierMessagingService.ResultCallback); + field public static final int DOWNLOAD_STATUS_ERROR = 2; // 0x2 + field public static final int DOWNLOAD_STATUS_OK = 0; // 0x0 + field public static final int DOWNLOAD_STATUS_RETRY_ON_CARRIER_NETWORK = 1; // 0x1 + field public static final int SEND_STATUS_ERROR = 2; // 0x2 + field public static final int SEND_STATUS_OK = 0; // 0x0 + field public static final int SEND_STATUS_RETRY_ON_CARRIER_NETWORK = 1; // 0x1 + field public static final java.lang.String SERVICE_INTERFACE = "android.service.carrier.CarrierMessagingService"; + } + + public static abstract interface CarrierMessagingService.ResultCallback { + method public abstract void onReceiveResult(T) throws android.os.RemoteException; + } + + public static final class CarrierMessagingService.SendMmsResult { + ctor public CarrierMessagingService.SendMmsResult(int, byte[]); + method public byte[] getSendConfPdu(); + method public int getSendStatus(); + } + + public static final class CarrierMessagingService.SendMultipartSmsResult { + ctor public CarrierMessagingService.SendMultipartSmsResult(int, int[]); + method public int[] getMessageRefs(); + method public int getSendStatus(); + } + + public static final class CarrierMessagingService.SendSmsResult { + ctor public CarrierMessagingService.SendSmsResult(int, int); + method public int getMessageRef(); + method public int getSendStatus(); + } + + public final class MessagePdu implements android.os.Parcelable { + ctor public MessagePdu(java.util.List); + method public int describeContents(); + method public java.util.List getPdus(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + +} + +package android.service.dreams { + + public class DreamService extends android.app.Service implements android.view.Window.Callback { + ctor public DreamService(); + method public void addContentView(android.view.View, android.view.ViewGroup.LayoutParams); + method public boolean dispatchGenericMotionEvent(android.view.MotionEvent); + method public boolean dispatchKeyEvent(android.view.KeyEvent); + method public boolean dispatchKeyShortcutEvent(android.view.KeyEvent); + method public boolean dispatchPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent); + method public boolean dispatchTouchEvent(android.view.MotionEvent); + method public boolean dispatchTrackballEvent(android.view.MotionEvent); + method public android.view.View findViewById(int); + method public final void finish(); + method public android.view.Window getWindow(); + method public android.view.WindowManager getWindowManager(); + method public boolean isFullscreen(); + method public boolean isInteractive(); + method public boolean isScreenBright(); + method public void onActionModeFinished(android.view.ActionMode); + method public void onActionModeStarted(android.view.ActionMode); + method public void onAttachedToWindow(); + method public final android.os.IBinder onBind(android.content.Intent); + method public void onContentChanged(); + method public boolean onCreatePanelMenu(int, android.view.Menu); + method public android.view.View onCreatePanelView(int); + method public void onDetachedFromWindow(); + method public void onDreamingStarted(); + method public void onDreamingStopped(); + method public boolean onMenuItemSelected(int, android.view.MenuItem); + method public boolean onMenuOpened(int, android.view.Menu); + method public void onPanelClosed(int, android.view.Menu); + method public boolean onPreparePanel(int, android.view.View, android.view.Menu); + method public boolean onSearchRequested(); + method public void onWakeUp(); + method public void onWindowAttributesChanged(android.view.WindowManager.LayoutParams); + method public void onWindowFocusChanged(boolean); + method public android.view.ActionMode onWindowStartingActionMode(android.view.ActionMode.Callback); + method public void setContentView(int); + method public void setContentView(android.view.View); + method public void setContentView(android.view.View, android.view.ViewGroup.LayoutParams); + method public void setFullscreen(boolean); + method public void setInteractive(boolean); + method public void setScreenBright(boolean); + method public final void wakeUp(); + field public static final java.lang.String DREAM_META_DATA = "android.service.dream"; + field public static final java.lang.String SERVICE_INTERFACE = "android.service.dreams.DreamService"; + } + +} + +package android.service.media { + + public abstract class MediaBrowserService extends android.app.Service { + ctor public MediaBrowserService(); + method public void dump(java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]); + method public android.media.session.MediaSession.Token getSessionToken(); + method public void notifyChildrenChanged(java.lang.String); + method public android.os.IBinder onBind(android.content.Intent); + method public abstract android.service.media.MediaBrowserService.BrowserRoot onGetRoot(java.lang.String, int, android.os.Bundle); + method public abstract void onLoadChildren(java.lang.String, android.service.media.MediaBrowserService.Result>); + method public void setSessionToken(android.media.session.MediaSession.Token); + field public static final java.lang.String SERVICE_INTERFACE = "android.media.browse.MediaBrowserService"; + } + + public static final class MediaBrowserService.BrowserRoot { + ctor public MediaBrowserService.BrowserRoot(java.lang.String, android.os.Bundle); + method public android.os.Bundle getExtras(); + method public java.lang.String getRootId(); + } + + public class MediaBrowserService.Result { + method public void detach(); + method public void sendResult(T); + } + +} + +package android.service.notification { + + public class Condition implements android.os.Parcelable { + ctor public Condition(android.net.Uri, java.lang.String, java.lang.String, java.lang.String, int, int, int); + method public android.service.notification.Condition copy(); + method public int describeContents(); + method public static boolean isValidId(android.net.Uri, java.lang.String); + method public static android.net.Uri.Builder newId(android.content.Context); + method public static java.lang.String relevanceToString(int); + method public static java.lang.String stateToString(int); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int FLAG_RELEVANT_ALWAYS = 2; // 0x2 + field public static final int FLAG_RELEVANT_NOW = 1; // 0x1 + field public static final java.lang.String SCHEME = "condition"; + field public static final int STATE_ERROR = 3; // 0x3 + field public static final int STATE_FALSE = 0; // 0x0 + field public static final int STATE_TRUE = 1; // 0x1 + field public static final int STATE_UNKNOWN = 2; // 0x2 + field public final int flags; + field public final int icon; + field public final android.net.Uri id; + field public final java.lang.String line1; + field public final java.lang.String line2; + field public final int state; + field public final java.lang.String summary; + } + + public abstract class ConditionProviderService extends android.app.Service { + ctor public ConditionProviderService(); + method public final void notifyCondition(android.service.notification.Condition); + method public final void notifyConditions(android.service.notification.Condition...); + method public android.os.IBinder onBind(android.content.Intent); + method public abstract void onConnected(); + method public abstract void onRequestConditions(int); + method public abstract void onSubscribe(android.net.Uri); + method public abstract void onUnsubscribe(android.net.Uri); + field public static final java.lang.String SERVICE_INTERFACE = "android.service.notification.ConditionProviderService"; + } + + public abstract class NotificationListenerService extends android.app.Service { + ctor public NotificationListenerService(); + method public final void cancelAllNotifications(); + method public final deprecated void cancelNotification(java.lang.String, java.lang.String, int); + method public final void cancelNotification(java.lang.String); + method public final void cancelNotifications(java.lang.String[]); + method public android.service.notification.StatusBarNotification[] getActiveNotifications(); + method public android.service.notification.StatusBarNotification[] getActiveNotifications(int); + method public android.service.notification.StatusBarNotification[] getActiveNotifications(java.lang.String[]); + method public android.service.notification.StatusBarNotification[] getActiveNotifications(java.lang.String[], int); + method public final int getCurrentInterruptionFilter(); + method public final int getCurrentListenerHints(); + method public android.service.notification.NotificationListenerService.RankingMap getCurrentRanking(); + method public android.os.IBinder onBind(android.content.Intent); + method public void onInterruptionFilterChanged(int); + method public void onListenerConnected(); + method public void onListenerHintsChanged(int); + method public void onNotificationPosted(android.service.notification.StatusBarNotification); + method public void onNotificationPosted(android.service.notification.StatusBarNotification, android.service.notification.NotificationListenerService.RankingMap); + method public void onNotificationRankingUpdate(android.service.notification.NotificationListenerService.RankingMap); + method public void onNotificationRemoved(android.service.notification.StatusBarNotification); + method public void onNotificationRemoved(android.service.notification.StatusBarNotification, android.service.notification.NotificationListenerService.RankingMap); + method public void registerAsSystemService(android.content.Context, android.content.ComponentName, int) throws android.os.RemoteException; + method public final void requestInterruptionFilter(int); + method public final void requestListenerHints(int); + method public final void setOnNotificationPostedTrim(int); + method public void unregisterAsSystemService() throws android.os.RemoteException; + field public static final int HINT_HOST_DISABLE_EFFECTS = 1; // 0x1 + field public static final int INTERRUPTION_FILTER_ALL = 1; // 0x1 + field public static final int INTERRUPTION_FILTER_NONE = 3; // 0x3 + field public static final int INTERRUPTION_FILTER_PRIORITY = 2; // 0x2 + field public static final java.lang.String SERVICE_INTERFACE = "android.service.notification.NotificationListenerService"; + field public static final int TRIM_FULL = 0; // 0x0 + field public static final int TRIM_LIGHT = 1; // 0x1 + } + + public static class NotificationListenerService.Ranking { + ctor public NotificationListenerService.Ranking(); + method public java.lang.String getKey(); + method public int getRank(); + method public boolean isAmbient(); + method public boolean matchesInterruptionFilter(); + } + + public static class NotificationListenerService.RankingMap implements android.os.Parcelable { + method public int describeContents(); + method public java.lang.String[] getOrderedKeys(); + method public boolean getRanking(java.lang.String, android.service.notification.NotificationListenerService.Ranking); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public class StatusBarNotification implements android.os.Parcelable { + ctor public StatusBarNotification(java.lang.String, java.lang.String, int, java.lang.String, int, int, int, android.app.Notification, android.os.UserHandle, long); + ctor public StatusBarNotification(android.os.Parcel); + method public android.service.notification.StatusBarNotification clone(); + method public int describeContents(); + method public java.lang.String getGroupKey(); + method public int getId(); + method public java.lang.String getKey(); + method public android.app.Notification getNotification(); + method public java.lang.String getPackageName(); + method public long getPostTime(); + method public java.lang.String getTag(); + method public android.os.UserHandle getUser(); + method public deprecated int getUserId(); + method public boolean isClearable(); + method public boolean isOngoing(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + +} + +package android.service.persistentdata { + + public abstract interface IPersistentDataBlockService implements android.os.IInterface { + method public abstract int getDataBlockSize() throws android.os.RemoteException; + method public abstract long getMaximumDataBlockSize() throws android.os.RemoteException; + method public abstract boolean getOemUnlockEnabled() throws android.os.RemoteException; + method public abstract byte[] read() throws android.os.RemoteException; + method public abstract void setOemUnlockEnabled(boolean) throws android.os.RemoteException; + method public abstract void wipe() throws android.os.RemoteException; + method public abstract int write(byte[]) throws android.os.RemoteException; + } + + public class PersistentDataBlockManager { + ctor public PersistentDataBlockManager(android.service.persistentdata.IPersistentDataBlockService); + method public int getDataBlockSize(); + method public long getMaximumDataBlockSize(); + method public boolean getOemUnlockEnabled(); + method public byte[] read(); + method public void setOemUnlockEnabled(boolean); + method public void wipe(); + method public int write(byte[]); + } + +} + +package android.service.restrictions { + + public abstract class RestrictionsReceiver extends android.content.BroadcastReceiver { + ctor public RestrictionsReceiver(); + method public void onReceive(android.content.Context, android.content.Intent); + method public abstract void onRequestPermission(android.content.Context, java.lang.String, java.lang.String, java.lang.String, android.os.PersistableBundle); + } + +} + +package android.service.textservice { + + public abstract class SpellCheckerService extends android.app.Service { + ctor public SpellCheckerService(); + method public abstract android.service.textservice.SpellCheckerService.Session createSession(); + method public final android.os.IBinder onBind(android.content.Intent); + field public static final java.lang.String SERVICE_INTERFACE = "android.service.textservice.SpellCheckerService"; + } + + public static abstract class SpellCheckerService.Session { + ctor public SpellCheckerService.Session(); + method public android.os.Bundle getBundle(); + method public java.lang.String getLocale(); + method public void onCancel(); + method public void onClose(); + method public abstract void onCreate(); + method public android.view.textservice.SentenceSuggestionsInfo[] onGetSentenceSuggestionsMultiple(android.view.textservice.TextInfo[], int); + method public abstract android.view.textservice.SuggestionsInfo onGetSuggestions(android.view.textservice.TextInfo, int); + method public android.view.textservice.SuggestionsInfo[] onGetSuggestionsMultiple(android.view.textservice.TextInfo[], int, boolean); + } + +} + +package android.service.trust { + + public class TrustAgentService extends android.app.Service { + ctor public TrustAgentService(); + method public final void grantTrust(java.lang.CharSequence, long, boolean); + method public final android.os.IBinder onBind(android.content.Intent); + method public boolean onConfigure(java.util.List); + method public void onDeviceLocked(); + method public void onDeviceUnlocked(); + method public void onTrustTimeout(); + method public void onUnlockAttempt(boolean); + method public final void revokeTrust(); + method public final void setManagingTrust(boolean); + field public static final java.lang.String SERVICE_INTERFACE = "android.service.trust.TrustAgentService"; + field public static final java.lang.String TRUST_AGENT_META_DATA = "android.service.trust.trustagent"; + } + +} + +package android.service.voice { + + public class AlwaysOnHotwordDetector { + method public android.content.Intent createEnrollIntent(); + method public android.content.Intent createReEnrollIntent(); + method public android.content.Intent createUnEnrollIntent(); + method public int getSupportedRecognitionModes(); + method public boolean startRecognition(int); + method public boolean stopRecognition(); + field public static final int RECOGNITION_FLAG_ALLOW_MULTIPLE_TRIGGERS = 2; // 0x2 + field public static final int RECOGNITION_FLAG_CAPTURE_TRIGGER_AUDIO = 1; // 0x1 + field public static final int RECOGNITION_MODE_USER_IDENTIFICATION = 2; // 0x2 + field public static final int RECOGNITION_MODE_VOICE_TRIGGER = 1; // 0x1 + field public static final int STATE_HARDWARE_UNAVAILABLE = -2; // 0xfffffffe + field public static final int STATE_KEYPHRASE_ENROLLED = 2; // 0x2 + field public static final int STATE_KEYPHRASE_UNENROLLED = 1; // 0x1 + field public static final int STATE_KEYPHRASE_UNSUPPORTED = -1; // 0xffffffff + } + + public static abstract class AlwaysOnHotwordDetector.Callback { + ctor public AlwaysOnHotwordDetector.Callback(); + method public abstract void onAvailabilityChanged(int); + method public abstract void onDetected(android.service.voice.AlwaysOnHotwordDetector.EventPayload); + method public abstract void onError(); + method public abstract void onRecognitionPaused(); + method public abstract void onRecognitionResumed(); + } + + public static class AlwaysOnHotwordDetector.EventPayload { + method public android.media.AudioFormat getCaptureAudioFormat(); + method public byte[] getTriggerAudio(); + } + + public class VoiceInteractionService extends android.app.Service { + ctor public VoiceInteractionService(); + method public final android.service.voice.AlwaysOnHotwordDetector createAlwaysOnHotwordDetector(java.lang.String, java.util.Locale, android.service.voice.AlwaysOnHotwordDetector.Callback); + method public static boolean isActiveService(android.content.Context, android.content.ComponentName); + method public android.os.IBinder onBind(android.content.Intent); + method public void onReady(); + method public void onShutdown(); + method public void startSession(android.os.Bundle); + field public static final java.lang.String SERVICE_INTERFACE = "android.service.voice.VoiceInteractionService"; + field public static final java.lang.String SERVICE_META_DATA = "android.voice_interaction"; + } + + public abstract class VoiceInteractionSession implements android.view.KeyEvent.Callback { + ctor public VoiceInteractionSession(android.content.Context); + ctor public VoiceInteractionSession(android.content.Context, android.os.Handler); + method public void finish(); + method public android.view.LayoutInflater getLayoutInflater(); + method public android.app.Dialog getWindow(); + method public void hideWindow(); + method public void onBackPressed(); + method public void onCloseSystemDialogs(); + method public void onComputeInsets(android.service.voice.VoiceInteractionSession.Insets); + method public void onCreate(android.os.Bundle); + method public android.view.View onCreateContentView(); + method public void onDestroy(); + method public boolean onKeyDown(int, android.view.KeyEvent); + method public boolean onKeyLongPress(int, android.view.KeyEvent); + method public boolean onKeyMultiple(int, int, android.view.KeyEvent); + method public boolean onKeyUp(int, android.view.KeyEvent); + method public void setContentView(android.view.View); + method public void setTheme(int); + method public void showWindow(); + method public void startVoiceActivity(android.content.Intent); + } + + public static class VoiceInteractionSession.Caller { + } + + public static final class VoiceInteractionSession.Insets { + ctor public VoiceInteractionSession.Insets(); + field public static final int TOUCHABLE_INSETS_CONTENT = 1; // 0x1 + field public static final int TOUCHABLE_INSETS_FRAME = 0; // 0x0 + field public static final int TOUCHABLE_INSETS_REGION = 3; // 0x3 + field public final android.graphics.Rect contentInsets; + field public int touchableInsets; + field public final android.graphics.Region touchableRegion; + } + + public static class VoiceInteractionSession.Request { + method public void sendAbortVoiceResult(android.os.Bundle); + method public void sendCancelResult(); + method public void sendCommandResult(boolean, android.os.Bundle); + method public void sendCompleteVoiceResult(android.os.Bundle); + method public void sendConfirmResult(boolean, android.os.Bundle); + } + + public abstract class VoiceInteractionSessionService extends android.app.Service { + ctor public VoiceInteractionSessionService(); + method public android.os.IBinder onBind(android.content.Intent); + method public abstract android.service.voice.VoiceInteractionSession onNewSession(android.os.Bundle); + } + +} + +package android.service.wallpaper { + + public abstract class WallpaperService extends android.app.Service { + ctor public WallpaperService(); + method public final android.os.IBinder onBind(android.content.Intent); + method public abstract android.service.wallpaper.WallpaperService.Engine onCreateEngine(); + field public static final java.lang.String SERVICE_INTERFACE = "android.service.wallpaper.WallpaperService"; + field public static final java.lang.String SERVICE_META_DATA = "android.service.wallpaper"; + } + + public class WallpaperService.Engine { + ctor public WallpaperService.Engine(); + method protected void dump(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]); + method public int getDesiredMinimumHeight(); + method public int getDesiredMinimumWidth(); + method public android.view.SurfaceHolder getSurfaceHolder(); + method public boolean isPreview(); + method public boolean isVisible(); + method public void onApplyWindowInsets(android.view.WindowInsets); + method public android.os.Bundle onCommand(java.lang.String, int, int, int, android.os.Bundle, boolean); + method public void onCreate(android.view.SurfaceHolder); + method public void onDesiredSizeChanged(int, int); + method public void onDestroy(); + method public void onOffsetsChanged(float, float, float, float, int, int); + method public void onSurfaceChanged(android.view.SurfaceHolder, int, int, int); + method public void onSurfaceCreated(android.view.SurfaceHolder); + method public void onSurfaceDestroyed(android.view.SurfaceHolder); + method public void onSurfaceRedrawNeeded(android.view.SurfaceHolder); + method public void onTouchEvent(android.view.MotionEvent); + method public void onVisibilityChanged(boolean); + method public void setOffsetNotificationsEnabled(boolean); + method public void setTouchEventsEnabled(boolean); + } + +} + +package android.speech { + + public abstract interface RecognitionListener { + method public abstract void onBeginningOfSpeech(); + method public abstract void onBufferReceived(byte[]); + method public abstract void onEndOfSpeech(); + method public abstract void onError(int); + method public abstract void onEvent(int, android.os.Bundle); + method public abstract void onPartialResults(android.os.Bundle); + method public abstract void onReadyForSpeech(android.os.Bundle); + method public abstract void onResults(android.os.Bundle); + method public abstract void onRmsChanged(float); + } + + public abstract class RecognitionService extends android.app.Service { + ctor public RecognitionService(); + method public final android.os.IBinder onBind(android.content.Intent); + method protected abstract void onCancel(android.speech.RecognitionService.Callback); + method protected abstract void onStartListening(android.content.Intent, android.speech.RecognitionService.Callback); + method protected abstract void onStopListening(android.speech.RecognitionService.Callback); + field public static final java.lang.String SERVICE_INTERFACE = "android.speech.RecognitionService"; + field public static final java.lang.String SERVICE_META_DATA = "android.speech"; + } + + public class RecognitionService.Callback { + method public void beginningOfSpeech() throws android.os.RemoteException; + method public void bufferReceived(byte[]) throws android.os.RemoteException; + method public void endOfSpeech() throws android.os.RemoteException; + method public void error(int) throws android.os.RemoteException; + method public void partialResults(android.os.Bundle) throws android.os.RemoteException; + method public void readyForSpeech(android.os.Bundle) throws android.os.RemoteException; + method public void results(android.os.Bundle) throws android.os.RemoteException; + method public void rmsChanged(float) throws android.os.RemoteException; + } + + public class RecognizerIntent { + method public static final android.content.Intent getVoiceDetailsIntent(android.content.Context); + field public static final java.lang.String ACTION_GET_LANGUAGE_DETAILS = "android.speech.action.GET_LANGUAGE_DETAILS"; + field public static final java.lang.String ACTION_RECOGNIZE_SPEECH = "android.speech.action.RECOGNIZE_SPEECH"; + field public static final java.lang.String ACTION_VOICE_SEARCH_HANDS_FREE = "android.speech.action.VOICE_SEARCH_HANDS_FREE"; + field public static final java.lang.String ACTION_WEB_SEARCH = "android.speech.action.WEB_SEARCH"; + field public static final java.lang.String DETAILS_META_DATA = "android.speech.DETAILS"; + field public static final java.lang.String EXTRA_CALLING_PACKAGE = "calling_package"; + field public static final java.lang.String EXTRA_CONFIDENCE_SCORES = "android.speech.extra.CONFIDENCE_SCORES"; + field public static final java.lang.String EXTRA_LANGUAGE = "android.speech.extra.LANGUAGE"; + field public static final java.lang.String EXTRA_LANGUAGE_MODEL = "android.speech.extra.LANGUAGE_MODEL"; + field public static final java.lang.String EXTRA_LANGUAGE_PREFERENCE = "android.speech.extra.LANGUAGE_PREFERENCE"; + field public static final java.lang.String EXTRA_MAX_RESULTS = "android.speech.extra.MAX_RESULTS"; + field public static final java.lang.String EXTRA_ONLY_RETURN_LANGUAGE_PREFERENCE = "android.speech.extra.ONLY_RETURN_LANGUAGE_PREFERENCE"; + field public static final java.lang.String EXTRA_ORIGIN = "android.speech.extra.ORIGIN"; + field public static final java.lang.String EXTRA_PARTIAL_RESULTS = "android.speech.extra.PARTIAL_RESULTS"; + field public static final java.lang.String EXTRA_PROMPT = "android.speech.extra.PROMPT"; + field public static final java.lang.String EXTRA_RESULTS = "android.speech.extra.RESULTS"; + field public static final java.lang.String EXTRA_RESULTS_PENDINGINTENT = "android.speech.extra.RESULTS_PENDINGINTENT"; + field public static final java.lang.String EXTRA_RESULTS_PENDINGINTENT_BUNDLE = "android.speech.extra.RESULTS_PENDINGINTENT_BUNDLE"; + field public static final java.lang.String EXTRA_SECURE = "android.speech.extras.EXTRA_SECURE"; + field public static final java.lang.String EXTRA_SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS = "android.speech.extras.SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS"; + field public static final java.lang.String EXTRA_SPEECH_INPUT_MINIMUM_LENGTH_MILLIS = "android.speech.extras.SPEECH_INPUT_MINIMUM_LENGTH_MILLIS"; + field public static final java.lang.String EXTRA_SPEECH_INPUT_POSSIBLY_COMPLETE_SILENCE_LENGTH_MILLIS = "android.speech.extras.SPEECH_INPUT_POSSIBLY_COMPLETE_SILENCE_LENGTH_MILLIS"; + field public static final java.lang.String EXTRA_SUPPORTED_LANGUAGES = "android.speech.extra.SUPPORTED_LANGUAGES"; + field public static final java.lang.String EXTRA_WEB_SEARCH_ONLY = "android.speech.extra.WEB_SEARCH_ONLY"; + field public static final java.lang.String LANGUAGE_MODEL_FREE_FORM = "free_form"; + field public static final java.lang.String LANGUAGE_MODEL_WEB_SEARCH = "web_search"; + field public static final int RESULT_AUDIO_ERROR = 5; // 0x5 + field public static final int RESULT_CLIENT_ERROR = 2; // 0x2 + field public static final int RESULT_NETWORK_ERROR = 4; // 0x4 + field public static final int RESULT_NO_MATCH = 1; // 0x1 + field public static final int RESULT_SERVER_ERROR = 3; // 0x3 + } + + public class RecognizerResultsIntent { + field public static final java.lang.String ACTION_VOICE_SEARCH_RESULTS = "android.speech.action.VOICE_SEARCH_RESULTS"; + field public static final java.lang.String EXTRA_VOICE_SEARCH_RESULT_HTML = "android.speech.extras.VOICE_SEARCH_RESULT_HTML"; + field public static final java.lang.String EXTRA_VOICE_SEARCH_RESULT_HTML_BASE_URLS = "android.speech.extras.VOICE_SEARCH_RESULT_HTML_BASE_URLS"; + field public static final java.lang.String EXTRA_VOICE_SEARCH_RESULT_HTTP_HEADERS = "android.speech.extras.EXTRA_VOICE_SEARCH_RESULT_HTTP_HEADERS"; + field public static final java.lang.String EXTRA_VOICE_SEARCH_RESULT_STRINGS = "android.speech.extras.VOICE_SEARCH_RESULT_STRINGS"; + field public static final java.lang.String EXTRA_VOICE_SEARCH_RESULT_URLS = "android.speech.extras.VOICE_SEARCH_RESULT_URLS"; + field public static final java.lang.String URI_SCHEME_INLINE = "inline"; + } + + public class SpeechRecognizer { + method public void cancel(); + method public static android.speech.SpeechRecognizer createSpeechRecognizer(android.content.Context); + method public static android.speech.SpeechRecognizer createSpeechRecognizer(android.content.Context, android.content.ComponentName); + method public void destroy(); + method public static boolean isRecognitionAvailable(android.content.Context); + method public void setRecognitionListener(android.speech.RecognitionListener); + method public void startListening(android.content.Intent); + method public void stopListening(); + field public static final java.lang.String CONFIDENCE_SCORES = "confidence_scores"; + field public static final int ERROR_AUDIO = 3; // 0x3 + field public static final int ERROR_CLIENT = 5; // 0x5 + field public static final int ERROR_INSUFFICIENT_PERMISSIONS = 9; // 0x9 + field public static final int ERROR_NETWORK = 2; // 0x2 + field public static final int ERROR_NETWORK_TIMEOUT = 1; // 0x1 + field public static final int ERROR_NO_MATCH = 7; // 0x7 + field public static final int ERROR_RECOGNIZER_BUSY = 8; // 0x8 + field public static final int ERROR_SERVER = 4; // 0x4 + field public static final int ERROR_SPEECH_TIMEOUT = 6; // 0x6 + field public static final java.lang.String RESULTS_RECOGNITION = "results_recognition"; + } + +} + +package android.speech.tts { + + public abstract interface SynthesisCallback { + method public abstract int audioAvailable(byte[], int, int); + method public abstract int done(); + method public abstract void error(); + method public abstract void error(int); + method public abstract int getMaxBufferSize(); + method public abstract boolean hasFinished(); + method public abstract boolean hasStarted(); + method public abstract int start(int, int, int); + } + + public final class SynthesisRequest { + ctor public SynthesisRequest(java.lang.String, android.os.Bundle); + ctor public SynthesisRequest(java.lang.CharSequence, android.os.Bundle); + method public int getCallerUid(); + method public java.lang.CharSequence getCharSequenceText(); + method public java.lang.String getCountry(); + method public java.lang.String getLanguage(); + method public android.os.Bundle getParams(); + method public int getPitch(); + method public int getSpeechRate(); + method public deprecated java.lang.String getText(); + method public java.lang.String getVariant(); + method public java.lang.String getVoiceName(); + } + + public class TextToSpeech { + ctor public TextToSpeech(android.content.Context, android.speech.tts.TextToSpeech.OnInitListener); + ctor public TextToSpeech(android.content.Context, android.speech.tts.TextToSpeech.OnInitListener, java.lang.String); + method public int addEarcon(java.lang.String, java.lang.String, int); + method public deprecated int addEarcon(java.lang.String, java.lang.String); + method public int addEarcon(java.lang.String, java.io.File); + method public int addSpeech(java.lang.String, java.lang.String, int); + method public int addSpeech(java.lang.CharSequence, java.lang.String, int); + method public int addSpeech(java.lang.String, java.lang.String); + method public int addSpeech(java.lang.CharSequence, java.io.File); + method public deprecated boolean areDefaultsEnforced(); + method public java.util.Set getAvailableLanguages(); + method public java.lang.String getDefaultEngine(); + method public deprecated java.util.Locale getDefaultLanguage(); + method public android.speech.tts.Voice getDefaultVoice(); + method public java.util.List getEngines(); + method public deprecated java.util.Set getFeatures(java.util.Locale); + method public deprecated java.util.Locale getLanguage(); + method public static int getMaxSpeechInputLength(); + method public android.speech.tts.Voice getVoice(); + method public java.util.Set getVoices(); + method public int isLanguageAvailable(java.util.Locale); + method public boolean isSpeaking(); + method public int playEarcon(java.lang.String, int, android.os.Bundle, java.lang.String); + method public deprecated int playEarcon(java.lang.String, int, java.util.HashMap); + method public deprecated int playSilence(long, int, java.util.HashMap); + method public int playSilentUtterance(long, int, java.lang.String); + method public int setAudioAttributes(android.media.AudioAttributes); + method public deprecated int setEngineByPackageName(java.lang.String); + method public int setLanguage(java.util.Locale); + method public deprecated int setOnUtteranceCompletedListener(android.speech.tts.TextToSpeech.OnUtteranceCompletedListener); + method public int setOnUtteranceProgressListener(android.speech.tts.UtteranceProgressListener); + method public int setPitch(float); + method public int setSpeechRate(float); + method public int setVoice(android.speech.tts.Voice); + method public void shutdown(); + method public int speak(java.lang.CharSequence, int, android.os.Bundle, java.lang.String); + method public deprecated int speak(java.lang.String, int, java.util.HashMap); + method public int stop(); + method public int synthesizeToFile(java.lang.CharSequence, android.os.Bundle, java.io.File, java.lang.String); + method public deprecated int synthesizeToFile(java.lang.String, java.util.HashMap, java.lang.String); + field public static final java.lang.String ACTION_TTS_QUEUE_PROCESSING_COMPLETED = "android.speech.tts.TTS_QUEUE_PROCESSING_COMPLETED"; + field public static final int ERROR = -1; // 0xffffffff + field public static final int ERROR_INVALID_REQUEST = -8; // 0xfffffff8 + field public static final int ERROR_NETWORK = -6; // 0xfffffffa + field public static final int ERROR_NETWORK_TIMEOUT = -7; // 0xfffffff9 + field public static final int ERROR_NOT_INSTALLED_YET = -9; // 0xfffffff7 + field public static final int ERROR_OUTPUT = -5; // 0xfffffffb + field public static final int ERROR_SERVICE = -4; // 0xfffffffc + field public static final int ERROR_SYNTHESIS = -3; // 0xfffffffd + field public static final int LANG_AVAILABLE = 0; // 0x0 + field public static final int LANG_COUNTRY_AVAILABLE = 1; // 0x1 + field public static final int LANG_COUNTRY_VAR_AVAILABLE = 2; // 0x2 + field public static final int LANG_MISSING_DATA = -1; // 0xffffffff + field public static final int LANG_NOT_SUPPORTED = -2; // 0xfffffffe + field public static final int QUEUE_ADD = 1; // 0x1 + field public static final int QUEUE_FLUSH = 0; // 0x0 + field public static final int STOPPED = -2; // 0xfffffffe + field public static final int SUCCESS = 0; // 0x0 + } + + public class TextToSpeech.Engine { + ctor public TextToSpeech.Engine(); + field public static final java.lang.String ACTION_CHECK_TTS_DATA = "android.speech.tts.engine.CHECK_TTS_DATA"; + field public static final java.lang.String ACTION_GET_SAMPLE_TEXT = "android.speech.tts.engine.GET_SAMPLE_TEXT"; + field public static final java.lang.String ACTION_INSTALL_TTS_DATA = "android.speech.tts.engine.INSTALL_TTS_DATA"; + field public static final java.lang.String ACTION_TTS_DATA_INSTALLED = "android.speech.tts.engine.TTS_DATA_INSTALLED"; + field public static final deprecated int CHECK_VOICE_DATA_BAD_DATA = -1; // 0xffffffff + field public static final int CHECK_VOICE_DATA_FAIL = 0; // 0x0 + field public static final deprecated int CHECK_VOICE_DATA_MISSING_DATA = -2; // 0xfffffffe + field public static final deprecated int CHECK_VOICE_DATA_MISSING_VOLUME = -3; // 0xfffffffd + field public static final int CHECK_VOICE_DATA_PASS = 1; // 0x1 + field public static final int DEFAULT_STREAM = 3; // 0x3 + field public static final java.lang.String EXTRA_AVAILABLE_VOICES = "availableVoices"; + field public static final deprecated java.lang.String EXTRA_CHECK_VOICE_DATA_FOR = "checkVoiceDataFor"; + field public static final java.lang.String EXTRA_SAMPLE_TEXT = "sampleText"; + field public static final deprecated java.lang.String EXTRA_TTS_DATA_INSTALLED = "dataInstalled"; + field public static final java.lang.String EXTRA_UNAVAILABLE_VOICES = "unavailableVoices"; + field public static final deprecated java.lang.String EXTRA_VOICE_DATA_FILES = "dataFiles"; + field public static final deprecated java.lang.String EXTRA_VOICE_DATA_FILES_INFO = "dataFilesInfo"; + field public static final deprecated java.lang.String EXTRA_VOICE_DATA_ROOT_DIRECTORY = "dataRoot"; + field public static final java.lang.String INTENT_ACTION_TTS_SERVICE = "android.intent.action.TTS_SERVICE"; + field public static final deprecated java.lang.String KEY_FEATURE_EMBEDDED_SYNTHESIS = "embeddedTts"; + field public static final java.lang.String KEY_FEATURE_NETWORK_RETRIES_COUNT = "networkRetriesCount"; + field public static final deprecated java.lang.String KEY_FEATURE_NETWORK_SYNTHESIS = "networkTts"; + field public static final java.lang.String KEY_FEATURE_NETWORK_TIMEOUT_MS = "networkTimeoutMs"; + field public static final java.lang.String KEY_FEATURE_NOT_INSTALLED = "notInstalled"; + field public static final java.lang.String KEY_PARAM_PAN = "pan"; + field public static final java.lang.String KEY_PARAM_SESSION_ID = "sessionId"; + field public static final java.lang.String KEY_PARAM_STREAM = "streamType"; + field public static final java.lang.String KEY_PARAM_UTTERANCE_ID = "utteranceId"; + field public static final java.lang.String KEY_PARAM_VOLUME = "volume"; + field public static final java.lang.String SERVICE_META_DATA = "android.speech.tts"; + } + + public static class TextToSpeech.EngineInfo { + ctor public TextToSpeech.EngineInfo(); + field public int icon; + field public java.lang.String label; + field public java.lang.String name; + } + + public static abstract interface TextToSpeech.OnInitListener { + method public abstract void onInit(int); + } + + public static abstract deprecated interface TextToSpeech.OnUtteranceCompletedListener { + method public abstract void onUtteranceCompleted(java.lang.String); + } + + public abstract class TextToSpeechService extends android.app.Service { + ctor public TextToSpeechService(); + method public android.os.IBinder onBind(android.content.Intent); + method public java.lang.String onGetDefaultVoiceNameFor(java.lang.String, java.lang.String, java.lang.String); + method protected java.util.Set onGetFeaturesForLanguage(java.lang.String, java.lang.String, java.lang.String); + method protected abstract java.lang.String[] onGetLanguage(); + method public java.util.List onGetVoices(); + method protected abstract int onIsLanguageAvailable(java.lang.String, java.lang.String, java.lang.String); + method public int onIsValidVoiceName(java.lang.String); + method protected abstract int onLoadLanguage(java.lang.String, java.lang.String, java.lang.String); + method public int onLoadVoice(java.lang.String); + method protected abstract void onStop(); + method protected abstract void onSynthesizeText(android.speech.tts.SynthesisRequest, android.speech.tts.SynthesisCallback); + } + + public abstract class UtteranceProgressListener { + ctor public UtteranceProgressListener(); + method public abstract void onDone(java.lang.String); + method public abstract deprecated void onError(java.lang.String); + method public void onError(java.lang.String, int); + method public abstract void onStart(java.lang.String); + } + + public class Voice implements android.os.Parcelable { + ctor public Voice(java.lang.String, java.util.Locale, int, int, boolean, java.util.Set); + method public int describeContents(); + method public java.util.Set getFeatures(); + method public int getLatency(); + method public java.util.Locale getLocale(); + method public java.lang.String getName(); + method public int getQuality(); + method public boolean isNetworkConnectionRequired(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int LATENCY_HIGH = 400; // 0x190 + field public static final int LATENCY_LOW = 200; // 0xc8 + field public static final int LATENCY_NORMAL = 300; // 0x12c + field public static final int LATENCY_VERY_HIGH = 500; // 0x1f4 + field public static final int LATENCY_VERY_LOW = 100; // 0x64 + field public static final int QUALITY_HIGH = 400; // 0x190 + field public static final int QUALITY_LOW = 200; // 0xc8 + field public static final int QUALITY_NORMAL = 300; // 0x12c + field public static final int QUALITY_VERY_HIGH = 500; // 0x1f4 + field public static final int QUALITY_VERY_LOW = 100; // 0x64 + } + +} + +package android.system { + + public final class ErrnoException extends java.lang.Exception { + ctor public ErrnoException(java.lang.String, int); + ctor public ErrnoException(java.lang.String, int, java.lang.Throwable); + field public final int errno; + } + + public final class Os { + method public static java.io.FileDescriptor accept(java.io.FileDescriptor, java.net.InetSocketAddress) throws android.system.ErrnoException, java.net.SocketException; + method public static boolean access(java.lang.String, int) throws android.system.ErrnoException; + method public static void bind(java.io.FileDescriptor, java.net.InetAddress, int) throws android.system.ErrnoException, java.net.SocketException; + method public static void chmod(java.lang.String, int) throws android.system.ErrnoException; + method public static void chown(java.lang.String, int, int) throws android.system.ErrnoException; + method public static void close(java.io.FileDescriptor) throws android.system.ErrnoException; + method public static void connect(java.io.FileDescriptor, java.net.InetAddress, int) throws android.system.ErrnoException, java.net.SocketException; + method public static java.io.FileDescriptor dup(java.io.FileDescriptor) throws android.system.ErrnoException; + method public static java.io.FileDescriptor dup2(java.io.FileDescriptor, int) throws android.system.ErrnoException; + method public static java.lang.String[] environ(); + method public static void execv(java.lang.String, java.lang.String[]) throws android.system.ErrnoException; + method public static void execve(java.lang.String, java.lang.String[], java.lang.String[]) throws android.system.ErrnoException; + method public static void fchmod(java.io.FileDescriptor, int) throws android.system.ErrnoException; + method public static void fchown(java.io.FileDescriptor, int, int) throws android.system.ErrnoException; + method public static void fdatasync(java.io.FileDescriptor) throws android.system.ErrnoException; + method public static android.system.StructStat fstat(java.io.FileDescriptor) throws android.system.ErrnoException; + method public static android.system.StructStatVfs fstatvfs(java.io.FileDescriptor) throws android.system.ErrnoException; + method public static void fsync(java.io.FileDescriptor) throws android.system.ErrnoException; + method public static void ftruncate(java.io.FileDescriptor, long) throws android.system.ErrnoException; + method public static java.lang.String gai_strerror(int); + method public static int getegid(); + method public static java.lang.String getenv(java.lang.String); + method public static int geteuid(); + method public static int getgid(); + method public static java.net.SocketAddress getpeername(java.io.FileDescriptor) throws android.system.ErrnoException; + method public static int getpid(); + method public static int getppid(); + method public static java.net.SocketAddress getsockname(java.io.FileDescriptor) throws android.system.ErrnoException; + method public static int gettid(); + method public static int getuid(); + method public static java.lang.String if_indextoname(int); + method public static java.net.InetAddress inet_pton(int, java.lang.String); + method public static boolean isatty(java.io.FileDescriptor); + method public static void kill(int, int) throws android.system.ErrnoException; + method public static void lchown(java.lang.String, int, int) throws android.system.ErrnoException; + method public static void link(java.lang.String, java.lang.String) throws android.system.ErrnoException; + method public static void listen(java.io.FileDescriptor, int) throws android.system.ErrnoException; + method public static long lseek(java.io.FileDescriptor, long, int) throws android.system.ErrnoException; + method public static android.system.StructStat lstat(java.lang.String) throws android.system.ErrnoException; + method public static void mincore(long, long, byte[]) throws android.system.ErrnoException; + method public static void mkdir(java.lang.String, int) throws android.system.ErrnoException; + method public static void mkfifo(java.lang.String, int) throws android.system.ErrnoException; + method public static void mlock(long, long) throws android.system.ErrnoException; + method public static long mmap(long, long, int, int, java.io.FileDescriptor, long) throws android.system.ErrnoException; + method public static void msync(long, long, int) throws android.system.ErrnoException; + method public static void munlock(long, long) throws android.system.ErrnoException; + method public static void munmap(long, long) throws android.system.ErrnoException; + method public static java.io.FileDescriptor open(java.lang.String, int, int) throws android.system.ErrnoException; + method public static java.io.FileDescriptor[] pipe() throws android.system.ErrnoException; + method public static int poll(android.system.StructPollfd[], int) throws android.system.ErrnoException; + method public static void posix_fallocate(java.io.FileDescriptor, long, long) throws android.system.ErrnoException; + method public static int prctl(int, long, long, long, long) throws android.system.ErrnoException; + method public static int pread(java.io.FileDescriptor, java.nio.ByteBuffer, long) throws android.system.ErrnoException, java.io.InterruptedIOException; + method public static int pread(java.io.FileDescriptor, byte[], int, int, long) throws android.system.ErrnoException, java.io.InterruptedIOException; + method public static int pwrite(java.io.FileDescriptor, java.nio.ByteBuffer, long) throws android.system.ErrnoException, java.io.InterruptedIOException; + method public static int pwrite(java.io.FileDescriptor, byte[], int, int, long) throws android.system.ErrnoException, java.io.InterruptedIOException; + method public static int read(java.io.FileDescriptor, java.nio.ByteBuffer) throws android.system.ErrnoException, java.io.InterruptedIOException; + method public static int read(java.io.FileDescriptor, byte[], int, int) throws android.system.ErrnoException, java.io.InterruptedIOException; + method public static java.lang.String readlink(java.lang.String) throws android.system.ErrnoException; + method public static int readv(java.io.FileDescriptor, java.lang.Object[], int[], int[]) throws android.system.ErrnoException, java.io.InterruptedIOException; + method public static int recvfrom(java.io.FileDescriptor, java.nio.ByteBuffer, int, java.net.InetSocketAddress) throws android.system.ErrnoException, java.net.SocketException; + method public static int recvfrom(java.io.FileDescriptor, byte[], int, int, int, java.net.InetSocketAddress) throws android.system.ErrnoException, java.net.SocketException; + method public static void remove(java.lang.String) throws android.system.ErrnoException; + method public static void rename(java.lang.String, java.lang.String) throws android.system.ErrnoException; + method public static long sendfile(java.io.FileDescriptor, java.io.FileDescriptor, android.util.MutableLong, long) throws android.system.ErrnoException; + method public static int sendto(java.io.FileDescriptor, java.nio.ByteBuffer, int, java.net.InetAddress, int) throws android.system.ErrnoException, java.net.SocketException; + method public static int sendto(java.io.FileDescriptor, byte[], int, int, int, java.net.InetAddress, int) throws android.system.ErrnoException, java.net.SocketException; + method public static void setegid(int) throws android.system.ErrnoException; + method public static void setenv(java.lang.String, java.lang.String, boolean) throws android.system.ErrnoException; + method public static void seteuid(int) throws android.system.ErrnoException; + method public static void setgid(int) throws android.system.ErrnoException; + method public static int setsid() throws android.system.ErrnoException; + method public static void setuid(int) throws android.system.ErrnoException; + method public static void shutdown(java.io.FileDescriptor, int) throws android.system.ErrnoException; + method public static java.io.FileDescriptor socket(int, int, int) throws android.system.ErrnoException; + method public static void socketpair(int, int, int, java.io.FileDescriptor, java.io.FileDescriptor) throws android.system.ErrnoException; + method public static android.system.StructStat stat(java.lang.String) throws android.system.ErrnoException; + method public static android.system.StructStatVfs statvfs(java.lang.String) throws android.system.ErrnoException; + method public static java.lang.String strerror(int); + method public static java.lang.String strsignal(int); + method public static void symlink(java.lang.String, java.lang.String) throws android.system.ErrnoException; + method public static long sysconf(int); + method public static void tcdrain(java.io.FileDescriptor) throws android.system.ErrnoException; + method public static void tcsendbreak(java.io.FileDescriptor, int) throws android.system.ErrnoException; + method public static int umask(int); + method public static android.system.StructUtsname uname(); + method public static void unsetenv(java.lang.String) throws android.system.ErrnoException; + method public static int waitpid(int, android.util.MutableInt, int) throws android.system.ErrnoException; + method public static int write(java.io.FileDescriptor, java.nio.ByteBuffer) throws android.system.ErrnoException, java.io.InterruptedIOException; + method public static int write(java.io.FileDescriptor, byte[], int, int) throws android.system.ErrnoException, java.io.InterruptedIOException; + method public static int writev(java.io.FileDescriptor, java.lang.Object[], int[], int[]) throws android.system.ErrnoException, java.io.InterruptedIOException; + } + + public final class OsConstants { + method public static boolean S_ISBLK(int); + method public static boolean S_ISCHR(int); + method public static boolean S_ISDIR(int); + method public static boolean S_ISFIFO(int); + method public static boolean S_ISLNK(int); + method public static boolean S_ISREG(int); + method public static boolean S_ISSOCK(int); + method public static boolean WCOREDUMP(int); + method public static int WEXITSTATUS(int); + method public static boolean WIFEXITED(int); + method public static boolean WIFSIGNALED(int); + method public static boolean WIFSTOPPED(int); + method public static int WSTOPSIG(int); + method public static int WTERMSIG(int); + method public static java.lang.String errnoName(int); + method public static java.lang.String gaiName(int); + field public static final int AF_INET; + field public static final int AF_INET6; + field public static final int AF_UNIX; + field public static final int AF_UNSPEC; + field public static final int AI_ADDRCONFIG; + field public static final int AI_ALL; + field public static final int AI_CANONNAME; + field public static final int AI_NUMERICHOST; + field public static final int AI_NUMERICSERV; + field public static final int AI_PASSIVE; + field public static final int AI_V4MAPPED; + field public static final int CAP_AUDIT_CONTROL; + field public static final int CAP_AUDIT_WRITE; + field public static final int CAP_BLOCK_SUSPEND; + field public static final int CAP_CHOWN; + field public static final int CAP_DAC_OVERRIDE; + field public static final int CAP_DAC_READ_SEARCH; + field public static final int CAP_FOWNER; + field public static final int CAP_FSETID; + field public static final int CAP_IPC_LOCK; + field public static final int CAP_IPC_OWNER; + field public static final int CAP_KILL; + field public static final int CAP_LAST_CAP; + field public static final int CAP_LEASE; + field public static final int CAP_LINUX_IMMUTABLE; + field public static final int CAP_MAC_ADMIN; + field public static final int CAP_MAC_OVERRIDE; + field public static final int CAP_MKNOD; + field public static final int CAP_NET_ADMIN; + field public static final int CAP_NET_BIND_SERVICE; + field public static final int CAP_NET_BROADCAST; + field public static final int CAP_NET_RAW; + field public static final int CAP_SETFCAP; + field public static final int CAP_SETGID; + field public static final int CAP_SETPCAP; + field public static final int CAP_SETUID; + field public static final int CAP_SYSLOG; + field public static final int CAP_SYS_ADMIN; + field public static final int CAP_SYS_BOOT; + field public static final int CAP_SYS_CHROOT; + field public static final int CAP_SYS_MODULE; + field public static final int CAP_SYS_NICE; + field public static final int CAP_SYS_PACCT; + field public static final int CAP_SYS_PTRACE; + field public static final int CAP_SYS_RAWIO; + field public static final int CAP_SYS_RESOURCE; + field public static final int CAP_SYS_TIME; + field public static final int CAP_SYS_TTY_CONFIG; + field public static final int CAP_WAKE_ALARM; + field public static final int E2BIG; + field public static final int EACCES; + field public static final int EADDRINUSE; + field public static final int EADDRNOTAVAIL; + field public static final int EAFNOSUPPORT; + field public static final int EAGAIN; + field public static final int EAI_AGAIN; + field public static final int EAI_BADFLAGS; + field public static final int EAI_FAIL; + field public static final int EAI_FAMILY; + field public static final int EAI_MEMORY; + field public static final int EAI_NODATA; + field public static final int EAI_NONAME; + field public static final int EAI_OVERFLOW; + field public static final int EAI_SERVICE; + field public static final int EAI_SOCKTYPE; + field public static final int EAI_SYSTEM; + field public static final int EALREADY; + field public static final int EBADF; + field public static final int EBADMSG; + field public static final int EBUSY; + field public static final int ECANCELED; + field public static final int ECHILD; + field public static final int ECONNABORTED; + field public static final int ECONNREFUSED; + field public static final int ECONNRESET; + field public static final int EDEADLK; + field public static final int EDESTADDRREQ; + field public static final int EDOM; + field public static final int EDQUOT; + field public static final int EEXIST; + field public static final int EFAULT; + field public static final int EFBIG; + field public static final int EHOSTUNREACH; + field public static final int EIDRM; + field public static final int EILSEQ; + field public static final int EINPROGRESS; + field public static final int EINTR; + field public static final int EINVAL; + field public static final int EIO; + field public static final int EISCONN; + field public static final int EISDIR; + field public static final int ELOOP; + field public static final int EMFILE; + field public static final int EMLINK; + field public static final int EMSGSIZE; + field public static final int EMULTIHOP; + field public static final int ENAMETOOLONG; + field public static final int ENETDOWN; + field public static final int ENETRESET; + field public static final int ENETUNREACH; + field public static final int ENFILE; + field public static final int ENOBUFS; + field public static final int ENODATA; + field public static final int ENODEV; + field public static final int ENOENT; + field public static final int ENOEXEC; + field public static final int ENOLCK; + field public static final int ENOLINK; + field public static final int ENOMEM; + field public static final int ENOMSG; + field public static final int ENOPROTOOPT; + field public static final int ENOSPC; + field public static final int ENOSR; + field public static final int ENOSTR; + field public static final int ENOSYS; + field public static final int ENOTCONN; + field public static final int ENOTDIR; + field public static final int ENOTEMPTY; + field public static final int ENOTSOCK; + field public static final int ENOTSUP; + field public static final int ENOTTY; + field public static final int ENXIO; + field public static final int EOPNOTSUPP; + field public static final int EOVERFLOW; + field public static final int EPERM; + field public static final int EPIPE; + field public static final int EPROTO; + field public static final int EPROTONOSUPPORT; + field public static final int EPROTOTYPE; + field public static final int ERANGE; + field public static final int EROFS; + field public static final int ESPIPE; + field public static final int ESRCH; + field public static final int ESTALE; + field public static final int ETIME; + field public static final int ETIMEDOUT; + field public static final int ETXTBSY; + field public static final int EXDEV; + field public static final int EXIT_FAILURE; + field public static final int EXIT_SUCCESS; + field public static final int FD_CLOEXEC; + field public static final int FIONREAD; + field public static final int F_DUPFD; + field public static final int F_GETFD; + field public static final int F_GETFL; + field public static final int F_GETLK; + field public static final int F_GETLK64; + field public static final int F_GETOWN; + field public static final int F_OK; + field public static final int F_RDLCK; + field public static final int F_SETFD; + field public static final int F_SETFL; + field public static final int F_SETLK; + field public static final int F_SETLK64; + field public static final int F_SETLKW; + field public static final int F_SETLKW64; + field public static final int F_SETOWN; + field public static final int F_UNLCK; + field public static final int F_WRLCK; + field public static final int IFA_F_DADFAILED; + field public static final int IFA_F_DEPRECATED; + field public static final int IFA_F_HOMEADDRESS; + field public static final int IFA_F_NODAD; + field public static final int IFA_F_OPTIMISTIC; + field public static final int IFA_F_PERMANENT; + field public static final int IFA_F_SECONDARY; + field public static final int IFA_F_TEMPORARY; + field public static final int IFA_F_TENTATIVE; + field public static final int IFF_ALLMULTI; + field public static final int IFF_AUTOMEDIA; + field public static final int IFF_BROADCAST; + field public static final int IFF_DEBUG; + field public static final int IFF_DYNAMIC; + field public static final int IFF_LOOPBACK; + field public static final int IFF_MASTER; + field public static final int IFF_MULTICAST; + field public static final int IFF_NOARP; + field public static final int IFF_NOTRAILERS; + field public static final int IFF_POINTOPOINT; + field public static final int IFF_PORTSEL; + field public static final int IFF_PROMISC; + field public static final int IFF_RUNNING; + field public static final int IFF_SLAVE; + field public static final int IFF_UP; + field public static final int IPPROTO_ICMP; + field public static final int IPPROTO_ICMPV6; + field public static final int IPPROTO_IP; + field public static final int IPPROTO_IPV6; + field public static final int IPPROTO_RAW; + field public static final int IPPROTO_TCP; + field public static final int IPPROTO_UDP; + field public static final int IPV6_CHECKSUM; + field public static final int IPV6_MULTICAST_HOPS; + field public static final int IPV6_MULTICAST_IF; + field public static final int IPV6_MULTICAST_LOOP; + field public static final int IPV6_RECVDSTOPTS; + field public static final int IPV6_RECVHOPLIMIT; + field public static final int IPV6_RECVHOPOPTS; + field public static final int IPV6_RECVPKTINFO; + field public static final int IPV6_RECVRTHDR; + field public static final int IPV6_RECVTCLASS; + field public static final int IPV6_TCLASS; + field public static final int IPV6_UNICAST_HOPS; + field public static final int IPV6_V6ONLY; + field public static final int IP_MULTICAST_IF; + field public static final int IP_MULTICAST_LOOP; + field public static final int IP_MULTICAST_TTL; + field public static final int IP_TOS; + field public static final int IP_TTL; + field public static final int MAP_FIXED; + field public static final int MAP_PRIVATE; + field public static final int MAP_SHARED; + field public static final int MCAST_BLOCK_SOURCE; + field public static final int MCAST_JOIN_GROUP; + field public static final int MCAST_JOIN_SOURCE_GROUP; + field public static final int MCAST_LEAVE_GROUP; + field public static final int MCAST_LEAVE_SOURCE_GROUP; + field public static final int MCAST_UNBLOCK_SOURCE; + field public static final int MCL_CURRENT; + field public static final int MCL_FUTURE; + field public static final int MSG_CTRUNC; + field public static final int MSG_DONTROUTE; + field public static final int MSG_EOR; + field public static final int MSG_OOB; + field public static final int MSG_PEEK; + field public static final int MSG_TRUNC; + field public static final int MSG_WAITALL; + field public static final int MS_ASYNC; + field public static final int MS_INVALIDATE; + field public static final int MS_SYNC; + field public static final int NI_DGRAM; + field public static final int NI_NAMEREQD; + field public static final int NI_NOFQDN; + field public static final int NI_NUMERICHOST; + field public static final int NI_NUMERICSERV; + field public static final int O_ACCMODE; + field public static final int O_APPEND; + field public static final int O_CREAT; + field public static final int O_EXCL; + field public static final int O_NOCTTY; + field public static final int O_NOFOLLOW; + field public static final int O_NONBLOCK; + field public static final int O_RDONLY; + field public static final int O_RDWR; + field public static final int O_SYNC; + field public static final int O_TRUNC; + field public static final int O_WRONLY; + field public static final int POLLERR; + field public static final int POLLHUP; + field public static final int POLLIN; + field public static final int POLLNVAL; + field public static final int POLLOUT; + field public static final int POLLPRI; + field public static final int POLLRDBAND; + field public static final int POLLRDNORM; + field public static final int POLLWRBAND; + field public static final int POLLWRNORM; + field public static final int PROT_EXEC; + field public static final int PROT_NONE; + field public static final int PROT_READ; + field public static final int PROT_WRITE; + field public static final int PR_GET_DUMPABLE; + field public static final int PR_SET_DUMPABLE; + field public static final int PR_SET_NO_NEW_PRIVS; + field public static final int RT_SCOPE_HOST; + field public static final int RT_SCOPE_LINK; + field public static final int RT_SCOPE_NOWHERE; + field public static final int RT_SCOPE_SITE; + field public static final int RT_SCOPE_UNIVERSE; + field public static final int R_OK; + field public static final int SEEK_CUR; + field public static final int SEEK_END; + field public static final int SEEK_SET; + field public static final int SHUT_RD; + field public static final int SHUT_RDWR; + field public static final int SHUT_WR; + field public static final int SIGABRT; + field public static final int SIGALRM; + field public static final int SIGBUS; + field public static final int SIGCHLD; + field public static final int SIGCONT; + field public static final int SIGFPE; + field public static final int SIGHUP; + field public static final int SIGILL; + field public static final int SIGINT; + field public static final int SIGIO; + field public static final int SIGKILL; + field public static final int SIGPIPE; + field public static final int SIGPROF; + field public static final int SIGPWR; + field public static final int SIGQUIT; + field public static final int SIGRTMAX; + field public static final int SIGRTMIN; + field public static final int SIGSEGV; + field public static final int SIGSTKFLT; + field public static final int SIGSTOP; + field public static final int SIGSYS; + field public static final int SIGTERM; + field public static final int SIGTRAP; + field public static final int SIGTSTP; + field public static final int SIGTTIN; + field public static final int SIGTTOU; + field public static final int SIGURG; + field public static final int SIGUSR1; + field public static final int SIGUSR2; + field public static final int SIGVTALRM; + field public static final int SIGWINCH; + field public static final int SIGXCPU; + field public static final int SIGXFSZ; + field public static final int SIOCGIFADDR; + field public static final int SIOCGIFBRDADDR; + field public static final int SIOCGIFDSTADDR; + field public static final int SIOCGIFNETMASK; + field public static final int SOCK_DGRAM; + field public static final int SOCK_RAW; + field public static final int SOCK_SEQPACKET; + field public static final int SOCK_STREAM; + field public static final int SOL_SOCKET; + field public static final int SO_BINDTODEVICE; + field public static final int SO_BROADCAST; + field public static final int SO_DEBUG; + field public static final int SO_DONTROUTE; + field public static final int SO_ERROR; + field public static final int SO_KEEPALIVE; + field public static final int SO_LINGER; + field public static final int SO_OOBINLINE; + field public static final int SO_PASSCRED; + field public static final int SO_PEERCRED; + field public static final int SO_RCVBUF; + field public static final int SO_RCVLOWAT; + field public static final int SO_RCVTIMEO; + field public static final int SO_REUSEADDR; + field public static final int SO_SNDBUF; + field public static final int SO_SNDLOWAT; + field public static final int SO_SNDTIMEO; + field public static final int SO_TYPE; + field public static final int STDERR_FILENO; + field public static final int STDIN_FILENO; + field public static final int STDOUT_FILENO; + field public static final int S_IFBLK; + field public static final int S_IFCHR; + field public static final int S_IFDIR; + field public static final int S_IFIFO; + field public static final int S_IFLNK; + field public static final int S_IFMT; + field public static final int S_IFREG; + field public static final int S_IFSOCK; + field public static final int S_IRGRP; + field public static final int S_IROTH; + field public static final int S_IRUSR; + field public static final int S_IRWXG; + field public static final int S_IRWXO; + field public static final int S_IRWXU; + field public static final int S_ISGID; + field public static final int S_ISUID; + field public static final int S_ISVTX; + field public static final int S_IWGRP; + field public static final int S_IWOTH; + field public static final int S_IWUSR; + field public static final int S_IXGRP; + field public static final int S_IXOTH; + field public static final int S_IXUSR; + field public static final int TCP_NODELAY; + field public static final int WCONTINUED; + field public static final int WEXITED; + field public static final int WNOHANG; + field public static final int WNOWAIT; + field public static final int WSTOPPED; + field public static final int WUNTRACED; + field public static final int W_OK; + field public static final int X_OK; + field public static final int _SC_2_CHAR_TERM; + field public static final int _SC_2_C_BIND; + field public static final int _SC_2_C_DEV; + field public static final int _SC_2_C_VERSION; + field public static final int _SC_2_FORT_DEV; + field public static final int _SC_2_FORT_RUN; + field public static final int _SC_2_LOCALEDEF; + field public static final int _SC_2_SW_DEV; + field public static final int _SC_2_UPE; + field public static final int _SC_2_VERSION; + field public static final int _SC_AIO_LISTIO_MAX; + field public static final int _SC_AIO_MAX; + field public static final int _SC_AIO_PRIO_DELTA_MAX; + field public static final int _SC_ARG_MAX; + field public static final int _SC_ASYNCHRONOUS_IO; + field public static final int _SC_ATEXIT_MAX; + field public static final int _SC_AVPHYS_PAGES; + field public static final int _SC_BC_BASE_MAX; + field public static final int _SC_BC_DIM_MAX; + field public static final int _SC_BC_SCALE_MAX; + field public static final int _SC_BC_STRING_MAX; + field public static final int _SC_CHILD_MAX; + field public static final int _SC_CLK_TCK; + field public static final int _SC_COLL_WEIGHTS_MAX; + field public static final int _SC_DELAYTIMER_MAX; + field public static final int _SC_EXPR_NEST_MAX; + field public static final int _SC_FSYNC; + field public static final int _SC_GETGR_R_SIZE_MAX; + field public static final int _SC_GETPW_R_SIZE_MAX; + field public static final int _SC_IOV_MAX; + field public static final int _SC_JOB_CONTROL; + field public static final int _SC_LINE_MAX; + field public static final int _SC_LOGIN_NAME_MAX; + field public static final int _SC_MAPPED_FILES; + field public static final int _SC_MEMLOCK; + field public static final int _SC_MEMLOCK_RANGE; + field public static final int _SC_MEMORY_PROTECTION; + field public static final int _SC_MESSAGE_PASSING; + field public static final int _SC_MQ_OPEN_MAX; + field public static final int _SC_MQ_PRIO_MAX; + field public static final int _SC_NGROUPS_MAX; + field public static final int _SC_NPROCESSORS_CONF; + field public static final int _SC_NPROCESSORS_ONLN; + field public static final int _SC_OPEN_MAX; + field public static final int _SC_PAGESIZE; + field public static final int _SC_PAGE_SIZE; + field public static final int _SC_PASS_MAX; + field public static final int _SC_PHYS_PAGES; + field public static final int _SC_PRIORITIZED_IO; + field public static final int _SC_PRIORITY_SCHEDULING; + field public static final int _SC_REALTIME_SIGNALS; + field public static final int _SC_RE_DUP_MAX; + field public static final int _SC_RTSIG_MAX; + field public static final int _SC_SAVED_IDS; + field public static final int _SC_SEMAPHORES; + field public static final int _SC_SEM_NSEMS_MAX; + field public static final int _SC_SEM_VALUE_MAX; + field public static final int _SC_SHARED_MEMORY_OBJECTS; + field public static final int _SC_SIGQUEUE_MAX; + field public static final int _SC_STREAM_MAX; + field public static final int _SC_SYNCHRONIZED_IO; + field public static final int _SC_THREADS; + field public static final int _SC_THREAD_ATTR_STACKADDR; + field public static final int _SC_THREAD_ATTR_STACKSIZE; + field public static final int _SC_THREAD_DESTRUCTOR_ITERATIONS; + field public static final int _SC_THREAD_KEYS_MAX; + field public static final int _SC_THREAD_PRIORITY_SCHEDULING; + field public static final int _SC_THREAD_PRIO_INHERIT; + field public static final int _SC_THREAD_PRIO_PROTECT; + field public static final int _SC_THREAD_SAFE_FUNCTIONS; + field public static final int _SC_THREAD_STACK_MIN; + field public static final int _SC_THREAD_THREADS_MAX; + field public static final int _SC_TIMERS; + field public static final int _SC_TIMER_MAX; + field public static final int _SC_TTY_NAME_MAX; + field public static final int _SC_TZNAME_MAX; + field public static final int _SC_VERSION; + field public static final int _SC_XBS5_ILP32_OFF32; + field public static final int _SC_XBS5_ILP32_OFFBIG; + field public static final int _SC_XBS5_LP64_OFF64; + field public static final int _SC_XBS5_LPBIG_OFFBIG; + field public static final int _SC_XOPEN_CRYPT; + field public static final int _SC_XOPEN_ENH_I18N; + field public static final int _SC_XOPEN_LEGACY; + field public static final int _SC_XOPEN_REALTIME; + field public static final int _SC_XOPEN_REALTIME_THREADS; + field public static final int _SC_XOPEN_SHM; + field public static final int _SC_XOPEN_UNIX; + field public static final int _SC_XOPEN_VERSION; + field public static final int _SC_XOPEN_XCU_VERSION; + } + + public final class StructPollfd { + ctor public StructPollfd(); + field public short events; + field public java.io.FileDescriptor fd; + field public short revents; + field public java.lang.Object userData; + } + + public final class StructStat { + ctor public StructStat(long, long, int, long, int, int, long, long, long, long, long, long, long); + field public final long st_atime; + field public final long st_blksize; + field public final long st_blocks; + field public final long st_ctime; + field public final long st_dev; + field public final int st_gid; + field public final long st_ino; + field public final int st_mode; + field public final long st_mtime; + field public final long st_nlink; + field public final long st_rdev; + field public final long st_size; + field public final int st_uid; + } + + public final class StructStatVfs { + ctor public StructStatVfs(long, long, long, long, long, long, long, long, long, long, long); + field public final long f_bavail; + field public final long f_bfree; + field public final long f_blocks; + field public final long f_bsize; + field public final long f_favail; + field public final long f_ffree; + field public final long f_files; + field public final long f_flag; + field public final long f_frsize; + field public final long f_fsid; + field public final long f_namemax; + } + + public final class StructUtsname { + ctor public StructUtsname(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String); + field public final java.lang.String machine; + field public final java.lang.String nodename; + field public final java.lang.String release; + field public final java.lang.String sysname; + field public final java.lang.String version; + } + +} + +package android.telecom { + + public final class AudioState implements android.os.Parcelable { + ctor public AudioState(boolean, int, int); + ctor public AudioState(android.telecom.AudioState); + method public int describeContents(); + method public int getRoute(); + method public int getSupportedRouteMask(); + method public boolean isMuted(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int ROUTE_BLUETOOTH = 2; // 0x2 + field public static final int ROUTE_EARPIECE = 1; // 0x1 + field public static final int ROUTE_SPEAKER = 8; // 0x8 + field public static final int ROUTE_WIRED_HEADSET = 4; // 0x4 + field public static final int ROUTE_WIRED_OR_EARPIECE = 5; // 0x5 + field public final boolean isMuted; + field public final int route; + field public final int supportedRouteMask; + } + + public final class Call { + method public void addListener(android.telecom.Call.Listener); + method public void answer(int); + method public void conference(android.telecom.Call); + method public void disconnect(); + method public java.util.List getCannedTextResponses(); + method public java.util.List getChildren(); + method public java.util.List getConferenceableCalls(); + method public android.telecom.Call.Details getDetails(); + method public android.telecom.Call getParent(); + method public java.lang.String getRemainingPostDialSequence(); + method public int getState(); + method public void hold(); + method public void mergeConference(); + method public void phoneAccountSelected(android.telecom.PhoneAccountHandle, boolean); + method public void playDtmfTone(char); + method public void postDialContinue(boolean); + method public void reject(boolean, java.lang.String); + method public void removeListener(android.telecom.Call.Listener); + method public void splitFromConference(); + method public void stopDtmfTone(); + method public void swapConference(); + method public void unhold(); + field public static final int STATE_ACTIVE = 4; // 0x4 + field public static final int STATE_CONNECTING = 9; // 0x9 + field public static final int STATE_DIALING = 1; // 0x1 + field public static final int STATE_DISCONNECTED = 7; // 0x7 + field public static final int STATE_DISCONNECTING = 10; // 0xa + field public static final int STATE_HOLDING = 3; // 0x3 + field public static final int STATE_NEW = 0; // 0x0 + field public static final int STATE_PRE_DIAL_WAIT = 8; // 0x8 + field public static final int STATE_RINGING = 2; // 0x2 + } + + public static class Call.Details { + method public static java.lang.String capabilitiesToString(int); + method public android.telecom.PhoneAccountHandle getAccountHandle(); + method public int getCallCapabilities(); + method public int getCallProperties(); + method public java.lang.String getCallerDisplayName(); + method public int getCallerDisplayNamePresentation(); + method public long getConnectTimeMillis(); + method public android.telecom.DisconnectCause getDisconnectCause(); + method public android.os.Bundle getExtras(); + method public android.telecom.GatewayInfo getGatewayInfo(); + method public android.net.Uri getHandle(); + method public int getHandlePresentation(); + method public android.telecom.StatusHints getStatusHints(); + method public int getVideoState(); + field public static final int CAPABILITY_DISCONNECT_FROM_CONFERENCE = 8192; // 0x2000 + field public static final int CAPABILITY_HOLD = 1; // 0x1 + field public static final int CAPABILITY_MANAGE_CONFERENCE = 128; // 0x80 + field public static final int CAPABILITY_MERGE_CONFERENCE = 4; // 0x4 + field public static final int CAPABILITY_MUTE = 64; // 0x40 + field public static final int CAPABILITY_RESPOND_VIA_TEXT = 32; // 0x20 + field public static final int CAPABILITY_SEPARATE_FROM_CONFERENCE = 4096; // 0x1000 + field public static final int CAPABILITY_SUPPORT_HOLD = 2; // 0x2 + field public static final int CAPABILITY_SWAP_CONFERENCE = 8; // 0x8 + } + + public static abstract class Call.Listener { + ctor public Call.Listener(); + method public void onCallDestroyed(android.telecom.Call); + method public void onCannedTextResponsesLoaded(android.telecom.Call, java.util.List); + method public void onChildrenChanged(android.telecom.Call, java.util.List); + method public void onConferenceableCallsChanged(android.telecom.Call, java.util.List); + method public void onDetailsChanged(android.telecom.Call, android.telecom.Call.Details); + method public void onParentChanged(android.telecom.Call, android.telecom.Call); + method public void onPostDialWait(android.telecom.Call, java.lang.String); + method public void onStateChanged(android.telecom.Call, int); + } + + public final class CallState { + method public static java.lang.String toString(int); + field public static final int ABORTED = 8; // 0x8 + field public static final int ACTIVE = 5; // 0x5 + field public static final int CONNECTING = 1; // 0x1 + field public static final int DIALING = 3; // 0x3 + field public static final int DISCONNECTED = 7; // 0x7 + field public static final int DISCONNECTING = 9; // 0x9 + field public static final int NEW = 0; // 0x0 + field public static final int ON_HOLD = 6; // 0x6 + field public static final int PRE_DIAL_WAIT = 2; // 0x2 + field public static final int RINGING = 4; // 0x4 + } + + public abstract class Conference implements android.telecom.IConferenceable { + ctor public Conference(android.telecom.PhoneAccountHandle); + method public final boolean addConnection(android.telecom.Connection); + method public final void destroy(); + method public final android.telecom.AudioState getAudioState(); + method public final java.util.List getConferenceableConnections(); + method public long getConnectTimeMillis(); + method public final int getConnectionCapabilities(); + method public final java.util.List getConnections(); + method public final android.telecom.DisconnectCause getDisconnectCause(); + method public final android.telecom.PhoneAccountHandle getPhoneAccountHandle(); + method public android.telecom.Connection getPrimaryConnection(); + method public final int getState(); + method public void onAudioStateChanged(android.telecom.AudioState); + method public void onConnectionAdded(android.telecom.Connection); + method public void onDisconnect(); + method public void onHold(); + method public void onMerge(android.telecom.Connection); + method public void onMerge(); + method public void onPlayDtmfTone(char); + method public void onSeparate(android.telecom.Connection); + method public void onStopDtmfTone(); + method public void onSwap(); + method public void onUnhold(); + method public final void removeConnection(android.telecom.Connection); + method public final void setActive(); + method public final void setConferenceableConnections(java.util.List); + method public void setConnectTimeMillis(long); + method public final void setConnectionCapabilities(int); + method public final void setDisconnected(android.telecom.DisconnectCause); + method public final void setOnHold(); + field public static long CONNECT_TIME_NOT_SPECIFIED; + field protected android.telecom.PhoneAccountHandle mPhoneAccount; + } + + public abstract class Connection implements android.telecom.IConferenceable { + ctor public Connection(); + method public static java.lang.String capabilitiesToString(int); + method public static android.telecom.Connection createCanceledConnection(); + method public static android.telecom.Connection createFailedConnection(android.telecom.DisconnectCause); + method public final void destroy(); + method public final android.net.Uri getAddress(); + method public final int getAddressPresentation(); + method public final boolean getAudioModeIsVoip(); + method public final android.telecom.AudioState getAudioState(); + method public final deprecated int getCallCapabilities(); + method public final java.lang.String getCallerDisplayName(); + method public final int getCallerDisplayNamePresentation(); + method public final android.telecom.Conference getConference(); + method public final java.util.List getConferenceables(); + method public final int getConnectionCapabilities(); + method public final android.telecom.DisconnectCause getDisconnectCause(); + method public final int getState(); + method public final android.telecom.StatusHints getStatusHints(); + method public final boolean isRingbackRequested(); + method protected void notifyConferenceStarted(); + method public void onAbort(); + method public void onAnswer(); + method public void onAudioStateChanged(android.telecom.AudioState); + method public void onDisconnect(); + method public void onHold(); + method public void onPlayDtmfTone(char); + method public void onPostDialContinue(boolean); + method public void onReject(); + method public void onSeparate(); + method public void onStateChanged(int); + method public void onStopDtmfTone(); + method public void onUnhold(); + method public final void setActive(); + method public final void setAddress(android.net.Uri, int); + method public final void setAudioModeIsVoip(boolean); + method public final deprecated void setCallCapabilities(int); + method public final void setCallerDisplayName(java.lang.String, int); + method public final void setConferenceableConnections(java.util.List); + method public final void setConferenceables(java.util.List); + method public final void setConnectionCapabilities(int); + method public final void setConnectionService(android.telecom.ConnectionService); + method public final void setDialing(); + method public final void setDisconnected(android.telecom.DisconnectCause); + method public final void setInitialized(); + method public final void setInitializing(); + method public final void setOnHold(); + method public final void setPostDialWait(java.lang.String); + method public final void setRingbackRequested(boolean); + method public final void setRinging(); + method public final void setStatusHints(android.telecom.StatusHints); + method public static java.lang.String stateToString(int); + field public static final int CAPABILITY_DISCONNECT_FROM_CONFERENCE = 8192; // 0x2000 + field public static final int CAPABILITY_HOLD = 1; // 0x1 + field public static final int CAPABILITY_MANAGE_CONFERENCE = 128; // 0x80 + field public static final int CAPABILITY_MERGE_CONFERENCE = 4; // 0x4 + field public static final int CAPABILITY_MUTE = 64; // 0x40 + field public static final int CAPABILITY_RESPOND_VIA_TEXT = 32; // 0x20 + field public static final int CAPABILITY_SEPARATE_FROM_CONFERENCE = 4096; // 0x1000 + field public static final int CAPABILITY_SUPPORT_HOLD = 2; // 0x2 + field public static final int CAPABILITY_SWAP_CONFERENCE = 8; // 0x8 + field public static final int STATE_ACTIVE = 4; // 0x4 + field public static final int STATE_DIALING = 3; // 0x3 + field public static final int STATE_DISCONNECTED = 6; // 0x6 + field public static final int STATE_HOLDING = 5; // 0x5 + field public static final int STATE_INITIALIZING = 0; // 0x0 + field public static final int STATE_NEW = 1; // 0x1 + field public static final int STATE_RINGING = 2; // 0x2 + } + + public final class ConnectionRequest implements android.os.Parcelable { + ctor public ConnectionRequest(android.telecom.PhoneAccountHandle, android.net.Uri, android.os.Bundle); + method public int describeContents(); + method public android.telecom.PhoneAccountHandle getAccountHandle(); + method public android.net.Uri getAddress(); + method public android.os.Bundle getExtras(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public abstract class ConnectionService extends android.app.Service { + ctor public ConnectionService(); + method public final void addConference(android.telecom.Conference); + method public final void addExistingConnection(android.telecom.PhoneAccountHandle, android.telecom.Connection); + method public final void conferenceRemoteConnections(android.telecom.RemoteConnection, android.telecom.RemoteConnection); + method public final android.telecom.RemoteConnection createRemoteIncomingConnection(android.telecom.PhoneAccountHandle, android.telecom.ConnectionRequest); + method public final android.telecom.RemoteConnection createRemoteOutgoingConnection(android.telecom.PhoneAccountHandle, android.telecom.ConnectionRequest); + method public final java.util.Collection getAllConnections(); + method public final android.os.IBinder onBind(android.content.Intent); + method public void onConference(android.telecom.Connection, android.telecom.Connection); + method public android.telecom.Connection onCreateIncomingConnection(android.telecom.PhoneAccountHandle, android.telecom.ConnectionRequest); + method public android.telecom.Connection onCreateOutgoingConnection(android.telecom.PhoneAccountHandle, android.telecom.ConnectionRequest); + method public void onRemoteConferenceAdded(android.telecom.RemoteConference); + method public void onRemoteExistingConnectionAdded(android.telecom.RemoteConnection); + field public static final java.lang.String SERVICE_INTERFACE = "android.telecom.ConnectionService"; + } + + public final class DisconnectCause implements android.os.Parcelable { + ctor public DisconnectCause(int); + ctor public DisconnectCause(int, java.lang.String); + ctor public DisconnectCause(int, java.lang.CharSequence, java.lang.CharSequence, java.lang.String); + ctor public DisconnectCause(int, java.lang.CharSequence, java.lang.CharSequence, java.lang.String, int); + method public int describeContents(); + method public int getCode(); + method public java.lang.CharSequence getDescription(); + method public java.lang.CharSequence getLabel(); + method public java.lang.String getReason(); + method public int getTone(); + method public void writeToParcel(android.os.Parcel, int); + field public static final int BUSY = 7; // 0x7 + field public static final int CANCELED = 4; // 0x4 + field public static final int CONNECTION_MANAGER_NOT_SUPPORTED = 10; // 0xa + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int ERROR = 1; // 0x1 + field public static final int LOCAL = 2; // 0x2 + field public static final int MISSED = 5; // 0x5 + field public static final int OTHER = 9; // 0x9 + field public static final int REJECTED = 6; // 0x6 + field public static final int REMOTE = 3; // 0x3 + field public static final int RESTRICTED = 8; // 0x8 + field public static final int UNKNOWN = 0; // 0x0 + } + + public class GatewayInfo implements android.os.Parcelable { + ctor public GatewayInfo(java.lang.String, android.net.Uri, android.net.Uri); + method public int describeContents(); + method public android.net.Uri getGatewayAddress(); + method public java.lang.String getGatewayProviderPackageName(); + method public android.net.Uri getOriginalAddress(); + method public boolean isEmpty(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public abstract interface IConferenceable { + } + + public abstract class InCallService extends android.app.Service { + ctor public InCallService(); + method public android.telecom.Phone getPhone(); + method public android.os.IBinder onBind(android.content.Intent); + method public void onPhoneCreated(android.telecom.Phone); + method public void onPhoneDestroyed(android.telecom.Phone); + field public static final java.lang.String SERVICE_INTERFACE = "android.telecom.InCallService"; + } + + public final class Phone { + method public final void addListener(android.telecom.Phone.Listener); + method public final boolean canAddCall(); + method public final android.telecom.AudioState getAudioState(); + method public final java.util.List getCalls(); + method public final void removeListener(android.telecom.Phone.Listener); + method public final void setAudioRoute(int); + method public final void setMuted(boolean); + method public final void setProximitySensorOff(boolean); + method public final void setProximitySensorOn(); + } + + public static abstract class Phone.Listener { + ctor public Phone.Listener(); + method public void onAudioStateChanged(android.telecom.Phone, android.telecom.AudioState); + method public void onBringToForeground(android.telecom.Phone, boolean); + method public void onCallAdded(android.telecom.Phone, android.telecom.Call); + method public void onCallRemoved(android.telecom.Phone, android.telecom.Call); + method public void onCanAddCallChanged(android.telecom.Phone, boolean); + } + + public class PhoneAccount implements android.os.Parcelable { + method public static android.telecom.PhoneAccount.Builder builder(android.telecom.PhoneAccountHandle, java.lang.CharSequence); + method public android.graphics.drawable.Drawable createIconDrawable(android.content.Context); + method public int describeContents(); + method public android.telecom.PhoneAccountHandle getAccountHandle(); + method public android.net.Uri getAddress(); + method public int getCapabilities(); + method public int getHighlightColor(); + method public android.graphics.Bitmap getIconBitmap(); + method public java.lang.String getIconPackageName(); + method public int getIconResId(); + method public int getIconTint(); + method public java.lang.CharSequence getLabel(); + method public java.lang.CharSequence getShortDescription(); + method public android.net.Uri getSubscriptionAddress(); + method public java.util.List getSupportedUriSchemes(); + method public boolean hasCapabilities(int); + method public boolean supportsUriScheme(java.lang.String); + method public void writeToParcel(android.os.Parcel, int); + field public static final int CAPABILITY_CONNECTION_MANAGER = 1; // 0x1 + field public static final int CAPABILITY_PLACE_EMERGENCY_CALLS = 16; // 0x10 + field public static final int CAPABILITY_SIM_SUBSCRIPTION = 4; // 0x4 + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int NO_HIGHLIGHT_COLOR = 0; // 0x0 + field public static final int NO_ICON_TINT = 0; // 0x0 + field public static final int NO_RESOURCE_ID = -1; // 0xffffffff + field public static final java.lang.String SCHEME_SIP = "sip"; + field public static final java.lang.String SCHEME_TEL = "tel"; + field public static final java.lang.String SCHEME_VOICEMAIL = "voicemail"; + } + + public static class PhoneAccount.Builder { + ctor public PhoneAccount.Builder(android.telecom.PhoneAccountHandle, java.lang.CharSequence); + ctor public PhoneAccount.Builder(android.telecom.PhoneAccount); + method public android.telecom.PhoneAccount build(); + method public android.telecom.PhoneAccount.Builder setAddress(android.net.Uri); + method public android.telecom.PhoneAccount.Builder setCapabilities(int); + method public android.telecom.PhoneAccount.Builder setHighlightColor(int); + method public android.telecom.PhoneAccount.Builder setIcon(android.content.Context, int); + method public android.telecom.PhoneAccount.Builder setIcon(java.lang.String, int); + method public android.telecom.PhoneAccount.Builder setIcon(android.content.Context, int, int); + method public android.telecom.PhoneAccount.Builder setIcon(java.lang.String, int, int); + method public android.telecom.PhoneAccount.Builder setIcon(android.graphics.Bitmap); + method public android.telecom.PhoneAccount.Builder setShortDescription(java.lang.CharSequence); + method public android.telecom.PhoneAccount.Builder setSubscriptionAddress(android.net.Uri); + method public android.telecom.PhoneAccount.Builder setSupportedUriSchemes(java.util.List); + } + + public class PhoneAccountHandle implements android.os.Parcelable { + ctor public PhoneAccountHandle(android.content.ComponentName, java.lang.String); + method public int describeContents(); + method public android.content.ComponentName getComponentName(); + method public java.lang.String getId(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public final class RemoteConference { + method public void disconnect(); + method public java.util.List getConferenceableConnections(); + method public final int getConnectionCapabilities(); + method public final java.util.List getConnections(); + method public android.telecom.DisconnectCause getDisconnectCause(); + method public final int getState(); + method public void hold(); + method public void merge(); + method public void playDtmfTone(char); + method public final void registerCallback(android.telecom.RemoteConference.Callback); + method public void separate(android.telecom.RemoteConnection); + method public void setAudioState(android.telecom.AudioState); + method public void stopDtmfTone(); + method public void swap(); + method public void unhold(); + method public final void unregisterCallback(android.telecom.RemoteConference.Callback); + } + + public static abstract class RemoteConference.Callback { + ctor public RemoteConference.Callback(); + method public void onConferenceableConnectionsChanged(android.telecom.RemoteConference, java.util.List); + method public void onConnectionAdded(android.telecom.RemoteConference, android.telecom.RemoteConnection); + method public void onConnectionCapabilitiesChanged(android.telecom.RemoteConference, int); + method public void onConnectionRemoved(android.telecom.RemoteConference, android.telecom.RemoteConnection); + method public void onDestroyed(android.telecom.RemoteConference); + method public void onDisconnected(android.telecom.RemoteConference, android.telecom.DisconnectCause); + method public void onStateChanged(android.telecom.RemoteConference, int, int); + } + + public final class RemoteConnection { + method public void abort(); + method public void answer(); + method public void disconnect(); + method public android.net.Uri getAddress(); + method public int getAddressPresentation(); + method public java.lang.CharSequence getCallerDisplayName(); + method public int getCallerDisplayNamePresentation(); + method public android.telecom.RemoteConference getConference(); + method public java.util.List getConferenceableConnections(); + method public int getConnectionCapabilities(); + method public android.telecom.DisconnectCause getDisconnectCause(); + method public int getState(); + method public android.telecom.StatusHints getStatusHints(); + method public void hold(); + method public boolean isRingbackRequested(); + method public boolean isVoipAudioMode(); + method public void playDtmfTone(char); + method public void postDialContinue(boolean); + method public void registerCallback(android.telecom.RemoteConnection.Callback); + method public void reject(); + method public void setAudioState(android.telecom.AudioState); + method public void stopDtmfTone(); + method public void unhold(); + method public void unregisterCallback(android.telecom.RemoteConnection.Callback); + } + + public static abstract class RemoteConnection.Callback { + ctor public RemoteConnection.Callback(); + method public void onAddressChanged(android.telecom.RemoteConnection, android.net.Uri, int); + method public void onCallerDisplayNameChanged(android.telecom.RemoteConnection, java.lang.String, int); + method public void onConferenceChanged(android.telecom.RemoteConnection, android.telecom.RemoteConference); + method public void onConferenceableConnectionsChanged(android.telecom.RemoteConnection, java.util.List); + method public void onConnectionCapabilitiesChanged(android.telecom.RemoteConnection, int); + method public void onDestroyed(android.telecom.RemoteConnection); + method public void onDisconnected(android.telecom.RemoteConnection, android.telecom.DisconnectCause); + method public void onPostDialChar(android.telecom.RemoteConnection, char); + method public void onPostDialWait(android.telecom.RemoteConnection, java.lang.String); + method public void onRingbackRequested(android.telecom.RemoteConnection, boolean); + method public void onStateChanged(android.telecom.RemoteConnection, int); + method public void onStatusHintsChanged(android.telecom.RemoteConnection, android.telecom.StatusHints); + method public void onVoipAudioChanged(android.telecom.RemoteConnection, boolean); + } + + public final class StatusHints implements android.os.Parcelable { + ctor public StatusHints(android.content.ComponentName, java.lang.CharSequence, int, android.os.Bundle); + method public int describeContents(); + method public android.os.Bundle getExtras(); + method public android.graphics.drawable.Drawable getIcon(android.content.Context); + method public int getIconResId(); + method public java.lang.CharSequence getLabel(); + method public android.content.ComponentName getPackageName(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public class TelecomManager { + method public void acceptRingingCall(); + method public void addNewIncomingCall(android.telecom.PhoneAccountHandle, android.os.Bundle); + method public void addNewUnknownCall(android.telecom.PhoneAccountHandle, android.os.Bundle); + method public void cancelMissedCallsNotification(); + method public void clearAccounts(); + method public boolean endCall(); + method public android.net.Uri getAdnUriForPhoneAccount(android.telecom.PhoneAccountHandle); + method public java.util.List getAllPhoneAccountHandles(); + method public java.util.List getAllPhoneAccounts(); + method public int getAllPhoneAccountsCount(); + method public int getCallState(); + method public android.telecom.PhoneAccountHandle getConnectionManager(); + method public android.telecom.PhoneAccountHandle getDefaultOutgoingPhoneAccount(java.lang.String); + method public android.content.ComponentName getDefaultPhoneApp(); + method public java.lang.String getLine1Number(android.telecom.PhoneAccountHandle); + method public android.telecom.PhoneAccount getPhoneAccount(android.telecom.PhoneAccountHandle); + method public java.util.List getPhoneAccountsForPackage(); + method public java.util.List getPhoneAccountsSupportingScheme(java.lang.String); + method public java.util.List getRegisteredConnectionManagers(); + method public boolean handleMmi(java.lang.String); + method public boolean handleMmi(android.telecom.PhoneAccountHandle, java.lang.String); + method public boolean hasMultipleCallCapableAccounts(); + method public boolean hasVoiceMailNumber(android.telecom.PhoneAccountHandle); + method public boolean isInCall(); + method public boolean isRinging(); + method public boolean isTtySupported(); + method public boolean isVoiceMailNumber(android.telecom.PhoneAccountHandle, java.lang.String); + method public void registerPhoneAccount(android.telecom.PhoneAccount); + method public void showInCallScreen(boolean); + method public void silenceRinger(); + method public void unregisterPhoneAccount(android.telecom.PhoneAccountHandle); + field public static final java.lang.String ACTION_CHANGE_PHONE_ACCOUNTS = "android.telecom.action.CHANGE_PHONE_ACCOUNTS"; + field public static final java.lang.String ACTION_CONNECTION_SERVICE_CONFIGURE = "android.telecom.action.CONNECTION_SERVICE_CONFIGURE"; + field public static final java.lang.String ACTION_SHOW_CALL_SETTINGS = "android.telecom.action.SHOW_CALL_SETTINGS"; + field public static final char DTMF_CHARACTER_PAUSE = 44; // 0x002c ',' + field public static final char DTMF_CHARACTER_WAIT = 59; // 0x003b ';' + field public static final java.lang.String EXTRA_CALL_BACK_NUMBER = "android.telecom.extra.CALL_BACK_NUMBER"; + field public static final java.lang.String EXTRA_CALL_DISCONNECT_CAUSE = "android.telecom.extra.CALL_DISCONNECT_CAUSE"; + field public static final java.lang.String EXTRA_CALL_DISCONNECT_MESSAGE = "android.telecom.extra.CALL_DISCONNECT_MESSAGE"; + field public static final java.lang.String EXTRA_CONNECTION_SERVICE = "android.telecom.extra.CONNECTION_SERVICE"; + field public static final java.lang.String EXTRA_INCOMING_CALL_EXTRAS = "android.telecom.extra.INCOMING_CALL_EXTRAS"; + field public static final java.lang.String EXTRA_OUTGOING_CALL_EXTRAS = "android.telecom.extra.OUTGOING_CALL_EXTRAS"; + field public static final java.lang.String EXTRA_PHONE_ACCOUNT_HANDLE = "android.telecom.extra.PHONE_ACCOUNT_HANDLE"; + field public static final java.lang.String EXTRA_START_CALL_WITH_SPEAKERPHONE = "android.telecom.extra.START_CALL_WITH_SPEAKERPHONE"; + field public static final java.lang.String GATEWAY_ORIGINAL_ADDRESS = "android.telecom.extra.GATEWAY_ORIGINAL_ADDRESS"; + field public static final java.lang.String GATEWAY_PROVIDER_PACKAGE = "android.telecom.extra.GATEWAY_PROVIDER_PACKAGE"; + field public static final int PRESENTATION_ALLOWED = 1; // 0x1 + field public static final int PRESENTATION_PAYPHONE = 4; // 0x4 + field public static final int PRESENTATION_RESTRICTED = 2; // 0x2 + field public static final int PRESENTATION_UNKNOWN = 3; // 0x3 + } + +} + +package android.telephony { + + public final class CellIdentityCdma implements android.os.Parcelable { + method public int describeContents(); + method public int getBasestationId(); + method public int getLatitude(); + method public int getLongitude(); + method public int getNetworkId(); + method public int getSystemId(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public final class CellIdentityGsm implements android.os.Parcelable { + method public int describeContents(); + method public int getCid(); + method public int getLac(); + method public int getMcc(); + method public int getMnc(); + method public deprecated int getPsc(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public final class CellIdentityLte implements android.os.Parcelable { + method public int describeContents(); + method public int getCi(); + method public int getMcc(); + method public int getMnc(); + method public int getPci(); + method public int getTac(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public final class CellIdentityWcdma implements android.os.Parcelable { + method public int describeContents(); + method public int getCid(); + method public int getLac(); + method public int getMcc(); + method public int getMnc(); + method public int getPsc(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public abstract class CellInfo implements android.os.Parcelable { + method public int describeContents(); + method public long getTimeStamp(); + method public boolean isRegistered(); + method public abstract void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public final class CellInfoCdma extends android.telephony.CellInfo implements android.os.Parcelable { + method public android.telephony.CellIdentityCdma getCellIdentity(); + method public android.telephony.CellSignalStrengthCdma getCellSignalStrength(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public final class CellInfoGsm extends android.telephony.CellInfo implements android.os.Parcelable { + method public android.telephony.CellIdentityGsm getCellIdentity(); + method public android.telephony.CellSignalStrengthGsm getCellSignalStrength(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public final class CellInfoLte extends android.telephony.CellInfo implements android.os.Parcelable { + method public android.telephony.CellIdentityLte getCellIdentity(); + method public android.telephony.CellSignalStrengthLte getCellSignalStrength(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public final class CellInfoWcdma extends android.telephony.CellInfo implements android.os.Parcelable { + method public android.telephony.CellIdentityWcdma getCellIdentity(); + method public android.telephony.CellSignalStrengthWcdma getCellSignalStrength(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public abstract class CellLocation { + ctor public CellLocation(); + method public static android.telephony.CellLocation getEmpty(); + method public static void requestLocationUpdate(); + } + + public abstract class CellSignalStrength { + method public abstract boolean equals(java.lang.Object); + method public abstract int getAsuLevel(); + method public abstract int getDbm(); + method public abstract int getLevel(); + method public abstract int hashCode(); + } + + public final class CellSignalStrengthCdma extends android.telephony.CellSignalStrength implements android.os.Parcelable { + method public int describeContents(); + method public boolean equals(java.lang.Object); + method public int getAsuLevel(); + method public int getCdmaDbm(); + method public int getCdmaEcio(); + method public int getCdmaLevel(); + method public int getDbm(); + method public int getEvdoDbm(); + method public int getEvdoEcio(); + method public int getEvdoLevel(); + method public int getEvdoSnr(); + method public int getLevel(); + method public int hashCode(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public final class CellSignalStrengthGsm extends android.telephony.CellSignalStrength implements android.os.Parcelable { + method public int describeContents(); + method public boolean equals(java.lang.Object); + method public int getAsuLevel(); + method public int getDbm(); + method public int getLevel(); + method public int hashCode(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public final class CellSignalStrengthLte extends android.telephony.CellSignalStrength implements android.os.Parcelable { + method public int describeContents(); + method public boolean equals(java.lang.Object); + method public int getAsuLevel(); + method public int getDbm(); + method public int getLevel(); + method public int getTimingAdvance(); + method public int hashCode(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public final class CellSignalStrengthWcdma extends android.telephony.CellSignalStrength implements android.os.Parcelable { + method public int describeContents(); + method public boolean equals(java.lang.Object); + method public int getAsuLevel(); + method public int getDbm(); + method public int getLevel(); + method public int hashCode(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public class IccOpenLogicalChannelResponse implements android.os.Parcelable { + method public int describeContents(); + method public int getChannel(); + method public byte[] getSelectResponse(); + method public int getStatus(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int INVALID_CHANNEL = -1; // 0xffffffff + field public static final int STATUS_MISSING_RESOURCE = 2; // 0x2 + field public static final int STATUS_NO_ERROR = 1; // 0x1 + field public static final int STATUS_NO_SUCH_ELEMENT = 3; // 0x3 + field public static final int STATUS_UNKNOWN_ERROR = 4; // 0x4 + } + + public class NeighboringCellInfo implements android.os.Parcelable { + ctor public deprecated NeighboringCellInfo(); + ctor public deprecated NeighboringCellInfo(int, int); + ctor public NeighboringCellInfo(int, java.lang.String, int); + ctor public NeighboringCellInfo(android.os.Parcel); + method public int describeContents(); + method public int getCid(); + method public int getLac(); + method public int getNetworkType(); + method public int getPsc(); + method public int getRssi(); + method public deprecated void setCid(int); + method public deprecated void setRssi(int); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int UNKNOWN_CID = -1; // 0xffffffff + field public static final int UNKNOWN_RSSI = 99; // 0x63 + } + + public class PhoneNumberFormattingTextWatcher implements android.text.TextWatcher { + ctor public PhoneNumberFormattingTextWatcher(); + ctor public PhoneNumberFormattingTextWatcher(java.lang.String); + method public synchronized void afterTextChanged(android.text.Editable); + method public void beforeTextChanged(java.lang.CharSequence, int, int, int); + method public void onTextChanged(java.lang.CharSequence, int, int, int); + } + + public class PhoneNumberUtils { + ctor public PhoneNumberUtils(); + method public static java.lang.String calledPartyBCDFragmentToString(byte[], int, int); + method public static java.lang.String calledPartyBCDToString(byte[], int, int); + method public static boolean compare(java.lang.String, java.lang.String); + method public static boolean compare(android.content.Context, java.lang.String, java.lang.String); + method public static java.lang.String convertKeypadLettersToDigits(java.lang.String); + method public static java.lang.String extractNetworkPortion(java.lang.String); + method public static java.lang.String extractPostDialPortion(java.lang.String); + method public static deprecated void formatJapaneseNumber(android.text.Editable); + method public static deprecated void formatNanpNumber(android.text.Editable); + method public static deprecated java.lang.String formatNumber(java.lang.String); + method public static deprecated void formatNumber(android.text.Editable, int); + method public static java.lang.String formatNumber(java.lang.String, java.lang.String); + method public static java.lang.String formatNumber(java.lang.String, java.lang.String, java.lang.String); + method public static java.lang.String formatNumberToE164(java.lang.String, java.lang.String); + method public static deprecated int getFormatTypeForLocale(java.util.Locale); + method public static java.lang.String getNumberFromIntent(android.content.Intent, android.content.Context); + method public static java.lang.String getStrippedReversed(java.lang.String); + method public static final boolean is12Key(char); + method public static final boolean isDialable(char); + method public static boolean isEmergencyNumber(java.lang.String); + method public static boolean isGlobalPhoneNumber(java.lang.String); + method public static boolean isISODigit(char); + method public static boolean isLocalEmergencyNumber(android.content.Context, java.lang.String); + method public static final boolean isNonSeparator(char); + method public static final boolean isReallyDialable(char); + method public static final boolean isStartsPostDial(char); + method public static boolean isVoiceMailNumber(java.lang.String); + method public static boolean isWellFormedSmsAddress(java.lang.String); + method public static byte[] networkPortionToCalledPartyBCD(java.lang.String); + method public static byte[] networkPortionToCalledPartyBCDWithLength(java.lang.String); + method public static java.lang.String normalizeNumber(java.lang.String); + method public static byte[] numberToCalledPartyBCD(java.lang.String); + method public static java.lang.String replaceUnicodeDigits(java.lang.String); + method public static java.lang.String stringFromStringAndTOA(java.lang.String, int); + method public static java.lang.String stripSeparators(java.lang.String); + method public static java.lang.String toCallerIDMinMatch(java.lang.String); + method public static int toaFromString(java.lang.String); + field public static final int FORMAT_JAPAN = 2; // 0x2 + field public static final int FORMAT_NANP = 1; // 0x1 + field public static final int FORMAT_UNKNOWN = 0; // 0x0 + field public static final char PAUSE = 44; // 0x002c ',' + field public static final int TOA_International = 145; // 0x91 + field public static final int TOA_Unknown = 129; // 0x81 + field public static final char WAIT = 59; // 0x003b ';' + field public static final char WILD = 78; // 0x004e 'N' + } + + public class PhoneStateListener { + ctor public PhoneStateListener(); + method public void onCallForwardingIndicatorChanged(boolean); + method public void onCallStateChanged(int, java.lang.String); + method public void onCellInfoChanged(java.util.List); + method public void onCellLocationChanged(android.telephony.CellLocation); + method public void onDataActivity(int); + method public void onDataConnectionStateChanged(int); + method public void onDataConnectionStateChanged(int, int); + method public void onMessageWaitingIndicatorChanged(boolean); + method public void onServiceStateChanged(android.telephony.ServiceState); + method public deprecated void onSignalStrengthChanged(int); + method public void onSignalStrengthsChanged(android.telephony.SignalStrength); + field public static final int LISTEN_CALL_FORWARDING_INDICATOR = 8; // 0x8 + field public static final int LISTEN_CALL_STATE = 32; // 0x20 + field public static final int LISTEN_CELL_INFO = 1024; // 0x400 + field public static final int LISTEN_CELL_LOCATION = 16; // 0x10 + field public static final int LISTEN_DATA_ACTIVITY = 128; // 0x80 + field public static final int LISTEN_DATA_CONNECTION_STATE = 64; // 0x40 + field public static final int LISTEN_MESSAGE_WAITING_INDICATOR = 4; // 0x4 + field public static final int LISTEN_NONE = 0; // 0x0 + field public static final int LISTEN_SERVICE_STATE = 1; // 0x1 + field public static final deprecated int LISTEN_SIGNAL_STRENGTH = 2; // 0x2 + field public static final int LISTEN_SIGNAL_STRENGTHS = 256; // 0x100 + } + + public class ServiceState implements android.os.Parcelable { + ctor public ServiceState(); + ctor public ServiceState(android.telephony.ServiceState); + ctor public ServiceState(android.os.Parcel); + method protected void copyFrom(android.telephony.ServiceState); + method public int describeContents(); + method public boolean getIsManualSelection(); + method public java.lang.String getOperatorAlphaLong(); + method public java.lang.String getOperatorAlphaShort(); + method public java.lang.String getOperatorNumeric(); + method public boolean getRoaming(); + method public int getState(); + method public void setIsManualSelection(boolean); + method public void setOperatorName(java.lang.String, java.lang.String, java.lang.String); + method public void setRoaming(boolean); + method public void setState(int); + method public void setStateOff(); + method public void setStateOutOfService(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int STATE_EMERGENCY_ONLY = 2; // 0x2 + field public static final int STATE_IN_SERVICE = 0; // 0x0 + field public static final int STATE_OUT_OF_SERVICE = 1; // 0x1 + field public static final int STATE_POWER_OFF = 3; // 0x3 + } + + public class SignalStrength implements android.os.Parcelable { + method public int describeContents(); + method public int getCdmaDbm(); + method public int getCdmaEcio(); + method public int getEvdoDbm(); + method public int getEvdoEcio(); + method public int getEvdoSnr(); + method public int getGsmBitErrorRate(); + method public int getGsmSignalStrength(); + method public boolean isGsm(); + method public void writeToParcel(android.os.Parcel, int); + } + + public final class SmsManager { + method public java.util.ArrayList divideMessage(java.lang.String); + method public void downloadMultimediaMessage(android.content.Context, java.lang.String, android.net.Uri, android.os.Bundle, android.app.PendingIntent); + method public android.os.Bundle getCarrierConfigValues(); + method public static android.telephony.SmsManager getDefault(); + method public static int getDefaultSmsSubscriptionId(); + method public static android.telephony.SmsManager getSmsManagerForSubscriptionId(int); + method public int getSubscriptionId(); + method public void injectSmsPdu(byte[], java.lang.String, android.app.PendingIntent); + method public void sendDataMessage(java.lang.String, java.lang.String, short, byte[], android.app.PendingIntent, android.app.PendingIntent); + method public void sendMultimediaMessage(android.content.Context, android.net.Uri, java.lang.String, android.os.Bundle, android.app.PendingIntent); + method public void sendMultipartTextMessage(java.lang.String, java.lang.String, java.util.ArrayList, java.util.ArrayList, java.util.ArrayList); + method public void sendTextMessage(java.lang.String, java.lang.String, java.lang.String, android.app.PendingIntent, android.app.PendingIntent); + field public static final java.lang.String EXTRA_MMS_DATA = "android.telephony.extra.MMS_DATA"; + field public static final java.lang.String EXTRA_MMS_HTTP_STATUS = "android.telephony.extra.MMS_HTTP_STATUS"; + field public static final java.lang.String MMS_CONFIG_ALIAS_ENABLED = "aliasEnabled"; + field public static final java.lang.String MMS_CONFIG_ALIAS_MAX_CHARS = "aliasMaxChars"; + field public static final java.lang.String MMS_CONFIG_ALIAS_MIN_CHARS = "aliasMinChars"; + field public static final java.lang.String MMS_CONFIG_ALLOW_ATTACH_AUDIO = "allowAttachAudio"; + field public static final java.lang.String MMS_CONFIG_APPEND_TRANSACTION_ID = "enabledTransID"; + field public static final java.lang.String MMS_CONFIG_EMAIL_GATEWAY_NUMBER = "emailGatewayNumber"; + field public static final java.lang.String MMS_CONFIG_GROUP_MMS_ENABLED = "enableGroupMms"; + field public static final java.lang.String MMS_CONFIG_HTTP_PARAMS = "httpParams"; + field public static final java.lang.String MMS_CONFIG_HTTP_SOCKET_TIMEOUT = "httpSocketTimeout"; + field public static final java.lang.String MMS_CONFIG_MAX_IMAGE_HEIGHT = "maxImageHeight"; + field public static final java.lang.String MMS_CONFIG_MAX_IMAGE_WIDTH = "maxImageWidth"; + field public static final java.lang.String MMS_CONFIG_MAX_MESSAGE_SIZE = "maxMessageSize"; + field public static final java.lang.String MMS_CONFIG_MESSAGE_TEXT_MAX_SIZE = "maxMessageTextSize"; + field public static final java.lang.String MMS_CONFIG_MMS_DELIVERY_REPORT_ENABLED = "enableMMSDeliveryReports"; + field public static final java.lang.String MMS_CONFIG_MMS_ENABLED = "enabledMMS"; + field public static final java.lang.String MMS_CONFIG_MMS_READ_REPORT_ENABLED = "enableMMSReadReports"; + field public static final java.lang.String MMS_CONFIG_MULTIPART_SMS_ENABLED = "enableMultipartSMS"; + field public static final java.lang.String MMS_CONFIG_NAI_SUFFIX = "naiSuffix"; + field public static final java.lang.String MMS_CONFIG_NOTIFY_WAP_MMSC_ENABLED = "enabledNotifyWapMMSC"; + field public static final java.lang.String MMS_CONFIG_RECIPIENT_LIMIT = "recipientLimit"; + field public static final java.lang.String MMS_CONFIG_SEND_MULTIPART_SMS_AS_SEPARATE_MESSAGES = "sendMultipartSmsAsSeparateMessages"; + field public static final java.lang.String MMS_CONFIG_SHOW_CELL_BROADCAST_APP_LINKS = "config_cellBroadcastAppLinks"; + field public static final java.lang.String MMS_CONFIG_SMS_DELIVERY_REPORT_ENABLED = "enableSMSDeliveryReports"; + field public static final java.lang.String MMS_CONFIG_SMS_TO_MMS_TEXT_LENGTH_THRESHOLD = "smsToMmsTextLengthThreshold"; + field public static final java.lang.String MMS_CONFIG_SMS_TO_MMS_TEXT_THRESHOLD = "smsToMmsTextThreshold"; + field public static final java.lang.String MMS_CONFIG_SUBJECT_MAX_LENGTH = "maxSubjectLength"; + field public static final java.lang.String MMS_CONFIG_SUPPORT_MMS_CONTENT_DISPOSITION = "supportMmsContentDisposition"; + field public static final java.lang.String MMS_CONFIG_UA_PROF_TAG_NAME = "uaProfTagName"; + field public static final java.lang.String MMS_CONFIG_UA_PROF_URL = "uaProfUrl"; + field public static final java.lang.String MMS_CONFIG_USER_AGENT = "userAgent"; + field public static final int MMS_ERROR_CONFIGURATION_ERROR = 7; // 0x7 + field public static final int MMS_ERROR_HTTP_FAILURE = 4; // 0x4 + field public static final int MMS_ERROR_INVALID_APN = 2; // 0x2 + field public static final int MMS_ERROR_IO_ERROR = 5; // 0x5 + field public static final int MMS_ERROR_NO_DATA_NETWORK = 8; // 0x8 + field public static final int MMS_ERROR_RETRY = 6; // 0x6 + field public static final int MMS_ERROR_UNABLE_CONNECT_MMS = 3; // 0x3 + field public static final int MMS_ERROR_UNSPECIFIED = 1; // 0x1 + field public static final int RESULT_ERROR_GENERIC_FAILURE = 1; // 0x1 + field public static final int RESULT_ERROR_NO_SERVICE = 4; // 0x4 + field public static final int RESULT_ERROR_NULL_PDU = 3; // 0x3 + field public static final int RESULT_ERROR_RADIO_OFF = 2; // 0x2 + field public static final int STATUS_ON_ICC_FREE = 0; // 0x0 + field public static final int STATUS_ON_ICC_READ = 1; // 0x1 + field public static final int STATUS_ON_ICC_SENT = 5; // 0x5 + field public static final int STATUS_ON_ICC_UNREAD = 3; // 0x3 + field public static final int STATUS_ON_ICC_UNSENT = 7; // 0x7 + } + + public class SmsMessage { + method public static int[] calculateLength(java.lang.CharSequence, boolean); + method public static int[] calculateLength(java.lang.String, boolean); + method public static android.telephony.SmsMessage createFromPdu(byte[]); + method public java.lang.String getDisplayMessageBody(); + method public java.lang.String getDisplayOriginatingAddress(); + method public java.lang.String getEmailBody(); + method public java.lang.String getEmailFrom(); + method public int getIndexOnIcc(); + method public deprecated int getIndexOnSim(); + method public java.lang.String getMessageBody(); + method public android.telephony.SmsMessage.MessageClass getMessageClass(); + method public java.lang.String getOriginatingAddress(); + method public byte[] getPdu(); + method public int getProtocolIdentifier(); + method public java.lang.String getPseudoSubject(); + method public java.lang.String getServiceCenterAddress(); + method public int getStatus(); + method public int getStatusOnIcc(); + method public deprecated int getStatusOnSim(); + method public static android.telephony.SmsMessage.SubmitPdu getSubmitPdu(java.lang.String, java.lang.String, java.lang.String, boolean); + method public static android.telephony.SmsMessage.SubmitPdu getSubmitPdu(java.lang.String, java.lang.String, short, byte[], boolean); + method public static int getTPLayerLengthForPDU(java.lang.String); + method public long getTimestampMillis(); + method public byte[] getUserData(); + method public boolean isCphsMwiMessage(); + method public boolean isEmail(); + method public boolean isMWIClearMessage(); + method public boolean isMWISetMessage(); + method public boolean isMwiDontStore(); + method public boolean isReplace(); + method public boolean isReplyPathPresent(); + method public boolean isStatusReportMessage(); + field public static final int ENCODING_16BIT = 3; // 0x3 + field public static final int ENCODING_7BIT = 1; // 0x1 + field public static final int ENCODING_8BIT = 2; // 0x2 + field public static final int ENCODING_UNKNOWN = 0; // 0x0 + field public static final int MAX_USER_DATA_BYTES = 140; // 0x8c + field public static final int MAX_USER_DATA_BYTES_WITH_HEADER = 134; // 0x86 + field public static final int MAX_USER_DATA_SEPTETS = 160; // 0xa0 + field public static final int MAX_USER_DATA_SEPTETS_WITH_HEADER = 153; // 0x99 + } + + public static final class SmsMessage.MessageClass extends java.lang.Enum { + method public static android.telephony.SmsMessage.MessageClass valueOf(java.lang.String); + method public static final android.telephony.SmsMessage.MessageClass[] values(); + enum_constant public static final android.telephony.SmsMessage.MessageClass CLASS_0; + enum_constant public static final android.telephony.SmsMessage.MessageClass CLASS_1; + enum_constant public static final android.telephony.SmsMessage.MessageClass CLASS_2; + enum_constant public static final android.telephony.SmsMessage.MessageClass CLASS_3; + enum_constant public static final android.telephony.SmsMessage.MessageClass UNKNOWN; + } + + public static class SmsMessage.SubmitPdu { + field public byte[] encodedMessage; + field public byte[] encodedScAddress; + } + + public class SubscriptionInfo implements android.os.Parcelable { + method public android.graphics.Bitmap createIconBitmap(android.content.Context); + method public int describeContents(); + method public java.lang.CharSequence getCarrierName(); + method public java.lang.String getCountryIso(); + method public int getDataRoaming(); + method public java.lang.CharSequence getDisplayName(); + method public java.lang.String getIccId(); + method public int getIconTint(); + method public int getMcc(); + method public int getMnc(); + method public java.lang.String getNumber(); + method public int getSimSlotIndex(); + method public int getSubscriptionId(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public class SubscriptionManager { + method public void addOnSubscriptionsChangedListener(android.telephony.SubscriptionManager.OnSubscriptionsChangedListener); + method public static android.telephony.SubscriptionManager from(android.content.Context); + method public android.telephony.SubscriptionInfo getActiveSubscriptionInfo(int); + method public int getActiveSubscriptionInfoCount(); + method public int getActiveSubscriptionInfoCountMax(); + method public android.telephony.SubscriptionInfo getActiveSubscriptionInfoForSimSlotIndex(int); + method public java.util.List getActiveSubscriptionInfoList(); + method public boolean isNetworkRoaming(int); + method public void removeOnSubscriptionsChangedListener(android.telephony.SubscriptionManager.OnSubscriptionsChangedListener); + field public static final int DATA_ROAMING_DISABLE = 0; // 0x0 + field public static final int DATA_ROAMING_ENABLE = 1; // 0x1 + } + + public static class SubscriptionManager.OnSubscriptionsChangedListener { + ctor public SubscriptionManager.OnSubscriptionsChangedListener(); + method public void onSubscriptionsChanged(); + } + + public class TelephonyManager { + method public void answerRingingCall(); + method public void call(java.lang.String, java.lang.String); + method public int checkCarrierPrivilegesForPackage(java.lang.String); + method public void dial(java.lang.String); + method public boolean disableDataConnectivity(); + method public boolean enableDataConnectivity(); + method public void enableVideoCalling(boolean); + method public boolean endCall(); + method public java.util.List getAllCellInfo(); + method public int getCallState(); + method public java.util.List getCarrierPackageNamesForIntent(android.content.Intent); + method public java.lang.String getCdmaMdn(); + method public java.lang.String getCdmaMdn(int); + method public java.lang.String getCdmaMin(); + method public java.lang.String getCdmaMin(int); + method public android.telephony.CellLocation getCellLocation(); + method public int getCurrentPhoneType(); + method public int getCurrentPhoneType(int); + method public int getDataActivity(); + method public boolean getDataEnabled(); + method public boolean getDataEnabled(int); + method public int getDataState(); + method public java.lang.String getDeviceId(); + method public java.lang.String getDeviceSoftwareVersion(); + method public java.lang.String getGroupIdLevel1(); + method public java.lang.String getLine1Number(); + method public java.lang.String getMmsUAProfUrl(); + method public java.lang.String getMmsUserAgent(); + method public java.util.List getNeighboringCellInfo(); + method public java.lang.String getNetworkCountryIso(); + method public java.lang.String getNetworkOperator(); + method public java.lang.String getNetworkOperatorName(); + method public int getNetworkType(); + method public int getPhoneType(); + method public java.lang.String getSimCountryIso(); + method public java.lang.String getSimOperator(); + method public java.lang.String getSimOperatorName(); + method public java.lang.String getSimSerialNumber(); + method public int getSimState(); + method public java.lang.String getSubscriberId(); + method public java.lang.String getVoiceMailAlphaTag(); + method public java.lang.String getVoiceMailNumber(); + method public boolean handlePinMmi(java.lang.String); + method public boolean handlePinMmiForSubscriber(int, java.lang.String); + method public boolean hasCarrierPrivileges(); + method public boolean hasIccCard(); + method public boolean iccCloseLogicalChannel(int); + method public byte[] iccExchangeSimIO(int, int, int, int, int, java.lang.String); + method public android.telephony.IccOpenLogicalChannelResponse iccOpenLogicalChannel(java.lang.String); + method public java.lang.String iccTransmitApduBasicChannel(int, int, int, int, int, java.lang.String); + method public java.lang.String iccTransmitApduLogicalChannel(int, int, int, int, int, int, java.lang.String); + method public boolean isDataConnectivityPossible(); + method public boolean isIdle(); + method public boolean isNetworkRoaming(); + method public boolean isOffhook(); + method public boolean isRadioOn(); + method public boolean isRinging(); + method public boolean isSimPinEnabled(); + method public boolean isSmsCapable(); + method public boolean isVideoCallingEnabled(); + method public boolean isVoiceCapable(); + method public void listen(android.telephony.PhoneStateListener, int); + method public boolean needsOtaServiceProvisioning(); + method public java.lang.String sendEnvelopeWithStatus(java.lang.String); + method public void setDataEnabled(boolean); + method public void setDataEnabled(int, boolean); + method public boolean setLine1NumberForDisplay(java.lang.String, java.lang.String); + method public boolean setOperatorBrandOverride(java.lang.String); + method public boolean setPreferredNetworkTypeToGlobal(); + method public boolean setRadio(boolean); + method public boolean setRadioPower(boolean); + method public boolean setVoiceMailNumber(java.lang.String, java.lang.String); + method public void silenceRinger(); + method public boolean supplyPin(java.lang.String); + method public int[] supplyPinReportResult(java.lang.String); + method public boolean supplyPuk(java.lang.String, java.lang.String); + method public int[] supplyPukReportResult(java.lang.String, java.lang.String); + method public void toggleRadioOnOff(); + method public void updateServiceLocation(); + field public static final java.lang.String ACTION_PHONE_STATE_CHANGED = "android.intent.action.PHONE_STATE"; + field public static final java.lang.String ACTION_RESPOND_VIA_MESSAGE = "android.intent.action.RESPOND_VIA_MESSAGE"; + field public static final int CALL_STATE_IDLE = 0; // 0x0 + field public static final int CALL_STATE_OFFHOOK = 2; // 0x2 + field public static final int CALL_STATE_RINGING = 1; // 0x1 + field public static final int DATA_ACTIVITY_DORMANT = 4; // 0x4 + field public static final int DATA_ACTIVITY_IN = 1; // 0x1 + field public static final int DATA_ACTIVITY_INOUT = 3; // 0x3 + field public static final int DATA_ACTIVITY_NONE = 0; // 0x0 + field public static final int DATA_ACTIVITY_OUT = 2; // 0x2 + field public static final int DATA_CONNECTED = 2; // 0x2 + field public static final int DATA_CONNECTING = 1; // 0x1 + field public static final int DATA_DISCONNECTED = 0; // 0x0 + field public static final int DATA_SUSPENDED = 3; // 0x3 + field public static final java.lang.String EXTRA_INCOMING_NUMBER = "incoming_number"; + field public static final java.lang.String EXTRA_STATE = "state"; + field public static final java.lang.String EXTRA_STATE_IDLE; + field public static final java.lang.String EXTRA_STATE_OFFHOOK; + field public static final java.lang.String EXTRA_STATE_RINGING; + field public static final int NETWORK_TYPE_1xRTT = 7; // 0x7 + field public static final int NETWORK_TYPE_CDMA = 4; // 0x4 + field public static final int NETWORK_TYPE_EDGE = 2; // 0x2 + field public static final int NETWORK_TYPE_EHRPD = 14; // 0xe + field public static final int NETWORK_TYPE_EVDO_0 = 5; // 0x5 + field public static final int NETWORK_TYPE_EVDO_A = 6; // 0x6 + field public static final int NETWORK_TYPE_EVDO_B = 12; // 0xc + field public static final int NETWORK_TYPE_GPRS = 1; // 0x1 + field public static final int NETWORK_TYPE_HSDPA = 8; // 0x8 + field public static final int NETWORK_TYPE_HSPA = 10; // 0xa + field public static final int NETWORK_TYPE_HSPAP = 15; // 0xf + field public static final int NETWORK_TYPE_HSUPA = 9; // 0x9 + field public static final int NETWORK_TYPE_IDEN = 11; // 0xb + field public static final int NETWORK_TYPE_LTE = 13; // 0xd + field public static final int NETWORK_TYPE_UMTS = 3; // 0x3 + field public static final int NETWORK_TYPE_UNKNOWN = 0; // 0x0 + field public static final int PHONE_TYPE_CDMA = 2; // 0x2 + field public static final int PHONE_TYPE_GSM = 1; // 0x1 + field public static final int PHONE_TYPE_NONE = 0; // 0x0 + field public static final int PHONE_TYPE_SIP = 3; // 0x3 + field public static final int SIM_STATE_ABSENT = 1; // 0x1 + field public static final int SIM_STATE_NETWORK_LOCKED = 4; // 0x4 + field public static final int SIM_STATE_PIN_REQUIRED = 2; // 0x2 + field public static final int SIM_STATE_PUK_REQUIRED = 3; // 0x3 + field public static final int SIM_STATE_READY = 5; // 0x5 + field public static final int SIM_STATE_UNKNOWN = 0; // 0x0 + } + +} + +package android.telephony.cdma { + + public class CdmaCellLocation extends android.telephony.CellLocation { + ctor public CdmaCellLocation(); + ctor public CdmaCellLocation(android.os.Bundle); + method public static double convertQuartSecToDecDegrees(int); + method public void fillInNotifierBundle(android.os.Bundle); + method public int getBaseStationId(); + method public int getBaseStationLatitude(); + method public int getBaseStationLongitude(); + method public int getNetworkId(); + method public int getSystemId(); + method public void setCellLocationData(int, int, int); + method public void setCellLocationData(int, int, int, int, int); + method public void setStateInvalid(); + } + +} + +package android.telephony.gsm { + + public class GsmCellLocation extends android.telephony.CellLocation { + ctor public GsmCellLocation(); + ctor public GsmCellLocation(android.os.Bundle); + method public void fillInNotifierBundle(android.os.Bundle); + method public int getCid(); + method public int getLac(); + method public int getPsc(); + method public void setLacAndCid(int, int); + method public void setStateInvalid(); + } + + public final deprecated class SmsManager { + method public final deprecated java.util.ArrayList divideMessage(java.lang.String); + method public static final deprecated android.telephony.gsm.SmsManager getDefault(); + method public final deprecated void sendDataMessage(java.lang.String, java.lang.String, short, byte[], android.app.PendingIntent, android.app.PendingIntent); + method public final deprecated void sendMultipartTextMessage(java.lang.String, java.lang.String, java.util.ArrayList, java.util.ArrayList, java.util.ArrayList); + method public final deprecated void sendTextMessage(java.lang.String, java.lang.String, java.lang.String, android.app.PendingIntent, android.app.PendingIntent); + field public static final deprecated int RESULT_ERROR_GENERIC_FAILURE = 1; // 0x1 + field public static final deprecated int RESULT_ERROR_NO_SERVICE = 4; // 0x4 + field public static final deprecated int RESULT_ERROR_NULL_PDU = 3; // 0x3 + field public static final deprecated int RESULT_ERROR_RADIO_OFF = 2; // 0x2 + field public static final deprecated int STATUS_ON_SIM_FREE = 0; // 0x0 + field public static final deprecated int STATUS_ON_SIM_READ = 1; // 0x1 + field public static final deprecated int STATUS_ON_SIM_SENT = 5; // 0x5 + field public static final deprecated int STATUS_ON_SIM_UNREAD = 3; // 0x3 + field public static final deprecated int STATUS_ON_SIM_UNSENT = 7; // 0x7 + } + + public deprecated class SmsMessage { + ctor public deprecated SmsMessage(); + method public static deprecated int[] calculateLength(java.lang.CharSequence, boolean); + method public static deprecated int[] calculateLength(java.lang.String, boolean); + method public static deprecated android.telephony.gsm.SmsMessage createFromPdu(byte[]); + method public deprecated java.lang.String getDisplayMessageBody(); + method public deprecated java.lang.String getDisplayOriginatingAddress(); + method public deprecated java.lang.String getEmailBody(); + method public deprecated java.lang.String getEmailFrom(); + method public deprecated int getIndexOnSim(); + method public deprecated java.lang.String getMessageBody(); + method public deprecated android.telephony.gsm.SmsMessage.MessageClass getMessageClass(); + method public deprecated java.lang.String getOriginatingAddress(); + method public deprecated byte[] getPdu(); + method public deprecated int getProtocolIdentifier(); + method public deprecated java.lang.String getPseudoSubject(); + method public deprecated java.lang.String getServiceCenterAddress(); + method public deprecated int getStatus(); + method public deprecated int getStatusOnSim(); + method public static deprecated android.telephony.gsm.SmsMessage.SubmitPdu getSubmitPdu(java.lang.String, java.lang.String, java.lang.String, boolean); + method public static deprecated android.telephony.gsm.SmsMessage.SubmitPdu getSubmitPdu(java.lang.String, java.lang.String, short, byte[], boolean); + method public static deprecated int getTPLayerLengthForPDU(java.lang.String); + method public deprecated long getTimestampMillis(); + method public deprecated byte[] getUserData(); + method public deprecated boolean isCphsMwiMessage(); + method public deprecated boolean isEmail(); + method public deprecated boolean isMWIClearMessage(); + method public deprecated boolean isMWISetMessage(); + method public deprecated boolean isMwiDontStore(); + method public deprecated boolean isReplace(); + method public deprecated boolean isReplyPathPresent(); + method public deprecated boolean isStatusReportMessage(); + field public static final deprecated int ENCODING_16BIT = 3; // 0x3 + field public static final deprecated int ENCODING_7BIT = 1; // 0x1 + field public static final deprecated int ENCODING_8BIT = 2; // 0x2 + field public static final deprecated int ENCODING_UNKNOWN = 0; // 0x0 + field public static final deprecated int MAX_USER_DATA_BYTES = 140; // 0x8c + field public static final deprecated int MAX_USER_DATA_SEPTETS = 160; // 0xa0 + field public static final deprecated int MAX_USER_DATA_SEPTETS_WITH_HEADER = 153; // 0x99 + } + + public static final deprecated class SmsMessage.MessageClass extends java.lang.Enum { + method public static android.telephony.gsm.SmsMessage.MessageClass valueOf(java.lang.String); + method public static final android.telephony.gsm.SmsMessage.MessageClass[] values(); + enum_constant public static final android.telephony.gsm.SmsMessage.MessageClass CLASS_0; + enum_constant public static final android.telephony.gsm.SmsMessage.MessageClass CLASS_1; + enum_constant public static final android.telephony.gsm.SmsMessage.MessageClass CLASS_2; + enum_constant public static final android.telephony.gsm.SmsMessage.MessageClass CLASS_3; + enum_constant public static final android.telephony.gsm.SmsMessage.MessageClass UNKNOWN; + } + + public static deprecated class SmsMessage.SubmitPdu { + ctor public deprecated SmsMessage.SubmitPdu(); + field public deprecated byte[] encodedMessage; + field public deprecated byte[] encodedScAddress; + } + +} + +package android.test { + + public abstract deprecated class ActivityInstrumentationTestCase extends android.test.ActivityTestCase { + ctor public ActivityInstrumentationTestCase(java.lang.String, java.lang.Class); + ctor public ActivityInstrumentationTestCase(java.lang.String, java.lang.Class, boolean); + method public T getActivity(); + method public void testActivityTestCaseSetUpProperly() throws java.lang.Exception; + } + + public abstract class ActivityInstrumentationTestCase2 extends android.test.ActivityTestCase { + ctor public deprecated ActivityInstrumentationTestCase2(java.lang.String, java.lang.Class); + ctor public ActivityInstrumentationTestCase2(java.lang.Class); + method public T getActivity(); + method public void setActivityInitialTouchMode(boolean); + method public void setActivityIntent(android.content.Intent); + } + + public abstract class ActivityTestCase extends android.test.InstrumentationTestCase { + ctor public ActivityTestCase(); + method protected android.app.Activity getActivity(); + method protected void scrubClass(java.lang.Class) throws java.lang.IllegalAccessException; + method protected void setActivity(android.app.Activity); + } + + public abstract class ActivityUnitTestCase extends android.test.ActivityTestCase { + ctor public ActivityUnitTestCase(java.lang.Class); + method public T getActivity(); + method public int getFinishedActivityRequest(); + method public int getRequestedOrientation(); + method public android.content.Intent getStartedActivityIntent(); + method public int getStartedActivityRequest(); + method public boolean isFinishCalled(); + method public void setActivityContext(android.content.Context); + method public void setApplication(android.app.Application); + method protected T startActivity(android.content.Intent, android.os.Bundle, java.lang.Object); + } + + public class AndroidTestCase extends junit.framework.TestCase { + ctor public AndroidTestCase(); + method public void assertActivityRequiresPermission(java.lang.String, java.lang.String, java.lang.String); + method public void assertReadingContentUriRequiresPermission(android.net.Uri, java.lang.String); + method public void assertWritingContentUriRequiresPermission(android.net.Uri, java.lang.String); + method public android.content.Context getContext(); + method protected void scrubClass(java.lang.Class) throws java.lang.IllegalAccessException; + method public void setContext(android.content.Context); + method public void testAndroidTestCaseSetupProperly(); + field protected android.content.Context mContext; + } + + public class AndroidTestRunner extends junit.runner.BaseTestRunner { + ctor public AndroidTestRunner(); + method public void addTestListener(junit.framework.TestListener); + method public void clearTestListeners(); + method protected junit.framework.TestResult createTestResult(); + method public java.util.List getTestCases(); + method public java.lang.String getTestClassName(); + method public junit.framework.TestResult getTestResult(); + method protected void runFailed(java.lang.String); + method public void runTest(); + method public void runTest(junit.framework.TestResult); + method public void setContext(android.content.Context); + method public deprecated void setInstrumentaiton(android.app.Instrumentation); + method public void setInstrumentation(android.app.Instrumentation); + method public void setTest(junit.framework.Test); + method public void setTestClassName(java.lang.String, java.lang.String); + method public void testEnded(java.lang.String); + method public void testFailed(int, junit.framework.Test, java.lang.Throwable); + method public void testStarted(java.lang.String); + } + + public abstract class ApplicationTestCase extends android.test.AndroidTestCase { + ctor public ApplicationTestCase(java.lang.Class); + method protected final void createApplication(); + method public T getApplication(); + method public android.content.Context getSystemContext(); + method protected final void terminateApplication(); + method public final void testApplicationTestCaseSetUpProperly() throws java.lang.Exception; + } + + public deprecated class AssertionFailedError extends java.lang.Error { + ctor public AssertionFailedError(); + ctor public AssertionFailedError(java.lang.String); + } + + public deprecated class ComparisonFailure extends android.test.AssertionFailedError { + ctor public ComparisonFailure(java.lang.String, java.lang.String, java.lang.String); + } + + public abstract class FlakyTest implements java.lang.annotation.Annotation { + } + + public class InstrumentationTestCase extends junit.framework.TestCase { + ctor public InstrumentationTestCase(); + method public android.app.Instrumentation getInstrumentation(); + method public deprecated void injectInsrumentation(android.app.Instrumentation); + method public void injectInstrumentation(android.app.Instrumentation); + method public final T launchActivity(java.lang.String, java.lang.Class, android.os.Bundle); + method public final T launchActivityWithIntent(java.lang.String, java.lang.Class, android.content.Intent); + method public void runTestOnUiThread(java.lang.Runnable) throws java.lang.Throwable; + method public void sendKeys(java.lang.String); + method public void sendKeys(int...); + method public void sendRepeatedKeys(int...); + } + + public class InstrumentationTestRunner extends android.app.Instrumentation implements android.test.TestSuiteProvider { + ctor public InstrumentationTestRunner(); + method public junit.framework.TestSuite getAllTests(); + method protected android.test.AndroidTestRunner getAndroidTestRunner(); + method public android.os.Bundle getArguments(); + method public java.lang.ClassLoader getLoader(); + method public junit.framework.TestSuite getTestSuite(); + field public static final java.lang.String REPORT_KEY_NAME_CLASS = "class"; + field public static final java.lang.String REPORT_KEY_NAME_TEST = "test"; + field public static final java.lang.String REPORT_KEY_NUM_CURRENT = "current"; + field public static final java.lang.String REPORT_KEY_NUM_TOTAL = "numtests"; + field public static final java.lang.String REPORT_KEY_STACK = "stack"; + field public static final java.lang.String REPORT_VALUE_ID = "InstrumentationTestRunner"; + field public static final int REPORT_VALUE_RESULT_ERROR = -1; // 0xffffffff + field public static final int REPORT_VALUE_RESULT_FAILURE = -2; // 0xfffffffe + field public static final int REPORT_VALUE_RESULT_OK = 0; // 0x0 + field public static final int REPORT_VALUE_RESULT_START = 1; // 0x1 + } + + public class InstrumentationTestSuite extends junit.framework.TestSuite { + ctor public InstrumentationTestSuite(android.app.Instrumentation); + ctor public InstrumentationTestSuite(java.lang.String, android.app.Instrumentation); + ctor public InstrumentationTestSuite(java.lang.Class, android.app.Instrumentation); + method public void addTestSuite(java.lang.Class); + } + + public class IsolatedContext extends android.content.ContextWrapper { + ctor public IsolatedContext(android.content.ContentResolver, android.content.Context); + method public java.util.List getAndClearBroadcastIntents(); + } + + public class LoaderTestCase extends android.test.AndroidTestCase { + ctor public LoaderTestCase(); + method public T getLoaderResultSynchronously(android.content.Loader); + } + + public final class MoreAsserts { + method public static void assertAssignableFrom(java.lang.Class, java.lang.Object); + method public static void assertAssignableFrom(java.lang.Class, java.lang.Class); + method public static java.util.regex.MatchResult assertContainsRegex(java.lang.String, java.lang.String, java.lang.String); + method public static java.util.regex.MatchResult assertContainsRegex(java.lang.String, java.lang.String); + method public static void assertContentsInAnyOrder(java.lang.String, java.lang.Iterable, java.lang.Object...); + method public static void assertContentsInAnyOrder(java.lang.Iterable, java.lang.Object...); + method public static void assertContentsInOrder(java.lang.String, java.lang.Iterable, java.lang.Object...); + method public static void assertContentsInOrder(java.lang.Iterable, java.lang.Object...); + method public static void assertEmpty(java.lang.String, java.lang.Iterable); + method public static void assertEmpty(java.lang.Iterable); + method public static void assertEmpty(java.lang.String, java.util.Map); + method public static void assertEmpty(java.util.Map); + method public static void assertEquals(java.lang.String, byte[], byte[]); + method public static void assertEquals(byte[], byte[]); + method public static void assertEquals(java.lang.String, int[], int[]); + method public static void assertEquals(int[], int[]); + method public static void assertEquals(java.lang.String, double[], double[]); + method public static void assertEquals(double[], double[]); + method public static void assertEquals(java.lang.String, java.lang.Object[], java.lang.Object[]); + method public static void assertEquals(java.lang.Object[], java.lang.Object[]); + method public static void assertEquals(java.lang.String, java.util.Set, java.util.Set); + method public static void assertEquals(java.util.Set, java.util.Set); + method public static java.util.regex.MatchResult assertMatchesRegex(java.lang.String, java.lang.String, java.lang.String); + method public static java.util.regex.MatchResult assertMatchesRegex(java.lang.String, java.lang.String); + method public static void assertNotContainsRegex(java.lang.String, java.lang.String, java.lang.String); + method public static void assertNotContainsRegex(java.lang.String, java.lang.String); + method public static void assertNotEmpty(java.lang.String, java.lang.Iterable); + method public static void assertNotEmpty(java.lang.Iterable); + method public static void assertNotEmpty(java.lang.String, java.util.Map); + method public static void assertNotEmpty(java.util.Map); + method public static void assertNotEqual(java.lang.String, java.lang.Object, java.lang.Object); + method public static void assertNotEqual(java.lang.Object, java.lang.Object); + method public static void assertNotMatchesRegex(java.lang.String, java.lang.String, java.lang.String); + method public static void assertNotMatchesRegex(java.lang.String, java.lang.String); + method public static void checkEqualsAndHashCodeMethods(java.lang.String, java.lang.Object, java.lang.Object, boolean); + method public static void checkEqualsAndHashCodeMethods(java.lang.Object, java.lang.Object, boolean); + } + + public abstract interface PerformanceTestCase { + method public abstract boolean isPerformanceOnly(); + method public abstract int startPerformance(android.test.PerformanceTestCase.Intermediates); + } + + public static abstract interface PerformanceTestCase.Intermediates { + method public abstract void addIntermediate(java.lang.String); + method public abstract void addIntermediate(java.lang.String, long); + method public abstract void finishTiming(boolean); + method public abstract void setInternalIterations(int); + method public abstract void startTiming(boolean); + } + + public abstract deprecated class ProviderTestCase extends android.test.InstrumentationTestCase { + ctor public ProviderTestCase(java.lang.Class, java.lang.String); + method public android.test.mock.MockContentResolver getMockContentResolver(); + method public android.test.IsolatedContext getMockContext(); + method public T getProvider(); + method public static android.content.ContentResolver newResolverWithContentProviderFromSql(android.content.Context, java.lang.Class, java.lang.String, java.lang.String, int, java.lang.String) throws java.lang.IllegalAccessException, java.lang.InstantiationException; + } + + public abstract class ProviderTestCase2 extends android.test.AndroidTestCase { + ctor public ProviderTestCase2(java.lang.Class, java.lang.String); + method public android.test.mock.MockContentResolver getMockContentResolver(); + method public android.test.IsolatedContext getMockContext(); + method public T getProvider(); + method public static android.content.ContentResolver newResolverWithContentProviderFromSql(android.content.Context, java.lang.String, java.lang.Class, java.lang.String, java.lang.String, int, java.lang.String) throws java.lang.IllegalAccessException, java.lang.InstantiationException; + } + + public class RenamingDelegatingContext extends android.content.ContextWrapper { + ctor public RenamingDelegatingContext(android.content.Context, java.lang.String); + ctor public RenamingDelegatingContext(android.content.Context, android.content.Context, java.lang.String); + method public java.lang.String getDatabasePrefix(); + method public void makeExistingFilesAndDbsAccessible(); + method public static T providerWithRenamedContext(java.lang.Class, android.content.Context, java.lang.String) throws java.lang.IllegalAccessException, java.lang.InstantiationException; + method public static T providerWithRenamedContext(java.lang.Class, android.content.Context, java.lang.String, boolean) throws java.lang.IllegalAccessException, java.lang.InstantiationException; + } + + public abstract class ServiceTestCase extends android.test.AndroidTestCase { + ctor public ServiceTestCase(java.lang.Class); + method protected android.os.IBinder bindService(android.content.Intent); + method public android.app.Application getApplication(); + method public T getService(); + method public android.content.Context getSystemContext(); + method public void setApplication(android.app.Application); + method protected void setupService(); + method protected void shutdownService(); + method protected void startService(android.content.Intent); + method public void testServiceTestCaseSetUpProperly() throws java.lang.Exception; + } + + public abstract class SingleLaunchActivityTestCase extends android.test.InstrumentationTestCase { + ctor public SingleLaunchActivityTestCase(java.lang.String, java.lang.Class); + method public T getActivity(); + method public void testActivityTestCaseSetUpProperly() throws java.lang.Exception; + } + + public class SyncBaseInstrumentation extends android.test.InstrumentationTestCase { + ctor public SyncBaseInstrumentation(); + method protected void cancelSyncsandDisableAutoSync(); + method protected void syncProvider(android.net.Uri, java.lang.String, java.lang.String) throws java.lang.Exception; + } + + public abstract interface TestSuiteProvider { + method public abstract junit.framework.TestSuite getTestSuite(); + } + + public class TouchUtils { + ctor public TouchUtils(); + method public static void clickView(android.test.InstrumentationTestCase, android.view.View); + method public static deprecated void drag(android.test.ActivityInstrumentationTestCase, float, float, float, float, int); + method public static void drag(android.test.InstrumentationTestCase, float, float, float, float, int); + method public static deprecated void dragQuarterScreenDown(android.test.ActivityInstrumentationTestCase); + method public static void dragQuarterScreenDown(android.test.InstrumentationTestCase, android.app.Activity); + method public static deprecated void dragQuarterScreenUp(android.test.ActivityInstrumentationTestCase); + method public static void dragQuarterScreenUp(android.test.InstrumentationTestCase, android.app.Activity); + method public static deprecated int dragViewBy(android.test.ActivityInstrumentationTestCase, android.view.View, int, int, int); + method public static deprecated int dragViewBy(android.test.InstrumentationTestCase, android.view.View, int, int, int); + method public static deprecated int dragViewTo(android.test.ActivityInstrumentationTestCase, android.view.View, int, int, int); + method public static int dragViewTo(android.test.InstrumentationTestCase, android.view.View, int, int, int); + method public static deprecated void dragViewToBottom(android.test.ActivityInstrumentationTestCase, android.view.View); + method public static void dragViewToBottom(android.test.InstrumentationTestCase, android.app.Activity, android.view.View); + method public static deprecated void dragViewToBottom(android.test.ActivityInstrumentationTestCase, android.view.View, int); + method public static void dragViewToBottom(android.test.InstrumentationTestCase, android.app.Activity, android.view.View, int); + method public static deprecated void dragViewToTop(android.test.ActivityInstrumentationTestCase, android.view.View); + method public static deprecated void dragViewToTop(android.test.ActivityInstrumentationTestCase, android.view.View, int); + method public static void dragViewToTop(android.test.InstrumentationTestCase, android.view.View); + method public static void dragViewToTop(android.test.InstrumentationTestCase, android.view.View, int); + method public static deprecated int dragViewToX(android.test.ActivityInstrumentationTestCase, android.view.View, int, int); + method public static int dragViewToX(android.test.InstrumentationTestCase, android.view.View, int, int); + method public static deprecated int dragViewToY(android.test.ActivityInstrumentationTestCase, android.view.View, int, int); + method public static int dragViewToY(android.test.InstrumentationTestCase, android.view.View, int, int); + method public static deprecated void longClickView(android.test.ActivityInstrumentationTestCase, android.view.View); + method public static void longClickView(android.test.InstrumentationTestCase, android.view.View); + method public static deprecated void scrollToBottom(android.test.ActivityInstrumentationTestCase, android.view.ViewGroup); + method public static void scrollToBottom(android.test.InstrumentationTestCase, android.app.Activity, android.view.ViewGroup); + method public static deprecated void scrollToTop(android.test.ActivityInstrumentationTestCase, android.view.ViewGroup); + method public static void scrollToTop(android.test.InstrumentationTestCase, android.app.Activity, android.view.ViewGroup); + method public static void tapView(android.test.InstrumentationTestCase, android.view.View); + method public static void touchAndCancelView(android.test.InstrumentationTestCase, android.view.View); + } + + public abstract class UiThreadTest implements java.lang.annotation.Annotation { + } + + public class ViewAsserts { + method public static void assertBaselineAligned(android.view.View, android.view.View); + method public static void assertBottomAligned(android.view.View, android.view.View); + method public static void assertBottomAligned(android.view.View, android.view.View, int); + method public static void assertGroupContains(android.view.ViewGroup, android.view.View); + method public static void assertGroupIntegrity(android.view.ViewGroup); + method public static void assertGroupNotContains(android.view.ViewGroup, android.view.View); + method public static void assertHasScreenCoordinates(android.view.View, android.view.View, int, int); + method public static void assertHorizontalCenterAligned(android.view.View, android.view.View); + method public static void assertLeftAligned(android.view.View, android.view.View); + method public static void assertLeftAligned(android.view.View, android.view.View, int); + method public static void assertOffScreenAbove(android.view.View, android.view.View); + method public static void assertOffScreenBelow(android.view.View, android.view.View); + method public static void assertOnScreen(android.view.View, android.view.View); + method public static void assertRightAligned(android.view.View, android.view.View); + method public static void assertRightAligned(android.view.View, android.view.View, int); + method public static void assertTopAligned(android.view.View, android.view.View); + method public static void assertTopAligned(android.view.View, android.view.View, int); + method public static void assertVerticalCenterAligned(android.view.View, android.view.View); + } + +} + +package android.test.mock { + + public class MockApplication extends android.app.Application { + ctor public MockApplication(); + } + + public class MockContentProvider extends android.content.ContentProvider { + ctor protected MockContentProvider(); + ctor public MockContentProvider(android.content.Context); + ctor public MockContentProvider(android.content.Context, java.lang.String, java.lang.String, android.content.pm.PathPermission[]); + method public int delete(android.net.Uri, java.lang.String, java.lang.String[]); + method public java.lang.String getType(android.net.Uri); + method public android.net.Uri insert(android.net.Uri, android.content.ContentValues); + method public boolean onCreate(); + method public android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String); + method public int update(android.net.Uri, android.content.ContentValues, java.lang.String, java.lang.String[]); + } + + public class MockContentResolver extends android.content.ContentResolver { + ctor public MockContentResolver(); + ctor public MockContentResolver(android.content.Context); + method public void addProvider(java.lang.String, android.content.ContentProvider); + } + + public class MockContext extends android.content.Context { + ctor public MockContext(); + method public boolean bindService(android.content.Intent, android.content.ServiceConnection, int); + method public int checkCallingOrSelfPermission(java.lang.String); + method public int checkCallingOrSelfUriPermission(android.net.Uri, int); + method public int checkCallingPermission(java.lang.String); + method public int checkCallingUriPermission(android.net.Uri, int); + method public int checkPermission(java.lang.String, int, int); + method public int checkUriPermission(android.net.Uri, int, int, int); + method public int checkUriPermission(android.net.Uri, java.lang.String, java.lang.String, int, int, int); + method public void clearWallpaper(); + method public android.content.Context createConfigurationContext(android.content.res.Configuration); + method public android.content.Context createDisplayContext(android.view.Display); + method public android.content.Context createPackageContext(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException; + method public java.lang.String[] databaseList(); + method public boolean deleteDatabase(java.lang.String); + method public boolean deleteFile(java.lang.String); + method public void enforceCallingOrSelfPermission(java.lang.String, java.lang.String); + method public void enforceCallingOrSelfUriPermission(android.net.Uri, int, java.lang.String); + method public void enforceCallingPermission(java.lang.String, java.lang.String); + method public void enforceCallingUriPermission(android.net.Uri, int, java.lang.String); + method public void enforcePermission(java.lang.String, int, int, java.lang.String); + method public void enforceUriPermission(android.net.Uri, int, int, int, java.lang.String); + method public void enforceUriPermission(android.net.Uri, java.lang.String, java.lang.String, int, int, int, java.lang.String); + method public java.lang.String[] fileList(); + method public android.content.Context getApplicationContext(); + method public android.content.pm.ApplicationInfo getApplicationInfo(); + method public android.content.res.AssetManager getAssets(); + method public java.io.File getCacheDir(); + method public java.lang.ClassLoader getClassLoader(); + method public java.io.File getCodeCacheDir(); + method public android.content.ContentResolver getContentResolver(); + method public java.io.File getDatabasePath(java.lang.String); + method public java.io.File getDir(java.lang.String, int); + method public java.io.File getExternalCacheDir(); + method public java.io.File[] getExternalCacheDirs(); + method public java.io.File getExternalFilesDir(java.lang.String); + method public java.io.File[] getExternalFilesDirs(java.lang.String); + method public java.io.File[] getExternalMediaDirs(); + method public java.io.File getFileStreamPath(java.lang.String); + method public java.io.File getFilesDir(); + method public android.os.Looper getMainLooper(); + method public java.io.File getNoBackupFilesDir(); + method public java.io.File getObbDir(); + method public java.io.File[] getObbDirs(); + method public java.lang.String getPackageCodePath(); + method public android.content.pm.PackageManager getPackageManager(); + method public java.lang.String getPackageName(); + method public java.lang.String getPackageResourcePath(); + method public android.content.res.Resources getResources(); + method public android.content.SharedPreferences getSharedPreferences(java.lang.String, int); + method public java.lang.Object getSystemService(java.lang.String); + method public android.content.res.Resources.Theme getTheme(); + method public android.graphics.drawable.Drawable getWallpaper(); + method public int getWallpaperDesiredMinimumHeight(); + method public int getWallpaperDesiredMinimumWidth(); + method public void grantUriPermission(java.lang.String, android.net.Uri, int); + method public java.io.FileInputStream openFileInput(java.lang.String) throws java.io.FileNotFoundException; + method public java.io.FileOutputStream openFileOutput(java.lang.String, int) throws java.io.FileNotFoundException; + method public android.database.sqlite.SQLiteDatabase openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase.CursorFactory); + method public android.database.sqlite.SQLiteDatabase openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase.CursorFactory, android.database.DatabaseErrorHandler); + method public android.graphics.drawable.Drawable peekWallpaper(); + method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter); + method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, java.lang.String, android.os.Handler); + method public void removeStickyBroadcast(android.content.Intent); + method public void removeStickyBroadcastAsUser(android.content.Intent, android.os.UserHandle); + method public void revokeUriPermission(android.net.Uri, int); + method public void sendBroadcast(android.content.Intent); + method public void sendBroadcast(android.content.Intent, java.lang.String); + method public void sendBroadcastAsUser(android.content.Intent, android.os.UserHandle); + method public void sendBroadcastAsUser(android.content.Intent, android.os.UserHandle, java.lang.String); + method public void sendOrderedBroadcast(android.content.Intent, java.lang.String); + method public void sendOrderedBroadcast(android.content.Intent, java.lang.String, android.content.BroadcastReceiver, android.os.Handler, int, java.lang.String, android.os.Bundle); + method public void sendOrderedBroadcastAsUser(android.content.Intent, android.os.UserHandle, java.lang.String, android.content.BroadcastReceiver, android.os.Handler, int, java.lang.String, android.os.Bundle); + method public void sendStickyBroadcast(android.content.Intent); + method public void sendStickyBroadcastAsUser(android.content.Intent, android.os.UserHandle); + method public void sendStickyOrderedBroadcast(android.content.Intent, android.content.BroadcastReceiver, android.os.Handler, int, java.lang.String, android.os.Bundle); + method public void sendStickyOrderedBroadcastAsUser(android.content.Intent, android.os.UserHandle, android.content.BroadcastReceiver, android.os.Handler, int, java.lang.String, android.os.Bundle); + method public void setTheme(int); + method public void setWallpaper(android.graphics.Bitmap) throws java.io.IOException; + method public void setWallpaper(java.io.InputStream) throws java.io.IOException; + method public void startActivities(android.content.Intent[]); + method public void startActivities(android.content.Intent[], android.os.Bundle); + method public void startActivity(android.content.Intent); + method public void startActivity(android.content.Intent, android.os.Bundle); + method public boolean startInstrumentation(android.content.ComponentName, java.lang.String, android.os.Bundle); + method public void startIntentSender(android.content.IntentSender, android.content.Intent, int, int, int) throws android.content.IntentSender.SendIntentException; + method public void startIntentSender(android.content.IntentSender, android.content.Intent, int, int, int, android.os.Bundle) throws android.content.IntentSender.SendIntentException; + method public android.content.ComponentName startService(android.content.Intent); + method public boolean stopService(android.content.Intent); + method public void unbindService(android.content.ServiceConnection); + method public void unregisterReceiver(android.content.BroadcastReceiver); + } + + public class MockCursor implements android.database.Cursor { + ctor public MockCursor(); + method public void close(); + method public void copyStringToBuffer(int, android.database.CharArrayBuffer); + method public void deactivate(); + method public byte[] getBlob(int); + method public int getColumnCount(); + method public int getColumnIndex(java.lang.String); + method public int getColumnIndexOrThrow(java.lang.String); + method public java.lang.String getColumnName(int); + method public java.lang.String[] getColumnNames(); + method public int getCount(); + method public double getDouble(int); + method public android.os.Bundle getExtras(); + method public float getFloat(int); + method public int getInt(int); + method public long getLong(int); + method public android.net.Uri getNotificationUri(); + method public int getPosition(); + method public short getShort(int); + method public java.lang.String getString(int); + method public int getType(int); + method public boolean getWantsAllOnMoveCalls(); + method public boolean isAfterLast(); + method public boolean isBeforeFirst(); + method public boolean isClosed(); + method public boolean isFirst(); + method public boolean isLast(); + method public boolean isNull(int); + method public boolean move(int); + method public boolean moveToFirst(); + method public boolean moveToLast(); + method public boolean moveToNext(); + method public boolean moveToPosition(int); + method public boolean moveToPrevious(); + method public void registerContentObserver(android.database.ContentObserver); + method public void registerDataSetObserver(android.database.DataSetObserver); + method public boolean requery(); + method public android.os.Bundle respond(android.os.Bundle); + method public void setNotificationUri(android.content.ContentResolver, android.net.Uri); + method public void unregisterContentObserver(android.database.ContentObserver); + method public void unregisterDataSetObserver(android.database.DataSetObserver); + } + + public class MockDialogInterface implements android.content.DialogInterface { + ctor public MockDialogInterface(); + method public void cancel(); + method public void dismiss(); + } + + public class MockPackageManager extends android.content.pm.PackageManager { + ctor public MockPackageManager(); + method public void addPackageToPreferred(java.lang.String); + method public boolean addPermission(android.content.pm.PermissionInfo); + method public boolean addPermissionAsync(android.content.pm.PermissionInfo); + method public void addPreferredActivity(android.content.IntentFilter, int, android.content.ComponentName[], android.content.ComponentName); + method public java.lang.String[] canonicalToCurrentPackageNames(java.lang.String[]); + method public int checkPermission(java.lang.String, java.lang.String); + method public int checkSignatures(java.lang.String, java.lang.String); + method public int checkSignatures(int, int); + method public void clearPackagePreferredActivities(java.lang.String); + method public java.lang.String[] currentToCanonicalPackageNames(java.lang.String[]); + method public void extendVerificationTimeout(int, int, long); + method public android.graphics.drawable.Drawable getActivityBanner(android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException; + method public android.graphics.drawable.Drawable getActivityBanner(android.content.Intent) throws android.content.pm.PackageManager.NameNotFoundException; + method public android.graphics.drawable.Drawable getActivityIcon(android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException; + method public android.graphics.drawable.Drawable getActivityIcon(android.content.Intent) throws android.content.pm.PackageManager.NameNotFoundException; + method public android.content.pm.ActivityInfo getActivityInfo(android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException; + method public android.graphics.drawable.Drawable getActivityLogo(android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException; + method public android.graphics.drawable.Drawable getActivityLogo(android.content.Intent) throws android.content.pm.PackageManager.NameNotFoundException; + method public java.util.List getAllPermissionGroups(int); + method public android.graphics.drawable.Drawable getApplicationBanner(android.content.pm.ApplicationInfo); + method public android.graphics.drawable.Drawable getApplicationBanner(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException; + method public int getApplicationEnabledSetting(java.lang.String); + method public android.graphics.drawable.Drawable getApplicationIcon(android.content.pm.ApplicationInfo); + method public android.graphics.drawable.Drawable getApplicationIcon(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException; + method public android.content.pm.ApplicationInfo getApplicationInfo(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException; + method public java.lang.CharSequence getApplicationLabel(android.content.pm.ApplicationInfo); + method public android.graphics.drawable.Drawable getApplicationLogo(android.content.pm.ApplicationInfo); + method public android.graphics.drawable.Drawable getApplicationLogo(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException; + method public int getComponentEnabledSetting(android.content.ComponentName); + method public android.graphics.drawable.Drawable getDefaultActivityIcon(); + method public android.graphics.drawable.Drawable getDrawable(java.lang.String, int, android.content.pm.ApplicationInfo); + method public java.util.List getInstalledApplications(int); + method public java.util.List getInstalledPackages(int); + method public java.lang.String getInstallerPackageName(java.lang.String); + method public android.content.pm.InstrumentationInfo getInstrumentationInfo(android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException; + method public android.content.Intent getLaunchIntentForPackage(java.lang.String); + method public android.content.Intent getLeanbackLaunchIntentForPackage(java.lang.String); + method public java.lang.String getNameForUid(int); + method public int[] getPackageGids(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException; + method public android.content.pm.PackageInfo getPackageInfo(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException; + method public android.content.pm.PackageInstaller getPackageInstaller(); + method public java.lang.String[] getPackagesForUid(int); + method public java.util.List getPackagesHoldingPermissions(java.lang.String[], int); + method public android.content.pm.PermissionGroupInfo getPermissionGroupInfo(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException; + method public android.content.pm.PermissionInfo getPermissionInfo(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException; + method public int getPreferredActivities(java.util.List, java.util.List, java.lang.String); + method public java.util.List getPreferredPackages(int); + method public android.content.pm.ProviderInfo getProviderInfo(android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException; + method public android.content.pm.ActivityInfo getReceiverInfo(android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException; + method public android.content.res.Resources getResourcesForActivity(android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException; + method public android.content.res.Resources getResourcesForApplication(android.content.pm.ApplicationInfo); + method public android.content.res.Resources getResourcesForApplication(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException; + method public android.content.pm.ServiceInfo getServiceInfo(android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException; + method public android.content.pm.FeatureInfo[] getSystemAvailableFeatures(); + method public java.lang.String[] getSystemSharedLibraryNames(); + method public java.lang.CharSequence getText(java.lang.String, int, android.content.pm.ApplicationInfo); + method public android.graphics.drawable.Drawable getUserBadgedDrawableForDensity(android.graphics.drawable.Drawable, android.os.UserHandle, android.graphics.Rect, int); + method public android.graphics.drawable.Drawable getUserBadgedIcon(android.graphics.drawable.Drawable, android.os.UserHandle); + method public java.lang.CharSequence getUserBadgedLabel(java.lang.CharSequence, android.os.UserHandle); + method public android.content.res.XmlResourceParser getXml(java.lang.String, int, android.content.pm.ApplicationInfo); + method public boolean hasSystemFeature(java.lang.String); + method public boolean isSafeMode(); + method public java.util.List queryBroadcastReceivers(android.content.Intent, int); + method public java.util.List queryContentProviders(java.lang.String, int, int); + method public java.util.List queryInstrumentation(java.lang.String, int); + method public java.util.List queryIntentActivities(android.content.Intent, int); + method public java.util.List queryIntentActivityOptions(android.content.ComponentName, android.content.Intent[], android.content.Intent, int); + method public java.util.List queryIntentContentProviders(android.content.Intent, int); + method public java.util.List queryIntentServices(android.content.Intent, int); + method public java.util.List queryPermissionsByGroup(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException; + method public void removePackageFromPreferred(java.lang.String); + method public void removePermission(java.lang.String); + method public android.content.pm.ResolveInfo resolveActivity(android.content.Intent, int); + method public android.content.pm.ProviderInfo resolveContentProvider(java.lang.String, int); + method public android.content.pm.ResolveInfo resolveService(android.content.Intent, int); + method public void setApplicationEnabledSetting(java.lang.String, int, int); + method public void setComponentEnabledSetting(android.content.ComponentName, int, int); + method public void setInstallerPackageName(java.lang.String, java.lang.String); + method public void verifyPendingInstall(int, int); + } + + public class MockResources extends android.content.res.Resources { + ctor public MockResources(); + } + +} + +package android.test.suitebuilder { + + public class TestMethod { + ctor public TestMethod(java.lang.reflect.Method, java.lang.Class); + ctor public TestMethod(java.lang.String, java.lang.Class); + ctor public TestMethod(junit.framework.TestCase); + method public junit.framework.TestCase createTest() throws java.lang.IllegalAccessException, java.lang.InstantiationException, java.lang.reflect.InvocationTargetException; + method public T getAnnotation(java.lang.Class); + method public java.lang.Class getEnclosingClass(); + method public java.lang.String getEnclosingClassname(); + method public java.lang.String getName(); + } + + public class TestSuiteBuilder { + ctor public TestSuiteBuilder(java.lang.Class); + ctor public TestSuiteBuilder(java.lang.String, java.lang.ClassLoader); + method public android.test.suitebuilder.TestSuiteBuilder addRequirements(java.util.List>); + method public final android.test.suitebuilder.TestSuiteBuilder addRequirements(com.android.internal.util.Predicate...); + method public final junit.framework.TestSuite build(); + method public android.test.suitebuilder.TestSuiteBuilder excludePackages(java.lang.String...); + method protected java.lang.String getSuiteName(); + method public final android.test.suitebuilder.TestSuiteBuilder includeAllPackagesUnderHere(); + method public android.test.suitebuilder.TestSuiteBuilder includePackages(java.lang.String...); + method public android.test.suitebuilder.TestSuiteBuilder named(java.lang.String); + } + + public static class TestSuiteBuilder.FailedToCreateTests extends junit.framework.TestCase { + ctor public TestSuiteBuilder.FailedToCreateTests(java.lang.Exception); + method public void testSuiteConstructionFailed(); + } + +} + +package android.test.suitebuilder.annotation { + + public abstract class LargeTest implements java.lang.annotation.Annotation { + } + + public abstract class MediumTest implements java.lang.annotation.Annotation { + } + + public abstract class SmallTest implements java.lang.annotation.Annotation { + } + + public abstract class Smoke implements java.lang.annotation.Annotation { + } + + public abstract class Suppress implements java.lang.annotation.Annotation { + } + +} + +package android.text { + + public class AlteredCharSequence implements java.lang.CharSequence android.text.GetChars { + method public char charAt(int); + method public void getChars(int, int, char[], int); + method public int length(); + method public static android.text.AlteredCharSequence make(java.lang.CharSequence, char[], int, int); + method public java.lang.CharSequence subSequence(int, int); + } + + public class AndroidCharacter { + ctor public AndroidCharacter(); + method public static void getDirectionalities(char[], byte[], int); + method public static int getEastAsianWidth(char); + method public static void getEastAsianWidths(char[], int, int, byte[]); + method public static char getMirror(char); + method public static boolean mirror(char[], int, int); + field public static final int EAST_ASIAN_WIDTH_AMBIGUOUS = 1; // 0x1 + field public static final int EAST_ASIAN_WIDTH_FULL_WIDTH = 3; // 0x3 + field public static final int EAST_ASIAN_WIDTH_HALF_WIDTH = 2; // 0x2 + field public static final int EAST_ASIAN_WIDTH_NARROW = 4; // 0x4 + field public static final int EAST_ASIAN_WIDTH_NEUTRAL = 0; // 0x0 + field public static final int EAST_ASIAN_WIDTH_WIDE = 5; // 0x5 + } + + public class Annotation implements android.text.ParcelableSpan { + ctor public Annotation(java.lang.String, java.lang.String); + ctor public Annotation(android.os.Parcel); + method public int describeContents(); + method public java.lang.String getKey(); + method public int getSpanTypeId(); + method public java.lang.String getValue(); + method public void writeToParcel(android.os.Parcel, int); + } + + public class AutoText { + method public static java.lang.String get(java.lang.CharSequence, int, int, android.view.View); + method public static int getSize(android.view.View); + } + + public final class BidiFormatter { + method public static android.text.BidiFormatter getInstance(); + method public static android.text.BidiFormatter getInstance(boolean); + method public static android.text.BidiFormatter getInstance(java.util.Locale); + method public boolean getStereoReset(); + method public boolean isRtl(java.lang.String); + method public boolean isRtlContext(); + method public java.lang.String unicodeWrap(java.lang.String, android.text.TextDirectionHeuristic, boolean); + method public java.lang.String unicodeWrap(java.lang.String, android.text.TextDirectionHeuristic); + method public java.lang.String unicodeWrap(java.lang.String, boolean); + method public java.lang.String unicodeWrap(java.lang.String); + } + + public static final class BidiFormatter.Builder { + ctor public BidiFormatter.Builder(); + ctor public BidiFormatter.Builder(boolean); + ctor public BidiFormatter.Builder(java.util.Locale); + method public android.text.BidiFormatter build(); + method public android.text.BidiFormatter.Builder setTextDirectionHeuristic(android.text.TextDirectionHeuristic); + method public android.text.BidiFormatter.Builder stereoReset(boolean); + } + + public class BoringLayout extends android.text.Layout implements android.text.TextUtils.EllipsizeCallback { + ctor public BoringLayout(java.lang.CharSequence, android.text.TextPaint, int, android.text.Layout.Alignment, float, float, android.text.BoringLayout.Metrics, boolean); + ctor public BoringLayout(java.lang.CharSequence, android.text.TextPaint, int, android.text.Layout.Alignment, float, float, android.text.BoringLayout.Metrics, boolean, android.text.TextUtils.TruncateAt, int); + method public void ellipsized(int, int); + method public int getBottomPadding(); + method public int getEllipsisCount(int); + method public int getEllipsisStart(int); + method public boolean getLineContainsTab(int); + method public int getLineCount(); + method public int getLineDescent(int); + method public final android.text.Layout.Directions getLineDirections(int); + method public int getLineStart(int); + method public int getLineTop(int); + method public int getParagraphDirection(int); + method public int getTopPadding(); + method public static android.text.BoringLayout.Metrics isBoring(java.lang.CharSequence, android.text.TextPaint); + method public static android.text.BoringLayout.Metrics isBoring(java.lang.CharSequence, android.text.TextPaint, android.text.BoringLayout.Metrics); + method public static android.text.BoringLayout make(java.lang.CharSequence, android.text.TextPaint, int, android.text.Layout.Alignment, float, float, android.text.BoringLayout.Metrics, boolean); + method public static android.text.BoringLayout make(java.lang.CharSequence, android.text.TextPaint, int, android.text.Layout.Alignment, float, float, android.text.BoringLayout.Metrics, boolean, android.text.TextUtils.TruncateAt, int); + method public android.text.BoringLayout replaceOrMake(java.lang.CharSequence, android.text.TextPaint, int, android.text.Layout.Alignment, float, float, android.text.BoringLayout.Metrics, boolean); + method public android.text.BoringLayout replaceOrMake(java.lang.CharSequence, android.text.TextPaint, int, android.text.Layout.Alignment, float, float, android.text.BoringLayout.Metrics, boolean, android.text.TextUtils.TruncateAt, int); + } + + public static class BoringLayout.Metrics extends android.graphics.Paint.FontMetricsInt { + ctor public BoringLayout.Metrics(); + field public int width; + } + + public abstract deprecated class ClipboardManager { + ctor public ClipboardManager(); + method public abstract java.lang.CharSequence getText(); + method public abstract boolean hasText(); + method public abstract void setText(java.lang.CharSequence); + } + + public class DynamicLayout extends android.text.Layout { + ctor public DynamicLayout(java.lang.CharSequence, android.text.TextPaint, int, android.text.Layout.Alignment, float, float, boolean); + ctor public DynamicLayout(java.lang.CharSequence, java.lang.CharSequence, android.text.TextPaint, int, android.text.Layout.Alignment, float, float, boolean); + ctor public DynamicLayout(java.lang.CharSequence, java.lang.CharSequence, android.text.TextPaint, int, android.text.Layout.Alignment, float, float, boolean, android.text.TextUtils.TruncateAt, int); + method public int getBottomPadding(); + method public int getEllipsisCount(int); + method public int getEllipsisStart(int); + method public boolean getLineContainsTab(int); + method public int getLineCount(); + method public int getLineDescent(int); + method public final android.text.Layout.Directions getLineDirections(int); + method public int getLineStart(int); + method public int getLineTop(int); + method public int getParagraphDirection(int); + method public int getTopPadding(); + } + + public abstract interface Editable implements java.lang.Appendable java.lang.CharSequence android.text.GetChars android.text.Spannable { + method public abstract android.text.Editable append(java.lang.CharSequence); + method public abstract android.text.Editable append(java.lang.CharSequence, int, int); + method public abstract android.text.Editable append(char); + method public abstract void clear(); + method public abstract void clearSpans(); + method public abstract android.text.Editable delete(int, int); + method public abstract android.text.InputFilter[] getFilters(); + method public abstract android.text.Editable insert(int, java.lang.CharSequence, int, int); + method public abstract android.text.Editable insert(int, java.lang.CharSequence); + method public abstract android.text.Editable replace(int, int, java.lang.CharSequence, int, int); + method public abstract android.text.Editable replace(int, int, java.lang.CharSequence); + method public abstract void setFilters(android.text.InputFilter[]); + } + + public static class Editable.Factory { + ctor public Editable.Factory(); + method public static android.text.Editable.Factory getInstance(); + method public android.text.Editable newEditable(java.lang.CharSequence); + } + + public abstract interface GetChars implements java.lang.CharSequence { + method public abstract void getChars(int, int, char[], int); + } + + public class Html { + method public static java.lang.String escapeHtml(java.lang.CharSequence); + method public static android.text.Spanned fromHtml(java.lang.String); + method public static android.text.Spanned fromHtml(java.lang.String, android.text.Html.ImageGetter, android.text.Html.TagHandler); + method public static java.lang.String toHtml(android.text.Spanned); + } + + public static abstract interface Html.ImageGetter { + method public abstract android.graphics.drawable.Drawable getDrawable(java.lang.String); + } + + public static abstract interface Html.TagHandler { + method public abstract void handleTag(boolean, java.lang.String, android.text.Editable, org.xml.sax.XMLReader); + } + + public abstract interface InputFilter { + method public abstract java.lang.CharSequence filter(java.lang.CharSequence, int, int, android.text.Spanned, int, int); + } + + public static class InputFilter.AllCaps implements android.text.InputFilter { + ctor public InputFilter.AllCaps(); + method public java.lang.CharSequence filter(java.lang.CharSequence, int, int, android.text.Spanned, int, int); + } + + public static class InputFilter.LengthFilter implements android.text.InputFilter { + ctor public InputFilter.LengthFilter(int); + method public java.lang.CharSequence filter(java.lang.CharSequence, int, int, android.text.Spanned, int, int); + method public int getMax(); + } + + public abstract interface InputType { + field public static final int TYPE_CLASS_DATETIME = 4; // 0x4 + field public static final int TYPE_CLASS_NUMBER = 2; // 0x2 + field public static final int TYPE_CLASS_PHONE = 3; // 0x3 + field public static final int TYPE_CLASS_TEXT = 1; // 0x1 + field public static final int TYPE_DATETIME_VARIATION_DATE = 16; // 0x10 + field public static final int TYPE_DATETIME_VARIATION_NORMAL = 0; // 0x0 + field public static final int TYPE_DATETIME_VARIATION_TIME = 32; // 0x20 + field public static final int TYPE_MASK_CLASS = 15; // 0xf + field public static final int TYPE_MASK_FLAGS = 16773120; // 0xfff000 + field public static final int TYPE_MASK_VARIATION = 4080; // 0xff0 + field public static final int TYPE_NULL = 0; // 0x0 + field public static final int TYPE_NUMBER_FLAG_DECIMAL = 8192; // 0x2000 + field public static final int TYPE_NUMBER_FLAG_SIGNED = 4096; // 0x1000 + field public static final int TYPE_NUMBER_VARIATION_NORMAL = 0; // 0x0 + field public static final int TYPE_NUMBER_VARIATION_PASSWORD = 16; // 0x10 + field public static final int TYPE_TEXT_FLAG_AUTO_COMPLETE = 65536; // 0x10000 + field public static final int TYPE_TEXT_FLAG_AUTO_CORRECT = 32768; // 0x8000 + field public static final int TYPE_TEXT_FLAG_CAP_CHARACTERS = 4096; // 0x1000 + field public static final int TYPE_TEXT_FLAG_CAP_SENTENCES = 16384; // 0x4000 + field public static final int TYPE_TEXT_FLAG_CAP_WORDS = 8192; // 0x2000 + field public static final int TYPE_TEXT_FLAG_IME_MULTI_LINE = 262144; // 0x40000 + field public static final int TYPE_TEXT_FLAG_MULTI_LINE = 131072; // 0x20000 + field public static final int TYPE_TEXT_FLAG_NO_SUGGESTIONS = 524288; // 0x80000 + field public static final int TYPE_TEXT_VARIATION_EMAIL_ADDRESS = 32; // 0x20 + field public static final int TYPE_TEXT_VARIATION_EMAIL_SUBJECT = 48; // 0x30 + field public static final int TYPE_TEXT_VARIATION_FILTER = 176; // 0xb0 + field public static final int TYPE_TEXT_VARIATION_LONG_MESSAGE = 80; // 0x50 + field public static final int TYPE_TEXT_VARIATION_NORMAL = 0; // 0x0 + field public static final int TYPE_TEXT_VARIATION_PASSWORD = 128; // 0x80 + field public static final int TYPE_TEXT_VARIATION_PERSON_NAME = 96; // 0x60 + field public static final int TYPE_TEXT_VARIATION_PHONETIC = 192; // 0xc0 + field public static final int TYPE_TEXT_VARIATION_POSTAL_ADDRESS = 112; // 0x70 + field public static final int TYPE_TEXT_VARIATION_SHORT_MESSAGE = 64; // 0x40 + field public static final int TYPE_TEXT_VARIATION_URI = 16; // 0x10 + field public static final int TYPE_TEXT_VARIATION_VISIBLE_PASSWORD = 144; // 0x90 + field public static final int TYPE_TEXT_VARIATION_WEB_EDIT_TEXT = 160; // 0xa0 + field public static final int TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS = 208; // 0xd0 + field public static final int TYPE_TEXT_VARIATION_WEB_PASSWORD = 224; // 0xe0 + } + + public abstract class Layout { + ctor protected Layout(java.lang.CharSequence, android.text.TextPaint, int, android.text.Layout.Alignment, float, float); + method public void draw(android.graphics.Canvas); + method public void draw(android.graphics.Canvas, android.graphics.Path, android.graphics.Paint, int); + method public final android.text.Layout.Alignment getAlignment(); + method public abstract int getBottomPadding(); + method public void getCursorPath(int, android.graphics.Path, java.lang.CharSequence); + method public static float getDesiredWidth(java.lang.CharSequence, android.text.TextPaint); + method public static float getDesiredWidth(java.lang.CharSequence, int, int, android.text.TextPaint); + method public abstract int getEllipsisCount(int); + method public abstract int getEllipsisStart(int); + method public int getEllipsizedWidth(); + method public int getHeight(); + method public final int getLineAscent(int); + method public final int getLineBaseline(int); + method public final int getLineBottom(int); + method public int getLineBounds(int, android.graphics.Rect); + method public abstract boolean getLineContainsTab(int); + method public abstract int getLineCount(); + method public abstract int getLineDescent(int); + method public abstract android.text.Layout.Directions getLineDirections(int); + method public final int getLineEnd(int); + method public int getLineForOffset(int); + method public int getLineForVertical(int); + method public float getLineLeft(int); + method public float getLineMax(int); + method public float getLineRight(int); + method public abstract int getLineStart(int); + method public abstract int getLineTop(int); + method public int getLineVisibleEnd(int); + method public float getLineWidth(int); + method public int getOffsetForHorizontal(int, float); + method public int getOffsetToLeftOf(int); + method public int getOffsetToRightOf(int); + method public final android.text.TextPaint getPaint(); + method public final android.text.Layout.Alignment getParagraphAlignment(int); + method public abstract int getParagraphDirection(int); + method public final int getParagraphLeft(int); + method public final int getParagraphRight(int); + method public float getPrimaryHorizontal(int); + method public float getSecondaryHorizontal(int); + method public void getSelectionPath(int, int, android.graphics.Path); + method public final float getSpacingAdd(); + method public final float getSpacingMultiplier(); + method public final java.lang.CharSequence getText(); + method public abstract int getTopPadding(); + method public final int getWidth(); + method public final void increaseWidthTo(int); + method public boolean isRtlCharAt(int); + method protected final boolean isSpanned(); + field public static final int DIR_LEFT_TO_RIGHT = 1; // 0x1 + field public static final int DIR_RIGHT_TO_LEFT = -1; // 0xffffffff + } + + public static final class Layout.Alignment extends java.lang.Enum { + method public static android.text.Layout.Alignment valueOf(java.lang.String); + method public static final android.text.Layout.Alignment[] values(); + enum_constant public static final android.text.Layout.Alignment ALIGN_CENTER; + enum_constant public static final android.text.Layout.Alignment ALIGN_NORMAL; + enum_constant public static final android.text.Layout.Alignment ALIGN_OPPOSITE; + } + + public static class Layout.Directions { + } + + public abstract class LoginFilter implements android.text.InputFilter { + method public java.lang.CharSequence filter(java.lang.CharSequence, int, int, android.text.Spanned, int, int); + method public abstract boolean isAllowed(char); + method public void onInvalidCharacter(char); + method public void onStart(); + method public void onStop(); + } + + public static class LoginFilter.PasswordFilterGMail extends android.text.LoginFilter { + ctor public LoginFilter.PasswordFilterGMail(); + ctor public LoginFilter.PasswordFilterGMail(boolean); + method public boolean isAllowed(char); + } + + public static class LoginFilter.UsernameFilterGMail extends android.text.LoginFilter { + ctor public LoginFilter.UsernameFilterGMail(); + ctor public LoginFilter.UsernameFilterGMail(boolean); + method public boolean isAllowed(char); + } + + public static class LoginFilter.UsernameFilterGeneric extends android.text.LoginFilter { + ctor public LoginFilter.UsernameFilterGeneric(); + ctor public LoginFilter.UsernameFilterGeneric(boolean); + method public boolean isAllowed(char); + } + + public abstract interface NoCopySpan { + } + + public static class NoCopySpan.Concrete implements android.text.NoCopySpan { + ctor public NoCopySpan.Concrete(); + } + + public abstract interface ParcelableSpan implements android.os.Parcelable { + method public abstract int getSpanTypeId(); + } + + public class Selection { + method public static boolean extendDown(android.text.Spannable, android.text.Layout); + method public static boolean extendLeft(android.text.Spannable, android.text.Layout); + method public static boolean extendRight(android.text.Spannable, android.text.Layout); + method public static final void extendSelection(android.text.Spannable, int); + method public static boolean extendToLeftEdge(android.text.Spannable, android.text.Layout); + method public static boolean extendToRightEdge(android.text.Spannable, android.text.Layout); + method public static boolean extendUp(android.text.Spannable, android.text.Layout); + method public static final int getSelectionEnd(java.lang.CharSequence); + method public static final int getSelectionStart(java.lang.CharSequence); + method public static boolean moveDown(android.text.Spannable, android.text.Layout); + method public static boolean moveLeft(android.text.Spannable, android.text.Layout); + method public static boolean moveRight(android.text.Spannable, android.text.Layout); + method public static boolean moveToLeftEdge(android.text.Spannable, android.text.Layout); + method public static boolean moveToRightEdge(android.text.Spannable, android.text.Layout); + method public static boolean moveUp(android.text.Spannable, android.text.Layout); + method public static final void removeSelection(android.text.Spannable); + method public static final void selectAll(android.text.Spannable); + method public static void setSelection(android.text.Spannable, int, int); + method public static final void setSelection(android.text.Spannable, int); + field public static final java.lang.Object SELECTION_END; + field public static final java.lang.Object SELECTION_START; + } + + public abstract interface SpanWatcher implements android.text.NoCopySpan { + method public abstract void onSpanAdded(android.text.Spannable, java.lang.Object, int, int); + method public abstract void onSpanChanged(android.text.Spannable, java.lang.Object, int, int, int, int); + method public abstract void onSpanRemoved(android.text.Spannable, java.lang.Object, int, int); + } + + public abstract interface Spannable implements android.text.Spanned { + method public abstract void removeSpan(java.lang.Object); + method public abstract void setSpan(java.lang.Object, int, int, int); + } + + public static class Spannable.Factory { + ctor public Spannable.Factory(); + method public static android.text.Spannable.Factory getInstance(); + method public android.text.Spannable newSpannable(java.lang.CharSequence); + } + + public class SpannableString extends android.text.SpannableStringInternal implements java.lang.CharSequence android.text.GetChars android.text.Spannable { + ctor public SpannableString(java.lang.CharSequence); + method public void removeSpan(java.lang.Object); + method public void setSpan(java.lang.Object, int, int, int); + method public final java.lang.CharSequence subSequence(int, int); + method public static android.text.SpannableString valueOf(java.lang.CharSequence); + } + + public class SpannableStringBuilder implements java.lang.Appendable java.lang.CharSequence android.text.Editable android.text.GetChars android.text.Spannable { + ctor public SpannableStringBuilder(); + ctor public SpannableStringBuilder(java.lang.CharSequence); + ctor public SpannableStringBuilder(java.lang.CharSequence, int, int); + method public android.text.SpannableStringBuilder append(java.lang.CharSequence); + method public android.text.SpannableStringBuilder append(java.lang.CharSequence, java.lang.Object, int); + method public android.text.SpannableStringBuilder append(java.lang.CharSequence, int, int); + method public android.text.SpannableStringBuilder append(char); + method public char charAt(int); + method public void clear(); + method public void clearSpans(); + method public android.text.SpannableStringBuilder delete(int, int); + method public void getChars(int, int, char[], int); + method public android.text.InputFilter[] getFilters(); + method public int getSpanEnd(java.lang.Object); + method public int getSpanFlags(java.lang.Object); + method public int getSpanStart(java.lang.Object); + method public T[] getSpans(int, int, java.lang.Class); + method public deprecated int getTextRunCursor(int, int, int, int, int, android.graphics.Paint); + method public android.text.SpannableStringBuilder insert(int, java.lang.CharSequence, int, int); + method public android.text.SpannableStringBuilder insert(int, java.lang.CharSequence); + method public int length(); + method public int nextSpanTransition(int, int, java.lang.Class); + method public void removeSpan(java.lang.Object); + method public android.text.SpannableStringBuilder replace(int, int, java.lang.CharSequence); + method public android.text.SpannableStringBuilder replace(int, int, java.lang.CharSequence, int, int); + method public void setFilters(android.text.InputFilter[]); + method public void setSpan(java.lang.Object, int, int, int); + method public java.lang.CharSequence subSequence(int, int); + method public static android.text.SpannableStringBuilder valueOf(java.lang.CharSequence); + } + + abstract class SpannableStringInternal { + method public final char charAt(int); + method public final void getChars(int, int, char[], int); + method public int getSpanEnd(java.lang.Object); + method public int getSpanFlags(java.lang.Object); + method public int getSpanStart(java.lang.Object); + method public T[] getSpans(int, int, java.lang.Class); + method public final int length(); + method public int nextSpanTransition(int, int, java.lang.Class); + method public final java.lang.String toString(); + } + + public abstract interface Spanned implements java.lang.CharSequence { + method public abstract int getSpanEnd(java.lang.Object); + method public abstract int getSpanFlags(java.lang.Object); + method public abstract int getSpanStart(java.lang.Object); + method public abstract T[] getSpans(int, int, java.lang.Class); + method public abstract int nextSpanTransition(int, int, java.lang.Class); + field public static final int SPAN_COMPOSING = 256; // 0x100 + field public static final int SPAN_EXCLUSIVE_EXCLUSIVE = 33; // 0x21 + field public static final int SPAN_EXCLUSIVE_INCLUSIVE = 34; // 0x22 + field public static final int SPAN_INCLUSIVE_EXCLUSIVE = 17; // 0x11 + field public static final int SPAN_INCLUSIVE_INCLUSIVE = 18; // 0x12 + field public static final int SPAN_INTERMEDIATE = 512; // 0x200 + field public static final int SPAN_MARK_MARK = 17; // 0x11 + field public static final int SPAN_MARK_POINT = 18; // 0x12 + field public static final int SPAN_PARAGRAPH = 51; // 0x33 + field public static final int SPAN_POINT_MARK = 33; // 0x21 + field public static final int SPAN_POINT_MARK_MASK = 51; // 0x33 + field public static final int SPAN_POINT_POINT = 34; // 0x22 + field public static final int SPAN_PRIORITY = 16711680; // 0xff0000 + field public static final int SPAN_PRIORITY_SHIFT = 16; // 0x10 + field public static final int SPAN_USER = -16777216; // 0xff000000 + field public static final int SPAN_USER_SHIFT = 24; // 0x18 + } + + public final class SpannedString extends android.text.SpannableStringInternal implements java.lang.CharSequence android.text.GetChars android.text.Spanned { + ctor public SpannedString(java.lang.CharSequence); + method public java.lang.CharSequence subSequence(int, int); + method public static android.text.SpannedString valueOf(java.lang.CharSequence); + } + + public class StaticLayout extends android.text.Layout { + ctor public StaticLayout(java.lang.CharSequence, android.text.TextPaint, int, android.text.Layout.Alignment, float, float, boolean); + ctor public StaticLayout(java.lang.CharSequence, int, int, android.text.TextPaint, int, android.text.Layout.Alignment, float, float, boolean); + ctor public StaticLayout(java.lang.CharSequence, int, int, android.text.TextPaint, int, android.text.Layout.Alignment, float, float, boolean, android.text.TextUtils.TruncateAt, int); + method public int getBottomPadding(); + method public int getEllipsisCount(int); + method public int getEllipsisStart(int); + method public boolean getLineContainsTab(int); + method public int getLineCount(); + method public int getLineDescent(int); + method public final android.text.Layout.Directions getLineDirections(int); + method public int getLineStart(int); + method public int getLineTop(int); + method public int getParagraphDirection(int); + method public int getTopPadding(); + } + + public abstract interface TextDirectionHeuristic { + method public abstract boolean isRtl(char[], int, int); + method public abstract boolean isRtl(java.lang.CharSequence, int, int); + } + + public class TextDirectionHeuristics { + ctor public TextDirectionHeuristics(); + field public static final android.text.TextDirectionHeuristic ANYRTL_LTR; + field public static final android.text.TextDirectionHeuristic FIRSTSTRONG_LTR; + field public static final android.text.TextDirectionHeuristic FIRSTSTRONG_RTL; + field public static final android.text.TextDirectionHeuristic LOCALE; + field public static final android.text.TextDirectionHeuristic LTR; + field public static final android.text.TextDirectionHeuristic RTL; + } + + public class TextPaint extends android.graphics.Paint { + ctor public TextPaint(); + ctor public TextPaint(int); + ctor public TextPaint(android.graphics.Paint); + method public void set(android.text.TextPaint); + field public int baselineShift; + field public int bgColor; + field public float density; + field public int[] drawableState; + field public int linkColor; + } + + public class TextUtils { + method public static java.lang.CharSequence commaEllipsize(java.lang.CharSequence, android.text.TextPaint, float, java.lang.String, java.lang.String); + method public static java.lang.CharSequence concat(java.lang.CharSequence...); + method public static void copySpansFrom(android.text.Spanned, int, int, java.lang.Class, android.text.Spannable, int); + method public static void dumpSpans(java.lang.CharSequence, android.util.Printer, java.lang.String); + method public static java.lang.CharSequence ellipsize(java.lang.CharSequence, android.text.TextPaint, float, android.text.TextUtils.TruncateAt); + method public static java.lang.CharSequence ellipsize(java.lang.CharSequence, android.text.TextPaint, float, android.text.TextUtils.TruncateAt, boolean, android.text.TextUtils.EllipsizeCallback); + method public static boolean equals(java.lang.CharSequence, java.lang.CharSequence); + method public static java.lang.CharSequence expandTemplate(java.lang.CharSequence, java.lang.CharSequence...); + method public static int getCapsMode(java.lang.CharSequence, int, int); + method public static void getChars(java.lang.CharSequence, int, int, char[], int); + method public static int getLayoutDirectionFromLocale(java.util.Locale); + method public static int getOffsetAfter(java.lang.CharSequence, int); + method public static int getOffsetBefore(java.lang.CharSequence, int); + method public static java.lang.CharSequence getReverse(java.lang.CharSequence, int, int); + method public static int getTrimmedLength(java.lang.CharSequence); + method public static java.lang.String htmlEncode(java.lang.String); + method public static int indexOf(java.lang.CharSequence, char); + method public static int indexOf(java.lang.CharSequence, char, int); + method public static int indexOf(java.lang.CharSequence, char, int, int); + method public static int indexOf(java.lang.CharSequence, java.lang.CharSequence); + method public static int indexOf(java.lang.CharSequence, java.lang.CharSequence, int); + method public static int indexOf(java.lang.CharSequence, java.lang.CharSequence, int, int); + method public static boolean isDigitsOnly(java.lang.CharSequence); + method public static boolean isEmpty(java.lang.CharSequence); + method public static boolean isGraphic(java.lang.CharSequence); + method public static boolean isGraphic(char); + method public static java.lang.String join(java.lang.CharSequence, java.lang.Object[]); + method public static java.lang.String join(java.lang.CharSequence, java.lang.Iterable); + method public static int lastIndexOf(java.lang.CharSequence, char); + method public static int lastIndexOf(java.lang.CharSequence, char, int); + method public static int lastIndexOf(java.lang.CharSequence, char, int, int); + method public static boolean regionMatches(java.lang.CharSequence, int, java.lang.CharSequence, int, int); + method public static java.lang.CharSequence replace(java.lang.CharSequence, java.lang.String[], java.lang.CharSequence[]); + method public static java.lang.String[] split(java.lang.String, java.lang.String); + method public static java.lang.String[] split(java.lang.String, java.util.regex.Pattern); + method public static java.lang.CharSequence stringOrSpannedString(java.lang.CharSequence); + method public static java.lang.String substring(java.lang.CharSequence, int, int); + method public static void writeToParcel(java.lang.CharSequence, android.os.Parcel, int); + field public static final int CAP_MODE_CHARACTERS = 4096; // 0x1000 + field public static final int CAP_MODE_SENTENCES = 16384; // 0x4000 + field public static final int CAP_MODE_WORDS = 8192; // 0x2000 + field public static final android.os.Parcelable.Creator CHAR_SEQUENCE_CREATOR; + } + + public static abstract interface TextUtils.EllipsizeCallback { + method public abstract void ellipsized(int, int); + } + + public static class TextUtils.SimpleStringSplitter implements java.util.Iterator android.text.TextUtils.StringSplitter { + ctor public TextUtils.SimpleStringSplitter(char); + method public boolean hasNext(); + method public java.util.Iterator iterator(); + method public java.lang.String next(); + method public void remove(); + method public void setString(java.lang.String); + } + + public static abstract interface TextUtils.StringSplitter implements java.lang.Iterable { + method public abstract void setString(java.lang.String); + } + + public static final class TextUtils.TruncateAt extends java.lang.Enum { + method public static android.text.TextUtils.TruncateAt valueOf(java.lang.String); + method public static final android.text.TextUtils.TruncateAt[] values(); + enum_constant public static final android.text.TextUtils.TruncateAt END; + enum_constant public static final android.text.TextUtils.TruncateAt MARQUEE; + enum_constant public static final android.text.TextUtils.TruncateAt MIDDLE; + enum_constant public static final android.text.TextUtils.TruncateAt START; + } + + public abstract interface TextWatcher implements android.text.NoCopySpan { + method public abstract void afterTextChanged(android.text.Editable); + method public abstract void beforeTextChanged(java.lang.CharSequence, int, int, int); + method public abstract void onTextChanged(java.lang.CharSequence, int, int, int); + } + +} + +package android.text.format { + + public class DateFormat { + ctor public DateFormat(); + method public static java.lang.CharSequence format(java.lang.CharSequence, long); + method public static java.lang.CharSequence format(java.lang.CharSequence, java.util.Date); + method public static java.lang.CharSequence format(java.lang.CharSequence, java.util.Calendar); + method public static java.lang.String getBestDateTimePattern(java.util.Locale, java.lang.String); + method public static java.text.DateFormat getDateFormat(android.content.Context); + method public static char[] getDateFormatOrder(android.content.Context); + method public static java.text.DateFormat getLongDateFormat(android.content.Context); + method public static java.text.DateFormat getMediumDateFormat(android.content.Context); + method public static java.text.DateFormat getTimeFormat(android.content.Context); + method public static boolean is24HourFormat(android.content.Context); + } + + public class DateUtils { + ctor public DateUtils(); + method public static java.lang.String formatDateRange(android.content.Context, long, long, int); + method public static java.util.Formatter formatDateRange(android.content.Context, java.util.Formatter, long, long, int); + method public static java.util.Formatter formatDateRange(android.content.Context, java.util.Formatter, long, long, int, java.lang.String); + method public static java.lang.String formatDateTime(android.content.Context, long, int); + method public static java.lang.String formatElapsedTime(long); + method public static java.lang.String formatElapsedTime(java.lang.StringBuilder, long); + method public static final java.lang.CharSequence formatSameDayTime(long, long, int, int); + method public static deprecated java.lang.String getAMPMString(int); + method public static deprecated java.lang.String getDayOfWeekString(int, int); + method public static deprecated java.lang.String getMonthString(int, int); + method public static java.lang.CharSequence getRelativeDateTimeString(android.content.Context, long, long, long, int); + method public static java.lang.CharSequence getRelativeTimeSpanString(long); + method public static java.lang.CharSequence getRelativeTimeSpanString(long, long, long); + method public static java.lang.CharSequence getRelativeTimeSpanString(long, long, long, int); + method public static java.lang.CharSequence getRelativeTimeSpanString(android.content.Context, long, boolean); + method public static java.lang.CharSequence getRelativeTimeSpanString(android.content.Context, long); + method public static boolean isToday(long); + field public static final deprecated java.lang.String ABBREV_MONTH_FORMAT = "%b"; + field public static final java.lang.String ABBREV_WEEKDAY_FORMAT = "%a"; + field public static final long DAY_IN_MILLIS = 86400000L; // 0x5265c00L + field public static final deprecated int FORMAT_12HOUR = 64; // 0x40 + field public static final deprecated int FORMAT_24HOUR = 128; // 0x80 + field public static final int FORMAT_ABBREV_ALL = 524288; // 0x80000 + field public static final int FORMAT_ABBREV_MONTH = 65536; // 0x10000 + field public static final int FORMAT_ABBREV_RELATIVE = 262144; // 0x40000 + field public static final int FORMAT_ABBREV_TIME = 16384; // 0x4000 + field public static final int FORMAT_ABBREV_WEEKDAY = 32768; // 0x8000 + field public static final deprecated int FORMAT_CAP_AMPM = 256; // 0x100 + field public static final deprecated int FORMAT_CAP_MIDNIGHT = 4096; // 0x1000 + field public static final deprecated int FORMAT_CAP_NOON = 1024; // 0x400 + field public static final deprecated int FORMAT_CAP_NOON_MIDNIGHT = 5120; // 0x1400 + field public static final int FORMAT_NO_MIDNIGHT = 2048; // 0x800 + field public static final int FORMAT_NO_MONTH_DAY = 32; // 0x20 + field public static final int FORMAT_NO_NOON = 512; // 0x200 + field public static final deprecated int FORMAT_NO_NOON_MIDNIGHT = 2560; // 0xa00 + field public static final int FORMAT_NO_YEAR = 8; // 0x8 + field public static final int FORMAT_NUMERIC_DATE = 131072; // 0x20000 + field public static final int FORMAT_SHOW_DATE = 16; // 0x10 + field public static final int FORMAT_SHOW_TIME = 1; // 0x1 + field public static final int FORMAT_SHOW_WEEKDAY = 2; // 0x2 + field public static final int FORMAT_SHOW_YEAR = 4; // 0x4 + field public static final deprecated int FORMAT_UTC = 8192; // 0x2000 + field public static final long HOUR_IN_MILLIS = 3600000L; // 0x36ee80L + field public static final deprecated java.lang.String HOUR_MINUTE_24 = "%H:%M"; + field public static final deprecated int LENGTH_LONG = 10; // 0xa + field public static final deprecated int LENGTH_MEDIUM = 20; // 0x14 + field public static final deprecated int LENGTH_SHORT = 30; // 0x1e + field public static final deprecated int LENGTH_SHORTER = 40; // 0x28 + field public static final deprecated int LENGTH_SHORTEST = 50; // 0x32 + field public static final long MINUTE_IN_MILLIS = 60000L; // 0xea60L + field public static final java.lang.String MONTH_DAY_FORMAT = "%-d"; + field public static final java.lang.String MONTH_FORMAT = "%B"; + field public static final java.lang.String NUMERIC_MONTH_FORMAT = "%m"; + field public static final long SECOND_IN_MILLIS = 1000L; // 0x3e8L + field public static final java.lang.String WEEKDAY_FORMAT = "%A"; + field public static final long WEEK_IN_MILLIS = 604800000L; // 0x240c8400L + field public static final java.lang.String YEAR_FORMAT = "%Y"; + field public static final java.lang.String YEAR_FORMAT_TWO_DIGITS = "%g"; + field public static final long YEAR_IN_MILLIS = 31449600000L; // 0x7528ad000L + field public static final deprecated int[] sameMonthTable; + field public static final deprecated int[] sameYearTable; + } + + public final class Formatter { + ctor public Formatter(); + method public static java.lang.String formatFileSize(android.content.Context, long); + method public static deprecated java.lang.String formatIpAddress(int); + method public static java.lang.String formatShortFileSize(android.content.Context, long); + } + + public deprecated class Time { + ctor public Time(java.lang.String); + ctor public Time(); + ctor public Time(android.text.format.Time); + method public boolean after(android.text.format.Time); + method public boolean before(android.text.format.Time); + method public void clear(java.lang.String); + method public static int compare(android.text.format.Time, android.text.format.Time); + method public java.lang.String format(java.lang.String); + method public java.lang.String format2445(); + method public java.lang.String format3339(boolean); + method public int getActualMaximum(int); + method public static java.lang.String getCurrentTimezone(); + method public static int getJulianDay(long, long); + method public static int getJulianMondayFromWeeksSinceEpoch(int); + method public int getWeekNumber(); + method public static int getWeeksSinceEpochFromJulianDay(int, int); + method public static boolean isEpoch(android.text.format.Time); + method public long normalize(boolean); + method public boolean parse(java.lang.String); + method public boolean parse3339(java.lang.String); + method public void set(long); + method public void set(android.text.format.Time); + method public void set(int, int, int, int, int, int); + method public void set(int, int, int); + method public long setJulianDay(int); + method public void setToNow(); + method public void switchTimezone(java.lang.String); + method public long toMillis(boolean); + field public static final int EPOCH_JULIAN_DAY = 2440588; // 0x253d8c + field public static final int FRIDAY = 5; // 0x5 + field public static final int HOUR = 3; // 0x3 + field public static final int MINUTE = 2; // 0x2 + field public static final int MONDAY = 1; // 0x1 + field public static final int MONDAY_BEFORE_JULIAN_EPOCH = 2440585; // 0x253d89 + field public static final int MONTH = 5; // 0x5 + field public static final int MONTH_DAY = 4; // 0x4 + field public static final int SATURDAY = 6; // 0x6 + field public static final int SECOND = 1; // 0x1 + field public static final int SUNDAY = 0; // 0x0 + field public static final int THURSDAY = 4; // 0x4 + field public static final java.lang.String TIMEZONE_UTC = "UTC"; + field public static final int TUESDAY = 2; // 0x2 + field public static final int WEDNESDAY = 3; // 0x3 + field public static final int WEEK_DAY = 7; // 0x7 + field public static final int WEEK_NUM = 9; // 0x9 + field public static final int YEAR = 6; // 0x6 + field public static final int YEAR_DAY = 8; // 0x8 + field public boolean allDay; + field public long gmtoff; + field public int hour; + field public int isDst; + field public int minute; + field public int month; + field public int monthDay; + field public int second; + field public java.lang.String timezone; + field public int weekDay; + field public int year; + field public int yearDay; + } + +} + +package android.text.method { + + public class ArrowKeyMovementMethod extends android.text.method.BaseMovementMethod implements android.text.method.MovementMethod { + ctor public ArrowKeyMovementMethod(); + method public static android.text.method.MovementMethod getInstance(); + } + + public abstract class BaseKeyListener extends android.text.method.MetaKeyKeyListener implements android.text.method.KeyListener { + ctor public BaseKeyListener(); + method public boolean backspace(android.view.View, android.text.Editable, int, android.view.KeyEvent); + method public boolean forwardDelete(android.view.View, android.text.Editable, int, android.view.KeyEvent); + method public boolean onKeyOther(android.view.View, android.text.Editable, android.view.KeyEvent); + } + + public class BaseMovementMethod implements android.text.method.MovementMethod { + ctor public BaseMovementMethod(); + method protected boolean bottom(android.widget.TextView, android.text.Spannable); + method public boolean canSelectArbitrarily(); + method protected boolean down(android.widget.TextView, android.text.Spannable); + method protected boolean end(android.widget.TextView, android.text.Spannable); + method protected int getMovementMetaState(android.text.Spannable, android.view.KeyEvent); + method protected boolean handleMovementKey(android.widget.TextView, android.text.Spannable, int, int, android.view.KeyEvent); + method protected boolean home(android.widget.TextView, android.text.Spannable); + method public void initialize(android.widget.TextView, android.text.Spannable); + method protected boolean left(android.widget.TextView, android.text.Spannable); + method protected boolean lineEnd(android.widget.TextView, android.text.Spannable); + method protected boolean lineStart(android.widget.TextView, android.text.Spannable); + method public boolean onGenericMotionEvent(android.widget.TextView, android.text.Spannable, android.view.MotionEvent); + method public boolean onKeyDown(android.widget.TextView, android.text.Spannable, int, android.view.KeyEvent); + method public boolean onKeyOther(android.widget.TextView, android.text.Spannable, android.view.KeyEvent); + method public boolean onKeyUp(android.widget.TextView, android.text.Spannable, int, android.view.KeyEvent); + method public void onTakeFocus(android.widget.TextView, android.text.Spannable, int); + method public boolean onTouchEvent(android.widget.TextView, android.text.Spannable, android.view.MotionEvent); + method public boolean onTrackballEvent(android.widget.TextView, android.text.Spannable, android.view.MotionEvent); + method protected boolean pageDown(android.widget.TextView, android.text.Spannable); + method protected boolean pageUp(android.widget.TextView, android.text.Spannable); + method protected boolean right(android.widget.TextView, android.text.Spannable); + method protected boolean top(android.widget.TextView, android.text.Spannable); + method protected boolean up(android.widget.TextView, android.text.Spannable); + } + + public class CharacterPickerDialog extends android.app.Dialog implements android.widget.AdapterView.OnItemClickListener android.view.View.OnClickListener { + ctor public CharacterPickerDialog(android.content.Context, android.view.View, android.text.Editable, java.lang.String, boolean); + method public void onClick(android.view.View); + method public void onItemClick(android.widget.AdapterView, android.view.View, int, long); + } + + public class DateKeyListener extends android.text.method.NumberKeyListener { + ctor public DateKeyListener(); + method protected char[] getAcceptedChars(); + method public int getInputType(); + method public static android.text.method.DateKeyListener getInstance(); + field public static final char[] CHARACTERS; + } + + public class DateTimeKeyListener extends android.text.method.NumberKeyListener { + ctor public DateTimeKeyListener(); + method protected char[] getAcceptedChars(); + method public int getInputType(); + method public static android.text.method.DateTimeKeyListener getInstance(); + field public static final char[] CHARACTERS; + } + + public class DialerKeyListener extends android.text.method.NumberKeyListener { + ctor public DialerKeyListener(); + method protected char[] getAcceptedChars(); + method public int getInputType(); + method public static android.text.method.DialerKeyListener getInstance(); + field public static final char[] CHARACTERS; + } + + public class DigitsKeyListener extends android.text.method.NumberKeyListener { + ctor public DigitsKeyListener(); + ctor public DigitsKeyListener(boolean, boolean); + method protected char[] getAcceptedChars(); + method public int getInputType(); + method public static android.text.method.DigitsKeyListener getInstance(); + method public static android.text.method.DigitsKeyListener getInstance(boolean, boolean); + method public static android.text.method.DigitsKeyListener getInstance(java.lang.String); + } + + public class HideReturnsTransformationMethod extends android.text.method.ReplacementTransformationMethod { + ctor public HideReturnsTransformationMethod(); + method public static android.text.method.HideReturnsTransformationMethod getInstance(); + method protected char[] getOriginal(); + method protected char[] getReplacement(); + } + + public abstract interface KeyListener { + method public abstract void clearMetaKeyState(android.view.View, android.text.Editable, int); + method public abstract int getInputType(); + method public abstract boolean onKeyDown(android.view.View, android.text.Editable, int, android.view.KeyEvent); + method public abstract boolean onKeyOther(android.view.View, android.text.Editable, android.view.KeyEvent); + method public abstract boolean onKeyUp(android.view.View, android.text.Editable, int, android.view.KeyEvent); + } + + public class LinkMovementMethod extends android.text.method.ScrollingMovementMethod { + ctor public LinkMovementMethod(); + method public static android.text.method.MovementMethod getInstance(); + } + + public abstract class MetaKeyKeyListener { + ctor public MetaKeyKeyListener(); + method public static void adjustMetaAfterKeypress(android.text.Spannable); + method public static long adjustMetaAfterKeypress(long); + method public void clearMetaKeyState(android.view.View, android.text.Editable, int); + method public static void clearMetaKeyState(android.text.Editable, int); + method public long clearMetaKeyState(long, int); + method public static final int getMetaState(java.lang.CharSequence); + method public static final int getMetaState(java.lang.CharSequence, android.view.KeyEvent); + method public static final int getMetaState(java.lang.CharSequence, int); + method public static final int getMetaState(java.lang.CharSequence, int, android.view.KeyEvent); + method public static final int getMetaState(long); + method public static final int getMetaState(long, int); + method public static long handleKeyDown(long, int, android.view.KeyEvent); + method public static long handleKeyUp(long, int, android.view.KeyEvent); + method public static boolean isMetaTracker(java.lang.CharSequence, java.lang.Object); + method public static boolean isSelectingMetaTracker(java.lang.CharSequence, java.lang.Object); + method public boolean onKeyDown(android.view.View, android.text.Editable, int, android.view.KeyEvent); + method public boolean onKeyUp(android.view.View, android.text.Editable, int, android.view.KeyEvent); + method protected static void resetLockedMeta(android.text.Spannable); + method public static long resetLockedMeta(long); + method public static void resetMetaState(android.text.Spannable); + field public static final int META_ALT_LOCKED = 512; // 0x200 + field public static final int META_ALT_ON = 2; // 0x2 + field public static final int META_CAP_LOCKED = 256; // 0x100 + field public static final int META_SHIFT_ON = 1; // 0x1 + field public static final int META_SYM_LOCKED = 1024; // 0x400 + field public static final int META_SYM_ON = 4; // 0x4 + } + + public abstract interface MovementMethod { + method public abstract boolean canSelectArbitrarily(); + method public abstract void initialize(android.widget.TextView, android.text.Spannable); + method public abstract boolean onGenericMotionEvent(android.widget.TextView, android.text.Spannable, android.view.MotionEvent); + method public abstract boolean onKeyDown(android.widget.TextView, android.text.Spannable, int, android.view.KeyEvent); + method public abstract boolean onKeyOther(android.widget.TextView, android.text.Spannable, android.view.KeyEvent); + method public abstract boolean onKeyUp(android.widget.TextView, android.text.Spannable, int, android.view.KeyEvent); + method public abstract void onTakeFocus(android.widget.TextView, android.text.Spannable, int); + method public abstract boolean onTouchEvent(android.widget.TextView, android.text.Spannable, android.view.MotionEvent); + method public abstract boolean onTrackballEvent(android.widget.TextView, android.text.Spannable, android.view.MotionEvent); + } + + public class MultiTapKeyListener extends android.text.method.BaseKeyListener implements android.text.SpanWatcher { + ctor public MultiTapKeyListener(android.text.method.TextKeyListener.Capitalize, boolean); + method public int getInputType(); + method public static android.text.method.MultiTapKeyListener getInstance(boolean, android.text.method.TextKeyListener.Capitalize); + method public void onSpanAdded(android.text.Spannable, java.lang.Object, int, int); + method public void onSpanChanged(android.text.Spannable, java.lang.Object, int, int, int, int); + method public void onSpanRemoved(android.text.Spannable, java.lang.Object, int, int); + } + + public abstract class NumberKeyListener extends android.text.method.BaseKeyListener implements android.text.InputFilter { + ctor public NumberKeyListener(); + method public java.lang.CharSequence filter(java.lang.CharSequence, int, int, android.text.Spanned, int, int); + method protected abstract char[] getAcceptedChars(); + method protected int lookup(android.view.KeyEvent, android.text.Spannable); + method protected static boolean ok(char[], char); + } + + public class PasswordTransformationMethod implements android.text.TextWatcher android.text.method.TransformationMethod { + ctor public PasswordTransformationMethod(); + method public void afterTextChanged(android.text.Editable); + method public void beforeTextChanged(java.lang.CharSequence, int, int, int); + method public static android.text.method.PasswordTransformationMethod getInstance(); + method public java.lang.CharSequence getTransformation(java.lang.CharSequence, android.view.View); + method public void onFocusChanged(android.view.View, java.lang.CharSequence, boolean, int, android.graphics.Rect); + method public void onTextChanged(java.lang.CharSequence, int, int, int); + } + + public class QwertyKeyListener extends android.text.method.BaseKeyListener { + ctor public QwertyKeyListener(android.text.method.TextKeyListener.Capitalize, boolean); + method public int getInputType(); + method public static android.text.method.QwertyKeyListener getInstance(boolean, android.text.method.TextKeyListener.Capitalize); + method public static android.text.method.QwertyKeyListener getInstanceForFullKeyboard(); + method public static void markAsReplaced(android.text.Spannable, int, int, java.lang.String); + } + + public abstract class ReplacementTransformationMethod implements android.text.method.TransformationMethod { + ctor public ReplacementTransformationMethod(); + method protected abstract char[] getOriginal(); + method protected abstract char[] getReplacement(); + method public java.lang.CharSequence getTransformation(java.lang.CharSequence, android.view.View); + method public void onFocusChanged(android.view.View, java.lang.CharSequence, boolean, int, android.graphics.Rect); + } + + public class ScrollingMovementMethod extends android.text.method.BaseMovementMethod implements android.text.method.MovementMethod { + ctor public ScrollingMovementMethod(); + method public static android.text.method.MovementMethod getInstance(); + } + + public class SingleLineTransformationMethod extends android.text.method.ReplacementTransformationMethod { + ctor public SingleLineTransformationMethod(); + method public static android.text.method.SingleLineTransformationMethod getInstance(); + method protected char[] getOriginal(); + method protected char[] getReplacement(); + } + + public class TextKeyListener extends android.text.method.BaseKeyListener implements android.text.SpanWatcher { + ctor public TextKeyListener(android.text.method.TextKeyListener.Capitalize, boolean); + method public static void clear(android.text.Editable); + method public int getInputType(); + method public static android.text.method.TextKeyListener getInstance(boolean, android.text.method.TextKeyListener.Capitalize); + method public static android.text.method.TextKeyListener getInstance(); + method public void onSpanAdded(android.text.Spannable, java.lang.Object, int, int); + method public void onSpanChanged(android.text.Spannable, java.lang.Object, int, int, int, int); + method public void onSpanRemoved(android.text.Spannable, java.lang.Object, int, int); + method public void release(); + method public static boolean shouldCap(android.text.method.TextKeyListener.Capitalize, java.lang.CharSequence, int); + } + + public static final class TextKeyListener.Capitalize extends java.lang.Enum { + method public static android.text.method.TextKeyListener.Capitalize valueOf(java.lang.String); + method public static final android.text.method.TextKeyListener.Capitalize[] values(); + enum_constant public static final android.text.method.TextKeyListener.Capitalize CHARACTERS; + enum_constant public static final android.text.method.TextKeyListener.Capitalize NONE; + enum_constant public static final android.text.method.TextKeyListener.Capitalize SENTENCES; + enum_constant public static final android.text.method.TextKeyListener.Capitalize WORDS; + } + + public class TimeKeyListener extends android.text.method.NumberKeyListener { + ctor public TimeKeyListener(); + method protected char[] getAcceptedChars(); + method public int getInputType(); + method public static android.text.method.TimeKeyListener getInstance(); + field public static final char[] CHARACTERS; + } + + public class Touch { + method public static int getInitialScrollX(android.widget.TextView, android.text.Spannable); + method public static int getInitialScrollY(android.widget.TextView, android.text.Spannable); + method public static boolean onTouchEvent(android.widget.TextView, android.text.Spannable, android.view.MotionEvent); + method public static void scrollTo(android.widget.TextView, android.text.Layout, int, int); + } + + public abstract interface TransformationMethod { + method public abstract java.lang.CharSequence getTransformation(java.lang.CharSequence, android.view.View); + method public abstract void onFocusChanged(android.view.View, java.lang.CharSequence, boolean, int, android.graphics.Rect); + } + +} + +package android.text.style { + + public class AbsoluteSizeSpan extends android.text.style.MetricAffectingSpan implements android.text.ParcelableSpan { + ctor public AbsoluteSizeSpan(int); + ctor public AbsoluteSizeSpan(int, boolean); + ctor public AbsoluteSizeSpan(android.os.Parcel); + method public int describeContents(); + method public boolean getDip(); + method public int getSize(); + method public int getSpanTypeId(); + method public void updateDrawState(android.text.TextPaint); + method public void updateMeasureState(android.text.TextPaint); + method public void writeToParcel(android.os.Parcel, int); + } + + public abstract interface AlignmentSpan implements android.text.style.ParagraphStyle { + method public abstract android.text.Layout.Alignment getAlignment(); + } + + public static class AlignmentSpan.Standard implements android.text.style.AlignmentSpan android.text.ParcelableSpan { + ctor public AlignmentSpan.Standard(android.text.Layout.Alignment); + ctor public AlignmentSpan.Standard(android.os.Parcel); + method public int describeContents(); + method public android.text.Layout.Alignment getAlignment(); + method public int getSpanTypeId(); + method public void writeToParcel(android.os.Parcel, int); + } + + public class BackgroundColorSpan extends android.text.style.CharacterStyle implements android.text.ParcelableSpan android.text.style.UpdateAppearance { + ctor public BackgroundColorSpan(int); + ctor public BackgroundColorSpan(android.os.Parcel); + method public int describeContents(); + method public int getBackgroundColor(); + method public int getSpanTypeId(); + method public void updateDrawState(android.text.TextPaint); + method public void writeToParcel(android.os.Parcel, int); + } + + public class BulletSpan implements android.text.style.LeadingMarginSpan android.text.ParcelableSpan { + ctor public BulletSpan(); + ctor public BulletSpan(int); + ctor public BulletSpan(int, int); + ctor public BulletSpan(android.os.Parcel); + method public int describeContents(); + method public void drawLeadingMargin(android.graphics.Canvas, android.graphics.Paint, int, int, int, int, int, java.lang.CharSequence, int, int, boolean, android.text.Layout); + method public int getLeadingMargin(boolean); + method public int getSpanTypeId(); + method public void writeToParcel(android.os.Parcel, int); + field public static final int STANDARD_GAP_WIDTH = 2; // 0x2 + } + + public abstract class CharacterStyle { + ctor public CharacterStyle(); + method public android.text.style.CharacterStyle getUnderlying(); + method public abstract void updateDrawState(android.text.TextPaint); + method public static android.text.style.CharacterStyle wrap(android.text.style.CharacterStyle); + } + + public abstract class ClickableSpan extends android.text.style.CharacterStyle implements android.text.style.UpdateAppearance { + ctor public ClickableSpan(); + method public abstract void onClick(android.view.View); + method public void updateDrawState(android.text.TextPaint); + } + + public class DrawableMarginSpan implements android.text.style.LeadingMarginSpan android.text.style.LineHeightSpan { + ctor public DrawableMarginSpan(android.graphics.drawable.Drawable); + ctor public DrawableMarginSpan(android.graphics.drawable.Drawable, int); + method public void chooseHeight(java.lang.CharSequence, int, int, int, int, android.graphics.Paint.FontMetricsInt); + method public void drawLeadingMargin(android.graphics.Canvas, android.graphics.Paint, int, int, int, int, int, java.lang.CharSequence, int, int, boolean, android.text.Layout); + method public int getLeadingMargin(boolean); + } + + public abstract class DynamicDrawableSpan extends android.text.style.ReplacementSpan { + ctor public DynamicDrawableSpan(); + ctor protected DynamicDrawableSpan(int); + method public void draw(android.graphics.Canvas, java.lang.CharSequence, int, int, float, int, int, int, android.graphics.Paint); + method public abstract android.graphics.drawable.Drawable getDrawable(); + method public int getSize(android.graphics.Paint, java.lang.CharSequence, int, int, android.graphics.Paint.FontMetricsInt); + method public int getVerticalAlignment(); + field public static final int ALIGN_BASELINE = 1; // 0x1 + field public static final int ALIGN_BOTTOM = 0; // 0x0 + field protected final int mVerticalAlignment; + } + + public class EasyEditSpan implements android.text.ParcelableSpan { + ctor public EasyEditSpan(); + ctor public EasyEditSpan(android.app.PendingIntent); + ctor public EasyEditSpan(android.os.Parcel); + method public int describeContents(); + method public int getSpanTypeId(); + method public void writeToParcel(android.os.Parcel, int); + field public static final java.lang.String EXTRA_TEXT_CHANGED_TYPE = "android.text.style.EXTRA_TEXT_CHANGED_TYPE"; + field public static final int TEXT_DELETED = 1; // 0x1 + field public static final int TEXT_MODIFIED = 2; // 0x2 + } + + public class ForegroundColorSpan extends android.text.style.CharacterStyle implements android.text.ParcelableSpan android.text.style.UpdateAppearance { + ctor public ForegroundColorSpan(int); + ctor public ForegroundColorSpan(android.os.Parcel); + method public int describeContents(); + method public int getForegroundColor(); + method public int getSpanTypeId(); + method public void updateDrawState(android.text.TextPaint); + method public void writeToParcel(android.os.Parcel, int); + } + + public class IconMarginSpan implements android.text.style.LeadingMarginSpan android.text.style.LineHeightSpan { + ctor public IconMarginSpan(android.graphics.Bitmap); + ctor public IconMarginSpan(android.graphics.Bitmap, int); + method public void chooseHeight(java.lang.CharSequence, int, int, int, int, android.graphics.Paint.FontMetricsInt); + method public void drawLeadingMargin(android.graphics.Canvas, android.graphics.Paint, int, int, int, int, int, java.lang.CharSequence, int, int, boolean, android.text.Layout); + method public int getLeadingMargin(boolean); + } + + public class ImageSpan extends android.text.style.DynamicDrawableSpan { + ctor public deprecated ImageSpan(android.graphics.Bitmap); + ctor public deprecated ImageSpan(android.graphics.Bitmap, int); + ctor public ImageSpan(android.content.Context, android.graphics.Bitmap); + ctor public ImageSpan(android.content.Context, android.graphics.Bitmap, int); + ctor public ImageSpan(android.graphics.drawable.Drawable); + ctor public ImageSpan(android.graphics.drawable.Drawable, int); + ctor public ImageSpan(android.graphics.drawable.Drawable, java.lang.String); + ctor public ImageSpan(android.graphics.drawable.Drawable, java.lang.String, int); + ctor public ImageSpan(android.content.Context, android.net.Uri); + ctor public ImageSpan(android.content.Context, android.net.Uri, int); + ctor public ImageSpan(android.content.Context, int); + ctor public ImageSpan(android.content.Context, int, int); + method public android.graphics.drawable.Drawable getDrawable(); + method public java.lang.String getSource(); + } + + public abstract interface LeadingMarginSpan implements android.text.style.ParagraphStyle { + method public abstract void drawLeadingMargin(android.graphics.Canvas, android.graphics.Paint, int, int, int, int, int, java.lang.CharSequence, int, int, boolean, android.text.Layout); + method public abstract int getLeadingMargin(boolean); + } + + public static abstract interface LeadingMarginSpan.LeadingMarginSpan2 implements android.text.style.LeadingMarginSpan android.text.style.WrapTogetherSpan { + method public abstract int getLeadingMarginLineCount(); + } + + public static class LeadingMarginSpan.Standard implements android.text.style.LeadingMarginSpan android.text.ParcelableSpan { + ctor public LeadingMarginSpan.Standard(int, int); + ctor public LeadingMarginSpan.Standard(int); + ctor public LeadingMarginSpan.Standard(android.os.Parcel); + method public int describeContents(); + method public void drawLeadingMargin(android.graphics.Canvas, android.graphics.Paint, int, int, int, int, int, java.lang.CharSequence, int, int, boolean, android.text.Layout); + method public int getLeadingMargin(boolean); + method public int getSpanTypeId(); + method public void writeToParcel(android.os.Parcel, int); + } + + public abstract interface LineBackgroundSpan implements android.text.style.ParagraphStyle { + method public abstract void drawBackground(android.graphics.Canvas, android.graphics.Paint, int, int, int, int, int, java.lang.CharSequence, int, int, int); + } + + public abstract interface LineHeightSpan implements android.text.style.ParagraphStyle android.text.style.WrapTogetherSpan { + method public abstract void chooseHeight(java.lang.CharSequence, int, int, int, int, android.graphics.Paint.FontMetricsInt); + } + + public static abstract interface LineHeightSpan.WithDensity implements android.text.style.LineHeightSpan { + method public abstract void chooseHeight(java.lang.CharSequence, int, int, int, int, android.graphics.Paint.FontMetricsInt, android.text.TextPaint); + } + + public class LocaleSpan extends android.text.style.MetricAffectingSpan implements android.text.ParcelableSpan { + ctor public LocaleSpan(java.util.Locale); + ctor public LocaleSpan(android.os.Parcel); + method public int describeContents(); + method public java.util.Locale getLocale(); + method public int getSpanTypeId(); + method public void updateDrawState(android.text.TextPaint); + method public void updateMeasureState(android.text.TextPaint); + method public void writeToParcel(android.os.Parcel, int); + } + + public class MaskFilterSpan extends android.text.style.CharacterStyle implements android.text.style.UpdateAppearance { + ctor public MaskFilterSpan(android.graphics.MaskFilter); + method public android.graphics.MaskFilter getMaskFilter(); + method public void updateDrawState(android.text.TextPaint); + } + + public abstract class MetricAffectingSpan extends android.text.style.CharacterStyle implements android.text.style.UpdateLayout { + ctor public MetricAffectingSpan(); + method public abstract void updateMeasureState(android.text.TextPaint); + } + + public abstract interface ParagraphStyle { + } + + public class QuoteSpan implements android.text.style.LeadingMarginSpan android.text.ParcelableSpan { + ctor public QuoteSpan(); + ctor public QuoteSpan(int); + ctor public QuoteSpan(android.os.Parcel); + method public int describeContents(); + method public void drawLeadingMargin(android.graphics.Canvas, android.graphics.Paint, int, int, int, int, int, java.lang.CharSequence, int, int, boolean, android.text.Layout); + method public int getColor(); + method public int getLeadingMargin(boolean); + method public int getSpanTypeId(); + method public void writeToParcel(android.os.Parcel, int); + } + + public class RasterizerSpan extends android.text.style.CharacterStyle implements android.text.style.UpdateAppearance { + ctor public RasterizerSpan(android.graphics.Rasterizer); + method public android.graphics.Rasterizer getRasterizer(); + method public void updateDrawState(android.text.TextPaint); + } + + public class RelativeSizeSpan extends android.text.style.MetricAffectingSpan implements android.text.ParcelableSpan { + ctor public RelativeSizeSpan(float); + ctor public RelativeSizeSpan(android.os.Parcel); + method public int describeContents(); + method public float getSizeChange(); + method public int getSpanTypeId(); + method public void updateDrawState(android.text.TextPaint); + method public void updateMeasureState(android.text.TextPaint); + method public void writeToParcel(android.os.Parcel, int); + } + + public abstract class ReplacementSpan extends android.text.style.MetricAffectingSpan { + ctor public ReplacementSpan(); + method public abstract void draw(android.graphics.Canvas, java.lang.CharSequence, int, int, float, int, int, int, android.graphics.Paint); + method public abstract int getSize(android.graphics.Paint, java.lang.CharSequence, int, int, android.graphics.Paint.FontMetricsInt); + method public void updateDrawState(android.text.TextPaint); + method public void updateMeasureState(android.text.TextPaint); + } + + public class ScaleXSpan extends android.text.style.MetricAffectingSpan implements android.text.ParcelableSpan { + ctor public ScaleXSpan(float); + ctor public ScaleXSpan(android.os.Parcel); + method public int describeContents(); + method public float getScaleX(); + method public int getSpanTypeId(); + method public void updateDrawState(android.text.TextPaint); + method public void updateMeasureState(android.text.TextPaint); + method public void writeToParcel(android.os.Parcel, int); + } + + public class StrikethroughSpan extends android.text.style.CharacterStyle implements android.text.ParcelableSpan android.text.style.UpdateAppearance { + ctor public StrikethroughSpan(); + ctor public StrikethroughSpan(android.os.Parcel); + method public int describeContents(); + method public int getSpanTypeId(); + method public void updateDrawState(android.text.TextPaint); + method public void writeToParcel(android.os.Parcel, int); + } + + public class StyleSpan extends android.text.style.MetricAffectingSpan implements android.text.ParcelableSpan { + ctor public StyleSpan(int); + ctor public StyleSpan(android.os.Parcel); + method public int describeContents(); + method public int getSpanTypeId(); + method public int getStyle(); + method public void updateDrawState(android.text.TextPaint); + method public void updateMeasureState(android.text.TextPaint); + method public void writeToParcel(android.os.Parcel, int); + } + + public class SubscriptSpan extends android.text.style.MetricAffectingSpan implements android.text.ParcelableSpan { + ctor public SubscriptSpan(); + ctor public SubscriptSpan(android.os.Parcel); + method public int describeContents(); + method public int getSpanTypeId(); + method public void updateDrawState(android.text.TextPaint); + method public void updateMeasureState(android.text.TextPaint); + method public void writeToParcel(android.os.Parcel, int); + } + + public class SuggestionSpan extends android.text.style.CharacterStyle implements android.text.ParcelableSpan { + ctor public SuggestionSpan(android.content.Context, java.lang.String[], int); + ctor public SuggestionSpan(java.util.Locale, java.lang.String[], int); + ctor public SuggestionSpan(android.content.Context, java.util.Locale, java.lang.String[], int, java.lang.Class); + ctor public SuggestionSpan(android.os.Parcel); + method public int describeContents(); + method public int getFlags(); + method public java.lang.String getLocale(); + method public int getSpanTypeId(); + method public java.lang.String[] getSuggestions(); + method public void setFlags(int); + method public void updateDrawState(android.text.TextPaint); + method public void writeToParcel(android.os.Parcel, int); + field public static final java.lang.String ACTION_SUGGESTION_PICKED = "android.text.style.SUGGESTION_PICKED"; + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int FLAG_AUTO_CORRECTION = 4; // 0x4 + field public static final int FLAG_EASY_CORRECT = 1; // 0x1 + field public static final int FLAG_MISSPELLED = 2; // 0x2 + field public static final int SUGGESTIONS_MAX_SIZE = 5; // 0x5 + field public static final java.lang.String SUGGESTION_SPAN_PICKED_AFTER = "after"; + field public static final java.lang.String SUGGESTION_SPAN_PICKED_BEFORE = "before"; + field public static final java.lang.String SUGGESTION_SPAN_PICKED_HASHCODE = "hashcode"; + } + + public class SuperscriptSpan extends android.text.style.MetricAffectingSpan implements android.text.ParcelableSpan { + ctor public SuperscriptSpan(); + ctor public SuperscriptSpan(android.os.Parcel); + method public int describeContents(); + method public int getSpanTypeId(); + method public void updateDrawState(android.text.TextPaint); + method public void updateMeasureState(android.text.TextPaint); + method public void writeToParcel(android.os.Parcel, int); + } + + public abstract interface TabStopSpan implements android.text.style.ParagraphStyle { + method public abstract int getTabStop(); + } + + public static class TabStopSpan.Standard implements android.text.style.TabStopSpan { + ctor public TabStopSpan.Standard(int); + method public int getTabStop(); + } + + public class TextAppearanceSpan extends android.text.style.MetricAffectingSpan implements android.text.ParcelableSpan { + ctor public TextAppearanceSpan(android.content.Context, int); + ctor public TextAppearanceSpan(android.content.Context, int, int); + ctor public TextAppearanceSpan(java.lang.String, int, int, android.content.res.ColorStateList, android.content.res.ColorStateList); + ctor public TextAppearanceSpan(android.os.Parcel); + method public int describeContents(); + method public java.lang.String getFamily(); + method public android.content.res.ColorStateList getLinkTextColor(); + method public int getSpanTypeId(); + method public android.content.res.ColorStateList getTextColor(); + method public int getTextSize(); + method public int getTextStyle(); + method public void updateDrawState(android.text.TextPaint); + method public void updateMeasureState(android.text.TextPaint); + method public void writeToParcel(android.os.Parcel, int); + } + + public class TtsSpan implements android.text.ParcelableSpan { + ctor public TtsSpan(java.lang.String, android.os.PersistableBundle); + ctor public TtsSpan(android.os.Parcel); + method public int describeContents(); + method public android.os.PersistableBundle getArgs(); + method public int getSpanTypeId(); + method public java.lang.String getType(); + method public void writeToParcel(android.os.Parcel, int); + field public static final java.lang.String ANIMACY_ANIMATE = "android.animate"; + field public static final java.lang.String ANIMACY_INANIMATE = "android.inanimate"; + field public static final java.lang.String ARG_ANIMACY = "android.arg.animacy"; + field public static final java.lang.String ARG_CASE = "android.arg.case"; + field public static final java.lang.String ARG_COUNTRY_CODE = "android.arg.country_code"; + field public static final java.lang.String ARG_CURRENCY = "android.arg.money"; + field public static final java.lang.String ARG_DAY = "android.arg.day"; + field public static final java.lang.String ARG_DENOMINATOR = "android.arg.denominator"; + field public static final java.lang.String ARG_DIGITS = "android.arg.digits"; + field public static final java.lang.String ARG_DOMAIN = "android.arg.domain"; + field public static final java.lang.String ARG_EXTENSION = "android.arg.extension"; + field public static final java.lang.String ARG_FRACTIONAL_PART = "android.arg.fractional_part"; + field public static final java.lang.String ARG_FRAGMENT_ID = "android.arg.fragment_id"; + field public static final java.lang.String ARG_GENDER = "android.arg.gender"; + field public static final java.lang.String ARG_HOURS = "android.arg.hours"; + field public static final java.lang.String ARG_INTEGER_PART = "android.arg.integer_part"; + field public static final java.lang.String ARG_MINUTES = "android.arg.minutes"; + field public static final java.lang.String ARG_MONTH = "android.arg.month"; + field public static final java.lang.String ARG_MULTIPLICITY = "android.arg.multiplicity"; + field public static final java.lang.String ARG_NUMBER = "android.arg.number"; + field public static final java.lang.String ARG_NUMBER_PARTS = "android.arg.number_parts"; + field public static final java.lang.String ARG_NUMERATOR = "android.arg.numerator"; + field public static final java.lang.String ARG_PASSWORD = "android.arg.password"; + field public static final java.lang.String ARG_PATH = "android.arg.path"; + field public static final java.lang.String ARG_PORT = "android.arg.port"; + field public static final java.lang.String ARG_PROTOCOL = "android.arg.protocol"; + field public static final java.lang.String ARG_QUANTITY = "android.arg.quantity"; + field public static final java.lang.String ARG_QUERY_STRING = "android.arg.query_string"; + field public static final java.lang.String ARG_TEXT = "android.arg.text"; + field public static final java.lang.String ARG_UNIT = "android.arg.unit"; + field public static final java.lang.String ARG_USERNAME = "android.arg.username"; + field public static final java.lang.String ARG_VERBATIM = "android.arg.verbatim"; + field public static final java.lang.String ARG_WEEKDAY = "android.arg.weekday"; + field public static final java.lang.String ARG_YEAR = "android.arg.year"; + field public static final java.lang.String CASE_ABLATIVE = "android.ablative"; + field public static final java.lang.String CASE_ACCUSATIVE = "android.accusative"; + field public static final java.lang.String CASE_DATIVE = "android.dative"; + field public static final java.lang.String CASE_GENITIVE = "android.genitive"; + field public static final java.lang.String CASE_INSTRUMENTAL = "android.instrumental"; + field public static final java.lang.String CASE_LOCATIVE = "android.locative"; + field public static final java.lang.String CASE_NOMINATIVE = "android.nominative"; + field public static final java.lang.String CASE_VOCATIVE = "android.vocative"; + field public static final java.lang.String GENDER_FEMALE = "android.female"; + field public static final java.lang.String GENDER_MALE = "android.male"; + field public static final java.lang.String GENDER_NEUTRAL = "android.neutral"; + field public static final int MONTH_APRIL = 3; // 0x3 + field public static final int MONTH_AUGUST = 7; // 0x7 + field public static final int MONTH_DECEMBER = 11; // 0xb + field public static final int MONTH_FEBRUARY = 1; // 0x1 + field public static final int MONTH_JANUARY = 0; // 0x0 + field public static final int MONTH_JULY = 6; // 0x6 + field public static final int MONTH_JUNE = 5; // 0x5 + field public static final int MONTH_MARCH = 2; // 0x2 + field public static final int MONTH_MAY = 4; // 0x4 + field public static final int MONTH_NOVEMBER = 10; // 0xa + field public static final int MONTH_OCTOBER = 9; // 0x9 + field public static final int MONTH_SEPTEMBER = 8; // 0x8 + field public static final java.lang.String MULTIPLICITY_DUAL = "android.dual"; + field public static final java.lang.String MULTIPLICITY_PLURAL = "android.plural"; + field public static final java.lang.String MULTIPLICITY_SINGLE = "android.single"; + field public static final java.lang.String TYPE_CARDINAL = "android.type.cardinal"; + field public static final java.lang.String TYPE_DATE = "android.type.date"; + field public static final java.lang.String TYPE_DECIMAL = "android.type.decimal"; + field public static final java.lang.String TYPE_DIGITS = "android.type.digits"; + field public static final java.lang.String TYPE_ELECTRONIC = "android.type.electronic"; + field public static final java.lang.String TYPE_FRACTION = "android.type.fraction"; + field public static final java.lang.String TYPE_MEASURE = "android.type.measure"; + field public static final java.lang.String TYPE_MONEY = "android.type.money"; + field public static final java.lang.String TYPE_ORDINAL = "android.type.ordinal"; + field public static final java.lang.String TYPE_TELEPHONE = "android.type.telephone"; + field public static final java.lang.String TYPE_TEXT = "android.type.text"; + field public static final java.lang.String TYPE_TIME = "android.type.time"; + field public static final java.lang.String TYPE_VERBATIM = "android.type.verbatim"; + field public static final int WEEKDAY_FRIDAY = 6; // 0x6 + field public static final int WEEKDAY_MONDAY = 2; // 0x2 + field public static final int WEEKDAY_SATURDAY = 7; // 0x7 + field public static final int WEEKDAY_SUNDAY = 1; // 0x1 + field public static final int WEEKDAY_THURSDAY = 5; // 0x5 + field public static final int WEEKDAY_TUESDAY = 3; // 0x3 + field public static final int WEEKDAY_WEDNESDAY = 4; // 0x4 + } + + public static class TtsSpan.Builder { + ctor public TtsSpan.Builder(java.lang.String); + method public android.text.style.TtsSpan build(); + method public C setIntArgument(java.lang.String, int); + method public C setLongArgument(java.lang.String, long); + method public C setStringArgument(java.lang.String, java.lang.String); + } + + public static class TtsSpan.CardinalBuilder extends android.text.style.TtsSpan.SemioticClassBuilder { + ctor public TtsSpan.CardinalBuilder(); + ctor public TtsSpan.CardinalBuilder(long); + ctor public TtsSpan.CardinalBuilder(java.lang.String); + method public android.text.style.TtsSpan.CardinalBuilder setNumber(long); + method public android.text.style.TtsSpan.CardinalBuilder setNumber(java.lang.String); + } + + public static class TtsSpan.DateBuilder extends android.text.style.TtsSpan.SemioticClassBuilder { + ctor public TtsSpan.DateBuilder(); + ctor public TtsSpan.DateBuilder(java.lang.Integer, java.lang.Integer, java.lang.Integer, java.lang.Integer); + method public android.text.style.TtsSpan.DateBuilder setDay(int); + method public android.text.style.TtsSpan.DateBuilder setMonth(int); + method public android.text.style.TtsSpan.DateBuilder setWeekday(int); + method public android.text.style.TtsSpan.DateBuilder setYear(int); + } + + public static class TtsSpan.DecimalBuilder extends android.text.style.TtsSpan.SemioticClassBuilder { + ctor public TtsSpan.DecimalBuilder(); + ctor public TtsSpan.DecimalBuilder(double, int, int); + ctor public TtsSpan.DecimalBuilder(java.lang.String, java.lang.String); + method public android.text.style.TtsSpan.DecimalBuilder setArgumentsFromDouble(double, int, int); + method public android.text.style.TtsSpan.DecimalBuilder setFractionalPart(java.lang.String); + method public android.text.style.TtsSpan.DecimalBuilder setIntegerPart(long); + method public android.text.style.TtsSpan.DecimalBuilder setIntegerPart(java.lang.String); + } + + public static class TtsSpan.DigitsBuilder extends android.text.style.TtsSpan.SemioticClassBuilder { + ctor public TtsSpan.DigitsBuilder(); + ctor public TtsSpan.DigitsBuilder(java.lang.String); + method public android.text.style.TtsSpan.DigitsBuilder setDigits(java.lang.String); + } + + public static class TtsSpan.ElectronicBuilder extends android.text.style.TtsSpan.SemioticClassBuilder { + ctor public TtsSpan.ElectronicBuilder(); + method public android.text.style.TtsSpan.ElectronicBuilder setDomain(java.lang.String); + method public android.text.style.TtsSpan.ElectronicBuilder setEmailArguments(java.lang.String, java.lang.String); + method public android.text.style.TtsSpan.ElectronicBuilder setFragmentId(java.lang.String); + method public android.text.style.TtsSpan.ElectronicBuilder setPassword(java.lang.String); + method public android.text.style.TtsSpan.ElectronicBuilder setPath(java.lang.String); + method public android.text.style.TtsSpan.ElectronicBuilder setPort(int); + method public android.text.style.TtsSpan.ElectronicBuilder setProtocol(java.lang.String); + method public android.text.style.TtsSpan.ElectronicBuilder setQueryString(java.lang.String); + method public android.text.style.TtsSpan.ElectronicBuilder setUsername(java.lang.String); + } + + public static class TtsSpan.FractionBuilder extends android.text.style.TtsSpan.SemioticClassBuilder { + ctor public TtsSpan.FractionBuilder(); + ctor public TtsSpan.FractionBuilder(long, long, long); + method public android.text.style.TtsSpan.FractionBuilder setDenominator(long); + method public android.text.style.TtsSpan.FractionBuilder setDenominator(java.lang.String); + method public android.text.style.TtsSpan.FractionBuilder setIntegerPart(long); + method public android.text.style.TtsSpan.FractionBuilder setIntegerPart(java.lang.String); + method public android.text.style.TtsSpan.FractionBuilder setNumerator(long); + method public android.text.style.TtsSpan.FractionBuilder setNumerator(java.lang.String); + } + + public static class TtsSpan.MeasureBuilder extends android.text.style.TtsSpan.SemioticClassBuilder { + ctor public TtsSpan.MeasureBuilder(); + method public android.text.style.TtsSpan.MeasureBuilder setDenominator(long); + method public android.text.style.TtsSpan.MeasureBuilder setDenominator(java.lang.String); + method public android.text.style.TtsSpan.MeasureBuilder setFractionalPart(java.lang.String); + method public android.text.style.TtsSpan.MeasureBuilder setIntegerPart(long); + method public android.text.style.TtsSpan.MeasureBuilder setIntegerPart(java.lang.String); + method public android.text.style.TtsSpan.MeasureBuilder setNumber(long); + method public android.text.style.TtsSpan.MeasureBuilder setNumber(java.lang.String); + method public android.text.style.TtsSpan.MeasureBuilder setNumerator(long); + method public android.text.style.TtsSpan.MeasureBuilder setNumerator(java.lang.String); + method public android.text.style.TtsSpan.MeasureBuilder setUnit(java.lang.String); + } + + public static class TtsSpan.MoneyBuilder extends android.text.style.TtsSpan.SemioticClassBuilder { + ctor public TtsSpan.MoneyBuilder(); + method public android.text.style.TtsSpan.MoneyBuilder setCurrency(java.lang.String); + method public android.text.style.TtsSpan.MoneyBuilder setFractionalPart(java.lang.String); + method public android.text.style.TtsSpan.MoneyBuilder setIntegerPart(long); + method public android.text.style.TtsSpan.MoneyBuilder setIntegerPart(java.lang.String); + method public android.text.style.TtsSpan.MoneyBuilder setQuantity(java.lang.String); + } + + public static class TtsSpan.OrdinalBuilder extends android.text.style.TtsSpan.SemioticClassBuilder { + ctor public TtsSpan.OrdinalBuilder(); + ctor public TtsSpan.OrdinalBuilder(long); + ctor public TtsSpan.OrdinalBuilder(java.lang.String); + method public android.text.style.TtsSpan.OrdinalBuilder setNumber(long); + method public android.text.style.TtsSpan.OrdinalBuilder setNumber(java.lang.String); + } + + public static class TtsSpan.SemioticClassBuilder extends android.text.style.TtsSpan.Builder { + ctor public TtsSpan.SemioticClassBuilder(java.lang.String); + method public C setAnimacy(java.lang.String); + method public C setCase(java.lang.String); + method public C setGender(java.lang.String); + method public C setMultiplicity(java.lang.String); + } + + public static class TtsSpan.TelephoneBuilder extends android.text.style.TtsSpan.SemioticClassBuilder { + ctor public TtsSpan.TelephoneBuilder(); + ctor public TtsSpan.TelephoneBuilder(java.lang.String); + method public android.text.style.TtsSpan.TelephoneBuilder setCountryCode(java.lang.String); + method public android.text.style.TtsSpan.TelephoneBuilder setExtension(java.lang.String); + method public android.text.style.TtsSpan.TelephoneBuilder setNumberParts(java.lang.String); + } + + public static class TtsSpan.TextBuilder extends android.text.style.TtsSpan.SemioticClassBuilder { + ctor public TtsSpan.TextBuilder(); + ctor public TtsSpan.TextBuilder(java.lang.String); + method public android.text.style.TtsSpan.TextBuilder setText(java.lang.String); + } + + public static class TtsSpan.TimeBuilder extends android.text.style.TtsSpan.SemioticClassBuilder { + ctor public TtsSpan.TimeBuilder(); + ctor public TtsSpan.TimeBuilder(int, int); + method public android.text.style.TtsSpan.TimeBuilder setHours(int); + method public android.text.style.TtsSpan.TimeBuilder setMinutes(int); + } + + public static class TtsSpan.VerbatimBuilder extends android.text.style.TtsSpan.SemioticClassBuilder { + ctor public TtsSpan.VerbatimBuilder(); + ctor public TtsSpan.VerbatimBuilder(java.lang.String); + method public android.text.style.TtsSpan.VerbatimBuilder setVerbatim(java.lang.String); + } + + public class TypefaceSpan extends android.text.style.MetricAffectingSpan implements android.text.ParcelableSpan { + ctor public TypefaceSpan(java.lang.String); + ctor public TypefaceSpan(android.os.Parcel); + method public int describeContents(); + method public java.lang.String getFamily(); + method public int getSpanTypeId(); + method public void updateDrawState(android.text.TextPaint); + method public void updateMeasureState(android.text.TextPaint); + method public void writeToParcel(android.os.Parcel, int); + } + + public class URLSpan extends android.text.style.ClickableSpan implements android.text.ParcelableSpan { + ctor public URLSpan(java.lang.String); + ctor public URLSpan(android.os.Parcel); + method public int describeContents(); + method public int getSpanTypeId(); + method public java.lang.String getURL(); + method public void onClick(android.view.View); + method public void writeToParcel(android.os.Parcel, int); + } + + public class UnderlineSpan extends android.text.style.CharacterStyle implements android.text.ParcelableSpan android.text.style.UpdateAppearance { + ctor public UnderlineSpan(); + ctor public UnderlineSpan(android.os.Parcel); + method public int describeContents(); + method public int getSpanTypeId(); + method public void updateDrawState(android.text.TextPaint); + method public void writeToParcel(android.os.Parcel, int); + } + + public abstract interface UpdateAppearance { + } + + public abstract interface UpdateLayout implements android.text.style.UpdateAppearance { + } + + public abstract interface WrapTogetherSpan implements android.text.style.ParagraphStyle { + } + +} + +package android.text.util { + + public class Linkify { + ctor public Linkify(); + method public static final boolean addLinks(android.text.Spannable, int); + method public static final boolean addLinks(android.widget.TextView, int); + method public static final void addLinks(android.widget.TextView, java.util.regex.Pattern, java.lang.String); + method public static final void addLinks(android.widget.TextView, java.util.regex.Pattern, java.lang.String, android.text.util.Linkify.MatchFilter, android.text.util.Linkify.TransformFilter); + method public static final boolean addLinks(android.text.Spannable, java.util.regex.Pattern, java.lang.String); + method public static final boolean addLinks(android.text.Spannable, java.util.regex.Pattern, java.lang.String, android.text.util.Linkify.MatchFilter, android.text.util.Linkify.TransformFilter); + field public static final int ALL = 15; // 0xf + field public static final int EMAIL_ADDRESSES = 2; // 0x2 + field public static final int MAP_ADDRESSES = 8; // 0x8 + field public static final int PHONE_NUMBERS = 4; // 0x4 + field public static final int WEB_URLS = 1; // 0x1 + field public static final android.text.util.Linkify.MatchFilter sPhoneNumberMatchFilter; + field public static final android.text.util.Linkify.TransformFilter sPhoneNumberTransformFilter; + field public static final android.text.util.Linkify.MatchFilter sUrlMatchFilter; + } + + public static abstract interface Linkify.MatchFilter { + method public abstract boolean acceptMatch(java.lang.CharSequence, int, int); + } + + public static abstract interface Linkify.TransformFilter { + method public abstract java.lang.String transformUrl(java.util.regex.Matcher, java.lang.String); + } + + public class Rfc822Token { + ctor public Rfc822Token(java.lang.String, java.lang.String, java.lang.String); + method public java.lang.String getAddress(); + method public java.lang.String getComment(); + method public java.lang.String getName(); + method public static java.lang.String quoteComment(java.lang.String); + method public static java.lang.String quoteName(java.lang.String); + method public static java.lang.String quoteNameIfNecessary(java.lang.String); + method public void setAddress(java.lang.String); + method public void setComment(java.lang.String); + method public void setName(java.lang.String); + } + + public class Rfc822Tokenizer implements android.widget.MultiAutoCompleteTextView.Tokenizer { + ctor public Rfc822Tokenizer(); + method public int findTokenEnd(java.lang.CharSequence, int); + method public int findTokenStart(java.lang.CharSequence, int); + method public java.lang.CharSequence terminateToken(java.lang.CharSequence); + method public static void tokenize(java.lang.CharSequence, java.util.Collection); + method public static android.text.util.Rfc822Token[] tokenize(java.lang.CharSequence); + } + +} + +package android.transition { + + public class ArcMotion extends android.transition.PathMotion { + ctor public ArcMotion(); + ctor public ArcMotion(android.content.Context, android.util.AttributeSet); + method public float getMaximumAngle(); + method public float getMinimumHorizontalAngle(); + method public float getMinimumVerticalAngle(); + method public android.graphics.Path getPath(float, float, float, float); + method public void setMaximumAngle(float); + method public void setMinimumHorizontalAngle(float); + method public void setMinimumVerticalAngle(float); + } + + public class AutoTransition extends android.transition.TransitionSet { + ctor public AutoTransition(); + ctor public AutoTransition(android.content.Context, android.util.AttributeSet); + } + + public class ChangeBounds extends android.transition.Transition { + ctor public ChangeBounds(); + ctor public ChangeBounds(android.content.Context, android.util.AttributeSet); + method public void captureEndValues(android.transition.TransitionValues); + method public void captureStartValues(android.transition.TransitionValues); + method public boolean getResizeClip(); + method public deprecated void setReparent(boolean); + method public void setResizeClip(boolean); + } + + public class ChangeClipBounds extends android.transition.Transition { + ctor public ChangeClipBounds(); + ctor public ChangeClipBounds(android.content.Context, android.util.AttributeSet); + method public void captureEndValues(android.transition.TransitionValues); + method public void captureStartValues(android.transition.TransitionValues); + } + + public class ChangeImageTransform extends android.transition.Transition { + ctor public ChangeImageTransform(); + ctor public ChangeImageTransform(android.content.Context, android.util.AttributeSet); + method public void captureEndValues(android.transition.TransitionValues); + method public void captureStartValues(android.transition.TransitionValues); + } + + public class ChangeTransform extends android.transition.Transition { + ctor public ChangeTransform(); + ctor public ChangeTransform(android.content.Context, android.util.AttributeSet); + method public void captureEndValues(android.transition.TransitionValues); + method public void captureStartValues(android.transition.TransitionValues); + method public boolean getReparent(); + method public boolean getReparentWithOverlay(); + method public void setReparent(boolean); + method public void setReparentWithOverlay(boolean); + } + + public class CircularPropagation extends android.transition.VisibilityPropagation { + ctor public CircularPropagation(); + method public long getStartDelay(android.view.ViewGroup, android.transition.Transition, android.transition.TransitionValues, android.transition.TransitionValues); + method public void setPropagationSpeed(float); + } + + public class Explode extends android.transition.Visibility { + ctor public Explode(); + ctor public Explode(android.content.Context, android.util.AttributeSet); + } + + public class Fade extends android.transition.Visibility { + ctor public Fade(); + ctor public Fade(int); + ctor public Fade(android.content.Context, android.util.AttributeSet); + field public static final int IN = 1; // 0x1 + field public static final int OUT = 2; // 0x2 + } + + public abstract class PathMotion { + ctor public PathMotion(); + ctor public PathMotion(android.content.Context, android.util.AttributeSet); + method public abstract android.graphics.Path getPath(float, float, float, float); + } + + public class PatternPathMotion extends android.transition.PathMotion { + ctor public PatternPathMotion(); + ctor public PatternPathMotion(android.content.Context, android.util.AttributeSet); + ctor public PatternPathMotion(android.graphics.Path); + method public android.graphics.Path getPath(float, float, float, float); + method public android.graphics.Path getPatternPath(); + method public void setPatternPath(android.graphics.Path); + } + + public final class Scene { + ctor public Scene(android.view.ViewGroup); + ctor public Scene(android.view.ViewGroup, android.view.View); + ctor public deprecated Scene(android.view.ViewGroup, android.view.ViewGroup); + method public void enter(); + method public void exit(); + method public static android.transition.Scene getSceneForLayout(android.view.ViewGroup, int, android.content.Context); + method public android.view.ViewGroup getSceneRoot(); + method public void setEnterAction(java.lang.Runnable); + method public void setExitAction(java.lang.Runnable); + } + + public class SidePropagation extends android.transition.VisibilityPropagation { + ctor public SidePropagation(); + method public long getStartDelay(android.view.ViewGroup, android.transition.Transition, android.transition.TransitionValues, android.transition.TransitionValues); + method public void setPropagationSpeed(float); + method public void setSide(int); + } + + public class Slide extends android.transition.Visibility { + ctor public Slide(); + ctor public Slide(int); + ctor public Slide(android.content.Context, android.util.AttributeSet); + method public int getSlideEdge(); + method public void setSlideEdge(int); + } + + public abstract class Transition implements java.lang.Cloneable { + ctor public Transition(); + ctor public Transition(android.content.Context, android.util.AttributeSet); + method public android.transition.Transition addListener(android.transition.Transition.TransitionListener); + method public android.transition.Transition addTarget(int); + method public android.transition.Transition addTarget(java.lang.String); + method public android.transition.Transition addTarget(java.lang.Class); + method public android.transition.Transition addTarget(android.view.View); + method public boolean canRemoveViews(); + method public abstract void captureEndValues(android.transition.TransitionValues); + method public abstract void captureStartValues(android.transition.TransitionValues); + method public android.transition.Transition clone(); + method public android.animation.Animator createAnimator(android.view.ViewGroup, android.transition.TransitionValues, android.transition.TransitionValues); + method public android.transition.Transition excludeChildren(int, boolean); + method public android.transition.Transition excludeChildren(android.view.View, boolean); + method public android.transition.Transition excludeChildren(java.lang.Class, boolean); + method public android.transition.Transition excludeTarget(int, boolean); + method public android.transition.Transition excludeTarget(java.lang.String, boolean); + method public android.transition.Transition excludeTarget(android.view.View, boolean); + method public android.transition.Transition excludeTarget(java.lang.Class, boolean); + method public long getDuration(); + method public android.graphics.Rect getEpicenter(); + method public android.transition.Transition.EpicenterCallback getEpicenterCallback(); + method public android.animation.TimeInterpolator getInterpolator(); + method public java.lang.String getName(); + method public android.transition.PathMotion getPathMotion(); + method public android.transition.TransitionPropagation getPropagation(); + method public long getStartDelay(); + method public java.util.List getTargetIds(); + method public java.util.List getTargetNames(); + method public java.util.List getTargetTypes(); + method public java.util.List getTargets(); + method public java.lang.String[] getTransitionProperties(); + method public android.transition.TransitionValues getTransitionValues(android.view.View, boolean); + method public android.transition.Transition removeListener(android.transition.Transition.TransitionListener); + method public android.transition.Transition removeTarget(int); + method public android.transition.Transition removeTarget(java.lang.String); + method public android.transition.Transition removeTarget(android.view.View); + method public android.transition.Transition removeTarget(java.lang.Class); + method public android.transition.Transition setDuration(long); + method public void setEpicenterCallback(android.transition.Transition.EpicenterCallback); + method public android.transition.Transition setInterpolator(android.animation.TimeInterpolator); + method public void setMatchOrder(int...); + method public void setPathMotion(android.transition.PathMotion); + method public void setPropagation(android.transition.TransitionPropagation); + method public android.transition.Transition setStartDelay(long); + field public static final int MATCH_ID = 3; // 0x3 + field public static final int MATCH_INSTANCE = 1; // 0x1 + field public static final int MATCH_ITEM_ID = 4; // 0x4 + field public static final int MATCH_NAME = 2; // 0x2 + } + + public static abstract class Transition.EpicenterCallback { + ctor public Transition.EpicenterCallback(); + method public abstract android.graphics.Rect onGetEpicenter(android.transition.Transition); + } + + public static abstract interface Transition.TransitionListener { + method public abstract void onTransitionCancel(android.transition.Transition); + method public abstract void onTransitionEnd(android.transition.Transition); + method public abstract void onTransitionPause(android.transition.Transition); + method public abstract void onTransitionResume(android.transition.Transition); + method public abstract void onTransitionStart(android.transition.Transition); + } + + public class TransitionInflater { + method public static android.transition.TransitionInflater from(android.content.Context); + method public android.transition.Transition inflateTransition(int); + method public android.transition.TransitionManager inflateTransitionManager(int, android.view.ViewGroup); + } + + public class TransitionManager { + ctor public TransitionManager(); + method public static void beginDelayedTransition(android.view.ViewGroup); + method public static void beginDelayedTransition(android.view.ViewGroup, android.transition.Transition); + method public static void go(android.transition.Scene); + method public static void go(android.transition.Scene, android.transition.Transition); + method public void setTransition(android.transition.Scene, android.transition.Transition); + method public void setTransition(android.transition.Scene, android.transition.Scene, android.transition.Transition); + method public void transitionTo(android.transition.Scene); + } + + public abstract class TransitionPropagation { + ctor public TransitionPropagation(); + method public abstract void captureValues(android.transition.TransitionValues); + method public abstract java.lang.String[] getPropagationProperties(); + method public abstract long getStartDelay(android.view.ViewGroup, android.transition.Transition, android.transition.TransitionValues, android.transition.TransitionValues); + } + + public class TransitionSet extends android.transition.Transition { + ctor public TransitionSet(); + ctor public TransitionSet(android.content.Context, android.util.AttributeSet); + method public android.transition.TransitionSet addTransition(android.transition.Transition); + method public void captureEndValues(android.transition.TransitionValues); + method public void captureStartValues(android.transition.TransitionValues); + method public int getOrdering(); + method public android.transition.Transition getTransitionAt(int); + method public int getTransitionCount(); + method public android.transition.TransitionSet removeTransition(android.transition.Transition); + method public android.transition.TransitionSet setOrdering(int); + field public static final int ORDERING_SEQUENTIAL = 1; // 0x1 + field public static final int ORDERING_TOGETHER = 0; // 0x0 + } + + public class TransitionValues { + ctor public TransitionValues(); + field public final java.util.Map values; + field public android.view.View view; + } + + public abstract class Visibility extends android.transition.Transition { + ctor public Visibility(); + ctor public Visibility(android.content.Context, android.util.AttributeSet); + method public void captureEndValues(android.transition.TransitionValues); + method public void captureStartValues(android.transition.TransitionValues); + method public int getMode(); + method public boolean isVisible(android.transition.TransitionValues); + method public android.animation.Animator onAppear(android.view.ViewGroup, android.transition.TransitionValues, int, android.transition.TransitionValues, int); + method public android.animation.Animator onAppear(android.view.ViewGroup, android.view.View, android.transition.TransitionValues, android.transition.TransitionValues); + method public android.animation.Animator onDisappear(android.view.ViewGroup, android.transition.TransitionValues, int, android.transition.TransitionValues, int); + method public android.animation.Animator onDisappear(android.view.ViewGroup, android.view.View, android.transition.TransitionValues, android.transition.TransitionValues); + method public void setMode(int); + field public static final int MODE_IN = 1; // 0x1 + field public static final int MODE_OUT = 2; // 0x2 + } + + public abstract class VisibilityPropagation extends android.transition.TransitionPropagation { + ctor public VisibilityPropagation(); + method public void captureValues(android.transition.TransitionValues); + method public java.lang.String[] getPropagationProperties(); + method public int getViewVisibility(android.transition.TransitionValues); + method public int getViewX(android.transition.TransitionValues); + method public int getViewY(android.transition.TransitionValues); + } + +} + +package android.util { + + public class AndroidException extends java.lang.Exception { + ctor public AndroidException(); + ctor public AndroidException(java.lang.String); + ctor public AndroidException(java.lang.String, java.lang.Throwable); + ctor public AndroidException(java.lang.Exception); + } + + public class AndroidRuntimeException extends java.lang.RuntimeException { + ctor public AndroidRuntimeException(); + ctor public AndroidRuntimeException(java.lang.String); + ctor public AndroidRuntimeException(java.lang.String, java.lang.Throwable); + ctor public AndroidRuntimeException(java.lang.Exception); + } + + public final class ArrayMap implements java.util.Map { + ctor public ArrayMap(); + ctor public ArrayMap(int); + ctor public ArrayMap(android.util.ArrayMap); + method public void clear(); + method public boolean containsAll(java.util.Collection); + method public boolean containsKey(java.lang.Object); + method public boolean containsValue(java.lang.Object); + method public void ensureCapacity(int); + method public java.util.Set> entrySet(); + method public V get(java.lang.Object); + method public int indexOfKey(java.lang.Object); + method public boolean isEmpty(); + method public K keyAt(int); + method public java.util.Set keySet(); + method public V put(K, V); + method public void putAll(android.util.ArrayMap); + method public void putAll(java.util.Map); + method public V remove(java.lang.Object); + method public boolean removeAll(java.util.Collection); + method public V removeAt(int); + method public boolean retainAll(java.util.Collection); + method public V setValueAt(int, V); + method public int size(); + method public V valueAt(int); + method public java.util.Collection values(); + } + + public class AtomicFile { + ctor public AtomicFile(java.io.File); + method public void delete(); + method public void failWrite(java.io.FileOutputStream); + method public void finishWrite(java.io.FileOutputStream); + method public java.io.File getBaseFile(); + method public java.io.FileInputStream openRead() throws java.io.FileNotFoundException; + method public byte[] readFully() throws java.io.IOException; + method public java.io.FileOutputStream startWrite() throws java.io.IOException; + } + + public abstract interface AttributeSet { + method public abstract boolean getAttributeBooleanValue(java.lang.String, java.lang.String, boolean); + method public abstract boolean getAttributeBooleanValue(int, boolean); + method public abstract int getAttributeCount(); + method public abstract float getAttributeFloatValue(java.lang.String, java.lang.String, float); + method public abstract float getAttributeFloatValue(int, float); + method public abstract int getAttributeIntValue(java.lang.String, java.lang.String, int); + method public abstract int getAttributeIntValue(int, int); + method public abstract int getAttributeListValue(java.lang.String, java.lang.String, java.lang.String[], int); + method public abstract int getAttributeListValue(int, java.lang.String[], int); + method public abstract java.lang.String getAttributeName(int); + method public abstract int getAttributeNameResource(int); + method public abstract int getAttributeResourceValue(java.lang.String, java.lang.String, int); + method public abstract int getAttributeResourceValue(int, int); + method public abstract int getAttributeUnsignedIntValue(java.lang.String, java.lang.String, int); + method public abstract int getAttributeUnsignedIntValue(int, int); + method public abstract java.lang.String getAttributeValue(int); + method public abstract java.lang.String getAttributeValue(java.lang.String, java.lang.String); + method public abstract java.lang.String getClassAttribute(); + method public abstract java.lang.String getIdAttribute(); + method public abstract int getIdAttributeResourceValue(int); + method public abstract java.lang.String getPositionDescription(); + method public abstract int getStyleAttribute(); + } + + public class Base64 { + method public static byte[] decode(java.lang.String, int); + method public static byte[] decode(byte[], int); + method public static byte[] decode(byte[], int, int, int); + method public static byte[] encode(byte[], int); + method public static byte[] encode(byte[], int, int, int); + method public static java.lang.String encodeToString(byte[], int); + method public static java.lang.String encodeToString(byte[], int, int, int); + field public static final int CRLF = 4; // 0x4 + field public static final int DEFAULT = 0; // 0x0 + field public static final int NO_CLOSE = 16; // 0x10 + field public static final int NO_PADDING = 1; // 0x1 + field public static final int NO_WRAP = 2; // 0x2 + field public static final int URL_SAFE = 8; // 0x8 + } + + public class Base64DataException extends java.io.IOException { + ctor public Base64DataException(java.lang.String); + } + + public class Base64InputStream extends java.io.FilterInputStream { + ctor public Base64InputStream(java.io.InputStream, int); + } + + public class Base64OutputStream extends java.io.FilterOutputStream { + ctor public Base64OutputStream(java.io.OutputStream, int); + } + + public final deprecated class Config { + field public static final deprecated boolean DEBUG = false; + field public static final deprecated boolean LOGD = true; + field public static final deprecated boolean LOGV = false; + field public static final deprecated boolean PROFILE = false; + field public static final deprecated boolean RELEASE = true; + } + + public class DebugUtils { + method public static boolean isObjectSelected(java.lang.Object); + } + + public class DisplayMetrics { + ctor public DisplayMetrics(); + method public boolean equals(android.util.DisplayMetrics); + method public void setTo(android.util.DisplayMetrics); + method public void setToDefaults(); + field public static final int DENSITY_280 = 280; // 0x118 + field public static final int DENSITY_400 = 400; // 0x190 + field public static final int DENSITY_560 = 560; // 0x230 + field public static final int DENSITY_DEFAULT = 160; // 0xa0 + field public static final int DENSITY_HIGH = 240; // 0xf0 + field public static final int DENSITY_LOW = 120; // 0x78 + field public static final int DENSITY_MEDIUM = 160; // 0xa0 + field public static final int DENSITY_TV = 213; // 0xd5 + field public static final int DENSITY_XHIGH = 320; // 0x140 + field public static final int DENSITY_XXHIGH = 480; // 0x1e0 + field public static final int DENSITY_XXXHIGH = 640; // 0x280 + field public float density; + field public int densityDpi; + field public int heightPixels; + field public float scaledDensity; + field public int widthPixels; + field public float xdpi; + field public float ydpi; + } + + public class EventLog { + method public static int getTagCode(java.lang.String); + method public static java.lang.String getTagName(int); + method public static void readEvents(int[], java.util.Collection) throws java.io.IOException; + method public static int writeEvent(int, int); + method public static int writeEvent(int, long); + method public static int writeEvent(int, java.lang.String); + method public static int writeEvent(int, java.lang.Object...); + } + + public static final class EventLog.Event { + method public synchronized java.lang.Object getData(); + method public int getProcessId(); + method public int getTag(); + method public int getThreadId(); + method public long getTimeNanos(); + } + + public deprecated class EventLogTags { + ctor public EventLogTags() throws java.io.IOException; + ctor public EventLogTags(java.io.BufferedReader) throws java.io.IOException; + method public android.util.EventLogTags.Description get(java.lang.String); + method public android.util.EventLogTags.Description get(int); + } + + public static class EventLogTags.Description { + field public final java.lang.String mName; + field public final int mTag; + } + + public deprecated class FloatMath { + method public static float ceil(float); + method public static float cos(float); + method public static float exp(float); + method public static float floor(float); + method public static float hypot(float, float); + method public static float pow(float, float); + method public static float sin(float); + method public static float sqrt(float); + } + + public final class JsonReader implements java.io.Closeable { + ctor public JsonReader(java.io.Reader); + method public void beginArray() throws java.io.IOException; + method public void beginObject() throws java.io.IOException; + method public void close() throws java.io.IOException; + method public void endArray() throws java.io.IOException; + method public void endObject() throws java.io.IOException; + method public boolean hasNext() throws java.io.IOException; + method public boolean isLenient(); + method public boolean nextBoolean() throws java.io.IOException; + method public double nextDouble() throws java.io.IOException; + method public int nextInt() throws java.io.IOException; + method public long nextLong() throws java.io.IOException; + method public java.lang.String nextName() throws java.io.IOException; + method public void nextNull() throws java.io.IOException; + method public java.lang.String nextString() throws java.io.IOException; + method public android.util.JsonToken peek() throws java.io.IOException; + method public void setLenient(boolean); + method public void skipValue() throws java.io.IOException; + } + + public final class JsonToken extends java.lang.Enum { + method public static android.util.JsonToken valueOf(java.lang.String); + method public static final android.util.JsonToken[] values(); + enum_constant public static final android.util.JsonToken BEGIN_ARRAY; + enum_constant public static final android.util.JsonToken BEGIN_OBJECT; + enum_constant public static final android.util.JsonToken BOOLEAN; + enum_constant public static final android.util.JsonToken END_ARRAY; + enum_constant public static final android.util.JsonToken END_DOCUMENT; + enum_constant public static final android.util.JsonToken END_OBJECT; + enum_constant public static final android.util.JsonToken NAME; + enum_constant public static final android.util.JsonToken NULL; + enum_constant public static final android.util.JsonToken NUMBER; + enum_constant public static final android.util.JsonToken STRING; + } + + public final class JsonWriter implements java.io.Closeable { + ctor public JsonWriter(java.io.Writer); + method public android.util.JsonWriter beginArray() throws java.io.IOException; + method public android.util.JsonWriter beginObject() throws java.io.IOException; + method public void close() throws java.io.IOException; + method public android.util.JsonWriter endArray() throws java.io.IOException; + method public android.util.JsonWriter endObject() throws java.io.IOException; + method public void flush() throws java.io.IOException; + method public boolean isLenient(); + method public android.util.JsonWriter name(java.lang.String) throws java.io.IOException; + method public android.util.JsonWriter nullValue() throws java.io.IOException; + method public void setIndent(java.lang.String); + method public void setLenient(boolean); + method public android.util.JsonWriter value(java.lang.String) throws java.io.IOException; + method public android.util.JsonWriter value(boolean) throws java.io.IOException; + method public android.util.JsonWriter value(double) throws java.io.IOException; + method public android.util.JsonWriter value(long) throws java.io.IOException; + method public android.util.JsonWriter value(java.lang.Number) throws java.io.IOException; + } + + public final class LayoutDirection { + field public static final int INHERIT = 2; // 0x2 + field public static final int LOCALE = 3; // 0x3 + field public static final int LTR = 0; // 0x0 + field public static final int RTL = 1; // 0x1 + } + + public final class Log { + method public static int d(java.lang.String, java.lang.String); + method public static int d(java.lang.String, java.lang.String, java.lang.Throwable); + method public static int e(java.lang.String, java.lang.String); + method public static int e(java.lang.String, java.lang.String, java.lang.Throwable); + method public static java.lang.String getStackTraceString(java.lang.Throwable); + method public static int i(java.lang.String, java.lang.String); + method public static int i(java.lang.String, java.lang.String, java.lang.Throwable); + method public static boolean isLoggable(java.lang.String, int); + method public static int println(int, java.lang.String, java.lang.String); + method public static int v(java.lang.String, java.lang.String); + method public static int v(java.lang.String, java.lang.String, java.lang.Throwable); + method public static int w(java.lang.String, java.lang.String); + method public static int w(java.lang.String, java.lang.String, java.lang.Throwable); + method public static int w(java.lang.String, java.lang.Throwable); + method public static int wtf(java.lang.String, java.lang.String); + method public static int wtf(java.lang.String, java.lang.Throwable); + method public static int wtf(java.lang.String, java.lang.String, java.lang.Throwable); + field public static final int ASSERT = 7; // 0x7 + field public static final int DEBUG = 3; // 0x3 + field public static final int ERROR = 6; // 0x6 + field public static final int INFO = 4; // 0x4 + field public static final int VERBOSE = 2; // 0x2 + field public static final int WARN = 5; // 0x5 + } + + public class LogPrinter implements android.util.Printer { + ctor public LogPrinter(int, java.lang.String); + method public void println(java.lang.String); + } + + public class LongSparseArray implements java.lang.Cloneable { + ctor public LongSparseArray(); + ctor public LongSparseArray(int); + method public void append(long, E); + method public void clear(); + method public android.util.LongSparseArray clone(); + method public void delete(long); + method public E get(long); + method public E get(long, E); + method public int indexOfKey(long); + method public int indexOfValue(E); + method public long keyAt(int); + method public void put(long, E); + method public void remove(long); + method public void removeAt(int); + method public void setValueAt(int, E); + method public int size(); + method public E valueAt(int); + } + + public class LruCache { + ctor public LruCache(int); + method protected V create(K); + method public final synchronized int createCount(); + method protected void entryRemoved(boolean, K, V, V); + method public final void evictAll(); + method public final synchronized int evictionCount(); + method public final V get(K); + method public final synchronized int hitCount(); + method public final synchronized int maxSize(); + method public final synchronized int missCount(); + method public final V put(K, V); + method public final synchronized int putCount(); + method public final V remove(K); + method public void resize(int); + method public final synchronized int size(); + method protected int sizeOf(K, V); + method public final synchronized java.util.Map snapshot(); + method public final synchronized java.lang.String toString(); + method public void trimToSize(int); + } + + public final class MalformedJsonException extends java.io.IOException { + ctor public MalformedJsonException(java.lang.String); + } + + public class MonthDisplayHelper { + ctor public MonthDisplayHelper(int, int, int); + ctor public MonthDisplayHelper(int, int); + method public int getColumnOf(int); + method public int getDayAt(int, int); + method public int[] getDigitsForRow(int); + method public int getFirstDayOfMonth(); + method public int getMonth(); + method public int getNumberOfDaysInMonth(); + method public int getOffset(); + method public int getRowOf(int); + method public int getWeekStartDay(); + method public int getYear(); + method public boolean isWithinCurrentMonth(int, int); + method public void nextMonth(); + method public void previousMonth(); + } + + public final class MutableBoolean { + ctor public MutableBoolean(boolean); + field public boolean value; + } + + public final class MutableByte { + ctor public MutableByte(byte); + field public byte value; + } + + public final class MutableChar { + ctor public MutableChar(char); + field public char value; + } + + public final class MutableDouble { + ctor public MutableDouble(double); + field public double value; + } + + public final class MutableFloat { + ctor public MutableFloat(float); + field public float value; + } + + public final class MutableInt { + ctor public MutableInt(int); + field public int value; + } + + public final class MutableLong { + ctor public MutableLong(long); + field public long value; + } + + public final class MutableShort { + ctor public MutableShort(short); + field public short value; + } + + public class NoSuchPropertyException extends java.lang.RuntimeException { + ctor public NoSuchPropertyException(java.lang.String); + } + + public class Pair { + ctor public Pair(F, S); + method public static android.util.Pair create(A, B); + field public final F first; + field public final S second; + } + + public class Patterns { + method public static final java.lang.String concatGroups(java.util.regex.Matcher); + method public static final java.lang.String digitsAndPlusOnly(java.util.regex.Matcher); + field public static final java.util.regex.Pattern DOMAIN_NAME; + field public static final java.util.regex.Pattern EMAIL_ADDRESS; + field public static final java.lang.String GOOD_IRI_CHAR = "a-zA-Z0-9\u00a0-\ud7ff\uf900-\ufdcf\ufdf0-\uffef"; + field public static final java.util.regex.Pattern IP_ADDRESS; + field public static final java.util.regex.Pattern PHONE; + field public static final deprecated java.util.regex.Pattern TOP_LEVEL_DOMAIN; + field public static final deprecated java.lang.String TOP_LEVEL_DOMAIN_STR = "((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])"; + field public static final deprecated java.lang.String TOP_LEVEL_DOMAIN_STR_FOR_WEB_URL = "(?:(?: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]))"; + field public static final java.util.regex.Pattern WEB_URL; + } + + public class PrintStreamPrinter implements android.util.Printer { + ctor public PrintStreamPrinter(java.io.PrintStream); + method public void println(java.lang.String); + } + + public class PrintWriterPrinter implements android.util.Printer { + ctor public PrintWriterPrinter(java.io.PrintWriter); + method public void println(java.lang.String); + } + + public abstract interface Printer { + method public abstract void println(java.lang.String); + } + + public abstract class Property { + ctor public Property(java.lang.Class, java.lang.String); + method public abstract V get(T); + method public java.lang.String getName(); + method public java.lang.Class getType(); + method public boolean isReadOnly(); + method public static android.util.Property of(java.lang.Class, java.lang.Class, java.lang.String); + method public void set(T, V); + } + + public final class Range { + ctor public Range(T, T); + method public T clamp(T); + method public boolean contains(T); + method public boolean contains(android.util.Range); + method public static android.util.Range create(T, T); + method public android.util.Range extend(android.util.Range); + method public android.util.Range extend(T, T); + method public android.util.Range extend(T); + method public T getLower(); + method public T getUpper(); + method public android.util.Range intersect(android.util.Range); + method public android.util.Range intersect(T, T); + } + + public final class Rational extends java.lang.Number implements java.lang.Comparable { + ctor public Rational(int, int); + method public int compareTo(android.util.Rational); + method public double doubleValue(); + method public float floatValue(); + method public int getDenominator(); + method public int getNumerator(); + method public int intValue(); + method public boolean isFinite(); + method public boolean isInfinite(); + method public boolean isNaN(); + method public boolean isZero(); + method public long longValue(); + method public static android.util.Rational parseRational(java.lang.String) throws java.lang.NumberFormatException; + field public static final android.util.Rational NEGATIVE_INFINITY; + field public static final android.util.Rational NaN; + field public static final android.util.Rational POSITIVE_INFINITY; + field public static final android.util.Rational ZERO; + } + + public final class Size { + ctor public Size(int, int); + method public int getHeight(); + method public int getWidth(); + method public static android.util.Size parseSize(java.lang.String) throws java.lang.NumberFormatException; + } + + public final class SizeF { + ctor public SizeF(float, float); + method public float getHeight(); + method public float getWidth(); + method public static android.util.SizeF parseSizeF(java.lang.String) throws java.lang.NumberFormatException; + } + + public class SparseArray implements java.lang.Cloneable { + ctor public SparseArray(); + ctor public SparseArray(int); + method public void append(int, E); + method public void clear(); + method public android.util.SparseArray clone(); + method public void delete(int); + method public E get(int); + method public E get(int, E); + method public int indexOfKey(int); + method public int indexOfValue(E); + method public int keyAt(int); + method public void put(int, E); + method public void remove(int); + method public void removeAt(int); + method public void removeAtRange(int, int); + method public void setValueAt(int, E); + method public int size(); + method public E valueAt(int); + } + + public class SparseBooleanArray implements java.lang.Cloneable { + ctor public SparseBooleanArray(); + ctor public SparseBooleanArray(int); + method public void append(int, boolean); + method public void clear(); + method public android.util.SparseBooleanArray clone(); + method public void delete(int); + method public boolean get(int); + method public boolean get(int, boolean); + method public int indexOfKey(int); + method public int indexOfValue(boolean); + method public int keyAt(int); + method public void put(int, boolean); + method public int size(); + method public boolean valueAt(int); + } + + public class SparseIntArray implements java.lang.Cloneable { + ctor public SparseIntArray(); + ctor public SparseIntArray(int); + method public void append(int, int); + method public void clear(); + method public android.util.SparseIntArray clone(); + method public void delete(int); + method public int get(int); + method public int get(int, int); + method public int indexOfKey(int); + method public int indexOfValue(int); + method public int keyAt(int); + method public void put(int, int); + method public void removeAt(int); + method public int size(); + method public int valueAt(int); + } + + public class SparseLongArray implements java.lang.Cloneable { + ctor public SparseLongArray(); + ctor public SparseLongArray(int); + method public void append(int, long); + method public void clear(); + method public android.util.SparseLongArray clone(); + method public void delete(int); + method public long get(int); + method public long get(int, long); + method public int indexOfKey(int); + method public int indexOfValue(long); + method public int keyAt(int); + method public void put(int, long); + method public void removeAt(int); + method public int size(); + method public long valueAt(int); + } + + public class StateSet { + method public static java.lang.String dump(int[]); + method public static boolean isWildCard(int[]); + method public static boolean stateSetMatches(int[], int[]); + method public static boolean stateSetMatches(int[], int); + method public static int[] trimStateSet(int[], int); + field public static final int[] NOTHING; + field public static final int[] WILD_CARD; + } + + public class StringBuilderPrinter implements android.util.Printer { + ctor public StringBuilderPrinter(java.lang.StringBuilder); + method public void println(java.lang.String); + } + + public class TimeFormatException extends java.lang.RuntimeException { + } + + public class TimeUtils { + method public static java.util.TimeZone getTimeZone(int, boolean, long, java.lang.String); + method public static java.lang.String getTimeZoneDatabaseVersion(); + } + + public class TimingLogger { + ctor public TimingLogger(java.lang.String, java.lang.String); + method public void addSplit(java.lang.String); + method public void dumpToLog(); + method public void reset(java.lang.String, java.lang.String); + method public void reset(); + } + + public class TypedValue { + ctor public TypedValue(); + method public static float applyDimension(int, float, android.util.DisplayMetrics); + method public final java.lang.CharSequence coerceToString(); + method public static final java.lang.String coerceToString(int, int); + method public static float complexToDimension(int, android.util.DisplayMetrics); + method public static int complexToDimensionPixelOffset(int, android.util.DisplayMetrics); + method public static int complexToDimensionPixelSize(int, android.util.DisplayMetrics); + method public static float complexToFloat(int); + method public static float complexToFraction(int, float, float); + method public int getComplexUnit(); + method public float getDimension(android.util.DisplayMetrics); + method public final float getFloat(); + method public float getFraction(float, float); + method public void setTo(android.util.TypedValue); + field public static final int COMPLEX_MANTISSA_MASK = 16777215; // 0xffffff + field public static final int COMPLEX_MANTISSA_SHIFT = 8; // 0x8 + field public static final int COMPLEX_RADIX_0p23 = 3; // 0x3 + field public static final int COMPLEX_RADIX_16p7 = 1; // 0x1 + field public static final int COMPLEX_RADIX_23p0 = 0; // 0x0 + field public static final int COMPLEX_RADIX_8p15 = 2; // 0x2 + field public static final int COMPLEX_RADIX_MASK = 3; // 0x3 + field public static final int COMPLEX_RADIX_SHIFT = 4; // 0x4 + field public static final int COMPLEX_UNIT_DIP = 1; // 0x1 + field public static final int COMPLEX_UNIT_FRACTION = 0; // 0x0 + field public static final int COMPLEX_UNIT_FRACTION_PARENT = 1; // 0x1 + field public static final int COMPLEX_UNIT_IN = 4; // 0x4 + field public static final int COMPLEX_UNIT_MASK = 15; // 0xf + field public static final int COMPLEX_UNIT_MM = 5; // 0x5 + field public static final int COMPLEX_UNIT_PT = 3; // 0x3 + field public static final int COMPLEX_UNIT_PX = 0; // 0x0 + field public static final int COMPLEX_UNIT_SHIFT = 0; // 0x0 + field public static final int COMPLEX_UNIT_SP = 2; // 0x2 + field public static final int DATA_NULL_EMPTY = 1; // 0x1 + field public static final int DATA_NULL_UNDEFINED = 0; // 0x0 + field public static final int DENSITY_DEFAULT = 0; // 0x0 + field public static final int DENSITY_NONE = 65535; // 0xffff + field public static final int TYPE_ATTRIBUTE = 2; // 0x2 + field public static final int TYPE_DIMENSION = 5; // 0x5 + field public static final int TYPE_FIRST_COLOR_INT = 28; // 0x1c + field public static final int TYPE_FIRST_INT = 16; // 0x10 + field public static final int TYPE_FLOAT = 4; // 0x4 + field public static final int TYPE_FRACTION = 6; // 0x6 + field public static final int TYPE_INT_BOOLEAN = 18; // 0x12 + field public static final int TYPE_INT_COLOR_ARGB4 = 30; // 0x1e + field public static final int TYPE_INT_COLOR_ARGB8 = 28; // 0x1c + field public static final int TYPE_INT_COLOR_RGB4 = 31; // 0x1f + field public static final int TYPE_INT_COLOR_RGB8 = 29; // 0x1d + field public static final int TYPE_INT_DEC = 16; // 0x10 + field public static final int TYPE_INT_HEX = 17; // 0x11 + field public static final int TYPE_LAST_COLOR_INT = 31; // 0x1f + field public static final int TYPE_LAST_INT = 31; // 0x1f + field public static final int TYPE_NULL = 0; // 0x0 + field public static final int TYPE_REFERENCE = 1; // 0x1 + field public static final int TYPE_STRING = 3; // 0x3 + field public int assetCookie; + field public int changingConfigurations; + field public int data; + field public int density; + field public int resourceId; + field public java.lang.CharSequence string; + field public int type; + } + + public class Xml { + method public static android.util.AttributeSet asAttributeSet(org.xmlpull.v1.XmlPullParser); + method public static android.util.Xml.Encoding findEncodingByName(java.lang.String) throws java.io.UnsupportedEncodingException; + method public static org.xmlpull.v1.XmlPullParser newPullParser(); + method public static org.xmlpull.v1.XmlSerializer newSerializer(); + method public static void parse(java.lang.String, org.xml.sax.ContentHandler) throws org.xml.sax.SAXException; + method public static void parse(java.io.Reader, org.xml.sax.ContentHandler) throws java.io.IOException, org.xml.sax.SAXException; + method public static void parse(java.io.InputStream, android.util.Xml.Encoding, org.xml.sax.ContentHandler) throws java.io.IOException, org.xml.sax.SAXException; + field public static java.lang.String FEATURE_RELAXED; + } + + public static final class Xml.Encoding extends java.lang.Enum { + method public static android.util.Xml.Encoding valueOf(java.lang.String); + method public static final android.util.Xml.Encoding[] values(); + enum_constant public static final android.util.Xml.Encoding ISO_8859_1; + enum_constant public static final android.util.Xml.Encoding US_ASCII; + enum_constant public static final android.util.Xml.Encoding UTF_16; + enum_constant public static final android.util.Xml.Encoding UTF_8; + } + +} + +package android.view { + + public abstract class AbsSavedState implements android.os.Parcelable { + ctor protected AbsSavedState(android.os.Parcelable); + ctor protected AbsSavedState(android.os.Parcel); + method public int describeContents(); + method public final android.os.Parcelable getSuperState(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final android.view.AbsSavedState EMPTY_STATE; + } + + public abstract class ActionMode { + ctor public ActionMode(); + method public abstract void finish(); + method public abstract android.view.View getCustomView(); + method public abstract android.view.Menu getMenu(); + method public abstract android.view.MenuInflater getMenuInflater(); + method public abstract java.lang.CharSequence getSubtitle(); + method public java.lang.Object getTag(); + method public abstract java.lang.CharSequence getTitle(); + method public boolean getTitleOptionalHint(); + method public abstract void invalidate(); + method public boolean isTitleOptional(); + method public abstract void setCustomView(android.view.View); + method public abstract void setSubtitle(java.lang.CharSequence); + method public abstract void setSubtitle(int); + method public void setTag(java.lang.Object); + method public abstract void setTitle(java.lang.CharSequence); + method public abstract void setTitle(int); + method public void setTitleOptionalHint(boolean); + } + + public static abstract interface ActionMode.Callback { + method public abstract boolean onActionItemClicked(android.view.ActionMode, android.view.MenuItem); + method public abstract boolean onCreateActionMode(android.view.ActionMode, android.view.Menu); + method public abstract void onDestroyActionMode(android.view.ActionMode); + method public abstract boolean onPrepareActionMode(android.view.ActionMode, android.view.Menu); + } + + public abstract class ActionProvider { + ctor public ActionProvider(android.content.Context); + method public boolean hasSubMenu(); + method public boolean isVisible(); + method public abstract deprecated android.view.View onCreateActionView(); + method public android.view.View onCreateActionView(android.view.MenuItem); + method public boolean onPerformDefaultAction(); + method public void onPrepareSubMenu(android.view.SubMenu); + method public boolean overridesItemVisibility(); + method public void refreshVisibility(); + method public void setVisibilityListener(android.view.ActionProvider.VisibilityListener); + } + + public static abstract interface ActionProvider.VisibilityListener { + method public abstract void onActionProviderVisibilityChanged(boolean); + } + + public final class Choreographer { + method public static android.view.Choreographer getInstance(); + method public void postFrameCallback(android.view.Choreographer.FrameCallback); + method public void postFrameCallbackDelayed(android.view.Choreographer.FrameCallback, long); + method public void removeFrameCallback(android.view.Choreographer.FrameCallback); + } + + public static abstract interface Choreographer.FrameCallback { + method public abstract void doFrame(long); + } + + public abstract interface CollapsibleActionView { + method public abstract void onActionViewCollapsed(); + method public abstract void onActionViewExpanded(); + } + + public abstract interface ContextMenu implements android.view.Menu { + method public abstract void clearHeader(); + method public abstract android.view.ContextMenu setHeaderIcon(int); + method public abstract android.view.ContextMenu setHeaderIcon(android.graphics.drawable.Drawable); + method public abstract android.view.ContextMenu setHeaderTitle(int); + method public abstract android.view.ContextMenu setHeaderTitle(java.lang.CharSequence); + method public abstract android.view.ContextMenu setHeaderView(android.view.View); + } + + public static abstract interface ContextMenu.ContextMenuInfo { + } + + public class ContextThemeWrapper extends android.content.ContextWrapper { + ctor public ContextThemeWrapper(); + ctor public ContextThemeWrapper(android.content.Context, int); + method public void applyOverrideConfiguration(android.content.res.Configuration); + method protected void onApplyThemeResource(android.content.res.Resources.Theme, int, boolean); + } + + public final class Display { + method public long getAppVsyncOffsetNanos(); + method public void getCurrentSizeRange(android.graphics.Point, android.graphics.Point); + method public int getDisplayId(); + method public int getFlags(); + method public deprecated int getHeight(); + method public void getMetrics(android.util.DisplayMetrics); + method public java.lang.String getName(); + method public deprecated int getOrientation(); + method public deprecated int getPixelFormat(); + method public long getPresentationDeadlineNanos(); + method public void getRealMetrics(android.util.DisplayMetrics); + method public void getRealSize(android.graphics.Point); + method public void getRectSize(android.graphics.Rect); + method public float getRefreshRate(); + method public int getRotation(); + method public void getSize(android.graphics.Point); + method public int getState(); + method public float[] getSupportedRefreshRates(); + method public deprecated int getWidth(); + method public boolean isValid(); + field public static final int DEFAULT_DISPLAY = 0; // 0x0 + field public static final int FLAG_PRESENTATION = 8; // 0x8 + field public static final int FLAG_PRIVATE = 4; // 0x4 + field public static final int FLAG_SECURE = 2; // 0x2 + field public static final int FLAG_SUPPORTS_PROTECTED_BUFFERS = 1; // 0x1 + field public static final int STATE_DOZE = 3; // 0x3 + field public static final int STATE_DOZE_SUSPEND = 4; // 0x4 + field public static final int STATE_OFF = 1; // 0x1 + field public static final int STATE_ON = 2; // 0x2 + field public static final int STATE_UNKNOWN = 0; // 0x0 + } + + public class DragEvent implements android.os.Parcelable { + method public int describeContents(); + method public int getAction(); + method public android.content.ClipData getClipData(); + method public android.content.ClipDescription getClipDescription(); + method public java.lang.Object getLocalState(); + method public boolean getResult(); + method public float getX(); + method public float getY(); + method public void writeToParcel(android.os.Parcel, int); + field public static final int ACTION_DRAG_ENDED = 4; // 0x4 + field public static final int ACTION_DRAG_ENTERED = 5; // 0x5 + field public static final int ACTION_DRAG_EXITED = 6; // 0x6 + field public static final int ACTION_DRAG_LOCATION = 2; // 0x2 + field public static final int ACTION_DRAG_STARTED = 1; // 0x1 + field public static final int ACTION_DROP = 3; // 0x3 + field public static final android.os.Parcelable.Creator CREATOR; + } + + public class FocusFinder { + method public android.view.View findNearestTouchable(android.view.ViewGroup, int, int, int, int[]); + method public final android.view.View findNextFocus(android.view.ViewGroup, android.view.View, int); + method public android.view.View findNextFocusFromRect(android.view.ViewGroup, android.graphics.Rect, int); + method public static android.view.FocusFinder getInstance(); + } + + public abstract class FrameStats { + ctor public FrameStats(); + method public final long getEndTimeNano(); + method public final int getFrameCount(); + method public final long getFramePresentedTimeNano(int); + method public final long getRefreshPeriodNano(); + method public final long getStartTimeNano(); + field public static final long UNDEFINED_TIME_NANO = -1L; // 0xffffffffffffffffL + } + + public class GestureDetector { + ctor public deprecated GestureDetector(android.view.GestureDetector.OnGestureListener, android.os.Handler); + ctor public deprecated GestureDetector(android.view.GestureDetector.OnGestureListener); + ctor public GestureDetector(android.content.Context, android.view.GestureDetector.OnGestureListener); + ctor public GestureDetector(android.content.Context, android.view.GestureDetector.OnGestureListener, android.os.Handler); + ctor public GestureDetector(android.content.Context, android.view.GestureDetector.OnGestureListener, android.os.Handler, boolean); + method public boolean isLongpressEnabled(); + method public boolean onTouchEvent(android.view.MotionEvent); + method public void setIsLongpressEnabled(boolean); + method public void setOnDoubleTapListener(android.view.GestureDetector.OnDoubleTapListener); + } + + public static abstract interface GestureDetector.OnDoubleTapListener { + method public abstract boolean onDoubleTap(android.view.MotionEvent); + method public abstract boolean onDoubleTapEvent(android.view.MotionEvent); + method public abstract boolean onSingleTapConfirmed(android.view.MotionEvent); + } + + public static abstract interface GestureDetector.OnGestureListener { + method public abstract boolean onDown(android.view.MotionEvent); + method public abstract boolean onFling(android.view.MotionEvent, android.view.MotionEvent, float, float); + method public abstract void onLongPress(android.view.MotionEvent); + method public abstract boolean onScroll(android.view.MotionEvent, android.view.MotionEvent, float, float); + method public abstract void onShowPress(android.view.MotionEvent); + method public abstract boolean onSingleTapUp(android.view.MotionEvent); + } + + public static class GestureDetector.SimpleOnGestureListener implements android.view.GestureDetector.OnDoubleTapListener android.view.GestureDetector.OnGestureListener { + ctor public GestureDetector.SimpleOnGestureListener(); + method public boolean onDoubleTap(android.view.MotionEvent); + method public boolean onDoubleTapEvent(android.view.MotionEvent); + method public boolean onDown(android.view.MotionEvent); + method public boolean onFling(android.view.MotionEvent, android.view.MotionEvent, float, float); + method public void onLongPress(android.view.MotionEvent); + method public boolean onScroll(android.view.MotionEvent, android.view.MotionEvent, float, float); + method public void onShowPress(android.view.MotionEvent); + method public boolean onSingleTapConfirmed(android.view.MotionEvent); + method public boolean onSingleTapUp(android.view.MotionEvent); + } + + public class Gravity { + ctor public Gravity(); + method public static void apply(int, int, int, android.graphics.Rect, android.graphics.Rect); + method public static void apply(int, int, int, android.graphics.Rect, android.graphics.Rect, int); + method public static void apply(int, int, int, android.graphics.Rect, int, int, android.graphics.Rect); + method public static void apply(int, int, int, android.graphics.Rect, int, int, android.graphics.Rect, int); + method public static void applyDisplay(int, android.graphics.Rect, android.graphics.Rect); + method public static void applyDisplay(int, android.graphics.Rect, android.graphics.Rect, int); + method public static int getAbsoluteGravity(int, int); + method public static boolean isHorizontal(int); + method public static boolean isVertical(int); + field public static final int AXIS_CLIP = 8; // 0x8 + field public static final int AXIS_PULL_AFTER = 4; // 0x4 + field public static final int AXIS_PULL_BEFORE = 2; // 0x2 + field public static final int AXIS_SPECIFIED = 1; // 0x1 + field public static final int AXIS_X_SHIFT = 0; // 0x0 + field public static final int AXIS_Y_SHIFT = 4; // 0x4 + field public static final int BOTTOM = 80; // 0x50 + field public static final int CENTER = 17; // 0x11 + field public static final int CENTER_HORIZONTAL = 1; // 0x1 + field public static final int CENTER_VERTICAL = 16; // 0x10 + field public static final int CLIP_HORIZONTAL = 8; // 0x8 + field public static final int CLIP_VERTICAL = 128; // 0x80 + field public static final int DISPLAY_CLIP_HORIZONTAL = 16777216; // 0x1000000 + field public static final int DISPLAY_CLIP_VERTICAL = 268435456; // 0x10000000 + field public static final int END = 8388613; // 0x800005 + field public static final int FILL = 119; // 0x77 + field public static final int FILL_HORIZONTAL = 7; // 0x7 + field public static final int FILL_VERTICAL = 112; // 0x70 + field public static final int HORIZONTAL_GRAVITY_MASK = 7; // 0x7 + field public static final int LEFT = 3; // 0x3 + field public static final int NO_GRAVITY = 0; // 0x0 + field public static final int RELATIVE_HORIZONTAL_GRAVITY_MASK = 8388615; // 0x800007 + field public static final int RELATIVE_LAYOUT_DIRECTION = 8388608; // 0x800000 + field public static final int RIGHT = 5; // 0x5 + field public static final int START = 8388611; // 0x800003 + field public static final int TOP = 48; // 0x30 + field public static final int VERTICAL_GRAVITY_MASK = 112; // 0x70 + } + + public class HapticFeedbackConstants { + field public static final int CLOCK_TICK = 4; // 0x4 + field public static final int FLAG_IGNORE_GLOBAL_SETTING = 2; // 0x2 + field public static final int FLAG_IGNORE_VIEW_SETTING = 1; // 0x1 + field public static final int KEYBOARD_TAP = 3; // 0x3 + field public static final int LONG_PRESS = 0; // 0x0 + field public static final int VIRTUAL_KEY = 1; // 0x1 + } + + public class InflateException extends java.lang.RuntimeException { + ctor public InflateException(); + ctor public InflateException(java.lang.String, java.lang.Throwable); + ctor public InflateException(java.lang.String); + ctor public InflateException(java.lang.Throwable); + } + + public final class InputDevice implements android.os.Parcelable { + method public int describeContents(); + method public int getControllerNumber(); + method public java.lang.String getDescriptor(); + method public static android.view.InputDevice getDevice(int); + method public static int[] getDeviceIds(); + method public int getId(); + method public android.view.KeyCharacterMap getKeyCharacterMap(); + method public int getKeyboardType(); + method public android.view.InputDevice.MotionRange getMotionRange(int); + method public android.view.InputDevice.MotionRange getMotionRange(int, int); + method public java.util.List getMotionRanges(); + method public java.lang.String getName(); + method public int getProductId(); + method public int getSources(); + method public int getVendorId(); + method public android.os.Vibrator getVibrator(); + method public boolean[] hasKeys(int...); + method public boolean isVirtual(); + method public boolean supportsSource(int); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int KEYBOARD_TYPE_ALPHABETIC = 2; // 0x2 + field public static final int KEYBOARD_TYPE_NONE = 0; // 0x0 + field public static final int KEYBOARD_TYPE_NON_ALPHABETIC = 1; // 0x1 + field public static final deprecated int MOTION_RANGE_ORIENTATION = 8; // 0x8 + field public static final deprecated int MOTION_RANGE_PRESSURE = 2; // 0x2 + field public static final deprecated int MOTION_RANGE_SIZE = 3; // 0x3 + field public static final deprecated int MOTION_RANGE_TOOL_MAJOR = 6; // 0x6 + field public static final deprecated int MOTION_RANGE_TOOL_MINOR = 7; // 0x7 + field public static final deprecated int MOTION_RANGE_TOUCH_MAJOR = 4; // 0x4 + field public static final deprecated int MOTION_RANGE_TOUCH_MINOR = 5; // 0x5 + field public static final deprecated int MOTION_RANGE_X = 0; // 0x0 + field public static final deprecated int MOTION_RANGE_Y = 1; // 0x1 + field public static final int SOURCE_ANY = -256; // 0xffffff00 + field public static final int SOURCE_CLASS_BUTTON = 1; // 0x1 + field public static final int SOURCE_CLASS_JOYSTICK = 16; // 0x10 + field public static final int SOURCE_CLASS_MASK = 255; // 0xff + field public static final int SOURCE_CLASS_NONE = 0; // 0x0 + field public static final int SOURCE_CLASS_POINTER = 2; // 0x2 + field public static final int SOURCE_CLASS_POSITION = 8; // 0x8 + field public static final int SOURCE_CLASS_TRACKBALL = 4; // 0x4 + field public static final int SOURCE_DPAD = 513; // 0x201 + field public static final int SOURCE_GAMEPAD = 1025; // 0x401 + field public static final int SOURCE_HDMI = 33554433; // 0x2000001 + field public static final int SOURCE_JOYSTICK = 16777232; // 0x1000010 + field public static final int SOURCE_KEYBOARD = 257; // 0x101 + field public static final int SOURCE_MOUSE = 8194; // 0x2002 + field public static final int SOURCE_STYLUS = 16386; // 0x4002 + field public static final int SOURCE_TOUCHPAD = 1048584; // 0x100008 + field public static final int SOURCE_TOUCHSCREEN = 4098; // 0x1002 + field public static final int SOURCE_TOUCH_NAVIGATION = 2097152; // 0x200000 + field public static final int SOURCE_TRACKBALL = 65540; // 0x10004 + field public static final int SOURCE_UNKNOWN = 0; // 0x0 + } + + public static final class InputDevice.MotionRange { + method public int getAxis(); + method public float getFlat(); + method public float getFuzz(); + method public float getMax(); + method public float getMin(); + method public float getRange(); + method public float getResolution(); + method public int getSource(); + method public boolean isFromSource(int); + } + + public abstract class InputEvent implements android.os.Parcelable { + method public int describeContents(); + method public final android.view.InputDevice getDevice(); + method public abstract int getDeviceId(); + method public abstract long getEventTime(); + method public abstract int getSource(); + method public boolean isFromSource(int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public final class InputQueue { + } + + public static abstract interface InputQueue.Callback { + method public abstract void onInputQueueCreated(android.view.InputQueue); + method public abstract void onInputQueueDestroyed(android.view.InputQueue); + } + + public class KeyCharacterMap implements android.os.Parcelable { + method public int describeContents(); + method public static boolean deviceHasKey(int); + method public static boolean[] deviceHasKeys(int[]); + method public int get(int, int); + method public static int getDeadChar(int, int); + method public char getDisplayLabel(int); + method public android.view.KeyEvent[] getEvents(char[]); + method public deprecated boolean getKeyData(int, android.view.KeyCharacterMap.KeyData); + method public int getKeyboardType(); + method public char getMatch(int, char[]); + method public char getMatch(int, char[], int); + method public int getModifierBehavior(); + method public char getNumber(int); + method public boolean isPrintingKey(int); + method public static android.view.KeyCharacterMap load(int); + method public void writeToParcel(android.os.Parcel, int); + field public static final int ALPHA = 3; // 0x3 + field public static final deprecated int BUILT_IN_KEYBOARD = 0; // 0x0 + field public static final int COMBINING_ACCENT = -2147483648; // 0x80000000 + field public static final int COMBINING_ACCENT_MASK = 2147483647; // 0x7fffffff + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int FULL = 4; // 0x4 + field public static final char HEX_INPUT = 61184; // 0xef00 '\uef00' + field public static final int MODIFIER_BEHAVIOR_CHORDED = 0; // 0x0 + field public static final int MODIFIER_BEHAVIOR_CHORDED_OR_TOGGLED = 1; // 0x1 + field public static final int NUMERIC = 1; // 0x1 + field public static final char PICKER_DIALOG_INPUT = 61185; // 0xef01 '\uef01' + field public static final int PREDICTIVE = 2; // 0x2 + field public static final int SPECIAL_FUNCTION = 5; // 0x5 + field public static final int VIRTUAL_KEYBOARD = -1; // 0xffffffff + } + + public static deprecated class KeyCharacterMap.KeyData { + ctor public KeyCharacterMap.KeyData(); + field public static final int META_LENGTH = 4; // 0x4 + field public char displayLabel; + field public char[] meta; + field public char number; + } + + public static class KeyCharacterMap.UnavailableException extends android.util.AndroidRuntimeException { + ctor public KeyCharacterMap.UnavailableException(java.lang.String); + } + + public class KeyEvent extends android.view.InputEvent implements android.os.Parcelable { + ctor public KeyEvent(int, int); + ctor public KeyEvent(long, long, int, int, int); + ctor public KeyEvent(long, long, int, int, int, int); + ctor public KeyEvent(long, long, int, int, int, int, int, int); + ctor public KeyEvent(long, long, int, int, int, int, int, int, int); + ctor public KeyEvent(long, long, int, int, int, int, int, int, int, int); + ctor public KeyEvent(long, java.lang.String, int, int); + ctor public KeyEvent(android.view.KeyEvent); + ctor public deprecated KeyEvent(android.view.KeyEvent, long, int); + method public static android.view.KeyEvent changeAction(android.view.KeyEvent, int); + method public static android.view.KeyEvent changeFlags(android.view.KeyEvent, int); + method public static android.view.KeyEvent changeTimeRepeat(android.view.KeyEvent, long, int); + method public static android.view.KeyEvent changeTimeRepeat(android.view.KeyEvent, long, int, int); + method public final deprecated boolean dispatch(android.view.KeyEvent.Callback); + method public final boolean dispatch(android.view.KeyEvent.Callback, android.view.KeyEvent.DispatcherState, java.lang.Object); + method public final int getAction(); + method public final java.lang.String getCharacters(); + method public static int getDeadChar(int, int); + method public final int getDeviceId(); + method public char getDisplayLabel(); + method public final long getDownTime(); + method public final long getEventTime(); + method public final int getFlags(); + method public final android.view.KeyCharacterMap getKeyCharacterMap(); + method public final int getKeyCode(); + method public deprecated boolean getKeyData(android.view.KeyCharacterMap.KeyData); + method public char getMatch(char[]); + method public char getMatch(char[], int); + method public static int getMaxKeyCode(); + method public final int getMetaState(); + method public static int getModifierMetaStateMask(); + method public final int getModifiers(); + method public char getNumber(); + method public final int getRepeatCount(); + method public final int getScanCode(); + method public final int getSource(); + method public int getUnicodeChar(); + method public int getUnicodeChar(int); + method public final boolean hasModifiers(int); + method public final boolean hasNoModifiers(); + method public final boolean isAltPressed(); + method public final boolean isCanceled(); + method public final boolean isCapsLockOn(); + method public final boolean isCtrlPressed(); + method public final boolean isFunctionPressed(); + method public static final boolean isGamepadButton(int); + method public final boolean isLongPress(); + method public final boolean isMetaPressed(); + method public static boolean isModifierKey(int); + method public final boolean isNumLockOn(); + method public boolean isPrintingKey(); + method public final boolean isScrollLockOn(); + method public final boolean isShiftPressed(); + method public final boolean isSymPressed(); + method public final boolean isSystem(); + method public final boolean isTracking(); + method public static int keyCodeFromString(java.lang.String); + method public static java.lang.String keyCodeToString(int); + method public static boolean metaStateHasModifiers(int, int); + method public static boolean metaStateHasNoModifiers(int); + method public static int normalizeMetaState(int); + method public final void setSource(int); + method public final void startTracking(); + method public void writeToParcel(android.os.Parcel, int); + field public static final int ACTION_DOWN = 0; // 0x0 + field public static final int ACTION_MULTIPLE = 2; // 0x2 + field public static final int ACTION_UP = 1; // 0x1 + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int FLAG_CANCELED = 32; // 0x20 + field public static final int FLAG_CANCELED_LONG_PRESS = 256; // 0x100 + field public static final int FLAG_EDITOR_ACTION = 16; // 0x10 + field public static final int FLAG_FALLBACK = 1024; // 0x400 + field public static final int FLAG_FROM_SYSTEM = 8; // 0x8 + field public static final int FLAG_KEEP_TOUCH_MODE = 4; // 0x4 + field public static final int FLAG_LONG_PRESS = 128; // 0x80 + field public static final int FLAG_SOFT_KEYBOARD = 2; // 0x2 + field public static final int FLAG_TRACKING = 512; // 0x200 + field public static final int FLAG_VIRTUAL_HARD_KEY = 64; // 0x40 + field public static final deprecated int FLAG_WOKE_HERE = 1; // 0x1 + field public static final int KEYCODE_0 = 7; // 0x7 + field public static final int KEYCODE_1 = 8; // 0x8 + field public static final int KEYCODE_11 = 227; // 0xe3 + field public static final int KEYCODE_12 = 228; // 0xe4 + field public static final int KEYCODE_2 = 9; // 0x9 + field public static final int KEYCODE_3 = 10; // 0xa + field public static final int KEYCODE_3D_MODE = 206; // 0xce + field public static final int KEYCODE_4 = 11; // 0xb + field public static final int KEYCODE_5 = 12; // 0xc + field public static final int KEYCODE_6 = 13; // 0xd + field public static final int KEYCODE_7 = 14; // 0xe + field public static final int KEYCODE_8 = 15; // 0xf + field public static final int KEYCODE_9 = 16; // 0x10 + field public static final int KEYCODE_A = 29; // 0x1d + field public static final int KEYCODE_ALT_LEFT = 57; // 0x39 + field public static final int KEYCODE_ALT_RIGHT = 58; // 0x3a + field public static final int KEYCODE_APOSTROPHE = 75; // 0x4b + field public static final int KEYCODE_APP_SWITCH = 187; // 0xbb + field public static final int KEYCODE_ASSIST = 219; // 0xdb + field public static final int KEYCODE_AT = 77; // 0x4d + field public static final int KEYCODE_AVR_INPUT = 182; // 0xb6 + field public static final int KEYCODE_AVR_POWER = 181; // 0xb5 + field public static final int KEYCODE_B = 30; // 0x1e + field public static final int KEYCODE_BACK = 4; // 0x4 + field public static final int KEYCODE_BACKSLASH = 73; // 0x49 + field public static final int KEYCODE_BOOKMARK = 174; // 0xae + field public static final int KEYCODE_BREAK = 121; // 0x79 + field public static final int KEYCODE_BRIGHTNESS_DOWN = 220; // 0xdc + field public static final int KEYCODE_BRIGHTNESS_UP = 221; // 0xdd + field public static final int KEYCODE_BUTTON_1 = 188; // 0xbc + field public static final int KEYCODE_BUTTON_10 = 197; // 0xc5 + field public static final int KEYCODE_BUTTON_11 = 198; // 0xc6 + field public static final int KEYCODE_BUTTON_12 = 199; // 0xc7 + field public static final int KEYCODE_BUTTON_13 = 200; // 0xc8 + field public static final int KEYCODE_BUTTON_14 = 201; // 0xc9 + field public static final int KEYCODE_BUTTON_15 = 202; // 0xca + field public static final int KEYCODE_BUTTON_16 = 203; // 0xcb + field public static final int KEYCODE_BUTTON_2 = 189; // 0xbd + field public static final int KEYCODE_BUTTON_3 = 190; // 0xbe + field public static final int KEYCODE_BUTTON_4 = 191; // 0xbf + field public static final int KEYCODE_BUTTON_5 = 192; // 0xc0 + field public static final int KEYCODE_BUTTON_6 = 193; // 0xc1 + field public static final int KEYCODE_BUTTON_7 = 194; // 0xc2 + field public static final int KEYCODE_BUTTON_8 = 195; // 0xc3 + field public static final int KEYCODE_BUTTON_9 = 196; // 0xc4 + field public static final int KEYCODE_BUTTON_A = 96; // 0x60 + field public static final int KEYCODE_BUTTON_B = 97; // 0x61 + field public static final int KEYCODE_BUTTON_C = 98; // 0x62 + field public static final int KEYCODE_BUTTON_L1 = 102; // 0x66 + field public static final int KEYCODE_BUTTON_L2 = 104; // 0x68 + field public static final int KEYCODE_BUTTON_MODE = 110; // 0x6e + field public static final int KEYCODE_BUTTON_R1 = 103; // 0x67 + field public static final int KEYCODE_BUTTON_R2 = 105; // 0x69 + field public static final int KEYCODE_BUTTON_SELECT = 109; // 0x6d + field public static final int KEYCODE_BUTTON_START = 108; // 0x6c + field public static final int KEYCODE_BUTTON_THUMBL = 106; // 0x6a + field public static final int KEYCODE_BUTTON_THUMBR = 107; // 0x6b + field public static final int KEYCODE_BUTTON_X = 99; // 0x63 + field public static final int KEYCODE_BUTTON_Y = 100; // 0x64 + field public static final int KEYCODE_BUTTON_Z = 101; // 0x65 + field public static final int KEYCODE_C = 31; // 0x1f + field public static final int KEYCODE_CALCULATOR = 210; // 0xd2 + field public static final int KEYCODE_CALENDAR = 208; // 0xd0 + field public static final int KEYCODE_CALL = 5; // 0x5 + field public static final int KEYCODE_CAMERA = 27; // 0x1b + field public static final int KEYCODE_CAPS_LOCK = 115; // 0x73 + field public static final int KEYCODE_CAPTIONS = 175; // 0xaf + field public static final int KEYCODE_CHANNEL_DOWN = 167; // 0xa7 + field public static final int KEYCODE_CHANNEL_UP = 166; // 0xa6 + field public static final int KEYCODE_CLEAR = 28; // 0x1c + field public static final int KEYCODE_COMMA = 55; // 0x37 + field public static final int KEYCODE_CONTACTS = 207; // 0xcf + field public static final int KEYCODE_CTRL_LEFT = 113; // 0x71 + field public static final int KEYCODE_CTRL_RIGHT = 114; // 0x72 + field public static final int KEYCODE_D = 32; // 0x20 + field public static final int KEYCODE_DEL = 67; // 0x43 + field public static final int KEYCODE_DPAD_CENTER = 23; // 0x17 + field public static final int KEYCODE_DPAD_DOWN = 20; // 0x14 + field public static final int KEYCODE_DPAD_LEFT = 21; // 0x15 + field public static final int KEYCODE_DPAD_RIGHT = 22; // 0x16 + field public static final int KEYCODE_DPAD_UP = 19; // 0x13 + field public static final int KEYCODE_DVR = 173; // 0xad + field public static final int KEYCODE_E = 33; // 0x21 + field public static final int KEYCODE_EISU = 212; // 0xd4 + field public static final int KEYCODE_ENDCALL = 6; // 0x6 + field public static final int KEYCODE_ENTER = 66; // 0x42 + field public static final int KEYCODE_ENVELOPE = 65; // 0x41 + field public static final int KEYCODE_EQUALS = 70; // 0x46 + field public static final int KEYCODE_ESCAPE = 111; // 0x6f + field public static final int KEYCODE_EXPLORER = 64; // 0x40 + field public static final int KEYCODE_F = 34; // 0x22 + field public static final int KEYCODE_F1 = 131; // 0x83 + field public static final int KEYCODE_F10 = 140; // 0x8c + field public static final int KEYCODE_F11 = 141; // 0x8d + field public static final int KEYCODE_F12 = 142; // 0x8e + field public static final int KEYCODE_F2 = 132; // 0x84 + field public static final int KEYCODE_F3 = 133; // 0x85 + field public static final int KEYCODE_F4 = 134; // 0x86 + field public static final int KEYCODE_F5 = 135; // 0x87 + field public static final int KEYCODE_F6 = 136; // 0x88 + field public static final int KEYCODE_F7 = 137; // 0x89 + field public static final int KEYCODE_F8 = 138; // 0x8a + field public static final int KEYCODE_F9 = 139; // 0x8b + field public static final int KEYCODE_FOCUS = 80; // 0x50 + field public static final int KEYCODE_FORWARD = 125; // 0x7d + field public static final int KEYCODE_FORWARD_DEL = 112; // 0x70 + field public static final int KEYCODE_FUNCTION = 119; // 0x77 + field public static final int KEYCODE_G = 35; // 0x23 + field public static final int KEYCODE_GRAVE = 68; // 0x44 + field public static final int KEYCODE_GUIDE = 172; // 0xac + field public static final int KEYCODE_H = 36; // 0x24 + field public static final int KEYCODE_HEADSETHOOK = 79; // 0x4f + field public static final int KEYCODE_HELP = 259; // 0x103 + field public static final int KEYCODE_HENKAN = 214; // 0xd6 + field public static final int KEYCODE_HOME = 3; // 0x3 + field public static final int KEYCODE_I = 37; // 0x25 + field public static final int KEYCODE_INFO = 165; // 0xa5 + field public static final int KEYCODE_INSERT = 124; // 0x7c + field public static final int KEYCODE_J = 38; // 0x26 + field public static final int KEYCODE_K = 39; // 0x27 + field public static final int KEYCODE_KANA = 218; // 0xda + field public static final int KEYCODE_KATAKANA_HIRAGANA = 215; // 0xd7 + field public static final int KEYCODE_L = 40; // 0x28 + field public static final int KEYCODE_LANGUAGE_SWITCH = 204; // 0xcc + field public static final int KEYCODE_LAST_CHANNEL = 229; // 0xe5 + field public static final int KEYCODE_LEFT_BRACKET = 71; // 0x47 + field public static final int KEYCODE_M = 41; // 0x29 + field public static final int KEYCODE_MANNER_MODE = 205; // 0xcd + field public static final int KEYCODE_MEDIA_AUDIO_TRACK = 222; // 0xde + field public static final int KEYCODE_MEDIA_CLOSE = 128; // 0x80 + field public static final int KEYCODE_MEDIA_EJECT = 129; // 0x81 + field public static final int KEYCODE_MEDIA_FAST_FORWARD = 90; // 0x5a + field public static final int KEYCODE_MEDIA_NEXT = 87; // 0x57 + field public static final int KEYCODE_MEDIA_PAUSE = 127; // 0x7f + field public static final int KEYCODE_MEDIA_PLAY = 126; // 0x7e + field public static final int KEYCODE_MEDIA_PLAY_PAUSE = 85; // 0x55 + field public static final int KEYCODE_MEDIA_PREVIOUS = 88; // 0x58 + field public static final int KEYCODE_MEDIA_RECORD = 130; // 0x82 + field public static final int KEYCODE_MEDIA_REWIND = 89; // 0x59 + field public static final int KEYCODE_MEDIA_STOP = 86; // 0x56 + field public static final int KEYCODE_MEDIA_TOP_MENU = 226; // 0xe2 + field public static final int KEYCODE_MENU = 82; // 0x52 + field public static final int KEYCODE_META_LEFT = 117; // 0x75 + field public static final int KEYCODE_META_RIGHT = 118; // 0x76 + field public static final int KEYCODE_MINUS = 69; // 0x45 + field public static final int KEYCODE_MOVE_END = 123; // 0x7b + field public static final int KEYCODE_MOVE_HOME = 122; // 0x7a + field public static final int KEYCODE_MUHENKAN = 213; // 0xd5 + field public static final int KEYCODE_MUSIC = 209; // 0xd1 + field public static final int KEYCODE_MUTE = 91; // 0x5b + field public static final int KEYCODE_N = 42; // 0x2a + field public static final int KEYCODE_NOTIFICATION = 83; // 0x53 + field public static final int KEYCODE_NUM = 78; // 0x4e + field public static final int KEYCODE_NUMPAD_0 = 144; // 0x90 + field public static final int KEYCODE_NUMPAD_1 = 145; // 0x91 + field public static final int KEYCODE_NUMPAD_2 = 146; // 0x92 + field public static final int KEYCODE_NUMPAD_3 = 147; // 0x93 + field public static final int KEYCODE_NUMPAD_4 = 148; // 0x94 + field public static final int KEYCODE_NUMPAD_5 = 149; // 0x95 + field public static final int KEYCODE_NUMPAD_6 = 150; // 0x96 + field public static final int KEYCODE_NUMPAD_7 = 151; // 0x97 + field public static final int KEYCODE_NUMPAD_8 = 152; // 0x98 + field public static final int KEYCODE_NUMPAD_9 = 153; // 0x99 + field public static final int KEYCODE_NUMPAD_ADD = 157; // 0x9d + field public static final int KEYCODE_NUMPAD_COMMA = 159; // 0x9f + field public static final int KEYCODE_NUMPAD_DIVIDE = 154; // 0x9a + field public static final int KEYCODE_NUMPAD_DOT = 158; // 0x9e + field public static final int KEYCODE_NUMPAD_ENTER = 160; // 0xa0 + field public static final int KEYCODE_NUMPAD_EQUALS = 161; // 0xa1 + field public static final int KEYCODE_NUMPAD_LEFT_PAREN = 162; // 0xa2 + field public static final int KEYCODE_NUMPAD_MULTIPLY = 155; // 0x9b + field public static final int KEYCODE_NUMPAD_RIGHT_PAREN = 163; // 0xa3 + field public static final int KEYCODE_NUMPAD_SUBTRACT = 156; // 0x9c + field public static final int KEYCODE_NUM_LOCK = 143; // 0x8f + field public static final int KEYCODE_O = 43; // 0x2b + field public static final int KEYCODE_P = 44; // 0x2c + field public static final int KEYCODE_PAGE_DOWN = 93; // 0x5d + field public static final int KEYCODE_PAGE_UP = 92; // 0x5c + field public static final int KEYCODE_PAIRING = 225; // 0xe1 + field public static final int KEYCODE_PERIOD = 56; // 0x38 + field public static final int KEYCODE_PICTSYMBOLS = 94; // 0x5e + field public static final int KEYCODE_PLUS = 81; // 0x51 + field public static final int KEYCODE_POUND = 18; // 0x12 + field public static final int KEYCODE_POWER = 26; // 0x1a + field public static final int KEYCODE_PROG_BLUE = 186; // 0xba + field public static final int KEYCODE_PROG_GREEN = 184; // 0xb8 + field public static final int KEYCODE_PROG_RED = 183; // 0xb7 + field public static final int KEYCODE_PROG_YELLOW = 185; // 0xb9 + field public static final int KEYCODE_Q = 45; // 0x2d + field public static final int KEYCODE_R = 46; // 0x2e + field public static final int KEYCODE_RIGHT_BRACKET = 72; // 0x48 + field public static final int KEYCODE_RO = 217; // 0xd9 + field public static final int KEYCODE_S = 47; // 0x2f + field public static final int KEYCODE_SCROLL_LOCK = 116; // 0x74 + field public static final int KEYCODE_SEARCH = 84; // 0x54 + field public static final int KEYCODE_SEMICOLON = 74; // 0x4a + field public static final int KEYCODE_SETTINGS = 176; // 0xb0 + field public static final int KEYCODE_SHIFT_LEFT = 59; // 0x3b + field public static final int KEYCODE_SHIFT_RIGHT = 60; // 0x3c + field public static final int KEYCODE_SLASH = 76; // 0x4c + field public static final int KEYCODE_SLEEP = 223; // 0xdf + field public static final int KEYCODE_SOFT_LEFT = 1; // 0x1 + field public static final int KEYCODE_SOFT_RIGHT = 2; // 0x2 + field public static final int KEYCODE_SPACE = 62; // 0x3e + field public static final int KEYCODE_STAR = 17; // 0x11 + field public static final int KEYCODE_STB_INPUT = 180; // 0xb4 + field public static final int KEYCODE_STB_POWER = 179; // 0xb3 + field public static final int KEYCODE_SWITCH_CHARSET = 95; // 0x5f + field public static final int KEYCODE_SYM = 63; // 0x3f + field public static final int KEYCODE_SYSRQ = 120; // 0x78 + field public static final int KEYCODE_T = 48; // 0x30 + field public static final int KEYCODE_TAB = 61; // 0x3d + field public static final int KEYCODE_TV = 170; // 0xaa + field public static final int KEYCODE_TV_ANTENNA_CABLE = 242; // 0xf2 + field public static final int KEYCODE_TV_AUDIO_DESCRIPTION = 252; // 0xfc + field public static final int KEYCODE_TV_AUDIO_DESCRIPTION_MIX_DOWN = 254; // 0xfe + field public static final int KEYCODE_TV_AUDIO_DESCRIPTION_MIX_UP = 253; // 0xfd + field public static final int KEYCODE_TV_CONTENTS_MENU = 256; // 0x100 + field public static final int KEYCODE_TV_DATA_SERVICE = 230; // 0xe6 + field public static final int KEYCODE_TV_INPUT = 178; // 0xb2 + field public static final int KEYCODE_TV_INPUT_COMPONENT_1 = 249; // 0xf9 + field public static final int KEYCODE_TV_INPUT_COMPONENT_2 = 250; // 0xfa + field public static final int KEYCODE_TV_INPUT_COMPOSITE_1 = 247; // 0xf7 + field public static final int KEYCODE_TV_INPUT_COMPOSITE_2 = 248; // 0xf8 + field public static final int KEYCODE_TV_INPUT_HDMI_1 = 243; // 0xf3 + field public static final int KEYCODE_TV_INPUT_HDMI_2 = 244; // 0xf4 + field public static final int KEYCODE_TV_INPUT_HDMI_3 = 245; // 0xf5 + field public static final int KEYCODE_TV_INPUT_HDMI_4 = 246; // 0xf6 + field public static final int KEYCODE_TV_INPUT_VGA_1 = 251; // 0xfb + field public static final int KEYCODE_TV_MEDIA_CONTEXT_MENU = 257; // 0x101 + field public static final int KEYCODE_TV_NETWORK = 241; // 0xf1 + field public static final int KEYCODE_TV_NUMBER_ENTRY = 234; // 0xea + field public static final int KEYCODE_TV_POWER = 177; // 0xb1 + field public static final int KEYCODE_TV_RADIO_SERVICE = 232; // 0xe8 + field public static final int KEYCODE_TV_SATELLITE = 237; // 0xed + field public static final int KEYCODE_TV_SATELLITE_BS = 238; // 0xee + field public static final int KEYCODE_TV_SATELLITE_CS = 239; // 0xef + field public static final int KEYCODE_TV_SATELLITE_SERVICE = 240; // 0xf0 + field public static final int KEYCODE_TV_TELETEXT = 233; // 0xe9 + field public static final int KEYCODE_TV_TERRESTRIAL_ANALOG = 235; // 0xeb + field public static final int KEYCODE_TV_TERRESTRIAL_DIGITAL = 236; // 0xec + field public static final int KEYCODE_TV_TIMER_PROGRAMMING = 258; // 0x102 + field public static final int KEYCODE_TV_ZOOM_MODE = 255; // 0xff + field public static final int KEYCODE_U = 49; // 0x31 + field public static final int KEYCODE_UNKNOWN = 0; // 0x0 + field public static final int KEYCODE_V = 50; // 0x32 + field public static final int KEYCODE_VOICE_ASSIST = 231; // 0xe7 + field public static final int KEYCODE_VOLUME_DOWN = 25; // 0x19 + field public static final int KEYCODE_VOLUME_MUTE = 164; // 0xa4 + field public static final int KEYCODE_VOLUME_UP = 24; // 0x18 + field public static final int KEYCODE_W = 51; // 0x33 + field public static final int KEYCODE_WAKEUP = 224; // 0xe0 + field public static final int KEYCODE_WINDOW = 171; // 0xab + field public static final int KEYCODE_X = 52; // 0x34 + field public static final int KEYCODE_Y = 53; // 0x35 + field public static final int KEYCODE_YEN = 216; // 0xd8 + field public static final int KEYCODE_Z = 54; // 0x36 + field public static final int KEYCODE_ZENKAKU_HANKAKU = 211; // 0xd3 + field public static final int KEYCODE_ZOOM_IN = 168; // 0xa8 + field public static final int KEYCODE_ZOOM_OUT = 169; // 0xa9 + field public static final deprecated int MAX_KEYCODE = 84; // 0x54 + field public static final int META_ALT_LEFT_ON = 16; // 0x10 + field public static final int META_ALT_MASK = 50; // 0x32 + field public static final int META_ALT_ON = 2; // 0x2 + field public static final int META_ALT_RIGHT_ON = 32; // 0x20 + field public static final int META_CAPS_LOCK_ON = 1048576; // 0x100000 + field public static final int META_CTRL_LEFT_ON = 8192; // 0x2000 + field public static final int META_CTRL_MASK = 28672; // 0x7000 + field public static final int META_CTRL_ON = 4096; // 0x1000 + field public static final int META_CTRL_RIGHT_ON = 16384; // 0x4000 + field public static final int META_FUNCTION_ON = 8; // 0x8 + field public static final int META_META_LEFT_ON = 131072; // 0x20000 + field public static final int META_META_MASK = 458752; // 0x70000 + field public static final int META_META_ON = 65536; // 0x10000 + field public static final int META_META_RIGHT_ON = 262144; // 0x40000 + field public static final int META_NUM_LOCK_ON = 2097152; // 0x200000 + field public static final int META_SCROLL_LOCK_ON = 4194304; // 0x400000 + field public static final int META_SHIFT_LEFT_ON = 64; // 0x40 + field public static final int META_SHIFT_MASK = 193; // 0xc1 + field public static final int META_SHIFT_ON = 1; // 0x1 + field public static final int META_SHIFT_RIGHT_ON = 128; // 0x80 + field public static final int META_SYM_ON = 4; // 0x4 + } + + public static abstract interface KeyEvent.Callback { + method public abstract boolean onKeyDown(int, android.view.KeyEvent); + method public abstract boolean onKeyLongPress(int, android.view.KeyEvent); + method public abstract boolean onKeyMultiple(int, int, android.view.KeyEvent); + method public abstract boolean onKeyUp(int, android.view.KeyEvent); + } + + public static class KeyEvent.DispatcherState { + ctor public KeyEvent.DispatcherState(); + method public void handleUpEvent(android.view.KeyEvent); + method public boolean isTracking(android.view.KeyEvent); + method public void performedLongPress(android.view.KeyEvent); + method public void reset(); + method public void reset(java.lang.Object); + method public void startTracking(android.view.KeyEvent, java.lang.Object); + } + + public abstract class LayoutInflater { + ctor protected LayoutInflater(android.content.Context); + ctor protected LayoutInflater(android.view.LayoutInflater, android.content.Context); + method public abstract android.view.LayoutInflater cloneInContext(android.content.Context); + method public final android.view.View createView(java.lang.String, java.lang.String, android.util.AttributeSet) throws java.lang.ClassNotFoundException, android.view.InflateException; + method public static android.view.LayoutInflater from(android.content.Context); + method public android.content.Context getContext(); + method public final android.view.LayoutInflater.Factory getFactory(); + method public final android.view.LayoutInflater.Factory2 getFactory2(); + method public android.view.LayoutInflater.Filter getFilter(); + method public android.view.View inflate(int, android.view.ViewGroup); + method public android.view.View inflate(org.xmlpull.v1.XmlPullParser, android.view.ViewGroup); + method public android.view.View inflate(int, android.view.ViewGroup, boolean); + method public android.view.View inflate(org.xmlpull.v1.XmlPullParser, android.view.ViewGroup, boolean); + method protected android.view.View onCreateView(java.lang.String, android.util.AttributeSet) throws java.lang.ClassNotFoundException; + method protected android.view.View onCreateView(android.view.View, java.lang.String, android.util.AttributeSet) throws java.lang.ClassNotFoundException; + method public void setFactory(android.view.LayoutInflater.Factory); + method public void setFactory2(android.view.LayoutInflater.Factory2); + method public void setFilter(android.view.LayoutInflater.Filter); + } + + public static abstract interface LayoutInflater.Factory { + method public abstract android.view.View onCreateView(java.lang.String, android.content.Context, android.util.AttributeSet); + } + + public static abstract interface LayoutInflater.Factory2 implements android.view.LayoutInflater.Factory { + method public abstract android.view.View onCreateView(android.view.View, java.lang.String, android.content.Context, android.util.AttributeSet); + } + + public static abstract interface LayoutInflater.Filter { + method public abstract boolean onLoadClass(java.lang.Class); + } + + public abstract interface Menu { + method public abstract android.view.MenuItem add(java.lang.CharSequence); + method public abstract android.view.MenuItem add(int); + method public abstract android.view.MenuItem add(int, int, int, java.lang.CharSequence); + method public abstract android.view.MenuItem add(int, int, int, int); + method public abstract int addIntentOptions(int, int, int, android.content.ComponentName, android.content.Intent[], android.content.Intent, int, android.view.MenuItem[]); + method public abstract android.view.SubMenu addSubMenu(java.lang.CharSequence); + method public abstract android.view.SubMenu addSubMenu(int); + method public abstract android.view.SubMenu addSubMenu(int, int, int, java.lang.CharSequence); + method public abstract android.view.SubMenu addSubMenu(int, int, int, int); + method public abstract void clear(); + method public abstract void close(); + method public abstract android.view.MenuItem findItem(int); + method public abstract android.view.MenuItem getItem(int); + method public abstract boolean hasVisibleItems(); + method public abstract boolean isShortcutKey(int, android.view.KeyEvent); + method public abstract boolean performIdentifierAction(int, int); + method public abstract boolean performShortcut(int, android.view.KeyEvent, int); + method public abstract void removeGroup(int); + method public abstract void removeItem(int); + method public abstract void setGroupCheckable(int, boolean, boolean); + method public abstract void setGroupEnabled(int, boolean); + method public abstract void setGroupVisible(int, boolean); + method public abstract void setQwertyMode(boolean); + method public abstract int size(); + field public static final int CATEGORY_ALTERNATIVE = 262144; // 0x40000 + field public static final int CATEGORY_CONTAINER = 65536; // 0x10000 + field public static final int CATEGORY_SECONDARY = 196608; // 0x30000 + field public static final int CATEGORY_SYSTEM = 131072; // 0x20000 + field public static final int FIRST = 1; // 0x1 + field public static final int FLAG_ALWAYS_PERFORM_CLOSE = 2; // 0x2 + field public static final int FLAG_APPEND_TO_GROUP = 1; // 0x1 + field public static final int FLAG_PERFORM_NO_CLOSE = 1; // 0x1 + field public static final int NONE = 0; // 0x0 + } + + public class MenuInflater { + ctor public MenuInflater(android.content.Context); + method public void inflate(int, android.view.Menu); + } + + public abstract interface MenuItem { + method public abstract boolean collapseActionView(); + method public abstract boolean expandActionView(); + method public abstract android.view.ActionProvider getActionProvider(); + method public abstract android.view.View getActionView(); + method public abstract char getAlphabeticShortcut(); + method public abstract int getGroupId(); + method public abstract android.graphics.drawable.Drawable getIcon(); + method public abstract android.content.Intent getIntent(); + method public abstract int getItemId(); + method public abstract android.view.ContextMenu.ContextMenuInfo getMenuInfo(); + method public abstract char getNumericShortcut(); + method public abstract int getOrder(); + method public abstract android.view.SubMenu getSubMenu(); + method public abstract java.lang.CharSequence getTitle(); + method public abstract java.lang.CharSequence getTitleCondensed(); + method public abstract boolean hasSubMenu(); + method public abstract boolean isActionViewExpanded(); + method public abstract boolean isCheckable(); + method public abstract boolean isChecked(); + method public abstract boolean isEnabled(); + method public abstract boolean isVisible(); + method public abstract android.view.MenuItem setActionProvider(android.view.ActionProvider); + method public abstract android.view.MenuItem setActionView(android.view.View); + method public abstract android.view.MenuItem setActionView(int); + method public abstract android.view.MenuItem setAlphabeticShortcut(char); + method public abstract android.view.MenuItem setCheckable(boolean); + method public abstract android.view.MenuItem setChecked(boolean); + method public abstract android.view.MenuItem setEnabled(boolean); + method public abstract android.view.MenuItem setIcon(android.graphics.drawable.Drawable); + method public abstract android.view.MenuItem setIcon(int); + method public abstract android.view.MenuItem setIntent(android.content.Intent); + method public abstract android.view.MenuItem setNumericShortcut(char); + method public abstract android.view.MenuItem setOnActionExpandListener(android.view.MenuItem.OnActionExpandListener); + method public abstract android.view.MenuItem setOnMenuItemClickListener(android.view.MenuItem.OnMenuItemClickListener); + method public abstract android.view.MenuItem setShortcut(char, char); + method public abstract void setShowAsAction(int); + method public abstract android.view.MenuItem setShowAsActionFlags(int); + method public abstract android.view.MenuItem setTitle(java.lang.CharSequence); + method public abstract android.view.MenuItem setTitle(int); + method public abstract android.view.MenuItem setTitleCondensed(java.lang.CharSequence); + method public abstract android.view.MenuItem setVisible(boolean); + field public static final int SHOW_AS_ACTION_ALWAYS = 2; // 0x2 + field public static final int SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW = 8; // 0x8 + field public static final int SHOW_AS_ACTION_IF_ROOM = 1; // 0x1 + field public static final int SHOW_AS_ACTION_NEVER = 0; // 0x0 + field public static final int SHOW_AS_ACTION_WITH_TEXT = 4; // 0x4 + } + + public static abstract interface MenuItem.OnActionExpandListener { + method public abstract boolean onMenuItemActionCollapse(android.view.MenuItem); + method public abstract boolean onMenuItemActionExpand(android.view.MenuItem); + } + + public static abstract interface MenuItem.OnMenuItemClickListener { + method public abstract boolean onMenuItemClick(android.view.MenuItem); + } + + public final class MotionEvent extends android.view.InputEvent implements android.os.Parcelable { + method public static java.lang.String actionToString(int); + method public final void addBatch(long, float, float, float, float, int); + method public final void addBatch(long, android.view.MotionEvent.PointerCoords[], int); + method public static int axisFromString(java.lang.String); + method public static java.lang.String axisToString(int); + method public final int findPointerIndex(int); + method public final int getAction(); + method public final int getActionIndex(); + method public final int getActionMasked(); + method public final float getAxisValue(int); + method public final float getAxisValue(int, int); + method public final int getButtonState(); + method public final int getDeviceId(); + method public final long getDownTime(); + method public final int getEdgeFlags(); + method public final long getEventTime(); + method public final int getFlags(); + method public final float getHistoricalAxisValue(int, int); + method public final float getHistoricalAxisValue(int, int, int); + method public final long getHistoricalEventTime(int); + method public final float getHistoricalOrientation(int); + method public final float getHistoricalOrientation(int, int); + method public final void getHistoricalPointerCoords(int, int, android.view.MotionEvent.PointerCoords); + method public final float getHistoricalPressure(int); + method public final float getHistoricalPressure(int, int); + method public final float getHistoricalSize(int); + method public final float getHistoricalSize(int, int); + method public final float getHistoricalToolMajor(int); + method public final float getHistoricalToolMajor(int, int); + method public final float getHistoricalToolMinor(int); + method public final float getHistoricalToolMinor(int, int); + method public final float getHistoricalTouchMajor(int); + method public final float getHistoricalTouchMajor(int, int); + method public final float getHistoricalTouchMinor(int); + method public final float getHistoricalTouchMinor(int, int); + method public final float getHistoricalX(int); + method public final float getHistoricalX(int, int); + method public final float getHistoricalY(int); + method public final float getHistoricalY(int, int); + method public final int getHistorySize(); + method public final int getMetaState(); + method public final float getOrientation(); + method public final float getOrientation(int); + method public final void getPointerCoords(int, android.view.MotionEvent.PointerCoords); + method public final int getPointerCount(); + method public final int getPointerId(int); + method public final void getPointerProperties(int, android.view.MotionEvent.PointerProperties); + method public final float getPressure(); + method public final float getPressure(int); + method public final float getRawX(); + method public final float getRawY(); + method public final float getSize(); + method public final float getSize(int); + method public final int getSource(); + method public final float getToolMajor(); + method public final float getToolMajor(int); + method public final float getToolMinor(); + method public final float getToolMinor(int); + method public final int getToolType(int); + method public final float getTouchMajor(); + method public final float getTouchMajor(int); + method public final float getTouchMinor(); + method public final float getTouchMinor(int); + method public final float getX(); + method public final float getX(int); + method public final float getXPrecision(); + method public final float getY(); + method public final float getY(int); + method public final float getYPrecision(); + method public final boolean isButtonPressed(int); + method public static android.view.MotionEvent obtain(long, long, int, int, android.view.MotionEvent.PointerProperties[], android.view.MotionEvent.PointerCoords[], int, int, float, float, int, int, int, int); + method public static deprecated android.view.MotionEvent obtain(long, long, int, int, int[], android.view.MotionEvent.PointerCoords[], int, float, float, int, int, int, int); + method public static android.view.MotionEvent obtain(long, long, int, float, float, float, float, int, float, float, int, int); + method public static deprecated android.view.MotionEvent obtain(long, long, int, int, float, float, float, float, int, float, float, int, int); + method public static android.view.MotionEvent obtain(long, long, int, float, float, int); + method public static android.view.MotionEvent obtain(android.view.MotionEvent); + method public static android.view.MotionEvent obtainNoHistory(android.view.MotionEvent); + method public final void offsetLocation(float, float); + method public final void recycle(); + method public final void setAction(int); + method public final void setEdgeFlags(int); + method public final void setLocation(float, float); + method public final void setSource(int); + method public final void transform(android.graphics.Matrix); + method public void writeToParcel(android.os.Parcel, int); + field public static final int ACTION_CANCEL = 3; // 0x3 + field public static final int ACTION_DOWN = 0; // 0x0 + field public static final int ACTION_HOVER_ENTER = 9; // 0x9 + field public static final int ACTION_HOVER_EXIT = 10; // 0xa + field public static final int ACTION_HOVER_MOVE = 7; // 0x7 + field public static final int ACTION_MASK = 255; // 0xff + field public static final int ACTION_MOVE = 2; // 0x2 + field public static final int ACTION_OUTSIDE = 4; // 0x4 + field public static final deprecated int ACTION_POINTER_1_DOWN = 5; // 0x5 + field public static final deprecated int ACTION_POINTER_1_UP = 6; // 0x6 + field public static final deprecated int ACTION_POINTER_2_DOWN = 261; // 0x105 + field public static final deprecated int ACTION_POINTER_2_UP = 262; // 0x106 + field public static final deprecated int ACTION_POINTER_3_DOWN = 517; // 0x205 + field public static final deprecated int ACTION_POINTER_3_UP = 518; // 0x206 + field public static final int ACTION_POINTER_DOWN = 5; // 0x5 + field public static final deprecated int ACTION_POINTER_ID_MASK = 65280; // 0xff00 + field public static final deprecated int ACTION_POINTER_ID_SHIFT = 8; // 0x8 + field public static final int ACTION_POINTER_INDEX_MASK = 65280; // 0xff00 + field public static final int ACTION_POINTER_INDEX_SHIFT = 8; // 0x8 + field public static final int ACTION_POINTER_UP = 6; // 0x6 + field public static final int ACTION_SCROLL = 8; // 0x8 + field public static final int ACTION_UP = 1; // 0x1 + field public static final int AXIS_BRAKE = 23; // 0x17 + field public static final int AXIS_DISTANCE = 24; // 0x18 + field public static final int AXIS_GAS = 22; // 0x16 + field public static final int AXIS_GENERIC_1 = 32; // 0x20 + field public static final int AXIS_GENERIC_10 = 41; // 0x29 + field public static final int AXIS_GENERIC_11 = 42; // 0x2a + field public static final int AXIS_GENERIC_12 = 43; // 0x2b + field public static final int AXIS_GENERIC_13 = 44; // 0x2c + field public static final int AXIS_GENERIC_14 = 45; // 0x2d + field public static final int AXIS_GENERIC_15 = 46; // 0x2e + field public static final int AXIS_GENERIC_16 = 47; // 0x2f + field public static final int AXIS_GENERIC_2 = 33; // 0x21 + field public static final int AXIS_GENERIC_3 = 34; // 0x22 + field public static final int AXIS_GENERIC_4 = 35; // 0x23 + field public static final int AXIS_GENERIC_5 = 36; // 0x24 + field public static final int AXIS_GENERIC_6 = 37; // 0x25 + field public static final int AXIS_GENERIC_7 = 38; // 0x26 + field public static final int AXIS_GENERIC_8 = 39; // 0x27 + field public static final int AXIS_GENERIC_9 = 40; // 0x28 + field public static final int AXIS_HAT_X = 15; // 0xf + field public static final int AXIS_HAT_Y = 16; // 0x10 + field public static final int AXIS_HSCROLL = 10; // 0xa + field public static final int AXIS_LTRIGGER = 17; // 0x11 + field public static final int AXIS_ORIENTATION = 8; // 0x8 + field public static final int AXIS_PRESSURE = 2; // 0x2 + field public static final int AXIS_RTRIGGER = 18; // 0x12 + field public static final int AXIS_RUDDER = 20; // 0x14 + field public static final int AXIS_RX = 12; // 0xc + field public static final int AXIS_RY = 13; // 0xd + field public static final int AXIS_RZ = 14; // 0xe + field public static final int AXIS_SIZE = 3; // 0x3 + field public static final int AXIS_THROTTLE = 19; // 0x13 + field public static final int AXIS_TILT = 25; // 0x19 + field public static final int AXIS_TOOL_MAJOR = 6; // 0x6 + field public static final int AXIS_TOOL_MINOR = 7; // 0x7 + field public static final int AXIS_TOUCH_MAJOR = 4; // 0x4 + field public static final int AXIS_TOUCH_MINOR = 5; // 0x5 + field public static final int AXIS_VSCROLL = 9; // 0x9 + field public static final int AXIS_WHEEL = 21; // 0x15 + field public static final int AXIS_X = 0; // 0x0 + field public static final int AXIS_Y = 1; // 0x1 + field public static final int AXIS_Z = 11; // 0xb + field public static final int BUTTON_BACK = 8; // 0x8 + field public static final int BUTTON_FORWARD = 16; // 0x10 + field public static final int BUTTON_PRIMARY = 1; // 0x1 + field public static final int BUTTON_SECONDARY = 2; // 0x2 + field public static final int BUTTON_TERTIARY = 4; // 0x4 + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int EDGE_BOTTOM = 2; // 0x2 + field public static final int EDGE_LEFT = 4; // 0x4 + field public static final int EDGE_RIGHT = 8; // 0x8 + field public static final int EDGE_TOP = 1; // 0x1 + field public static final int FLAG_WINDOW_IS_OBSCURED = 1; // 0x1 + field public static final int INVALID_POINTER_ID = -1; // 0xffffffff + field public static final int TOOL_TYPE_ERASER = 4; // 0x4 + field public static final int TOOL_TYPE_FINGER = 1; // 0x1 + field public static final int TOOL_TYPE_MOUSE = 3; // 0x3 + field public static final int TOOL_TYPE_STYLUS = 2; // 0x2 + field public static final int TOOL_TYPE_UNKNOWN = 0; // 0x0 + } + + public static final class MotionEvent.PointerCoords { + ctor public MotionEvent.PointerCoords(); + ctor public MotionEvent.PointerCoords(android.view.MotionEvent.PointerCoords); + method public void clear(); + method public void copyFrom(android.view.MotionEvent.PointerCoords); + method public float getAxisValue(int); + method public void setAxisValue(int, float); + field public float orientation; + field public float pressure; + field public float size; + field public float toolMajor; + field public float toolMinor; + field public float touchMajor; + field public float touchMinor; + field public float x; + field public float y; + } + + public static final class MotionEvent.PointerProperties { + ctor public MotionEvent.PointerProperties(); + ctor public MotionEvent.PointerProperties(android.view.MotionEvent.PointerProperties); + method public void clear(); + method public void copyFrom(android.view.MotionEvent.PointerProperties); + field public int id; + field public int toolType; + } + + public abstract class OrientationEventListener { + ctor public OrientationEventListener(android.content.Context); + ctor public OrientationEventListener(android.content.Context, int); + method public boolean canDetectOrientation(); + method public void disable(); + method public void enable(); + method public abstract void onOrientationChanged(int); + field public static final int ORIENTATION_UNKNOWN = -1; // 0xffffffff + } + + public abstract deprecated class OrientationListener implements android.hardware.SensorListener { + ctor public OrientationListener(android.content.Context); + ctor public OrientationListener(android.content.Context, int); + method public void disable(); + method public void enable(); + method public void onAccuracyChanged(int, int); + method public abstract void onOrientationChanged(int); + method public void onSensorChanged(int, float[]); + field public static final int ORIENTATION_UNKNOWN = -1; // 0xffffffff + } + + public class ScaleGestureDetector { + ctor public ScaleGestureDetector(android.content.Context, android.view.ScaleGestureDetector.OnScaleGestureListener); + ctor public ScaleGestureDetector(android.content.Context, android.view.ScaleGestureDetector.OnScaleGestureListener, android.os.Handler); + method public float getCurrentSpan(); + method public float getCurrentSpanX(); + method public float getCurrentSpanY(); + method public long getEventTime(); + method public float getFocusX(); + method public float getFocusY(); + method public float getPreviousSpan(); + method public float getPreviousSpanX(); + method public float getPreviousSpanY(); + method public float getScaleFactor(); + method public long getTimeDelta(); + method public boolean isInProgress(); + method public boolean isQuickScaleEnabled(); + method public boolean onTouchEvent(android.view.MotionEvent); + method public void setQuickScaleEnabled(boolean); + } + + public static abstract interface ScaleGestureDetector.OnScaleGestureListener { + method public abstract boolean onScale(android.view.ScaleGestureDetector); + method public abstract boolean onScaleBegin(android.view.ScaleGestureDetector); + method public abstract void onScaleEnd(android.view.ScaleGestureDetector); + } + + public static class ScaleGestureDetector.SimpleOnScaleGestureListener implements android.view.ScaleGestureDetector.OnScaleGestureListener { + ctor public ScaleGestureDetector.SimpleOnScaleGestureListener(); + method public boolean onScale(android.view.ScaleGestureDetector); + method public boolean onScaleBegin(android.view.ScaleGestureDetector); + method public void onScaleEnd(android.view.ScaleGestureDetector); + } + + public class SoundEffectConstants { + method public static int getContantForFocusDirection(int); + field public static final int CLICK = 0; // 0x0 + field public static final int NAVIGATION_DOWN = 4; // 0x4 + field public static final int NAVIGATION_LEFT = 1; // 0x1 + field public static final int NAVIGATION_RIGHT = 3; // 0x3 + field public static final int NAVIGATION_UP = 2; // 0x2 + } + + public abstract interface SubMenu implements android.view.Menu { + method public abstract void clearHeader(); + method public abstract android.view.MenuItem getItem(); + method public abstract android.view.SubMenu setHeaderIcon(int); + method public abstract android.view.SubMenu setHeaderIcon(android.graphics.drawable.Drawable); + method public abstract android.view.SubMenu setHeaderTitle(int); + method public abstract android.view.SubMenu setHeaderTitle(java.lang.CharSequence); + method public abstract android.view.SubMenu setHeaderView(android.view.View); + method public abstract android.view.SubMenu setIcon(int); + method public abstract android.view.SubMenu setIcon(android.graphics.drawable.Drawable); + } + + public class Surface implements android.os.Parcelable { + ctor public Surface(android.graphics.SurfaceTexture); + method public int describeContents(); + method public boolean isValid(); + method public android.graphics.Canvas lockCanvas(android.graphics.Rect) throws java.lang.IllegalArgumentException, android.view.Surface.OutOfResourcesException; + method public void readFromParcel(android.os.Parcel); + method public void release(); + method public deprecated void unlockCanvas(android.graphics.Canvas); + method public void unlockCanvasAndPost(android.graphics.Canvas); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int ROTATION_0 = 0; // 0x0 + field public static final int ROTATION_180 = 2; // 0x2 + field public static final int ROTATION_270 = 3; // 0x3 + field public static final int ROTATION_90 = 1; // 0x1 + } + + public static class Surface.OutOfResourcesException extends java.lang.RuntimeException { + ctor public Surface.OutOfResourcesException(); + ctor public Surface.OutOfResourcesException(java.lang.String); + } + + public abstract interface SurfaceHolder { + method public abstract void addCallback(android.view.SurfaceHolder.Callback); + method public abstract android.view.Surface getSurface(); + method public abstract android.graphics.Rect getSurfaceFrame(); + method public abstract boolean isCreating(); + method public abstract android.graphics.Canvas lockCanvas(); + method public abstract android.graphics.Canvas lockCanvas(android.graphics.Rect); + method public abstract void removeCallback(android.view.SurfaceHolder.Callback); + method public abstract void setFixedSize(int, int); + method public abstract void setFormat(int); + method public abstract void setKeepScreenOn(boolean); + method public abstract void setSizeFromLayout(); + method public abstract deprecated void setType(int); + method public abstract void unlockCanvasAndPost(android.graphics.Canvas); + field public static final deprecated int SURFACE_TYPE_GPU = 2; // 0x2 + field public static final deprecated int SURFACE_TYPE_HARDWARE = 1; // 0x1 + field public static final deprecated int SURFACE_TYPE_NORMAL = 0; // 0x0 + field public static final deprecated int SURFACE_TYPE_PUSH_BUFFERS = 3; // 0x3 + } + + public static class SurfaceHolder.BadSurfaceTypeException extends java.lang.RuntimeException { + ctor public SurfaceHolder.BadSurfaceTypeException(); + ctor public SurfaceHolder.BadSurfaceTypeException(java.lang.String); + } + + public static abstract interface SurfaceHolder.Callback { + method public abstract void surfaceChanged(android.view.SurfaceHolder, int, int, int); + method public abstract void surfaceCreated(android.view.SurfaceHolder); + method public abstract void surfaceDestroyed(android.view.SurfaceHolder); + } + + public static abstract interface SurfaceHolder.Callback2 implements android.view.SurfaceHolder.Callback { + method public abstract void surfaceRedrawNeeded(android.view.SurfaceHolder); + } + + public class SurfaceView extends android.view.View { + ctor public SurfaceView(android.content.Context); + ctor public SurfaceView(android.content.Context, android.util.AttributeSet); + ctor public SurfaceView(android.content.Context, android.util.AttributeSet, int); + ctor public SurfaceView(android.content.Context, android.util.AttributeSet, int, int); + method public boolean gatherTransparentRegion(android.graphics.Region); + method public android.view.SurfaceHolder getHolder(); + method public void setSecure(boolean); + method public void setZOrderMediaOverlay(boolean); + method public void setZOrderOnTop(boolean); + } + + public class TextureView extends android.view.View { + ctor public TextureView(android.content.Context); + ctor public TextureView(android.content.Context, android.util.AttributeSet); + ctor public TextureView(android.content.Context, android.util.AttributeSet, int); + ctor public TextureView(android.content.Context, android.util.AttributeSet, int, int); + method public final void draw(android.graphics.Canvas); + method public android.graphics.Bitmap getBitmap(); + method public android.graphics.Bitmap getBitmap(int, int); + method public android.graphics.Bitmap getBitmap(android.graphics.Bitmap); + method public android.graphics.SurfaceTexture getSurfaceTexture(); + method public android.view.TextureView.SurfaceTextureListener getSurfaceTextureListener(); + method public android.graphics.Matrix getTransform(android.graphics.Matrix); + method public boolean isAvailable(); + method public android.graphics.Canvas lockCanvas(); + method public android.graphics.Canvas lockCanvas(android.graphics.Rect); + method protected final void onDraw(android.graphics.Canvas); + method public void setOpaque(boolean); + method public void setSurfaceTexture(android.graphics.SurfaceTexture); + method public void setSurfaceTextureListener(android.view.TextureView.SurfaceTextureListener); + method public void setTransform(android.graphics.Matrix); + method public void unlockCanvasAndPost(android.graphics.Canvas); + } + + public static abstract interface TextureView.SurfaceTextureListener { + method public abstract void onSurfaceTextureAvailable(android.graphics.SurfaceTexture, int, int); + method public abstract boolean onSurfaceTextureDestroyed(android.graphics.SurfaceTexture); + method public abstract void onSurfaceTextureSizeChanged(android.graphics.SurfaceTexture, int, int); + method public abstract void onSurfaceTextureUpdated(android.graphics.SurfaceTexture); + } + + public class TouchDelegate { + ctor public TouchDelegate(android.graphics.Rect, android.view.View); + method public boolean onTouchEvent(android.view.MotionEvent); + field public static final int ABOVE = 1; // 0x1 + field public static final int BELOW = 2; // 0x2 + field public static final int TO_LEFT = 4; // 0x4 + field public static final int TO_RIGHT = 8; // 0x8 + } + + public final class VelocityTracker { + method public void addMovement(android.view.MotionEvent); + method public void clear(); + method public void computeCurrentVelocity(int); + method public void computeCurrentVelocity(int, float); + method public float getXVelocity(); + method public float getXVelocity(int); + method public float getYVelocity(); + method public float getYVelocity(int); + method public static android.view.VelocityTracker obtain(); + method public void recycle(); + } + + public class View implements android.view.accessibility.AccessibilityEventSource android.graphics.drawable.Drawable.Callback android.view.KeyEvent.Callback { + ctor public View(android.content.Context); + ctor public View(android.content.Context, android.util.AttributeSet); + ctor public View(android.content.Context, android.util.AttributeSet, int); + ctor public View(android.content.Context, android.util.AttributeSet, int, int); + method public void addChildrenForAccessibility(java.util.ArrayList); + method public void addFocusables(java.util.ArrayList, int); + method public void addFocusables(java.util.ArrayList, int, int); + method public void addOnAttachStateChangeListener(android.view.View.OnAttachStateChangeListener); + method public void addOnLayoutChangeListener(android.view.View.OnLayoutChangeListener); + method public void addTouchables(java.util.ArrayList); + method public android.view.ViewPropertyAnimator animate(); + method public void announceForAccessibility(java.lang.CharSequence); + method protected boolean awakenScrollBars(); + method protected boolean awakenScrollBars(int); + method protected boolean awakenScrollBars(int, boolean); + method public void bringToFront(); + method public void buildDrawingCache(); + method public void buildDrawingCache(boolean); + method public void buildLayer(); + method public boolean callOnClick(); + method public boolean canResolveLayoutDirection(); + method public boolean canResolveTextAlignment(); + method public boolean canResolveTextDirection(); + method public boolean canScrollHorizontally(int); + method public boolean canScrollVertically(int); + method public void cancelLongPress(); + method public final void cancelPendingInputEvents(); + method public boolean checkInputConnectionProxy(android.view.View); + method public void clearAnimation(); + method public void clearFocus(); + method public static int combineMeasuredStates(int, int); + method protected int computeHorizontalScrollExtent(); + method protected int computeHorizontalScrollOffset(); + method protected int computeHorizontalScrollRange(); + method public void computeScroll(); + method public android.view.WindowInsets computeSystemWindowInsets(android.view.WindowInsets, android.graphics.Rect); + method protected int computeVerticalScrollExtent(); + method protected int computeVerticalScrollOffset(); + method protected int computeVerticalScrollRange(); + method public android.view.accessibility.AccessibilityNodeInfo createAccessibilityNodeInfo(); + method public void createContextMenu(android.view.ContextMenu); + method public void destroyDrawingCache(); + method public android.view.WindowInsets dispatchApplyWindowInsets(android.view.WindowInsets); + method public void dispatchConfigurationChanged(android.content.res.Configuration); + method public void dispatchDisplayHint(int); + method public boolean dispatchDragEvent(android.view.DragEvent); + method protected void dispatchDraw(android.graphics.Canvas); + method public void dispatchDrawableHotspotChanged(float, float); + method protected boolean dispatchGenericFocusedEvent(android.view.MotionEvent); + method public boolean dispatchGenericMotionEvent(android.view.MotionEvent); + method protected boolean dispatchGenericPointerEvent(android.view.MotionEvent); + method protected boolean dispatchHoverEvent(android.view.MotionEvent); + method public boolean dispatchKeyEvent(android.view.KeyEvent); + method public boolean dispatchKeyEventPreIme(android.view.KeyEvent); + method public boolean dispatchKeyShortcutEvent(android.view.KeyEvent); + method public boolean dispatchNestedFling(float, float, boolean); + method public boolean dispatchNestedPreFling(float, float); + method public boolean dispatchNestedPrePerformAccessibilityAction(int, android.os.Bundle); + method public boolean dispatchNestedPreScroll(int, int, int[], int[]); + method public boolean dispatchNestedScroll(int, int, int, int, int[]); + method public boolean dispatchPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent); + method protected void dispatchRestoreInstanceState(android.util.SparseArray); + method protected void dispatchSaveInstanceState(android.util.SparseArray); + method protected void dispatchSetActivated(boolean); + method protected void dispatchSetPressed(boolean); + method protected void dispatchSetSelected(boolean); + method public void dispatchSystemUiVisibilityChanged(int); + method public boolean dispatchTouchEvent(android.view.MotionEvent); + method public boolean dispatchTrackballEvent(android.view.MotionEvent); + method public boolean dispatchUnhandledMove(android.view.View, int); + method protected void dispatchVisibilityChanged(android.view.View, int); + method public void dispatchWindowFocusChanged(boolean); + method public void dispatchWindowSystemUiVisiblityChanged(int); + method public void dispatchWindowVisibilityChanged(int); + method public void draw(android.graphics.Canvas); + method public void drawableHotspotChanged(float, float); + method protected void drawableStateChanged(); + method public android.view.View findFocus(); + method public final android.view.View findViewById(int); + method public final android.view.View findViewWithTag(java.lang.Object); + method public void findViewsWithText(java.util.ArrayList, java.lang.CharSequence, int); + method protected deprecated boolean fitSystemWindows(android.graphics.Rect); + method public android.view.View focusSearch(int); + method public void forceLayout(); + method public static int generateViewId(); + method public int getAccessibilityLiveRegion(); + method public android.view.accessibility.AccessibilityNodeProvider getAccessibilityNodeProvider(); + method public int getAccessibilityTraversalAfter(); + method public int getAccessibilityTraversalBefore(); + method public float getAlpha(); + method public android.view.animation.Animation getAnimation(); + method public android.os.IBinder getApplicationWindowToken(); + method public android.graphics.drawable.Drawable getBackground(); + method public android.content.res.ColorStateList getBackgroundTintList(); + method public android.graphics.PorterDuff.Mode getBackgroundTintMode(); + method public int getBaseline(); + method public final int getBottom(); + method protected float getBottomFadingEdgeStrength(); + method protected int getBottomPaddingOffset(); + method public float getCameraDistance(); + method public android.graphics.Rect getClipBounds(); + method public final boolean getClipToOutline(); + method public java.lang.CharSequence getContentDescription(); + method public final android.content.Context getContext(); + method protected android.view.ContextMenu.ContextMenuInfo getContextMenuInfo(); + method public static int getDefaultSize(int, int); + method public android.view.Display getDisplay(); + method public final int[] getDrawableState(); + method public android.graphics.Bitmap getDrawingCache(); + method public android.graphics.Bitmap getDrawingCache(boolean); + method public int getDrawingCacheBackgroundColor(); + method public int getDrawingCacheQuality(); + method public void getDrawingRect(android.graphics.Rect); + method public long getDrawingTime(); + method public float getElevation(); + method public boolean getFilterTouchesWhenObscured(); + method public boolean getFitsSystemWindows(); + method public java.util.ArrayList getFocusables(int); + method public void getFocusedRect(android.graphics.Rect); + method public boolean getGlobalVisibleRect(android.graphics.Rect, android.graphics.Point); + method public final boolean getGlobalVisibleRect(android.graphics.Rect); + method public android.os.Handler getHandler(); + method public final int getHeight(); + method public void getHitRect(android.graphics.Rect); + method public int getHorizontalFadingEdgeLength(); + method protected int getHorizontalScrollbarHeight(); + method public int getId(); + method public int getImportantForAccessibility(); + method public boolean getKeepScreenOn(); + method public android.view.KeyEvent.DispatcherState getKeyDispatcherState(); + method public int getLabelFor(); + method public int getLayerType(); + method public int getLayoutDirection(); + method public android.view.ViewGroup.LayoutParams getLayoutParams(); + method public final int getLeft(); + method protected float getLeftFadingEdgeStrength(); + method protected int getLeftPaddingOffset(); + method public final boolean getLocalVisibleRect(android.graphics.Rect); + method public void getLocationInWindow(int[]); + method public void getLocationOnScreen(int[]); + method public android.graphics.Matrix getMatrix(); + method public final int getMeasuredHeight(); + method public final int getMeasuredHeightAndState(); + method public final int getMeasuredState(); + method public final int getMeasuredWidth(); + method public final int getMeasuredWidthAndState(); + method public int getMinimumHeight(); + method public int getMinimumWidth(); + method public int getNextFocusDownId(); + method public int getNextFocusForwardId(); + method public int getNextFocusLeftId(); + method public int getNextFocusRightId(); + method public int getNextFocusUpId(); + method public android.view.View.OnFocusChangeListener getOnFocusChangeListener(); + method public android.view.ViewOutlineProvider getOutlineProvider(); + method public int getOverScrollMode(); + method public android.view.ViewOverlay getOverlay(); + method public int getPaddingBottom(); + method public int getPaddingEnd(); + method public int getPaddingLeft(); + method public int getPaddingRight(); + method public int getPaddingStart(); + method public int getPaddingTop(); + method public final android.view.ViewParent getParent(); + method public android.view.ViewParent getParentForAccessibility(); + method public float getPivotX(); + method public float getPivotY(); + method public android.content.res.Resources getResources(); + method public final int getRight(); + method protected float getRightFadingEdgeStrength(); + method protected int getRightPaddingOffset(); + method public android.view.View getRootView(); + method public float getRotation(); + method public float getRotationX(); + method public float getRotationY(); + method public float getScaleX(); + method public float getScaleY(); + method public int getScrollBarDefaultDelayBeforeFade(); + method public int getScrollBarFadeDuration(); + method public int getScrollBarSize(); + method public int getScrollBarStyle(); + method public final int getScrollX(); + method public final int getScrollY(); + method public int getSolidColor(); + method public android.animation.StateListAnimator getStateListAnimator(); + method protected int getSuggestedMinimumHeight(); + method protected int getSuggestedMinimumWidth(); + method public int getSystemUiVisibility(); + method public java.lang.Object getTag(); + method public java.lang.Object getTag(int); + method public int getTextAlignment(); + method public int getTextDirection(); + method public final int getTop(); + method protected float getTopFadingEdgeStrength(); + method protected int getTopPaddingOffset(); + method public android.view.TouchDelegate getTouchDelegate(); + method public java.util.ArrayList getTouchables(); + method public java.lang.String getTransitionName(); + method public float getTranslationX(); + method public float getTranslationY(); + method public float getTranslationZ(); + method public int getVerticalFadingEdgeLength(); + method public int getVerticalScrollbarPosition(); + method public int getVerticalScrollbarWidth(); + method public android.view.ViewTreeObserver getViewTreeObserver(); + method public int getVisibility(); + method public final int getWidth(); + method protected int getWindowAttachCount(); + method public android.view.WindowId getWindowId(); + method public int getWindowSystemUiVisibility(); + method public android.os.IBinder getWindowToken(); + method public int getWindowVisibility(); + method public void getWindowVisibleDisplayFrame(android.graphics.Rect); + method public float getX(); + method public float getY(); + method public float getZ(); + method public boolean hasFocus(); + method public boolean hasFocusable(); + method public boolean hasNestedScrollingParent(); + method public boolean hasOnClickListeners(); + method public boolean hasOverlappingRendering(); + method public boolean hasTransientState(); + method public boolean hasWindowFocus(); + method public static android.view.View inflate(android.content.Context, int, android.view.ViewGroup); + method public void invalidate(android.graphics.Rect); + method public void invalidate(int, int, int, int); + method public void invalidate(); + method public void invalidateDrawable(android.graphics.drawable.Drawable); + method public void invalidateOutline(); + method public boolean isAccessibilityFocused(); + method public boolean isActivated(); + method public boolean isAttachedToWindow(); + method public boolean isClickable(); + method public boolean isDirty(); + method public boolean isDrawingCacheEnabled(); + method public boolean isDuplicateParentStateEnabled(); + method public boolean isEnabled(); + method public final boolean isFocusable(); + method public final boolean isFocusableInTouchMode(); + method public boolean isFocused(); + method public boolean isHapticFeedbackEnabled(); + method public boolean isHardwareAccelerated(); + method public boolean isHorizontalFadingEdgeEnabled(); + method public boolean isHorizontalScrollBarEnabled(); + method public boolean isHovered(); + method public boolean isImportantForAccessibility(); + method public boolean isInEditMode(); + method public boolean isInLayout(); + method public boolean isInTouchMode(); + method public boolean isLaidOut(); + method public boolean isLayoutDirectionResolved(); + method public boolean isLayoutRequested(); + method public boolean isLongClickable(); + method public boolean isNestedScrollingEnabled(); + method public boolean isOpaque(); + method protected boolean isPaddingOffsetRequired(); + method public boolean isPaddingRelative(); + method public boolean isPressed(); + method public boolean isSaveEnabled(); + method public boolean isSaveFromParentEnabled(); + method public boolean isScrollContainer(); + method public boolean isScrollbarFadingEnabled(); + method public boolean isSelected(); + method public boolean isShown(); + method public boolean isSoundEffectsEnabled(); + method public boolean isTextAlignmentResolved(); + method public boolean isTextDirectionResolved(); + method public boolean isVerticalFadingEdgeEnabled(); + method public boolean isVerticalScrollBarEnabled(); + method public void jumpDrawablesToCurrentState(); + method public void layout(int, int, int, int); + method public final void measure(int, int); + method protected static int[] mergeDrawableStates(int[], int[]); + method public void offsetLeftAndRight(int); + method public void offsetTopAndBottom(int); + method protected void onAnimationEnd(); + method protected void onAnimationStart(); + method public android.view.WindowInsets onApplyWindowInsets(android.view.WindowInsets); + method protected void onAttachedToWindow(); + method public void onCancelPendingInputEvents(); + method public boolean onCheckIsTextEditor(); + method protected void onConfigurationChanged(android.content.res.Configuration); + method protected void onCreateContextMenu(android.view.ContextMenu); + method protected int[] onCreateDrawableState(int); + method public android.view.inputmethod.InputConnection onCreateInputConnection(android.view.inputmethod.EditorInfo); + method protected void onDetachedFromWindow(); + method protected void onDisplayHint(int); + method public boolean onDragEvent(android.view.DragEvent); + method protected void onDraw(android.graphics.Canvas); + method protected final void onDrawScrollBars(android.graphics.Canvas); + method public boolean onFilterTouchEventForSecurity(android.view.MotionEvent); + method protected void onFinishInflate(); + method public void onFinishTemporaryDetach(); + method protected void onFocusChanged(boolean, int, android.graphics.Rect); + method public boolean onGenericMotionEvent(android.view.MotionEvent); + method public void onHoverChanged(boolean); + method public boolean onHoverEvent(android.view.MotionEvent); + method public void onInitializeAccessibilityEvent(android.view.accessibility.AccessibilityEvent); + method public void onInitializeAccessibilityNodeInfo(android.view.accessibility.AccessibilityNodeInfo); + method public boolean onKeyDown(int, android.view.KeyEvent); + method public boolean onKeyLongPress(int, android.view.KeyEvent); + method public boolean onKeyMultiple(int, int, android.view.KeyEvent); + method public boolean onKeyPreIme(int, android.view.KeyEvent); + method public boolean onKeyShortcut(int, android.view.KeyEvent); + method public boolean onKeyUp(int, android.view.KeyEvent); + method protected void onLayout(boolean, int, int, int, int); + method protected void onMeasure(int, int); + method protected void onOverScrolled(int, int, boolean, boolean); + method public void onPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent); + method protected void onRestoreInstanceState(android.os.Parcelable); + method public void onRtlPropertiesChanged(int); + method protected android.os.Parcelable onSaveInstanceState(); + method public void onScreenStateChanged(int); + method protected void onScrollChanged(int, int, int, int); + method protected boolean onSetAlpha(int); + method protected void onSizeChanged(int, int, int, int); + method public void onStartTemporaryDetach(); + method public boolean onTouchEvent(android.view.MotionEvent); + method public boolean onTrackballEvent(android.view.MotionEvent); + method protected void onVisibilityChanged(android.view.View, int); + method public void onWindowFocusChanged(boolean); + method public void onWindowSystemUiVisibilityChanged(int); + method protected void onWindowVisibilityChanged(int); + method protected boolean overScrollBy(int, int, int, int, int, int, int, int, boolean); + method public boolean performAccessibilityAction(int, android.os.Bundle); + method public boolean performClick(); + method public boolean performHapticFeedback(int); + method public boolean performHapticFeedback(int, int); + method public boolean performLongClick(); + method public void playSoundEffect(int); + method public boolean post(java.lang.Runnable); + method public boolean postDelayed(java.lang.Runnable, long); + method public void postInvalidate(); + method public void postInvalidate(int, int, int, int); + method public void postInvalidateDelayed(long); + method public void postInvalidateDelayed(long, int, int, int, int); + method public void postInvalidateOnAnimation(); + method public void postInvalidateOnAnimation(int, int, int, int); + method public void postOnAnimation(java.lang.Runnable); + method public void postOnAnimationDelayed(java.lang.Runnable, long); + method public void refreshDrawableState(); + method public boolean removeCallbacks(java.lang.Runnable); + method public void removeOnAttachStateChangeListener(android.view.View.OnAttachStateChangeListener); + method public void removeOnLayoutChangeListener(android.view.View.OnLayoutChangeListener); + method public void requestApplyInsets(); + method public deprecated void requestFitSystemWindows(); + method public final boolean requestFocus(); + method public final boolean requestFocus(int); + method public boolean requestFocus(int, android.graphics.Rect); + method public final boolean requestFocusFromTouch(); + method public void requestLayout(); + method public boolean requestRectangleOnScreen(android.graphics.Rect); + method public boolean requestRectangleOnScreen(android.graphics.Rect, boolean); + method public final void requestUnbufferedDispatch(android.view.MotionEvent); + method public static int resolveSize(int, int); + method public static int resolveSizeAndState(int, int, int); + method public void restoreHierarchyState(android.util.SparseArray); + method public void saveHierarchyState(android.util.SparseArray); + method public void scheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable, long); + method public void scrollBy(int, int); + method public void scrollTo(int, int); + method public void sendAccessibilityEvent(int); + method public void sendAccessibilityEventUnchecked(android.view.accessibility.AccessibilityEvent); + method public void setAccessibilityDelegate(android.view.View.AccessibilityDelegate); + method public void setAccessibilityLiveRegion(int); + method public void setAccessibilityTraversalAfter(int); + method public void setAccessibilityTraversalBefore(int); + method public void setActivated(boolean); + method public void setAlpha(float); + method public void setAnimation(android.view.animation.Animation); + method public void setBackground(android.graphics.drawable.Drawable); + method public void setBackgroundColor(int); + method public deprecated void setBackgroundDrawable(android.graphics.drawable.Drawable); + method public void setBackgroundResource(int); + method public void setBackgroundTintList(android.content.res.ColorStateList); + method public void setBackgroundTintMode(android.graphics.PorterDuff.Mode); + method public final void setBottom(int); + method public void setCameraDistance(float); + method public void setClickable(boolean); + method public void setClipBounds(android.graphics.Rect); + method public void setClipToOutline(boolean); + method public void setContentDescription(java.lang.CharSequence); + method public void setDrawingCacheBackgroundColor(int); + method public void setDrawingCacheEnabled(boolean); + method public void setDrawingCacheQuality(int); + method public void setDuplicateParentStateEnabled(boolean); + method public void setElevation(float); + method public void setEnabled(boolean); + method public void setFadingEdgeLength(int); + method public void setFilterTouchesWhenObscured(boolean); + method public void setFitsSystemWindows(boolean); + method public void setFocusable(boolean); + method public void setFocusableInTouchMode(boolean); + method public void setHapticFeedbackEnabled(boolean); + method public void setHasTransientState(boolean); + method public void setHorizontalFadingEdgeEnabled(boolean); + method public void setHorizontalScrollBarEnabled(boolean); + method public void setHovered(boolean); + method public void setId(int); + method public void setImportantForAccessibility(int); + method public void setKeepScreenOn(boolean); + method public void setLabelFor(int); + method public void setLayerPaint(android.graphics.Paint); + method public void setLayerType(int, android.graphics.Paint); + method public void setLayoutDirection(int); + method public void setLayoutParams(android.view.ViewGroup.LayoutParams); + method public final void setLeft(int); + method public void setLongClickable(boolean); + method protected final void setMeasuredDimension(int, int); + method public void setMinimumHeight(int); + method public void setMinimumWidth(int); + method public void setNestedScrollingEnabled(boolean); + method public void setNextFocusDownId(int); + method public void setNextFocusForwardId(int); + method public void setNextFocusLeftId(int); + method public void setNextFocusRightId(int); + method public void setNextFocusUpId(int); + method public void setOnApplyWindowInsetsListener(android.view.View.OnApplyWindowInsetsListener); + method public void setOnClickListener(android.view.View.OnClickListener); + method public void setOnCreateContextMenuListener(android.view.View.OnCreateContextMenuListener); + method public void setOnDragListener(android.view.View.OnDragListener); + method public void setOnFocusChangeListener(android.view.View.OnFocusChangeListener); + method public void setOnGenericMotionListener(android.view.View.OnGenericMotionListener); + method public void setOnHoverListener(android.view.View.OnHoverListener); + method public void setOnKeyListener(android.view.View.OnKeyListener); + method public void setOnLongClickListener(android.view.View.OnLongClickListener); + method public void setOnSystemUiVisibilityChangeListener(android.view.View.OnSystemUiVisibilityChangeListener); + method public void setOnTouchListener(android.view.View.OnTouchListener); + method public void setOutlineProvider(android.view.ViewOutlineProvider); + method public void setOverScrollMode(int); + method public void setPadding(int, int, int, int); + method public void setPaddingRelative(int, int, int, int); + method public void setPivotX(float); + method public void setPivotY(float); + method public void setPressed(boolean); + method public final void setRight(int); + method public void setRotation(float); + method public void setRotationX(float); + method public void setRotationY(float); + method public void setSaveEnabled(boolean); + method public void setSaveFromParentEnabled(boolean); + method public void setScaleX(float); + method public void setScaleY(float); + method public void setScrollBarDefaultDelayBeforeFade(int); + method public void setScrollBarFadeDuration(int); + method public void setScrollBarSize(int); + method public void setScrollBarStyle(int); + method public void setScrollContainer(boolean); + method public void setScrollX(int); + method public void setScrollY(int); + method public void setScrollbarFadingEnabled(boolean); + method public void setSelected(boolean); + method public void setSoundEffectsEnabled(boolean); + method public void setStateListAnimator(android.animation.StateListAnimator); + method public void setSystemUiVisibility(int); + method public void setTag(java.lang.Object); + method public void setTag(int, java.lang.Object); + method public void setTextAlignment(int); + method public void setTextDirection(int); + method public final void setTop(int); + method public void setTouchDelegate(android.view.TouchDelegate); + method public final void setTransitionName(java.lang.String); + method public void setTranslationX(float); + method public void setTranslationY(float); + method public void setTranslationZ(float); + method public void setVerticalFadingEdgeEnabled(boolean); + method public void setVerticalScrollBarEnabled(boolean); + method public void setVerticalScrollbarPosition(int); + method public void setVisibility(int); + method public void setWillNotCacheDrawing(boolean); + method public void setWillNotDraw(boolean); + method public void setX(float); + method public void setY(float); + method public void setZ(float); + method public boolean showContextMenu(); + method public android.view.ActionMode startActionMode(android.view.ActionMode.Callback); + method public void startAnimation(android.view.animation.Animation); + method public final boolean startDrag(android.content.ClipData, android.view.View.DragShadowBuilder, java.lang.Object, int); + method public boolean startNestedScroll(int); + method public void stopNestedScroll(); + method public void unscheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable); + method public void unscheduleDrawable(android.graphics.drawable.Drawable); + method protected boolean verifyDrawable(android.graphics.drawable.Drawable); + method public boolean willNotCacheDrawing(); + method public boolean willNotDraw(); + field public static final int ACCESSIBILITY_LIVE_REGION_ASSERTIVE = 2; // 0x2 + field public static final int ACCESSIBILITY_LIVE_REGION_NONE = 0; // 0x0 + field public static final int ACCESSIBILITY_LIVE_REGION_POLITE = 1; // 0x1 + field public static final android.util.Property ALPHA; + field public static final int DRAWING_CACHE_QUALITY_AUTO = 0; // 0x0 + field public static final int DRAWING_CACHE_QUALITY_HIGH = 1048576; // 0x100000 + field public static final int DRAWING_CACHE_QUALITY_LOW = 524288; // 0x80000 + field protected static final int[] EMPTY_STATE_SET; + field protected static final int[] ENABLED_FOCUSED_SELECTED_STATE_SET; + field protected static final int[] ENABLED_FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET; + field protected static final int[] ENABLED_FOCUSED_STATE_SET; + field protected static final int[] ENABLED_FOCUSED_WINDOW_FOCUSED_STATE_SET; + field protected static final int[] ENABLED_SELECTED_STATE_SET; + field protected static final int[] ENABLED_SELECTED_WINDOW_FOCUSED_STATE_SET; + field protected static final int[] ENABLED_STATE_SET; + field protected static final int[] ENABLED_WINDOW_FOCUSED_STATE_SET; + field public static final int FIND_VIEWS_WITH_CONTENT_DESCRIPTION = 2; // 0x2 + field public static final int FIND_VIEWS_WITH_TEXT = 1; // 0x1 + field public static final int FOCUSABLES_ALL = 0; // 0x0 + field public static final int FOCUSABLES_TOUCH_MODE = 1; // 0x1 + field protected static final int[] FOCUSED_SELECTED_STATE_SET; + field protected static final int[] FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET; + field protected static final int[] FOCUSED_STATE_SET; + field protected static final int[] FOCUSED_WINDOW_FOCUSED_STATE_SET; + field public static final int FOCUS_BACKWARD = 1; // 0x1 + field public static final int FOCUS_DOWN = 130; // 0x82 + field public static final int FOCUS_FORWARD = 2; // 0x2 + field public static final int FOCUS_LEFT = 17; // 0x11 + field public static final int FOCUS_RIGHT = 66; // 0x42 + field public static final int FOCUS_UP = 33; // 0x21 + field public static final int GONE = 8; // 0x8 + field public static final int HAPTIC_FEEDBACK_ENABLED = 268435456; // 0x10000000 + field public static final int IMPORTANT_FOR_ACCESSIBILITY_AUTO = 0; // 0x0 + field public static final int IMPORTANT_FOR_ACCESSIBILITY_NO = 2; // 0x2 + field public static final int IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS = 4; // 0x4 + field public static final int IMPORTANT_FOR_ACCESSIBILITY_YES = 1; // 0x1 + field public static final int INVISIBLE = 4; // 0x4 + field public static final int KEEP_SCREEN_ON = 67108864; // 0x4000000 + field public static final int LAYER_TYPE_HARDWARE = 2; // 0x2 + field public static final int LAYER_TYPE_NONE = 0; // 0x0 + field public static final int LAYER_TYPE_SOFTWARE = 1; // 0x1 + field public static final int LAYOUT_DIRECTION_INHERIT = 2; // 0x2 + field public static final int LAYOUT_DIRECTION_LOCALE = 3; // 0x3 + field public static final int LAYOUT_DIRECTION_LTR = 0; // 0x0 + field public static final int LAYOUT_DIRECTION_RTL = 1; // 0x1 + field public static final int MEASURED_HEIGHT_STATE_SHIFT = 16; // 0x10 + field public static final int MEASURED_SIZE_MASK = 16777215; // 0xffffff + field public static final int MEASURED_STATE_MASK = -16777216; // 0xff000000 + field public static final int MEASURED_STATE_TOO_SMALL = 16777216; // 0x1000000 + field public static final int NO_ID = -1; // 0xffffffff + field public static final int OVER_SCROLL_ALWAYS = 0; // 0x0 + field public static final int OVER_SCROLL_IF_CONTENT_SCROLLS = 1; // 0x1 + field public static final int OVER_SCROLL_NEVER = 2; // 0x2 + field protected static final int[] PRESSED_ENABLED_FOCUSED_SELECTED_STATE_SET; + field protected static final int[] PRESSED_ENABLED_FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET; + field protected static final int[] PRESSED_ENABLED_FOCUSED_STATE_SET; + field protected static final int[] PRESSED_ENABLED_FOCUSED_WINDOW_FOCUSED_STATE_SET; + field protected static final int[] PRESSED_ENABLED_SELECTED_STATE_SET; + field protected static final int[] PRESSED_ENABLED_SELECTED_WINDOW_FOCUSED_STATE_SET; + field protected static final int[] PRESSED_ENABLED_STATE_SET; + field protected static final int[] PRESSED_ENABLED_WINDOW_FOCUSED_STATE_SET; + field protected static final int[] PRESSED_FOCUSED_SELECTED_STATE_SET; + field protected static final int[] PRESSED_FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET; + field protected static final int[] PRESSED_FOCUSED_STATE_SET; + field protected static final int[] PRESSED_FOCUSED_WINDOW_FOCUSED_STATE_SET; + field protected static final int[] PRESSED_SELECTED_STATE_SET; + field protected static final int[] PRESSED_SELECTED_WINDOW_FOCUSED_STATE_SET; + field protected static final int[] PRESSED_STATE_SET; + field protected static final int[] PRESSED_WINDOW_FOCUSED_STATE_SET; + field public static final android.util.Property ROTATION; + field public static final android.util.Property ROTATION_X; + field public static final android.util.Property ROTATION_Y; + field public static final android.util.Property SCALE_X; + field public static final android.util.Property SCALE_Y; + field public static final int SCREEN_STATE_OFF = 0; // 0x0 + field public static final int SCREEN_STATE_ON = 1; // 0x1 + field public static final int SCROLLBARS_INSIDE_INSET = 16777216; // 0x1000000 + field public static final int SCROLLBARS_INSIDE_OVERLAY = 0; // 0x0 + field public static final int SCROLLBARS_OUTSIDE_INSET = 50331648; // 0x3000000 + field public static final int SCROLLBARS_OUTSIDE_OVERLAY = 33554432; // 0x2000000 + field public static final int SCROLLBAR_POSITION_DEFAULT = 0; // 0x0 + field public static final int SCROLLBAR_POSITION_LEFT = 1; // 0x1 + field public static final int SCROLLBAR_POSITION_RIGHT = 2; // 0x2 + field public static final int SCROLL_AXIS_HORIZONTAL = 1; // 0x1 + field public static final int SCROLL_AXIS_NONE = 0; // 0x0 + field public static final int SCROLL_AXIS_VERTICAL = 2; // 0x2 + field protected static final int[] SELECTED_STATE_SET; + field protected static final int[] SELECTED_WINDOW_FOCUSED_STATE_SET; + field public static final int SOUND_EFFECTS_ENABLED = 134217728; // 0x8000000 + field public static final deprecated int STATUS_BAR_HIDDEN = 1; // 0x1 + field public static final deprecated int STATUS_BAR_VISIBLE = 0; // 0x0 + field public static final int SYSTEM_UI_FLAG_FULLSCREEN = 4; // 0x4 + field public static final int SYSTEM_UI_FLAG_HIDE_NAVIGATION = 2; // 0x2 + field public static final int SYSTEM_UI_FLAG_IMMERSIVE = 2048; // 0x800 + field public static final int SYSTEM_UI_FLAG_IMMERSIVE_STICKY = 4096; // 0x1000 + field public static final int SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN = 1024; // 0x400 + field public static final int SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION = 512; // 0x200 + field public static final int SYSTEM_UI_FLAG_LAYOUT_STABLE = 256; // 0x100 + field public static final int SYSTEM_UI_FLAG_LOW_PROFILE = 1; // 0x1 + field public static final int SYSTEM_UI_FLAG_VISIBLE = 0; // 0x0 + field public static final int SYSTEM_UI_LAYOUT_FLAGS = 1536; // 0x600 + field public static final int TEXT_ALIGNMENT_CENTER = 4; // 0x4 + field public static final int TEXT_ALIGNMENT_GRAVITY = 1; // 0x1 + field public static final int TEXT_ALIGNMENT_INHERIT = 0; // 0x0 + field public static final int TEXT_ALIGNMENT_TEXT_END = 3; // 0x3 + field public static final int TEXT_ALIGNMENT_TEXT_START = 2; // 0x2 + field public static final int TEXT_ALIGNMENT_VIEW_END = 6; // 0x6 + field public static final int TEXT_ALIGNMENT_VIEW_START = 5; // 0x5 + field public static final int TEXT_DIRECTION_ANY_RTL = 2; // 0x2 + field public static final int TEXT_DIRECTION_FIRST_STRONG = 1; // 0x1 + field public static final int TEXT_DIRECTION_INHERIT = 0; // 0x0 + field public static final int TEXT_DIRECTION_LOCALE = 5; // 0x5 + field public static final int TEXT_DIRECTION_LTR = 3; // 0x3 + field public static final int TEXT_DIRECTION_RTL = 4; // 0x4 + field public static final android.util.Property TRANSLATION_X; + field public static final android.util.Property TRANSLATION_Y; + field public static final android.util.Property TRANSLATION_Z; + field protected static final java.lang.String VIEW_LOG_TAG = "View"; + field public static final int VISIBLE = 0; // 0x0 + field protected static final int[] WINDOW_FOCUSED_STATE_SET; + field public static final android.util.Property X; + field public static final android.util.Property Y; + field public static final android.util.Property Z; + } + + public static class View.AccessibilityDelegate { + ctor public View.AccessibilityDelegate(); + method public boolean dispatchPopulateAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent); + method public android.view.accessibility.AccessibilityNodeProvider getAccessibilityNodeProvider(android.view.View); + method public void onInitializeAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent); + method public void onInitializeAccessibilityNodeInfo(android.view.View, android.view.accessibility.AccessibilityNodeInfo); + method public void onPopulateAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent); + method public boolean onRequestSendAccessibilityEvent(android.view.ViewGroup, android.view.View, android.view.accessibility.AccessibilityEvent); + method public boolean performAccessibilityAction(android.view.View, int, android.os.Bundle); + method public void sendAccessibilityEvent(android.view.View, int); + method public void sendAccessibilityEventUnchecked(android.view.View, android.view.accessibility.AccessibilityEvent); + } + + public static class View.BaseSavedState extends android.view.AbsSavedState { + ctor public View.BaseSavedState(android.os.Parcel); + ctor public View.BaseSavedState(android.os.Parcelable); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public static class View.DragShadowBuilder { + ctor public View.DragShadowBuilder(android.view.View); + ctor public View.DragShadowBuilder(); + method public final android.view.View getView(); + method public void onDrawShadow(android.graphics.Canvas); + method public void onProvideShadowMetrics(android.graphics.Point, android.graphics.Point); + } + + public static class View.MeasureSpec { + ctor public View.MeasureSpec(); + method public static int getMode(int); + method public static int getSize(int); + method public static int makeMeasureSpec(int, int); + method public static java.lang.String toString(int); + field public static final int AT_MOST = -2147483648; // 0x80000000 + field public static final int EXACTLY = 1073741824; // 0x40000000 + field public static final int UNSPECIFIED = 0; // 0x0 + } + + public static abstract interface View.OnApplyWindowInsetsListener { + method public abstract android.view.WindowInsets onApplyWindowInsets(android.view.View, android.view.WindowInsets); + } + + public static abstract interface View.OnAttachStateChangeListener { + method public abstract void onViewAttachedToWindow(android.view.View); + method public abstract void onViewDetachedFromWindow(android.view.View); + } + + public static abstract interface View.OnClickListener { + method public abstract void onClick(android.view.View); + } + + public static abstract interface View.OnCreateContextMenuListener { + method public abstract void onCreateContextMenu(android.view.ContextMenu, android.view.View, android.view.ContextMenu.ContextMenuInfo); + } + + public static abstract interface View.OnDragListener { + method public abstract boolean onDrag(android.view.View, android.view.DragEvent); + } + + public static abstract interface View.OnFocusChangeListener { + method public abstract void onFocusChange(android.view.View, boolean); + } + + public static abstract interface View.OnGenericMotionListener { + method public abstract boolean onGenericMotion(android.view.View, android.view.MotionEvent); + } + + public static abstract interface View.OnHoverListener { + method public abstract boolean onHover(android.view.View, android.view.MotionEvent); + } + + public static abstract interface View.OnKeyListener { + method public abstract boolean onKey(android.view.View, int, android.view.KeyEvent); + } + + public static abstract interface View.OnLayoutChangeListener { + method public abstract void onLayoutChange(android.view.View, int, int, int, int, int, int, int, int); + } + + public static abstract interface View.OnLongClickListener { + method public abstract boolean onLongClick(android.view.View); + } + + public static abstract interface View.OnSystemUiVisibilityChangeListener { + method public abstract void onSystemUiVisibilityChange(int); + } + + public static abstract interface View.OnTouchListener { + method public abstract boolean onTouch(android.view.View, android.view.MotionEvent); + } + + public final class ViewAnimationUtils { + method public static android.animation.Animator createCircularReveal(android.view.View, int, int, float, float); + } + + public class ViewConfiguration { + ctor public deprecated ViewConfiguration(); + method public static android.view.ViewConfiguration get(android.content.Context); + method public static int getDoubleTapTimeout(); + method public static deprecated int getEdgeSlop(); + method public static deprecated int getFadingEdgeLength(); + method public static deprecated long getGlobalActionKeyTimeout(); + method public static int getJumpTapTimeout(); + method public static int getKeyRepeatDelay(); + method public static int getKeyRepeatTimeout(); + method public static int getLongPressTimeout(); + method public static deprecated int getMaximumDrawingCacheSize(); + method public static deprecated int getMaximumFlingVelocity(); + method public static deprecated int getMinimumFlingVelocity(); + method public static int getPressedStateDuration(); + method public int getScaledDoubleTapSlop(); + method public int getScaledEdgeSlop(); + method public int getScaledFadingEdgeLength(); + method public int getScaledMaximumDrawingCacheSize(); + method public int getScaledMaximumFlingVelocity(); + method public int getScaledMinimumFlingVelocity(); + method public int getScaledOverflingDistance(); + method public int getScaledOverscrollDistance(); + method public int getScaledPagingTouchSlop(); + method public int getScaledScrollBarSize(); + method public int getScaledTouchSlop(); + method public int getScaledWindowTouchSlop(); + method public static int getScrollBarFadeDuration(); + method public static deprecated int getScrollBarSize(); + method public static int getScrollDefaultDelay(); + method public static float getScrollFriction(); + method public static int getTapTimeout(); + method public static deprecated int getTouchSlop(); + method public static deprecated int getWindowTouchSlop(); + method public static long getZoomControlsTimeout(); + method public boolean hasPermanentMenuKey(); + } + + public class ViewDebug { + ctor public ViewDebug(); + method public static void dumpCapturedView(java.lang.String, java.lang.Object); + method public static deprecated void startHierarchyTracing(java.lang.String, android.view.View); + method public static deprecated void startRecyclerTracing(java.lang.String, android.view.View); + method public static deprecated void stopHierarchyTracing(); + method public static deprecated void stopRecyclerTracing(); + method public static deprecated void trace(android.view.View, android.view.ViewDebug.RecyclerTraceType, int...); + method public static deprecated void trace(android.view.View, android.view.ViewDebug.HierarchyTraceType); + field public static final deprecated boolean TRACE_HIERARCHY = false; + field public static final deprecated boolean TRACE_RECYCLER = false; + } + + public static abstract class ViewDebug.CapturedViewProperty implements java.lang.annotation.Annotation { + } + + public static abstract class ViewDebug.ExportedProperty implements java.lang.annotation.Annotation { + } + + public static abstract class ViewDebug.FlagToString implements java.lang.annotation.Annotation { + } + + public static final deprecated class ViewDebug.HierarchyTraceType extends java.lang.Enum { + method public static android.view.ViewDebug.HierarchyTraceType valueOf(java.lang.String); + method public static final android.view.ViewDebug.HierarchyTraceType[] values(); + enum_constant public static final android.view.ViewDebug.HierarchyTraceType BUILD_CACHE; + enum_constant public static final android.view.ViewDebug.HierarchyTraceType DRAW; + enum_constant public static final android.view.ViewDebug.HierarchyTraceType INVALIDATE; + enum_constant public static final android.view.ViewDebug.HierarchyTraceType INVALIDATE_CHILD; + enum_constant public static final android.view.ViewDebug.HierarchyTraceType INVALIDATE_CHILD_IN_PARENT; + enum_constant public static final android.view.ViewDebug.HierarchyTraceType ON_LAYOUT; + enum_constant public static final android.view.ViewDebug.HierarchyTraceType ON_MEASURE; + enum_constant public static final android.view.ViewDebug.HierarchyTraceType REQUEST_LAYOUT; + } + + public static abstract class ViewDebug.IntToString implements java.lang.annotation.Annotation { + } + + public static final deprecated class ViewDebug.RecyclerTraceType extends java.lang.Enum { + method public static android.view.ViewDebug.RecyclerTraceType valueOf(java.lang.String); + method public static final android.view.ViewDebug.RecyclerTraceType[] values(); + enum_constant public static final android.view.ViewDebug.RecyclerTraceType BIND_VIEW; + enum_constant public static final android.view.ViewDebug.RecyclerTraceType MOVE_FROM_ACTIVE_TO_SCRAP_HEAP; + enum_constant public static final android.view.ViewDebug.RecyclerTraceType MOVE_TO_SCRAP_HEAP; + enum_constant public static final android.view.ViewDebug.RecyclerTraceType NEW_VIEW; + enum_constant public static final android.view.ViewDebug.RecyclerTraceType RECYCLE_FROM_ACTIVE_HEAP; + enum_constant public static final android.view.ViewDebug.RecyclerTraceType RECYCLE_FROM_SCRAP_HEAP; + } + + public abstract class ViewGroup extends android.view.View implements android.view.ViewManager android.view.ViewParent { + ctor public ViewGroup(android.content.Context); + ctor public ViewGroup(android.content.Context, android.util.AttributeSet); + ctor public ViewGroup(android.content.Context, android.util.AttributeSet, int); + ctor public ViewGroup(android.content.Context, android.util.AttributeSet, int, int); + method public boolean addStatesFromChildren(); + method public void addView(android.view.View); + method public void addView(android.view.View, int); + method public void addView(android.view.View, int, int); + method public void addView(android.view.View, android.view.ViewGroup.LayoutParams); + method public void addView(android.view.View, int, android.view.ViewGroup.LayoutParams); + method protected boolean addViewInLayout(android.view.View, int, android.view.ViewGroup.LayoutParams); + method protected boolean addViewInLayout(android.view.View, int, android.view.ViewGroup.LayoutParams, boolean); + method protected void attachLayoutAnimationParameters(android.view.View, android.view.ViewGroup.LayoutParams, int, int); + method protected void attachViewToParent(android.view.View, int, android.view.ViewGroup.LayoutParams); + method public void bringChildToFront(android.view.View); + method protected boolean canAnimate(); + method protected boolean checkLayoutParams(android.view.ViewGroup.LayoutParams); + method public void childDrawableStateChanged(android.view.View); + method public void childHasTransientStateChanged(android.view.View, boolean); + method protected void cleanupLayoutState(android.view.View); + method public void clearChildFocus(android.view.View); + method public void clearDisappearingChildren(); + method protected void debug(int); + method protected void detachAllViewsFromParent(); + method protected void detachViewFromParent(android.view.View); + method protected void detachViewFromParent(int); + method protected void detachViewsFromParent(int, int); + method protected void dispatchFreezeSelfOnly(android.util.SparseArray); + method public void dispatchSetActivated(boolean); + method public void dispatchSetSelected(boolean); + method protected void dispatchThawSelfOnly(android.util.SparseArray); + method protected boolean drawChild(android.graphics.Canvas, android.view.View, long); + method public void endViewTransition(android.view.View); + method public android.view.View focusSearch(android.view.View, int); + method public void focusableViewAvailable(android.view.View); + method public boolean gatherTransparentRegion(android.graphics.Region); + method protected android.view.ViewGroup.LayoutParams generateDefaultLayoutParams(); + method public android.view.ViewGroup.LayoutParams generateLayoutParams(android.util.AttributeSet); + method protected android.view.ViewGroup.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams); + method public android.view.View getChildAt(int); + method public int getChildCount(); + method protected int getChildDrawingOrder(int, int); + method public static int getChildMeasureSpec(int, int, int); + method protected boolean getChildStaticTransformation(android.view.View, android.view.animation.Transformation); + method public boolean getChildVisibleRect(android.view.View, android.graphics.Rect, android.graphics.Point); + method public boolean getClipChildren(); + method public boolean getClipToPadding(); + method public int getDescendantFocusability(); + method public android.view.View getFocusedChild(); + method public android.view.animation.LayoutAnimationController getLayoutAnimation(); + method public android.view.animation.Animation.AnimationListener getLayoutAnimationListener(); + method public int getLayoutMode(); + method public android.animation.LayoutTransition getLayoutTransition(); + method public int getNestedScrollAxes(); + method public int getPersistentDrawingCache(); + method public boolean getTouchscreenBlocksFocus(); + method public int indexOfChild(android.view.View); + method public final void invalidateChild(android.view.View, android.graphics.Rect); + method public android.view.ViewParent invalidateChildInParent(int[], android.graphics.Rect); + method public boolean isAlwaysDrawnWithCacheEnabled(); + method public boolean isAnimationCacheEnabled(); + method protected boolean isChildrenDrawingOrderEnabled(); + method protected boolean isChildrenDrawnWithCacheEnabled(); + method public boolean isMotionEventSplittingEnabled(); + method public boolean isTransitionGroup(); + method public final void layout(int, int, int, int); + method protected void measureChild(android.view.View, int, int); + method protected void measureChildWithMargins(android.view.View, int, int, int, int); + method protected void measureChildren(int, int); + method public void notifySubtreeAccessibilityStateChanged(android.view.View, android.view.View, int); + method public final void offsetDescendantRectToMyCoords(android.view.View, android.graphics.Rect); + method public final void offsetRectIntoDescendantCoords(android.view.View, android.graphics.Rect); + method public boolean onInterceptHoverEvent(android.view.MotionEvent); + method public boolean onInterceptTouchEvent(android.view.MotionEvent); + method protected abstract void onLayout(boolean, int, int, int, int); + method public boolean onNestedFling(android.view.View, float, float, boolean); + method public boolean onNestedPreFling(android.view.View, float, float); + method public boolean onNestedPrePerformAccessibilityAction(android.view.View, int, android.os.Bundle); + method public void onNestedPreScroll(android.view.View, int, int, int[]); + method public void onNestedScroll(android.view.View, int, int, int, int); + method public void onNestedScrollAccepted(android.view.View, android.view.View, int); + method protected boolean onRequestFocusInDescendants(int, android.graphics.Rect); + method public boolean onRequestSendAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent); + method public boolean onStartNestedScroll(android.view.View, android.view.View, int); + method public void onStopNestedScroll(android.view.View); + method public void recomputeViewAttributes(android.view.View); + method public void removeAllViews(); + method public void removeAllViewsInLayout(); + method protected void removeDetachedView(android.view.View, boolean); + method public void removeView(android.view.View); + method public void removeViewAt(int); + method public void removeViewInLayout(android.view.View); + method public void removeViews(int, int); + method public void removeViewsInLayout(int, int); + method public void requestChildFocus(android.view.View, android.view.View); + method public boolean requestChildRectangleOnScreen(android.view.View, android.graphics.Rect, boolean); + method public void requestDisallowInterceptTouchEvent(boolean); + method public boolean requestSendAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent); + method public void requestTransparentRegion(android.view.View); + method public void scheduleLayoutAnimation(); + method public void setAddStatesFromChildren(boolean); + method public void setAlwaysDrawnWithCacheEnabled(boolean); + method public void setAnimationCacheEnabled(boolean); + method protected void setChildrenDrawingCacheEnabled(boolean); + method protected void setChildrenDrawingOrderEnabled(boolean); + method protected void setChildrenDrawnWithCacheEnabled(boolean); + method public void setClipChildren(boolean); + method public void setClipToPadding(boolean); + method public void setDescendantFocusability(int); + method public void setLayoutAnimation(android.view.animation.LayoutAnimationController); + method public void setLayoutAnimationListener(android.view.animation.Animation.AnimationListener); + method public void setLayoutMode(int); + method public void setLayoutTransition(android.animation.LayoutTransition); + method public void setMotionEventSplittingEnabled(boolean); + method public void setOnHierarchyChangeListener(android.view.ViewGroup.OnHierarchyChangeListener); + method public void setPersistentDrawingCache(int); + method protected void setStaticTransformationsEnabled(boolean); + method public void setTouchscreenBlocksFocus(boolean); + method public void setTransitionGroup(boolean); + method public boolean shouldDelayChildPressedState(); + method public boolean showContextMenuForChild(android.view.View); + method public android.view.ActionMode startActionModeForChild(android.view.View, android.view.ActionMode.Callback); + method public void startLayoutAnimation(); + method public void startViewTransition(android.view.View); + method public void updateViewLayout(android.view.View, android.view.ViewGroup.LayoutParams); + field protected static final int CLIP_TO_PADDING_MASK = 34; // 0x22 + field public static final int FOCUS_AFTER_DESCENDANTS = 262144; // 0x40000 + field public static final int FOCUS_BEFORE_DESCENDANTS = 131072; // 0x20000 + field public static final int FOCUS_BLOCK_DESCENDANTS = 393216; // 0x60000 + field public static final int LAYOUT_MODE_CLIP_BOUNDS = 0; // 0x0 + field public static final int LAYOUT_MODE_OPTICAL_BOUNDS = 1; // 0x1 + field public static final int PERSISTENT_ALL_CACHES = 3; // 0x3 + field public static final int PERSISTENT_ANIMATION_CACHE = 1; // 0x1 + field public static final int PERSISTENT_NO_CACHE = 0; // 0x0 + field public static final int PERSISTENT_SCROLLING_CACHE = 2; // 0x2 + } + + public static class ViewGroup.LayoutParams { + ctor public ViewGroup.LayoutParams(android.content.Context, android.util.AttributeSet); + ctor public ViewGroup.LayoutParams(int, int); + ctor public ViewGroup.LayoutParams(android.view.ViewGroup.LayoutParams); + method public void resolveLayoutDirection(int); + method protected void setBaseAttributes(android.content.res.TypedArray, int, int); + field public static final deprecated int FILL_PARENT = -1; // 0xffffffff + field public static final int MATCH_PARENT = -1; // 0xffffffff + field public static final int WRAP_CONTENT = -2; // 0xfffffffe + field public int height; + field public android.view.animation.LayoutAnimationController.AnimationParameters layoutAnimationParameters; + field public int width; + } + + public static class ViewGroup.MarginLayoutParams extends android.view.ViewGroup.LayoutParams { + ctor public ViewGroup.MarginLayoutParams(android.content.Context, android.util.AttributeSet); + ctor public ViewGroup.MarginLayoutParams(int, int); + ctor public ViewGroup.MarginLayoutParams(android.view.ViewGroup.MarginLayoutParams); + ctor public ViewGroup.MarginLayoutParams(android.view.ViewGroup.LayoutParams); + method public int getLayoutDirection(); + method public int getMarginEnd(); + method public int getMarginStart(); + method public boolean isMarginRelative(); + method public void setLayoutDirection(int); + method public void setMarginEnd(int); + method public void setMarginStart(int); + method public void setMargins(int, int, int, int); + field public int bottomMargin; + field public int leftMargin; + field public int rightMargin; + field public int topMargin; + } + + public static abstract interface ViewGroup.OnHierarchyChangeListener { + method public abstract void onChildViewAdded(android.view.View, android.view.View); + method public abstract void onChildViewRemoved(android.view.View, android.view.View); + } + + public class ViewGroupOverlay extends android.view.ViewOverlay { + method public void add(android.view.View); + method public void remove(android.view.View); + } + + public abstract interface ViewManager { + method public abstract void addView(android.view.View, android.view.ViewGroup.LayoutParams); + method public abstract void removeView(android.view.View); + method public abstract void updateViewLayout(android.view.View, android.view.ViewGroup.LayoutParams); + } + + public abstract class ViewOutlineProvider { + ctor public ViewOutlineProvider(); + method public abstract void getOutline(android.view.View, android.graphics.Outline); + field public static final android.view.ViewOutlineProvider BACKGROUND; + field public static final android.view.ViewOutlineProvider BOUNDS; + field public static final android.view.ViewOutlineProvider PADDED_BOUNDS; + } + + public class ViewOverlay { + method public void add(android.graphics.drawable.Drawable); + method public void clear(); + method public void remove(android.graphics.drawable.Drawable); + } + + public abstract interface ViewParent { + method public abstract void bringChildToFront(android.view.View); + method public abstract boolean canResolveLayoutDirection(); + method public abstract boolean canResolveTextAlignment(); + method public abstract boolean canResolveTextDirection(); + method public abstract void childDrawableStateChanged(android.view.View); + method public abstract void childHasTransientStateChanged(android.view.View, boolean); + method public abstract void clearChildFocus(android.view.View); + method public abstract void createContextMenu(android.view.ContextMenu); + method public abstract android.view.View focusSearch(android.view.View, int); + method public abstract void focusableViewAvailable(android.view.View); + method public abstract boolean getChildVisibleRect(android.view.View, android.graphics.Rect, android.graphics.Point); + method public abstract int getLayoutDirection(); + method public abstract android.view.ViewParent getParent(); + method public abstract android.view.ViewParent getParentForAccessibility(); + method public abstract int getTextAlignment(); + method public abstract int getTextDirection(); + method public abstract void invalidateChild(android.view.View, android.graphics.Rect); + method public abstract android.view.ViewParent invalidateChildInParent(int[], android.graphics.Rect); + method public abstract boolean isLayoutDirectionResolved(); + method public abstract boolean isLayoutRequested(); + method public abstract boolean isTextAlignmentResolved(); + method public abstract boolean isTextDirectionResolved(); + method public abstract void notifySubtreeAccessibilityStateChanged(android.view.View, android.view.View, int); + method public abstract boolean onNestedFling(android.view.View, float, float, boolean); + method public abstract boolean onNestedPreFling(android.view.View, float, float); + method public abstract boolean onNestedPrePerformAccessibilityAction(android.view.View, int, android.os.Bundle); + method public abstract void onNestedPreScroll(android.view.View, int, int, int[]); + method public abstract void onNestedScroll(android.view.View, int, int, int, int); + method public abstract void onNestedScrollAccepted(android.view.View, android.view.View, int); + method public abstract boolean onStartNestedScroll(android.view.View, android.view.View, int); + method public abstract void onStopNestedScroll(android.view.View); + method public abstract void recomputeViewAttributes(android.view.View); + method public abstract void requestChildFocus(android.view.View, android.view.View); + method public abstract boolean requestChildRectangleOnScreen(android.view.View, android.graphics.Rect, boolean); + method public abstract void requestDisallowInterceptTouchEvent(boolean); + method public abstract void requestFitSystemWindows(); + method public abstract void requestLayout(); + method public abstract boolean requestSendAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent); + method public abstract void requestTransparentRegion(android.view.View); + method public abstract boolean showContextMenuForChild(android.view.View); + method public abstract android.view.ActionMode startActionModeForChild(android.view.View, android.view.ActionMode.Callback); + } + + public class ViewPropertyAnimator { + method public android.view.ViewPropertyAnimator alpha(float); + method public android.view.ViewPropertyAnimator alphaBy(float); + method public void cancel(); + method public long getDuration(); + method public android.animation.TimeInterpolator getInterpolator(); + method public long getStartDelay(); + method public android.view.ViewPropertyAnimator rotation(float); + method public android.view.ViewPropertyAnimator rotationBy(float); + method public android.view.ViewPropertyAnimator rotationX(float); + method public android.view.ViewPropertyAnimator rotationXBy(float); + method public android.view.ViewPropertyAnimator rotationY(float); + method public android.view.ViewPropertyAnimator rotationYBy(float); + method public android.view.ViewPropertyAnimator scaleX(float); + method public android.view.ViewPropertyAnimator scaleXBy(float); + method public android.view.ViewPropertyAnimator scaleY(float); + method public android.view.ViewPropertyAnimator scaleYBy(float); + method public android.view.ViewPropertyAnimator setDuration(long); + method public android.view.ViewPropertyAnimator setInterpolator(android.animation.TimeInterpolator); + method public android.view.ViewPropertyAnimator setListener(android.animation.Animator.AnimatorListener); + method public android.view.ViewPropertyAnimator setStartDelay(long); + method public android.view.ViewPropertyAnimator setUpdateListener(android.animation.ValueAnimator.AnimatorUpdateListener); + method public void start(); + method public android.view.ViewPropertyAnimator translationX(float); + method public android.view.ViewPropertyAnimator translationXBy(float); + method public android.view.ViewPropertyAnimator translationY(float); + method public android.view.ViewPropertyAnimator translationYBy(float); + method public android.view.ViewPropertyAnimator translationZ(float); + method public android.view.ViewPropertyAnimator translationZBy(float); + method public android.view.ViewPropertyAnimator withEndAction(java.lang.Runnable); + method public android.view.ViewPropertyAnimator withLayer(); + method public android.view.ViewPropertyAnimator withStartAction(java.lang.Runnable); + method public android.view.ViewPropertyAnimator x(float); + method public android.view.ViewPropertyAnimator xBy(float); + method public android.view.ViewPropertyAnimator y(float); + method public android.view.ViewPropertyAnimator yBy(float); + method public android.view.ViewPropertyAnimator z(float); + method public android.view.ViewPropertyAnimator zBy(float); + } + + public final class ViewStub extends android.view.View { + ctor public ViewStub(android.content.Context); + ctor public ViewStub(android.content.Context, int); + ctor public ViewStub(android.content.Context, android.util.AttributeSet); + ctor public ViewStub(android.content.Context, android.util.AttributeSet, int); + ctor public ViewStub(android.content.Context, android.util.AttributeSet, int, int); + method public int getInflatedId(); + method public android.view.LayoutInflater getLayoutInflater(); + method public int getLayoutResource(); + method public android.view.View inflate(); + method public void setInflatedId(int); + method public void setLayoutInflater(android.view.LayoutInflater); + method public void setLayoutResource(int); + method public void setOnInflateListener(android.view.ViewStub.OnInflateListener); + } + + public static abstract interface ViewStub.OnInflateListener { + method public abstract void onInflate(android.view.ViewStub, android.view.View); + } + + public final class ViewTreeObserver { + method public void addOnDrawListener(android.view.ViewTreeObserver.OnDrawListener); + method public void addOnGlobalFocusChangeListener(android.view.ViewTreeObserver.OnGlobalFocusChangeListener); + method public void addOnGlobalLayoutListener(android.view.ViewTreeObserver.OnGlobalLayoutListener); + method public void addOnPreDrawListener(android.view.ViewTreeObserver.OnPreDrawListener); + method public void addOnScrollChangedListener(android.view.ViewTreeObserver.OnScrollChangedListener); + method public void addOnTouchModeChangeListener(android.view.ViewTreeObserver.OnTouchModeChangeListener); + method public void addOnWindowAttachListener(android.view.ViewTreeObserver.OnWindowAttachListener); + method public void addOnWindowFocusChangeListener(android.view.ViewTreeObserver.OnWindowFocusChangeListener); + method public final void dispatchOnDraw(); + method public final void dispatchOnGlobalLayout(); + method public final boolean dispatchOnPreDraw(); + method public boolean isAlive(); + method public deprecated void removeGlobalOnLayoutListener(android.view.ViewTreeObserver.OnGlobalLayoutListener); + method public void removeOnDrawListener(android.view.ViewTreeObserver.OnDrawListener); + method public void removeOnGlobalFocusChangeListener(android.view.ViewTreeObserver.OnGlobalFocusChangeListener); + method public void removeOnGlobalLayoutListener(android.view.ViewTreeObserver.OnGlobalLayoutListener); + method public void removeOnPreDrawListener(android.view.ViewTreeObserver.OnPreDrawListener); + method public void removeOnScrollChangedListener(android.view.ViewTreeObserver.OnScrollChangedListener); + method public void removeOnTouchModeChangeListener(android.view.ViewTreeObserver.OnTouchModeChangeListener); + method public void removeOnWindowAttachListener(android.view.ViewTreeObserver.OnWindowAttachListener); + method public void removeOnWindowFocusChangeListener(android.view.ViewTreeObserver.OnWindowFocusChangeListener); + } + + public static abstract interface ViewTreeObserver.OnDrawListener { + method public abstract void onDraw(); + } + + public static abstract interface ViewTreeObserver.OnGlobalFocusChangeListener { + method public abstract void onGlobalFocusChanged(android.view.View, android.view.View); + } + + public static abstract interface ViewTreeObserver.OnGlobalLayoutListener { + method public abstract void onGlobalLayout(); + } + + public static abstract interface ViewTreeObserver.OnPreDrawListener { + method public abstract boolean onPreDraw(); + } + + public static abstract interface ViewTreeObserver.OnScrollChangedListener { + method public abstract void onScrollChanged(); + } + + public static abstract interface ViewTreeObserver.OnTouchModeChangeListener { + method public abstract void onTouchModeChanged(boolean); + } + + public static abstract interface ViewTreeObserver.OnWindowAttachListener { + method public abstract void onWindowAttached(); + method public abstract void onWindowDetached(); + } + + public static abstract interface ViewTreeObserver.OnWindowFocusChangeListener { + method public abstract void onWindowFocusChanged(boolean); + } + + public abstract class Window { + ctor public Window(android.content.Context); + method public abstract void addContentView(android.view.View, android.view.ViewGroup.LayoutParams); + method public void addFlags(int); + method public void clearFlags(int); + method public abstract void closeAllPanels(); + method public abstract void closePanel(int); + method public android.view.View findViewById(int); + method public boolean getAllowEnterTransitionOverlap(); + method public boolean getAllowReturnTransitionOverlap(); + method public final android.view.WindowManager.LayoutParams getAttributes(); + method public final android.view.Window.Callback getCallback(); + method public final android.view.Window getContainer(); + method public android.transition.Scene getContentScene(); + method public final android.content.Context getContext(); + method public abstract android.view.View getCurrentFocus(); + method public abstract android.view.View getDecorView(); + method public static int getDefaultFeatures(android.content.Context); + method public android.transition.Transition getEnterTransition(); + method public android.transition.Transition getExitTransition(); + method protected final int getFeatures(); + method protected final int getForcedWindowFlags(); + method public abstract android.view.LayoutInflater getLayoutInflater(); + method protected final int getLocalFeatures(); + method public android.media.session.MediaController getMediaController(); + method public abstract int getNavigationBarColor(); + method public android.transition.Transition getReenterTransition(); + method public android.transition.Transition getReturnTransition(); + method public android.transition.Transition getSharedElementEnterTransition(); + method public android.transition.Transition getSharedElementExitTransition(); + method public android.transition.Transition getSharedElementReenterTransition(); + method public android.transition.Transition getSharedElementReturnTransition(); + method public boolean getSharedElementsUseOverlay(); + method public abstract int getStatusBarColor(); + method public long getTransitionBackgroundFadeDuration(); + method public android.transition.TransitionManager getTransitionManager(); + method public abstract int getVolumeControlStream(); + method public android.view.WindowManager getWindowManager(); + method public final android.content.res.TypedArray getWindowStyle(); + method public final boolean hasChildren(); + method public boolean hasFeature(int); + method protected final boolean hasSoftInputMode(); + method public void injectInputEvent(android.view.InputEvent); + method public abstract void invalidatePanelMenu(int); + method public final boolean isActive(); + method public abstract boolean isFloating(); + method public abstract boolean isShortcutKey(int, android.view.KeyEvent); + method public final void makeActive(); + method protected abstract void onActive(); + method public abstract void onConfigurationChanged(android.content.res.Configuration); + method public abstract void openPanel(int, android.view.KeyEvent); + method public abstract android.view.View peekDecorView(); + method public abstract boolean performContextMenuIdentifierAction(int, int); + method public abstract boolean performPanelIdentifierAction(int, int, int); + method public abstract boolean performPanelShortcut(int, int, android.view.KeyEvent, int); + method public boolean requestFeature(int); + method public abstract void restoreHierarchyState(android.os.Bundle); + method public abstract android.os.Bundle saveHierarchyState(); + method public void setAllowEnterTransitionOverlap(boolean); + method public void setAllowReturnTransitionOverlap(boolean); + method public void setAttributes(android.view.WindowManager.LayoutParams); + method public abstract void setBackgroundDrawable(android.graphics.drawable.Drawable); + method public void setBackgroundDrawableResource(int); + method public void setCallback(android.view.Window.Callback); + method public abstract void setChildDrawable(int, android.graphics.drawable.Drawable); + method public abstract void setChildInt(int, int); + method public void setClipToOutline(boolean); + method public void setContainer(android.view.Window); + method public abstract void setContentView(int); + method public abstract void setContentView(android.view.View); + method public abstract void setContentView(android.view.View, android.view.ViewGroup.LayoutParams); + method protected void setDefaultWindowFormat(int); + method public void setDimAmount(float); + method public void setDisableWallpaperTouchEvents(boolean); + method public void setElevation(float); + method public void setEnterTransition(android.transition.Transition); + method public void setExitTransition(android.transition.Transition); + method public abstract void setFeatureDrawable(int, android.graphics.drawable.Drawable); + method public abstract void setFeatureDrawableAlpha(int, int); + method public abstract void setFeatureDrawableResource(int, int); + method public abstract void setFeatureDrawableUri(int, android.net.Uri); + method public abstract void setFeatureInt(int, int); + method public void setFlags(int, int); + method public void setFormat(int); + method public void setGravity(int); + method public void setIcon(int); + method public void setLayout(int, int); + method public void setLocalFocus(boolean, boolean); + method public void setLogo(int); + method public void setMediaController(android.media.session.MediaController); + method public abstract void setNavigationBarColor(int); + method public void setReenterTransition(android.transition.Transition); + method public void setReturnTransition(android.transition.Transition); + method public void setSharedElementEnterTransition(android.transition.Transition); + method public void setSharedElementExitTransition(android.transition.Transition); + method public void setSharedElementReenterTransition(android.transition.Transition); + method public void setSharedElementReturnTransition(android.transition.Transition); + method public void setSharedElementsUseOverlay(boolean); + method public void setSoftInputMode(int); + method public abstract void setStatusBarColor(int); + method public abstract void setTitle(java.lang.CharSequence); + method public abstract deprecated void setTitleColor(int); + method public void setTransitionBackgroundFadeDuration(long); + method public void setTransitionManager(android.transition.TransitionManager); + method public void setType(int); + method public void setUiOptions(int); + method public void setUiOptions(int, int); + method public abstract void setVolumeControlStream(int); + method public void setWindowAnimations(int); + method public void setWindowManager(android.view.WindowManager, android.os.IBinder, java.lang.String); + method public void setWindowManager(android.view.WindowManager, android.os.IBinder, java.lang.String, boolean); + method public abstract boolean superDispatchGenericMotionEvent(android.view.MotionEvent); + method public abstract boolean superDispatchKeyEvent(android.view.KeyEvent); + method public abstract boolean superDispatchKeyShortcutEvent(android.view.KeyEvent); + method public abstract boolean superDispatchTouchEvent(android.view.MotionEvent); + method public abstract boolean superDispatchTrackballEvent(android.view.MotionEvent); + method public abstract void takeInputQueue(android.view.InputQueue.Callback); + method public abstract void takeKeyEvents(boolean); + method public abstract void takeSurface(android.view.SurfaceHolder.Callback2); + method public abstract void togglePanel(int, android.view.KeyEvent); + field protected static final deprecated int DEFAULT_FEATURES = 65; // 0x41 + field public static final int FEATURE_ACTION_BAR = 8; // 0x8 + field public static final int FEATURE_ACTION_BAR_OVERLAY = 9; // 0x9 + field public static final int FEATURE_ACTION_MODE_OVERLAY = 10; // 0xa + field public static final int FEATURE_ACTIVITY_TRANSITIONS = 13; // 0xd + field public static final int FEATURE_CONTENT_TRANSITIONS = 12; // 0xc + field public static final int FEATURE_CONTEXT_MENU = 6; // 0x6 + field public static final int FEATURE_CUSTOM_TITLE = 7; // 0x7 + field public static final int FEATURE_INDETERMINATE_PROGRESS = 5; // 0x5 + field public static final int FEATURE_LEFT_ICON = 3; // 0x3 + field public static final int FEATURE_NO_TITLE = 1; // 0x1 + field public static final int FEATURE_OPTIONS_PANEL = 0; // 0x0 + field public static final int FEATURE_PROGRESS = 2; // 0x2 + field public static final int FEATURE_RIGHT_ICON = 4; // 0x4 + field public static final int FEATURE_SWIPE_TO_DISMISS = 11; // 0xb + field public static final int ID_ANDROID_CONTENT = 16908290; // 0x1020002 + field public static final java.lang.String NAVIGATION_BAR_BACKGROUND_TRANSITION_NAME = "android:navigation:background"; + field public static final int PROGRESS_END = 10000; // 0x2710 + field public static final int PROGRESS_INDETERMINATE_OFF = -4; // 0xfffffffc + field public static final int PROGRESS_INDETERMINATE_ON = -3; // 0xfffffffd + field public static final int PROGRESS_SECONDARY_END = 30000; // 0x7530 + field public static final int PROGRESS_SECONDARY_START = 20000; // 0x4e20 + field public static final int PROGRESS_START = 0; // 0x0 + field public static final int PROGRESS_VISIBILITY_OFF = -2; // 0xfffffffe + field public static final int PROGRESS_VISIBILITY_ON = -1; // 0xffffffff + field public static final java.lang.String STATUS_BAR_BACKGROUND_TRANSITION_NAME = "android:status:background"; + } + + public static abstract interface Window.Callback { + method public abstract boolean dispatchGenericMotionEvent(android.view.MotionEvent); + method public abstract boolean dispatchKeyEvent(android.view.KeyEvent); + method public abstract boolean dispatchKeyShortcutEvent(android.view.KeyEvent); + method public abstract boolean dispatchPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent); + method public abstract boolean dispatchTouchEvent(android.view.MotionEvent); + method public abstract boolean dispatchTrackballEvent(android.view.MotionEvent); + method public abstract void onActionModeFinished(android.view.ActionMode); + method public abstract void onActionModeStarted(android.view.ActionMode); + method public abstract void onAttachedToWindow(); + method public abstract void onContentChanged(); + method public abstract boolean onCreatePanelMenu(int, android.view.Menu); + method public abstract android.view.View onCreatePanelView(int); + method public abstract void onDetachedFromWindow(); + method public abstract boolean onMenuItemSelected(int, android.view.MenuItem); + method public abstract boolean onMenuOpened(int, android.view.Menu); + method public abstract void onPanelClosed(int, android.view.Menu); + method public abstract boolean onPreparePanel(int, android.view.View, android.view.Menu); + method public abstract boolean onSearchRequested(); + method public abstract void onWindowAttributesChanged(android.view.WindowManager.LayoutParams); + method public abstract void onWindowFocusChanged(boolean); + method public abstract android.view.ActionMode onWindowStartingActionMode(android.view.ActionMode.Callback); + } + + public final class WindowAnimationFrameStats extends android.view.FrameStats implements android.os.Parcelable { + method public int describeContents(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public final class WindowContentFrameStats extends android.view.FrameStats implements android.os.Parcelable { + method public int describeContents(); + method public long getFramePostedTimeNano(int); + method public long getFrameReadyTimeNano(int); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public class WindowId implements android.os.Parcelable { + method public int describeContents(); + method public boolean isFocused(); + method public void registerFocusObserver(android.view.WindowId.FocusObserver); + method public void unregisterFocusObserver(android.view.WindowId.FocusObserver); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public static abstract class WindowId.FocusObserver { + ctor public WindowId.FocusObserver(); + method public abstract void onFocusGained(android.view.WindowId); + method public abstract void onFocusLost(android.view.WindowId); + } + + public final class WindowInsets { + ctor public WindowInsets(android.view.WindowInsets); + method public android.view.WindowInsets consumeStableInsets(); + method public android.view.WindowInsets consumeSystemWindowInsets(); + method public int getStableInsetBottom(); + method public int getStableInsetLeft(); + method public int getStableInsetRight(); + method public int getStableInsetTop(); + method public int getSystemWindowInsetBottom(); + method public int getSystemWindowInsetLeft(); + method public int getSystemWindowInsetRight(); + method public int getSystemWindowInsetTop(); + method public boolean hasInsets(); + method public boolean hasStableInsets(); + method public boolean hasSystemWindowInsets(); + method public boolean isConsumed(); + method public boolean isRound(); + method public android.view.WindowInsets replaceSystemWindowInsets(int, int, int, int); + method public android.view.WindowInsets replaceSystemWindowInsets(android.graphics.Rect); + } + + public abstract interface WindowManager implements android.view.ViewManager { + method public abstract android.view.Display getDefaultDisplay(); + method public abstract void removeViewImmediate(android.view.View); + } + + public static class WindowManager.BadTokenException extends java.lang.RuntimeException { + ctor public WindowManager.BadTokenException(); + ctor public WindowManager.BadTokenException(java.lang.String); + } + + public static class WindowManager.InvalidDisplayException extends java.lang.RuntimeException { + ctor public WindowManager.InvalidDisplayException(); + ctor public WindowManager.InvalidDisplayException(java.lang.String); + } + + public static class WindowManager.LayoutParams extends android.view.ViewGroup.LayoutParams implements android.os.Parcelable { + ctor public WindowManager.LayoutParams(); + ctor public WindowManager.LayoutParams(int); + ctor public WindowManager.LayoutParams(int, int); + ctor public WindowManager.LayoutParams(int, int, int); + ctor public WindowManager.LayoutParams(int, int, int, int, int); + ctor public WindowManager.LayoutParams(int, int, int, int, int, int, int); + ctor public WindowManager.LayoutParams(android.os.Parcel); + method public final int copyFrom(android.view.WindowManager.LayoutParams); + method public java.lang.String debug(java.lang.String); + method public int describeContents(); + method public final java.lang.CharSequence getTitle(); + method public final long getUserActivityTimeout(); + method public static boolean mayUseInputMethod(int); + method public final void setTitle(java.lang.CharSequence); + method public final void setUserActivityTimeout(long); + method public void writeToParcel(android.os.Parcel, int); + field public static final int ALPHA_CHANGED = 128; // 0x80 + field public static final int ANIMATION_CHANGED = 16; // 0x10 + field public static final float BRIGHTNESS_OVERRIDE_FULL = 1.0f; + field public static final float BRIGHTNESS_OVERRIDE_NONE = -1.0f; + field public static final float BRIGHTNESS_OVERRIDE_OFF = 0.0f; + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int DIM_AMOUNT_CHANGED = 32; // 0x20 + field public static final int FIRST_APPLICATION_WINDOW = 1; // 0x1 + field public static final int FIRST_SUB_WINDOW = 1000; // 0x3e8 + field public static final int FIRST_SYSTEM_WINDOW = 2000; // 0x7d0 + field public static final int FLAGS_CHANGED = 4; // 0x4 + field public static final int FLAG_ALLOW_LOCK_WHILE_SCREEN_ON = 1; // 0x1 + field public static final int FLAG_ALT_FOCUSABLE_IM = 131072; // 0x20000 + field public static final deprecated int FLAG_BLUR_BEHIND = 4; // 0x4 + field public static final int FLAG_DIM_BEHIND = 2; // 0x2 + field public static final int FLAG_DISMISS_KEYGUARD = 4194304; // 0x400000 + field public static final deprecated int FLAG_DITHER = 4096; // 0x1000 + field public static final int FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS = -2147483648; // 0x80000000 + field public static final int FLAG_FORCE_NOT_FULLSCREEN = 2048; // 0x800 + field public static final int FLAG_FULLSCREEN = 1024; // 0x400 + field public static final int FLAG_HARDWARE_ACCELERATED = 16777216; // 0x1000000 + field public static final int FLAG_IGNORE_CHEEK_PRESSES = 32768; // 0x8000 + field public static final int FLAG_KEEP_SCREEN_ON = 128; // 0x80 + field public static final int FLAG_LAYOUT_ATTACHED_IN_DECOR = 1073741824; // 0x40000000 + field public static final int FLAG_LAYOUT_INSET_DECOR = 65536; // 0x10000 + field public static final int FLAG_LAYOUT_IN_OVERSCAN = 33554432; // 0x2000000 + field public static final int FLAG_LAYOUT_IN_SCREEN = 256; // 0x100 + field public static final int FLAG_LAYOUT_NO_LIMITS = 512; // 0x200 + field public static final int FLAG_LOCAL_FOCUS_MODE = 268435456; // 0x10000000 + field public static final int FLAG_NOT_FOCUSABLE = 8; // 0x8 + field public static final int FLAG_NOT_TOUCHABLE = 16; // 0x10 + field public static final int FLAG_NOT_TOUCH_MODAL = 32; // 0x20 + field public static final int FLAG_SCALED = 16384; // 0x4000 + field public static final int FLAG_SECURE = 8192; // 0x2000 + field public static final int FLAG_SHOW_WALLPAPER = 1048576; // 0x100000 + field public static final int FLAG_SHOW_WHEN_LOCKED = 524288; // 0x80000 + field public static final int FLAG_SPLIT_TOUCH = 8388608; // 0x800000 + field public static final deprecated int FLAG_TOUCHABLE_WHEN_WAKING = 64; // 0x40 + field public static final int FLAG_TRANSLUCENT_NAVIGATION = 134217728; // 0x8000000 + field public static final int FLAG_TRANSLUCENT_STATUS = 67108864; // 0x4000000 + field public static final int FLAG_TURN_SCREEN_ON = 2097152; // 0x200000 + field public static final int FLAG_WATCH_OUTSIDE_TOUCH = 262144; // 0x40000 + field public static final int FORMAT_CHANGED = 8; // 0x8 + field public static final int LAST_APPLICATION_WINDOW = 99; // 0x63 + field public static final int LAST_SUB_WINDOW = 1999; // 0x7cf + field public static final int LAST_SYSTEM_WINDOW = 2999; // 0xbb7 + field public static final int LAYOUT_CHANGED = 1; // 0x1 + field public static final int MEMORY_TYPE_CHANGED = 256; // 0x100 + field public static final deprecated int MEMORY_TYPE_GPU = 2; // 0x2 + field public static final deprecated int MEMORY_TYPE_HARDWARE = 1; // 0x1 + field public static final deprecated int MEMORY_TYPE_NORMAL = 0; // 0x0 + field public static final deprecated int MEMORY_TYPE_PUSH_BUFFERS = 3; // 0x3 + field public static final int ROTATION_ANIMATION_CHANGED = 4096; // 0x1000 + field public static final int ROTATION_ANIMATION_CROSSFADE = 1; // 0x1 + field public static final int ROTATION_ANIMATION_JUMPCUT = 2; // 0x2 + field public static final int ROTATION_ANIMATION_ROTATE = 0; // 0x0 + field public static final int SCREEN_BRIGHTNESS_CHANGED = 2048; // 0x800 + field public static final int SCREEN_ORIENTATION_CHANGED = 1024; // 0x400 + field public static final int SOFT_INPUT_ADJUST_NOTHING = 48; // 0x30 + field public static final int SOFT_INPUT_ADJUST_PAN = 32; // 0x20 + field public static final int SOFT_INPUT_ADJUST_RESIZE = 16; // 0x10 + field public static final int SOFT_INPUT_ADJUST_UNSPECIFIED = 0; // 0x0 + field public static final int SOFT_INPUT_IS_FORWARD_NAVIGATION = 256; // 0x100 + field public static final int SOFT_INPUT_MASK_ADJUST = 240; // 0xf0 + field public static final int SOFT_INPUT_MASK_STATE = 15; // 0xf + field public static final int SOFT_INPUT_MODE_CHANGED = 512; // 0x200 + field public static final int SOFT_INPUT_STATE_ALWAYS_HIDDEN = 3; // 0x3 + field public static final int SOFT_INPUT_STATE_ALWAYS_VISIBLE = 5; // 0x5 + field public static final int SOFT_INPUT_STATE_HIDDEN = 2; // 0x2 + field public static final int SOFT_INPUT_STATE_UNCHANGED = 1; // 0x1 + field public static final int SOFT_INPUT_STATE_UNSPECIFIED = 0; // 0x0 + field public static final int SOFT_INPUT_STATE_VISIBLE = 4; // 0x4 + field public static final int TITLE_CHANGED = 64; // 0x40 + field public static final int TYPE_ACCESSIBILITY_OVERLAY = 2032; // 0x7f0 + field public static final int TYPE_APPLICATION = 2; // 0x2 + field public static final int TYPE_APPLICATION_ATTACHED_DIALOG = 1003; // 0x3eb + field public static final int TYPE_APPLICATION_MEDIA = 1001; // 0x3e9 + field public static final int TYPE_APPLICATION_PANEL = 1000; // 0x3e8 + field public static final int TYPE_APPLICATION_STARTING = 3; // 0x3 + field public static final int TYPE_APPLICATION_SUB_PANEL = 1002; // 0x3ea + field public static final int TYPE_BASE_APPLICATION = 1; // 0x1 + field public static final int TYPE_CHANGED = 2; // 0x2 + field public static final int TYPE_INPUT_METHOD = 2011; // 0x7db + field public static final int TYPE_INPUT_METHOD_DIALOG = 2012; // 0x7dc + field public static final int TYPE_KEYGUARD_DIALOG = 2009; // 0x7d9 + field public static final int TYPE_PHONE = 2002; // 0x7d2 + field public static final int TYPE_PRIORITY_PHONE = 2007; // 0x7d7 + field public static final int TYPE_PRIVATE_PRESENTATION = 2030; // 0x7ee + field public static final int TYPE_SEARCH_BAR = 2001; // 0x7d1 + field public static final int TYPE_STATUS_BAR = 2000; // 0x7d0 + field public static final int TYPE_STATUS_BAR_PANEL = 2014; // 0x7de + field public static final int TYPE_SYSTEM_ALERT = 2003; // 0x7d3 + field public static final int TYPE_SYSTEM_DIALOG = 2008; // 0x7d8 + field public static final int TYPE_SYSTEM_ERROR = 2010; // 0x7da + field public static final int TYPE_SYSTEM_OVERLAY = 2006; // 0x7d6 + field public static final int TYPE_TOAST = 2005; // 0x7d5 + field public static final int TYPE_WALLPAPER = 2013; // 0x7dd + field public float alpha; + field public float buttonBrightness; + field public float dimAmount; + field public int flags; + field public int format; + field public int gravity; + field public float horizontalMargin; + field public float horizontalWeight; + field public deprecated int memoryType; + field public java.lang.String packageName; + field public float preferredRefreshRate; + field public int rotationAnimation; + field public float screenBrightness; + field public int screenOrientation; + field public int softInputMode; + field public int systemUiVisibility; + field public android.os.IBinder token; + field public int type; + field public float verticalMargin; + field public float verticalWeight; + field public int windowAnimations; + field public int x; + field public int y; + } + +} + +package android.view.accessibility { + + public final class AccessibilityEvent extends android.view.accessibility.AccessibilityRecord implements android.os.Parcelable { + method public void appendRecord(android.view.accessibility.AccessibilityRecord); + method public int describeContents(); + method public static java.lang.String eventTypeToString(int); + method public int getAction(); + method public int getContentChangeTypes(); + method public long getEventTime(); + method public int getEventType(); + method public int getMovementGranularity(); + method public java.lang.CharSequence getPackageName(); + method public android.view.accessibility.AccessibilityRecord getRecord(int); + method public int getRecordCount(); + method public void initFromParcel(android.os.Parcel); + method public static android.view.accessibility.AccessibilityEvent obtain(int); + method public static android.view.accessibility.AccessibilityEvent obtain(android.view.accessibility.AccessibilityEvent); + method public static android.view.accessibility.AccessibilityEvent obtain(); + method public void setAction(int); + method public void setContentChangeTypes(int); + method public void setEventTime(long); + method public void setEventType(int); + method public void setMovementGranularity(int); + method public void setPackageName(java.lang.CharSequence); + method public void writeToParcel(android.os.Parcel, int); + field public static final int CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION = 4; // 0x4 + field public static final int CONTENT_CHANGE_TYPE_SUBTREE = 1; // 0x1 + field public static final int CONTENT_CHANGE_TYPE_TEXT = 2; // 0x2 + field public static final int CONTENT_CHANGE_TYPE_UNDEFINED = 0; // 0x0 + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int INVALID_POSITION = -1; // 0xffffffff + field public static final deprecated int MAX_TEXT_LENGTH = 500; // 0x1f4 + field public static final int TYPES_ALL_MASK = -1; // 0xffffffff + field public static final int TYPE_ANNOUNCEMENT = 16384; // 0x4000 + field public static final int TYPE_GESTURE_DETECTION_END = 524288; // 0x80000 + field public static final int TYPE_GESTURE_DETECTION_START = 262144; // 0x40000 + field public static final int TYPE_NOTIFICATION_STATE_CHANGED = 64; // 0x40 + field public static final int TYPE_TOUCH_EXPLORATION_GESTURE_END = 1024; // 0x400 + field public static final int TYPE_TOUCH_EXPLORATION_GESTURE_START = 512; // 0x200 + field public static final int TYPE_TOUCH_INTERACTION_END = 2097152; // 0x200000 + field public static final int TYPE_TOUCH_INTERACTION_START = 1048576; // 0x100000 + field public static final int TYPE_VIEW_ACCESSIBILITY_FOCUSED = 32768; // 0x8000 + field public static final int TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED = 65536; // 0x10000 + field public static final int TYPE_VIEW_CLICKED = 1; // 0x1 + field public static final int TYPE_VIEW_FOCUSED = 8; // 0x8 + field public static final int TYPE_VIEW_HOVER_ENTER = 128; // 0x80 + field public static final int TYPE_VIEW_HOVER_EXIT = 256; // 0x100 + field public static final int TYPE_VIEW_LONG_CLICKED = 2; // 0x2 + field public static final int TYPE_VIEW_SCROLLED = 4096; // 0x1000 + field public static final int TYPE_VIEW_SELECTED = 4; // 0x4 + field public static final int TYPE_VIEW_TEXT_CHANGED = 16; // 0x10 + field public static final int TYPE_VIEW_TEXT_SELECTION_CHANGED = 8192; // 0x2000 + field public static final int TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY = 131072; // 0x20000 + field public static final int TYPE_WINDOWS_CHANGED = 4194304; // 0x400000 + field public static final int TYPE_WINDOW_CONTENT_CHANGED = 2048; // 0x800 + field public static final int TYPE_WINDOW_STATE_CHANGED = 32; // 0x20 + } + + public abstract interface AccessibilityEventSource { + method public abstract void sendAccessibilityEvent(int); + method public abstract void sendAccessibilityEventUnchecked(android.view.accessibility.AccessibilityEvent); + } + + public final class AccessibilityManager { + method public boolean addAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener); + method public boolean addTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager.TouchExplorationStateChangeListener); + method public deprecated java.util.List getAccessibilityServiceList(); + method public java.util.List getEnabledAccessibilityServiceList(int); + method public java.util.List getInstalledAccessibilityServiceList(); + method public void interrupt(); + method public boolean isEnabled(); + method public boolean isTouchExplorationEnabled(); + method public boolean removeAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener); + method public boolean removeTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager.TouchExplorationStateChangeListener); + method public void sendAccessibilityEvent(android.view.accessibility.AccessibilityEvent); + } + + public static abstract interface AccessibilityManager.AccessibilityStateChangeListener { + method public abstract void onAccessibilityStateChanged(boolean); + } + + public static abstract interface AccessibilityManager.TouchExplorationStateChangeListener { + method public abstract void onTouchExplorationStateChanged(boolean); + } + + public class AccessibilityNodeInfo implements android.os.Parcelable { + method public void addAction(android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction); + method public deprecated void addAction(int); + method public void addChild(android.view.View); + method public void addChild(android.view.View, int); + method public boolean canOpenPopup(); + method public int describeContents(); + method public java.util.List findAccessibilityNodeInfosByText(java.lang.String); + method public java.util.List findAccessibilityNodeInfosByViewId(java.lang.String); + method public android.view.accessibility.AccessibilityNodeInfo findFocus(int); + method public android.view.accessibility.AccessibilityNodeInfo focusSearch(int); + method public java.util.List getActionList(); + method public deprecated int getActions(); + method public void getBoundsInParent(android.graphics.Rect); + method public void getBoundsInScreen(android.graphics.Rect); + method public android.view.accessibility.AccessibilityNodeInfo getChild(int); + method public int getChildCount(); + method public java.lang.CharSequence getClassName(); + method public android.view.accessibility.AccessibilityNodeInfo.CollectionInfo getCollectionInfo(); + method public android.view.accessibility.AccessibilityNodeInfo.CollectionItemInfo getCollectionItemInfo(); + method public java.lang.CharSequence getContentDescription(); + method public java.lang.CharSequence getError(); + method public android.os.Bundle getExtras(); + method public int getInputType(); + method public android.view.accessibility.AccessibilityNodeInfo getLabelFor(); + method public android.view.accessibility.AccessibilityNodeInfo getLabeledBy(); + method public int getLiveRegion(); + method public int getMaxTextLength(); + method public int getMovementGranularities(); + method public java.lang.CharSequence getPackageName(); + method public android.view.accessibility.AccessibilityNodeInfo getParent(); + method public android.view.accessibility.AccessibilityNodeInfo.RangeInfo getRangeInfo(); + method public java.lang.CharSequence getText(); + method public int getTextSelectionEnd(); + method public int getTextSelectionStart(); + method public android.view.accessibility.AccessibilityNodeInfo getTraversalAfter(); + method public android.view.accessibility.AccessibilityNodeInfo getTraversalBefore(); + method public java.lang.String getViewIdResourceName(); + method public android.view.accessibility.AccessibilityWindowInfo getWindow(); + method public int getWindowId(); + method public boolean isAccessibilityFocused(); + method public boolean isCheckable(); + method public boolean isChecked(); + method public boolean isClickable(); + method public boolean isContentInvalid(); + method public boolean isDismissable(); + method public boolean isEditable(); + method public boolean isEnabled(); + method public boolean isFocusable(); + method public boolean isFocused(); + method public boolean isLongClickable(); + method public boolean isMultiLine(); + method public boolean isPassword(); + method public boolean isScrollable(); + method public boolean isSelected(); + method public boolean isVisibleToUser(); + method public static android.view.accessibility.AccessibilityNodeInfo obtain(android.view.View); + method public static android.view.accessibility.AccessibilityNodeInfo obtain(android.view.View, int); + method public static android.view.accessibility.AccessibilityNodeInfo obtain(); + method public static android.view.accessibility.AccessibilityNodeInfo obtain(android.view.accessibility.AccessibilityNodeInfo); + method public boolean performAction(int); + method public boolean performAction(int, android.os.Bundle); + method public void recycle(); + method public boolean refresh(); + method public deprecated void removeAction(int); + method public boolean removeAction(android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction); + method public boolean removeChild(android.view.View); + method public boolean removeChild(android.view.View, int); + method public void setAccessibilityFocused(boolean); + method public void setBoundsInParent(android.graphics.Rect); + method public void setBoundsInScreen(android.graphics.Rect); + method public void setCanOpenPopup(boolean); + method public void setCheckable(boolean); + method public void setChecked(boolean); + method public void setClassName(java.lang.CharSequence); + method public void setClickable(boolean); + method public void setCollectionInfo(android.view.accessibility.AccessibilityNodeInfo.CollectionInfo); + method public void setCollectionItemInfo(android.view.accessibility.AccessibilityNodeInfo.CollectionItemInfo); + method public void setContentDescription(java.lang.CharSequence); + method public void setContentInvalid(boolean); + method public void setDismissable(boolean); + method public void setEditable(boolean); + method public void setEnabled(boolean); + method public void setError(java.lang.CharSequence); + method public void setFocusable(boolean); + method public void setFocused(boolean); + method public void setInputType(int); + method public void setLabelFor(android.view.View); + method public void setLabelFor(android.view.View, int); + method public void setLabeledBy(android.view.View); + method public void setLabeledBy(android.view.View, int); + method public void setLiveRegion(int); + method public void setLongClickable(boolean); + method public void setMaxTextLength(int); + method public void setMovementGranularities(int); + method public void setMultiLine(boolean); + method public void setPackageName(java.lang.CharSequence); + method public void setParent(android.view.View); + method public void setParent(android.view.View, int); + method public void setPassword(boolean); + method public void setRangeInfo(android.view.accessibility.AccessibilityNodeInfo.RangeInfo); + method public void setScrollable(boolean); + method public void setSelected(boolean); + method public void setSource(android.view.View); + method public void setSource(android.view.View, int); + method public void setText(java.lang.CharSequence); + method public void setTextSelection(int, int); + method public void setTraversalAfter(android.view.View); + method public void setTraversalAfter(android.view.View, int); + method public void setTraversalBefore(android.view.View); + method public void setTraversalBefore(android.view.View, int); + method public void setViewIdResourceName(java.lang.String); + method public void setVisibleToUser(boolean); + method public void writeToParcel(android.os.Parcel, int); + field public static final int ACTION_ACCESSIBILITY_FOCUS = 64; // 0x40 + field public static final java.lang.String ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN = "ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN"; + field public static final java.lang.String ACTION_ARGUMENT_HTML_ELEMENT_STRING = "ACTION_ARGUMENT_HTML_ELEMENT_STRING"; + field public static final java.lang.String ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT = "ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT"; + field public static final java.lang.String ACTION_ARGUMENT_SELECTION_END_INT = "ACTION_ARGUMENT_SELECTION_END_INT"; + field public static final java.lang.String ACTION_ARGUMENT_SELECTION_START_INT = "ACTION_ARGUMENT_SELECTION_START_INT"; + field public static final java.lang.String ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE = "ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE"; + field public static final int ACTION_CLEAR_ACCESSIBILITY_FOCUS = 128; // 0x80 + field public static final int ACTION_CLEAR_FOCUS = 2; // 0x2 + field public static final int ACTION_CLEAR_SELECTION = 8; // 0x8 + field public static final int ACTION_CLICK = 16; // 0x10 + field public static final int ACTION_COLLAPSE = 524288; // 0x80000 + field public static final int ACTION_COPY = 16384; // 0x4000 + field public static final int ACTION_CUT = 65536; // 0x10000 + field public static final int ACTION_DISMISS = 1048576; // 0x100000 + field public static final int ACTION_EXPAND = 262144; // 0x40000 + field public static final int ACTION_FOCUS = 1; // 0x1 + field public static final int ACTION_LONG_CLICK = 32; // 0x20 + field public static final int ACTION_NEXT_AT_MOVEMENT_GRANULARITY = 256; // 0x100 + field public static final int ACTION_NEXT_HTML_ELEMENT = 1024; // 0x400 + field public static final int ACTION_PASTE = 32768; // 0x8000 + field public static final int ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY = 512; // 0x200 + field public static final int ACTION_PREVIOUS_HTML_ELEMENT = 2048; // 0x800 + field public static final int ACTION_SCROLL_BACKWARD = 8192; // 0x2000 + field public static final int ACTION_SCROLL_FORWARD = 4096; // 0x1000 + field public static final int ACTION_SELECT = 4; // 0x4 + field public static final int ACTION_SET_SELECTION = 131072; // 0x20000 + field public static final int ACTION_SET_TEXT = 2097152; // 0x200000 + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int FOCUS_ACCESSIBILITY = 2; // 0x2 + field public static final int FOCUS_INPUT = 1; // 0x1 + field public static final int MOVEMENT_GRANULARITY_CHARACTER = 1; // 0x1 + field public static final int MOVEMENT_GRANULARITY_LINE = 4; // 0x4 + field public static final int MOVEMENT_GRANULARITY_PAGE = 16; // 0x10 + field public static final int MOVEMENT_GRANULARITY_PARAGRAPH = 8; // 0x8 + field public static final int MOVEMENT_GRANULARITY_WORD = 2; // 0x2 + } + + public static final class AccessibilityNodeInfo.AccessibilityAction { + ctor public AccessibilityNodeInfo.AccessibilityAction(int, java.lang.CharSequence); + method public int getId(); + method public java.lang.CharSequence getLabel(); + field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_ACCESSIBILITY_FOCUS; + field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_CLEAR_ACCESSIBILITY_FOCUS; + field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_CLEAR_FOCUS; + field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_CLEAR_SELECTION; + field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_CLICK; + field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_COLLAPSE; + field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_COPY; + field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_CUT; + field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_DISMISS; + field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_EXPAND; + field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_FOCUS; + field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_LONG_CLICK; + field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_NEXT_AT_MOVEMENT_GRANULARITY; + field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_NEXT_HTML_ELEMENT; + field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_PASTE; + field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY; + field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_PREVIOUS_HTML_ELEMENT; + field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SCROLL_BACKWARD; + field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SCROLL_FORWARD; + field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SELECT; + field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SET_SELECTION; + field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SET_TEXT; + } + + public static final class AccessibilityNodeInfo.CollectionInfo { + method public int getColumnCount(); + method public int getRowCount(); + method public int getSelectionMode(); + method public boolean isHierarchical(); + method public static android.view.accessibility.AccessibilityNodeInfo.CollectionInfo obtain(int, int, boolean); + method public static android.view.accessibility.AccessibilityNodeInfo.CollectionInfo obtain(int, int, boolean, int); + field public static final int SELECTION_MODE_MULTIPLE = 2; // 0x2 + field public static final int SELECTION_MODE_NONE = 0; // 0x0 + field public static final int SELECTION_MODE_SINGLE = 1; // 0x1 + } + + public static final class AccessibilityNodeInfo.CollectionItemInfo { + method public int getColumnIndex(); + method public int getColumnSpan(); + method public int getRowIndex(); + method public int getRowSpan(); + method public boolean isHeading(); + method public boolean isSelected(); + method public static android.view.accessibility.AccessibilityNodeInfo.CollectionItemInfo obtain(int, int, int, int, boolean); + method public static android.view.accessibility.AccessibilityNodeInfo.CollectionItemInfo obtain(int, int, int, int, boolean, boolean); + } + + public static final class AccessibilityNodeInfo.RangeInfo { + method public float getCurrent(); + method public float getMax(); + method public float getMin(); + method public int getType(); + method public static android.view.accessibility.AccessibilityNodeInfo.RangeInfo obtain(int, float, float, float); + field public static final int RANGE_TYPE_FLOAT = 1; // 0x1 + field public static final int RANGE_TYPE_INT = 0; // 0x0 + field public static final int RANGE_TYPE_PERCENT = 2; // 0x2 + } + + public abstract class AccessibilityNodeProvider { + ctor public AccessibilityNodeProvider(); + method public android.view.accessibility.AccessibilityNodeInfo createAccessibilityNodeInfo(int); + method public java.util.List findAccessibilityNodeInfosByText(java.lang.String, int); + method public android.view.accessibility.AccessibilityNodeInfo findFocus(int); + method public boolean performAction(int, int, android.os.Bundle); + field public static final int HOST_VIEW_ID = -1; // 0xffffffff + } + + public class AccessibilityRecord { + method public int getAddedCount(); + method public java.lang.CharSequence getBeforeText(); + method public java.lang.CharSequence getClassName(); + method public java.lang.CharSequence getContentDescription(); + 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(); + method public int getScrollY(); + method public android.view.accessibility.AccessibilityNodeInfo getSource(); + method public java.util.List getText(); + method public int getToIndex(); + method public int getWindowId(); + method public boolean isChecked(); + method public boolean isEnabled(); + method public boolean isFullScreen(); + method public boolean isPassword(); + method public boolean isScrollable(); + method public static android.view.accessibility.AccessibilityRecord obtain(android.view.accessibility.AccessibilityRecord); + method public static android.view.accessibility.AccessibilityRecord obtain(); + method public void recycle(); + method public void setAddedCount(int); + method public void setBeforeText(java.lang.CharSequence); + method public void setChecked(boolean); + method public void setClassName(java.lang.CharSequence); + method public void setContentDescription(java.lang.CharSequence); + method public void setCurrentItemIndex(int); + method public void setEnabled(boolean); + 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); + method public void setScrollX(int); + method public void setScrollY(int); + method public void setScrollable(boolean); + method public void setSource(android.view.View); + method public void setSource(android.view.View, int); + method public void setToIndex(int); + } + + public final class AccessibilityWindowInfo implements android.os.Parcelable { + method public int describeContents(); + method public void getBoundsInScreen(android.graphics.Rect); + method public android.view.accessibility.AccessibilityWindowInfo getChild(int); + method public int getChildCount(); + method public int getId(); + method public int getLayer(); + method public android.view.accessibility.AccessibilityWindowInfo getParent(); + method public android.view.accessibility.AccessibilityNodeInfo getRoot(); + method public int getType(); + method public boolean isAccessibilityFocused(); + method public boolean isActive(); + method public boolean isFocused(); + method public static android.view.accessibility.AccessibilityWindowInfo obtain(); + method public static android.view.accessibility.AccessibilityWindowInfo obtain(android.view.accessibility.AccessibilityWindowInfo); + method public void recycle(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int TYPE_ACCESSIBILITY_OVERLAY = 4; // 0x4 + field public static final int TYPE_APPLICATION = 1; // 0x1 + field public static final int TYPE_INPUT_METHOD = 2; // 0x2 + field public static final int TYPE_SYSTEM = 3; // 0x3 + } + + public class CaptioningManager { + method public void addCaptioningChangeListener(android.view.accessibility.CaptioningManager.CaptioningChangeListener); + method public final float getFontScale(); + method public final java.util.Locale getLocale(); + method public android.view.accessibility.CaptioningManager.CaptionStyle getUserStyle(); + method public final boolean isEnabled(); + method public void removeCaptioningChangeListener(android.view.accessibility.CaptioningManager.CaptioningChangeListener); + } + + public static final class CaptioningManager.CaptionStyle { + method public android.graphics.Typeface getTypeface(); + method public boolean hasBackgroundColor(); + method public boolean hasEdgeColor(); + method public boolean hasEdgeType(); + method public boolean hasForegroundColor(); + method public boolean hasWindowColor(); + field public static final int EDGE_TYPE_DEPRESSED = 4; // 0x4 + field public static final int EDGE_TYPE_DROP_SHADOW = 2; // 0x2 + field public static final int EDGE_TYPE_NONE = 0; // 0x0 + field public static final int EDGE_TYPE_OUTLINE = 1; // 0x1 + field public static final int EDGE_TYPE_RAISED = 3; // 0x3 + field public static final int EDGE_TYPE_UNSPECIFIED = -1; // 0xffffffff + field public final int backgroundColor; + field public final int edgeColor; + field public final int edgeType; + field public final int foregroundColor; + field public final int windowColor; + } + + public static abstract class CaptioningManager.CaptioningChangeListener { + ctor public CaptioningManager.CaptioningChangeListener(); + method public void onEnabledChanged(boolean); + method public void onFontScaleChanged(float); + method public void onLocaleChanged(java.util.Locale); + method public void onUserStyleChanged(android.view.accessibility.CaptioningManager.CaptionStyle); + } + +} + +package android.view.animation { + + public class AccelerateDecelerateInterpolator extends android.view.animation.BaseInterpolator { + ctor public AccelerateDecelerateInterpolator(); + ctor public AccelerateDecelerateInterpolator(android.content.Context, android.util.AttributeSet); + method public float getInterpolation(float); + } + + public class AccelerateInterpolator extends android.view.animation.BaseInterpolator { + ctor public AccelerateInterpolator(); + ctor public AccelerateInterpolator(float); + ctor public AccelerateInterpolator(android.content.Context, android.util.AttributeSet); + method public float getInterpolation(float); + } + + public class AlphaAnimation extends android.view.animation.Animation { + ctor public AlphaAnimation(android.content.Context, android.util.AttributeSet); + ctor public AlphaAnimation(float, float); + } + + public abstract class Animation implements java.lang.Cloneable { + ctor public Animation(); + ctor public Animation(android.content.Context, android.util.AttributeSet); + method protected void applyTransformation(float, android.view.animation.Transformation); + method public void cancel(); + method public long computeDurationHint(); + method protected void ensureInterpolator(); + method public int getBackgroundColor(); + method public boolean getDetachWallpaper(); + method public long getDuration(); + method public boolean getFillAfter(); + method public boolean getFillBefore(); + method public android.view.animation.Interpolator getInterpolator(); + method public int getRepeatCount(); + method public int getRepeatMode(); + method protected float getScaleFactor(); + method public long getStartOffset(); + method public long getStartTime(); + method public boolean getTransformation(long, android.view.animation.Transformation); + method public boolean getTransformation(long, android.view.animation.Transformation, float); + method public int getZAdjustment(); + method public boolean hasEnded(); + method public boolean hasStarted(); + method public void initialize(int, int, int, int); + method public boolean isFillEnabled(); + method public boolean isInitialized(); + method public void reset(); + method protected float resolveSize(int, float, int, int); + method public void restrictDuration(long); + method public void scaleCurrentDuration(float); + method public void setAnimationListener(android.view.animation.Animation.AnimationListener); + method public void setBackgroundColor(int); + method public void setDetachWallpaper(boolean); + method public void setDuration(long); + method public void setFillAfter(boolean); + method public void setFillBefore(boolean); + method public void setFillEnabled(boolean); + method public void setInterpolator(android.content.Context, int); + method public void setInterpolator(android.view.animation.Interpolator); + method public void setRepeatCount(int); + method public void setRepeatMode(int); + method public void setStartOffset(long); + method public void setStartTime(long); + method public void setZAdjustment(int); + method public void start(); + method public void startNow(); + method public boolean willChangeBounds(); + method public boolean willChangeTransformationMatrix(); + field public static final int ABSOLUTE = 0; // 0x0 + field public static final int INFINITE = -1; // 0xffffffff + field public static final int RELATIVE_TO_PARENT = 2; // 0x2 + field public static final int RELATIVE_TO_SELF = 1; // 0x1 + field public static final int RESTART = 1; // 0x1 + field public static final int REVERSE = 2; // 0x2 + field public static final int START_ON_FIRST_FRAME = -1; // 0xffffffff + field public static final int ZORDER_BOTTOM = -1; // 0xffffffff + field public static final int ZORDER_NORMAL = 0; // 0x0 + field public static final int ZORDER_TOP = 1; // 0x1 + } + + public static abstract interface Animation.AnimationListener { + method public abstract void onAnimationEnd(android.view.animation.Animation); + method public abstract void onAnimationRepeat(android.view.animation.Animation); + method public abstract void onAnimationStart(android.view.animation.Animation); + } + + protected static class Animation.Description { + ctor protected Animation.Description(); + field public int type; + field public float value; + } + + public class AnimationSet extends android.view.animation.Animation { + ctor public AnimationSet(android.content.Context, android.util.AttributeSet); + ctor public AnimationSet(boolean); + method public void addAnimation(android.view.animation.Animation); + method public java.util.List getAnimations(); + } + + public class AnimationUtils { + ctor public AnimationUtils(); + method public static long currentAnimationTimeMillis(); + method public static android.view.animation.Animation loadAnimation(android.content.Context, int) throws android.content.res.Resources.NotFoundException; + method public static android.view.animation.Interpolator loadInterpolator(android.content.Context, int) throws android.content.res.Resources.NotFoundException; + method public static android.view.animation.LayoutAnimationController loadLayoutAnimation(android.content.Context, int) throws android.content.res.Resources.NotFoundException; + method public static android.view.animation.Animation makeInAnimation(android.content.Context, boolean); + method public static android.view.animation.Animation makeInChildBottomAnimation(android.content.Context); + method public static android.view.animation.Animation makeOutAnimation(android.content.Context, boolean); + } + + public class AnticipateInterpolator extends android.view.animation.BaseInterpolator { + ctor public AnticipateInterpolator(); + ctor public AnticipateInterpolator(float); + ctor public AnticipateInterpolator(android.content.Context, android.util.AttributeSet); + method public float getInterpolation(float); + } + + public class AnticipateOvershootInterpolator extends android.view.animation.BaseInterpolator { + ctor public AnticipateOvershootInterpolator(); + ctor public AnticipateOvershootInterpolator(float); + ctor public AnticipateOvershootInterpolator(float, float); + ctor public AnticipateOvershootInterpolator(android.content.Context, android.util.AttributeSet); + method public float getInterpolation(float); + } + + public abstract class BaseInterpolator implements android.view.animation.Interpolator { + ctor public BaseInterpolator(); + } + + public class BounceInterpolator extends android.view.animation.BaseInterpolator { + ctor public BounceInterpolator(); + ctor public BounceInterpolator(android.content.Context, android.util.AttributeSet); + method public float getInterpolation(float); + } + + public class CycleInterpolator extends android.view.animation.BaseInterpolator { + ctor public CycleInterpolator(float); + ctor public CycleInterpolator(android.content.Context, android.util.AttributeSet); + method public float getInterpolation(float); + } + + public class DecelerateInterpolator extends android.view.animation.BaseInterpolator { + ctor public DecelerateInterpolator(); + ctor public DecelerateInterpolator(float); + ctor public DecelerateInterpolator(android.content.Context, android.util.AttributeSet); + method public float getInterpolation(float); + } + + public class GridLayoutAnimationController extends android.view.animation.LayoutAnimationController { + ctor public GridLayoutAnimationController(android.content.Context, android.util.AttributeSet); + ctor public GridLayoutAnimationController(android.view.animation.Animation); + ctor public GridLayoutAnimationController(android.view.animation.Animation, float, float); + method public float getColumnDelay(); + method public int getDirection(); + method public int getDirectionPriority(); + method public float getRowDelay(); + method public void setColumnDelay(float); + method public void setDirection(int); + method public void setDirectionPriority(int); + method public void setRowDelay(float); + field public static final int DIRECTION_BOTTOM_TO_TOP = 2; // 0x2 + field public static final int DIRECTION_HORIZONTAL_MASK = 1; // 0x1 + field public static final int DIRECTION_LEFT_TO_RIGHT = 0; // 0x0 + field public static final int DIRECTION_RIGHT_TO_LEFT = 1; // 0x1 + field public static final int DIRECTION_TOP_TO_BOTTOM = 0; // 0x0 + field public static final int DIRECTION_VERTICAL_MASK = 2; // 0x2 + field public static final int PRIORITY_COLUMN = 1; // 0x1 + field public static final int PRIORITY_NONE = 0; // 0x0 + field public static final int PRIORITY_ROW = 2; // 0x2 + } + + public static class GridLayoutAnimationController.AnimationParameters extends android.view.animation.LayoutAnimationController.AnimationParameters { + ctor public GridLayoutAnimationController.AnimationParameters(); + field public int column; + field public int columnsCount; + field public int row; + field public int rowsCount; + } + + public abstract interface Interpolator implements android.animation.TimeInterpolator { + } + + public class LayoutAnimationController { + ctor public LayoutAnimationController(android.content.Context, android.util.AttributeSet); + ctor public LayoutAnimationController(android.view.animation.Animation); + ctor public LayoutAnimationController(android.view.animation.Animation, float); + method public android.view.animation.Animation getAnimation(); + method public final android.view.animation.Animation getAnimationForView(android.view.View); + method public float getDelay(); + method protected long getDelayForView(android.view.View); + method public android.view.animation.Interpolator getInterpolator(); + method public int getOrder(); + method protected int getTransformedIndex(android.view.animation.LayoutAnimationController.AnimationParameters); + method public boolean isDone(); + method public void setAnimation(android.content.Context, int); + method public void setAnimation(android.view.animation.Animation); + method public void setDelay(float); + method public void setInterpolator(android.content.Context, int); + method public void setInterpolator(android.view.animation.Interpolator); + method public void setOrder(int); + method public void start(); + method public boolean willOverlap(); + field public static final int ORDER_NORMAL = 0; // 0x0 + field public static final int ORDER_RANDOM = 2; // 0x2 + field public static final int ORDER_REVERSE = 1; // 0x1 + field protected android.view.animation.Animation mAnimation; + field protected android.view.animation.Interpolator mInterpolator; + field protected java.util.Random mRandomizer; + } + + public static class LayoutAnimationController.AnimationParameters { + ctor public LayoutAnimationController.AnimationParameters(); + field public int count; + field public int index; + } + + public class LinearInterpolator extends android.view.animation.BaseInterpolator { + ctor public LinearInterpolator(); + ctor public LinearInterpolator(android.content.Context, android.util.AttributeSet); + method public float getInterpolation(float); + } + + public class OvershootInterpolator extends android.view.animation.BaseInterpolator { + ctor public OvershootInterpolator(); + ctor public OvershootInterpolator(float); + ctor public OvershootInterpolator(android.content.Context, android.util.AttributeSet); + method public float getInterpolation(float); + } + + public class PathInterpolator extends android.view.animation.BaseInterpolator { + ctor public PathInterpolator(android.graphics.Path); + ctor public PathInterpolator(float, float); + ctor public PathInterpolator(float, float, float, float); + ctor public PathInterpolator(android.content.Context, android.util.AttributeSet); + method public float getInterpolation(float); + } + + public class RotateAnimation extends android.view.animation.Animation { + ctor public RotateAnimation(android.content.Context, android.util.AttributeSet); + ctor public RotateAnimation(float, float); + ctor public RotateAnimation(float, float, float, float); + ctor public RotateAnimation(float, float, int, float, int, float); + } + + public class ScaleAnimation extends android.view.animation.Animation { + ctor public ScaleAnimation(android.content.Context, android.util.AttributeSet); + ctor public ScaleAnimation(float, float, float, float); + ctor public ScaleAnimation(float, float, float, float, float, float); + ctor public ScaleAnimation(float, float, float, float, int, float, int, float); + } + + public class Transformation { + ctor public Transformation(); + method public void clear(); + method public void compose(android.view.animation.Transformation); + method public float getAlpha(); + method public android.graphics.Matrix getMatrix(); + method public int getTransformationType(); + method public void set(android.view.animation.Transformation); + method public void setAlpha(float); + method public void setTransformationType(int); + method public java.lang.String toShortString(); + field public static final int TYPE_ALPHA = 1; // 0x1 + field public static final int TYPE_BOTH = 3; // 0x3 + field public static final int TYPE_IDENTITY = 0; // 0x0 + field public static final int TYPE_MATRIX = 2; // 0x2 + field protected float mAlpha; + field protected android.graphics.Matrix mMatrix; + field protected int mTransformationType; + } + + public class TranslateAnimation extends android.view.animation.Animation { + ctor public TranslateAnimation(android.content.Context, android.util.AttributeSet); + ctor public TranslateAnimation(float, float, float, float); + ctor public TranslateAnimation(int, float, int, float, int, float, int, float); + } + +} + +package android.view.inputmethod { + + public class BaseInputConnection implements android.view.inputmethod.InputConnection { + ctor public BaseInputConnection(android.view.View, boolean); + method public boolean beginBatchEdit(); + method public boolean clearMetaKeyStates(int); + method public boolean commitCompletion(android.view.inputmethod.CompletionInfo); + method public boolean commitCorrection(android.view.inputmethod.CorrectionInfo); + method public boolean commitText(java.lang.CharSequence, int); + method public boolean deleteSurroundingText(int, int); + method public boolean endBatchEdit(); + method public boolean finishComposingText(); + method public static int getComposingSpanEnd(android.text.Spannable); + method public static int getComposingSpanStart(android.text.Spannable); + method public int getCursorCapsMode(int); + method public android.text.Editable getEditable(); + method public android.view.inputmethod.ExtractedText getExtractedText(android.view.inputmethod.ExtractedTextRequest, int); + method public java.lang.CharSequence getSelectedText(int); + method public java.lang.CharSequence getTextAfterCursor(int, int); + method public java.lang.CharSequence getTextBeforeCursor(int, int); + method public boolean performContextMenuAction(int); + method public boolean performEditorAction(int); + method public boolean performPrivateCommand(java.lang.String, android.os.Bundle); + method public static final void removeComposingSpans(android.text.Spannable); + method public boolean reportFullscreenMode(boolean); + method public boolean requestCursorUpdates(int); + method public boolean sendKeyEvent(android.view.KeyEvent); + method public boolean setComposingRegion(int, int); + method public static void setComposingSpans(android.text.Spannable); + method public boolean setComposingText(java.lang.CharSequence, int); + method public boolean setSelection(int, int); + } + + public final class CompletionInfo implements android.os.Parcelable { + ctor public CompletionInfo(long, int, java.lang.CharSequence); + ctor public CompletionInfo(long, int, java.lang.CharSequence, java.lang.CharSequence); + method public int describeContents(); + method public long getId(); + method public java.lang.CharSequence getLabel(); + method public int getPosition(); + method public java.lang.CharSequence getText(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public final class CorrectionInfo implements android.os.Parcelable { + ctor public CorrectionInfo(int, java.lang.CharSequence, java.lang.CharSequence); + method public int describeContents(); + method public java.lang.CharSequence getNewText(); + method public int getOffset(); + method public java.lang.CharSequence getOldText(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public final class CursorAnchorInfo implements android.os.Parcelable { + ctor public CursorAnchorInfo(android.os.Parcel); + method public int describeContents(); + method public android.graphics.RectF getCharacterBounds(int); + method public int getCharacterBoundsFlags(int); + method public java.lang.CharSequence getComposingText(); + method public int getComposingTextStart(); + method public float getInsertionMarkerBaseline(); + method public float getInsertionMarkerBottom(); + method public int getInsertionMarkerFlags(); + method public float getInsertionMarkerHorizontal(); + method public float getInsertionMarkerTop(); + method public android.graphics.Matrix getMatrix(); + method public int getSelectionEnd(); + method public int getSelectionStart(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int FLAG_HAS_INVISIBLE_REGION = 2; // 0x2 + field public static final int FLAG_HAS_VISIBLE_REGION = 1; // 0x1 + field public static final int FLAG_IS_RTL = 4; // 0x4 + } + + public static final class CursorAnchorInfo.Builder { + ctor public CursorAnchorInfo.Builder(); + method public android.view.inputmethod.CursorAnchorInfo.Builder addCharacterBounds(int, float, float, float, float, int); + method public android.view.inputmethod.CursorAnchorInfo build(); + method public void reset(); + method public android.view.inputmethod.CursorAnchorInfo.Builder setComposingText(int, java.lang.CharSequence); + method public android.view.inputmethod.CursorAnchorInfo.Builder setInsertionMarkerLocation(float, float, float, float, int); + method public android.view.inputmethod.CursorAnchorInfo.Builder setMatrix(android.graphics.Matrix); + method public android.view.inputmethod.CursorAnchorInfo.Builder setSelectionRange(int, int); + } + + public class EditorInfo implements android.text.InputType android.os.Parcelable { + ctor public EditorInfo(); + method public int describeContents(); + method public void dump(android.util.Printer, java.lang.String); + method public final void makeCompatible(int); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int IME_ACTION_DONE = 6; // 0x6 + field public static final int IME_ACTION_GO = 2; // 0x2 + field public static final int IME_ACTION_NEXT = 5; // 0x5 + field public static final int IME_ACTION_NONE = 1; // 0x1 + field public static final int IME_ACTION_PREVIOUS = 7; // 0x7 + field public static final int IME_ACTION_SEARCH = 3; // 0x3 + field public static final int IME_ACTION_SEND = 4; // 0x4 + field public static final int IME_ACTION_UNSPECIFIED = 0; // 0x0 + field public static final int IME_FLAG_FORCE_ASCII = -2147483648; // 0x80000000 + field public static final int IME_FLAG_NAVIGATE_NEXT = 134217728; // 0x8000000 + field public static final int IME_FLAG_NAVIGATE_PREVIOUS = 67108864; // 0x4000000 + field public static final int IME_FLAG_NO_ACCESSORY_ACTION = 536870912; // 0x20000000 + field public static final int IME_FLAG_NO_ENTER_ACTION = 1073741824; // 0x40000000 + field public static final int IME_FLAG_NO_EXTRACT_UI = 268435456; // 0x10000000 + field public static final int IME_FLAG_NO_FULLSCREEN = 33554432; // 0x2000000 + field public static final int IME_MASK_ACTION = 255; // 0xff + field public static final int IME_NULL = 0; // 0x0 + field public int actionId; + field public java.lang.CharSequence actionLabel; + field public android.os.Bundle extras; + field public int fieldId; + field public java.lang.String fieldName; + field public java.lang.CharSequence hintText; + field public int imeOptions; + field public int initialCapsMode; + field public int initialSelEnd; + field public int initialSelStart; + field public int inputType; + field public java.lang.CharSequence label; + field public java.lang.String packageName; + field public java.lang.String privateImeOptions; + } + + public class ExtractedText implements android.os.Parcelable { + ctor public ExtractedText(); + method public int describeContents(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int FLAG_SELECTING = 2; // 0x2 + field public static final int FLAG_SINGLE_LINE = 1; // 0x1 + field public int flags; + field public int partialEndOffset; + field public int partialStartOffset; + field public int selectionEnd; + field public int selectionStart; + field public int startOffset; + field public java.lang.CharSequence text; + } + + public class ExtractedTextRequest implements android.os.Parcelable { + ctor public ExtractedTextRequest(); + method public int describeContents(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public int flags; + field public int hintMaxChars; + field public int hintMaxLines; + field public int token; + } + + public final class InputBinding implements android.os.Parcelable { + ctor public InputBinding(android.view.inputmethod.InputConnection, android.os.IBinder, int, int); + ctor public InputBinding(android.view.inputmethod.InputConnection, android.view.inputmethod.InputBinding); + method public int describeContents(); + method public android.view.inputmethod.InputConnection getConnection(); + method public android.os.IBinder getConnectionToken(); + method public int getPid(); + method public int getUid(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public abstract interface InputConnection { + method public abstract boolean beginBatchEdit(); + method public abstract boolean clearMetaKeyStates(int); + method public abstract boolean commitCompletion(android.view.inputmethod.CompletionInfo); + method public abstract boolean commitCorrection(android.view.inputmethod.CorrectionInfo); + method public abstract boolean commitText(java.lang.CharSequence, int); + method public abstract boolean deleteSurroundingText(int, int); + method public abstract boolean endBatchEdit(); + method public abstract boolean finishComposingText(); + method public abstract int getCursorCapsMode(int); + method public abstract android.view.inputmethod.ExtractedText getExtractedText(android.view.inputmethod.ExtractedTextRequest, int); + method public abstract java.lang.CharSequence getSelectedText(int); + method public abstract java.lang.CharSequence getTextAfterCursor(int, int); + method public abstract java.lang.CharSequence getTextBeforeCursor(int, int); + method public abstract boolean performContextMenuAction(int); + method public abstract boolean performEditorAction(int); + method public abstract boolean performPrivateCommand(java.lang.String, android.os.Bundle); + method public abstract boolean reportFullscreenMode(boolean); + method public abstract boolean requestCursorUpdates(int); + method public abstract boolean sendKeyEvent(android.view.KeyEvent); + method public abstract boolean setComposingRegion(int, int); + method public abstract boolean setComposingText(java.lang.CharSequence, int); + method public abstract boolean setSelection(int, int); + field public static final int CURSOR_UPDATE_IMMEDIATE = 1; // 0x1 + field public static final int CURSOR_UPDATE_MONITOR = 2; // 0x2 + field public static final int GET_EXTRACTED_TEXT_MONITOR = 1; // 0x1 + field public static final int GET_TEXT_WITH_STYLES = 1; // 0x1 + } + + public class InputConnectionWrapper implements android.view.inputmethod.InputConnection { + ctor public InputConnectionWrapper(android.view.inputmethod.InputConnection, boolean); + method public boolean beginBatchEdit(); + method public boolean clearMetaKeyStates(int); + method public boolean commitCompletion(android.view.inputmethod.CompletionInfo); + method public boolean commitCorrection(android.view.inputmethod.CorrectionInfo); + method public boolean commitText(java.lang.CharSequence, int); + method public boolean deleteSurroundingText(int, int); + method public boolean endBatchEdit(); + method public boolean finishComposingText(); + method public int getCursorCapsMode(int); + method public android.view.inputmethod.ExtractedText getExtractedText(android.view.inputmethod.ExtractedTextRequest, int); + method public java.lang.CharSequence getSelectedText(int); + method public java.lang.CharSequence getTextAfterCursor(int, int); + method public java.lang.CharSequence getTextBeforeCursor(int, int); + method public boolean performContextMenuAction(int); + method public boolean performEditorAction(int); + method public boolean performPrivateCommand(java.lang.String, android.os.Bundle); + method public boolean reportFullscreenMode(boolean); + method public boolean requestCursorUpdates(int); + method public boolean sendKeyEvent(android.view.KeyEvent); + method public boolean setComposingRegion(int, int); + method public boolean setComposingText(java.lang.CharSequence, int); + method public boolean setSelection(int, int); + method public void setTarget(android.view.inputmethod.InputConnection); + } + + public abstract interface InputMethod { + method public abstract void attachToken(android.os.IBinder); + method public abstract void bindInput(android.view.inputmethod.InputBinding); + method public abstract void changeInputMethodSubtype(android.view.inputmethod.InputMethodSubtype); + method public abstract void createSession(android.view.inputmethod.InputMethod.SessionCallback); + method public abstract void hideSoftInput(int, android.os.ResultReceiver); + method public abstract void restartInput(android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo); + method public abstract void revokeSession(android.view.inputmethod.InputMethodSession); + method public abstract void setSessionEnabled(android.view.inputmethod.InputMethodSession, boolean); + method public abstract void showSoftInput(int, android.os.ResultReceiver); + method public abstract void startInput(android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo); + method public abstract void unbindInput(); + field public static final java.lang.String SERVICE_INTERFACE = "android.view.InputMethod"; + field public static final java.lang.String SERVICE_META_DATA = "android.view.im"; + field public static final int SHOW_EXPLICIT = 1; // 0x1 + field public static final int SHOW_FORCED = 2; // 0x2 + } + + public static abstract interface InputMethod.SessionCallback { + method public abstract void sessionCreated(android.view.inputmethod.InputMethodSession); + } + + public final class InputMethodInfo implements android.os.Parcelable { + ctor public InputMethodInfo(android.content.Context, android.content.pm.ResolveInfo) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException; + ctor public InputMethodInfo(java.lang.String, java.lang.String, java.lang.CharSequence, java.lang.String); + method public int describeContents(); + method public void dump(android.util.Printer, java.lang.String); + method public android.content.ComponentName getComponent(); + method public java.lang.String getId(); + method public int getIsDefaultResourceId(); + method public java.lang.String getPackageName(); + method public android.content.pm.ServiceInfo getServiceInfo(); + method public java.lang.String getServiceName(); + method public java.lang.String getSettingsActivity(); + method public android.view.inputmethod.InputMethodSubtype getSubtypeAt(int); + method public int getSubtypeCount(); + method public android.graphics.drawable.Drawable loadIcon(android.content.pm.PackageManager); + method public java.lang.CharSequence loadLabel(android.content.pm.PackageManager); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public final class InputMethodManager { + method public void displayCompletions(android.view.View, android.view.inputmethod.CompletionInfo[]); + method public android.view.inputmethod.InputMethodSubtype getCurrentInputMethodSubtype(); + method public java.util.List getEnabledInputMethodList(); + method public java.util.List getEnabledInputMethodSubtypeList(android.view.inputmethod.InputMethodInfo, boolean); + method public java.util.List getInputMethodList(); + method public android.view.inputmethod.InputMethodSubtype getLastInputMethodSubtype(); + method public java.util.Map> getShortcutInputMethodsAndSubtypes(); + method public void hideSoftInputFromInputMethod(android.os.IBinder, int); + method public boolean hideSoftInputFromWindow(android.os.IBinder, int); + method public boolean hideSoftInputFromWindow(android.os.IBinder, int, android.os.ResultReceiver); + method public void hideStatusIcon(android.os.IBinder); + method public boolean isAcceptingText(); + method public boolean isActive(android.view.View); + method public boolean isActive(); + method public boolean isFullscreenMode(); + method public deprecated boolean isWatchingCursor(android.view.View); + method public void restartInput(android.view.View); + method public void sendAppPrivateCommand(android.view.View, java.lang.String, android.os.Bundle); + method public void setAdditionalInputMethodSubtypes(java.lang.String, android.view.inputmethod.InputMethodSubtype[]); + method public boolean setCurrentInputMethodSubtype(android.view.inputmethod.InputMethodSubtype); + method public void setInputMethod(android.os.IBinder, java.lang.String); + method public void setInputMethodAndSubtype(android.os.IBinder, java.lang.String, android.view.inputmethod.InputMethodSubtype); + method public boolean shouldOfferSwitchingToNextInputMethod(android.os.IBinder); + method public void showInputMethodAndSubtypeEnabler(java.lang.String); + method public void showInputMethodPicker(); + method public boolean showSoftInput(android.view.View, int); + method public boolean showSoftInput(android.view.View, int, android.os.ResultReceiver); + method public void showSoftInputFromInputMethod(android.os.IBinder, int); + method public void showStatusIcon(android.os.IBinder, java.lang.String, int); + method public boolean switchToLastInputMethod(android.os.IBinder); + method public boolean switchToNextInputMethod(android.os.IBinder, boolean); + method public void toggleSoftInput(int, int); + method public void toggleSoftInputFromWindow(android.os.IBinder, int, int); + method public deprecated void updateCursor(android.view.View, int, int, int, int); + method public void updateCursorAnchorInfo(android.view.View, android.view.inputmethod.CursorAnchorInfo); + method public void updateExtractedText(android.view.View, int, android.view.inputmethod.ExtractedText); + method public void updateSelection(android.view.View, int, int, int, int); + method public void viewClicked(android.view.View); + field public static final int HIDE_IMPLICIT_ONLY = 1; // 0x1 + field public static final int HIDE_NOT_ALWAYS = 2; // 0x2 + field public static final int RESULT_HIDDEN = 3; // 0x3 + field public static final int RESULT_SHOWN = 2; // 0x2 + field public static final int RESULT_UNCHANGED_HIDDEN = 1; // 0x1 + field public static final int RESULT_UNCHANGED_SHOWN = 0; // 0x0 + field public static final int SHOW_FORCED = 2; // 0x2 + field public static final int SHOW_IMPLICIT = 1; // 0x1 + } + + public abstract interface InputMethodSession { + method public abstract void appPrivateCommand(java.lang.String, android.os.Bundle); + method public abstract void dispatchGenericMotionEvent(int, android.view.MotionEvent, android.view.inputmethod.InputMethodSession.EventCallback); + method public abstract void dispatchKeyEvent(int, android.view.KeyEvent, android.view.inputmethod.InputMethodSession.EventCallback); + method public abstract void dispatchTrackballEvent(int, android.view.MotionEvent, android.view.inputmethod.InputMethodSession.EventCallback); + method public abstract void displayCompletions(android.view.inputmethod.CompletionInfo[]); + method public abstract void finishInput(); + method public abstract void toggleSoftInput(int, int); + method public abstract void updateCursor(android.graphics.Rect); + method public abstract void updateCursorAnchorInfo(android.view.inputmethod.CursorAnchorInfo); + method public abstract void updateExtractedText(int, android.view.inputmethod.ExtractedText); + method public abstract void updateSelection(int, int, int, int, int, int); + method public abstract void viewClicked(boolean); + } + + public static abstract interface InputMethodSession.EventCallback { + method public abstract void finishedEvent(int, boolean); + } + + public final class InputMethodSubtype implements android.os.Parcelable { + ctor public deprecated InputMethodSubtype(int, int, java.lang.String, java.lang.String, java.lang.String, boolean, boolean); + ctor public deprecated InputMethodSubtype(int, int, java.lang.String, java.lang.String, java.lang.String, boolean, boolean, int); + method public boolean containsExtraValueKey(java.lang.String); + method public int describeContents(); + method public java.lang.CharSequence getDisplayName(android.content.Context, java.lang.String, android.content.pm.ApplicationInfo); + method public java.lang.String getExtraValue(); + method public java.lang.String getExtraValueOf(java.lang.String); + method public int getIconResId(); + method public java.lang.String getLocale(); + method public java.lang.String getMode(); + method public int getNameResId(); + method public boolean isAsciiCapable(); + method public boolean isAuxiliary(); + method public boolean overridesImplicitlyEnabledSubtype(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public static class InputMethodSubtype.InputMethodSubtypeBuilder { + ctor public InputMethodSubtype.InputMethodSubtypeBuilder(); + method public android.view.inputmethod.InputMethodSubtype build(); + method public android.view.inputmethod.InputMethodSubtype.InputMethodSubtypeBuilder setIsAsciiCapable(boolean); + method public android.view.inputmethod.InputMethodSubtype.InputMethodSubtypeBuilder setIsAuxiliary(boolean); + method public android.view.inputmethod.InputMethodSubtype.InputMethodSubtypeBuilder setOverridesImplicitlyEnabledSubtype(boolean); + method public android.view.inputmethod.InputMethodSubtype.InputMethodSubtypeBuilder setSubtypeExtraValue(java.lang.String); + method public android.view.inputmethod.InputMethodSubtype.InputMethodSubtypeBuilder setSubtypeIconResId(int); + method public android.view.inputmethod.InputMethodSubtype.InputMethodSubtypeBuilder setSubtypeId(int); + method public android.view.inputmethod.InputMethodSubtype.InputMethodSubtypeBuilder setSubtypeLocale(java.lang.String); + method public android.view.inputmethod.InputMethodSubtype.InputMethodSubtypeBuilder setSubtypeMode(java.lang.String); + method public android.view.inputmethod.InputMethodSubtype.InputMethodSubtypeBuilder setSubtypeNameResId(int); + } + +} + +package android.view.textservice { + + public final class SentenceSuggestionsInfo implements android.os.Parcelable { + ctor public SentenceSuggestionsInfo(android.view.textservice.SuggestionsInfo[], int[], int[]); + ctor public SentenceSuggestionsInfo(android.os.Parcel); + method public int describeContents(); + method public int getLengthAt(int); + method public int getOffsetAt(int); + method public int getSuggestionsCount(); + method public android.view.textservice.SuggestionsInfo getSuggestionsInfoAt(int); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public final class SpellCheckerInfo implements android.os.Parcelable { + method public int describeContents(); + method public android.content.ComponentName getComponent(); + method public java.lang.String getId(); + method public java.lang.String getPackageName(); + method public android.content.pm.ServiceInfo getServiceInfo(); + method public java.lang.String getSettingsActivity(); + method public android.view.textservice.SpellCheckerSubtype getSubtypeAt(int); + method public int getSubtypeCount(); + method public android.graphics.drawable.Drawable loadIcon(android.content.pm.PackageManager); + method public java.lang.CharSequence loadLabel(android.content.pm.PackageManager); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public class SpellCheckerSession { + method public void cancel(); + method public void close(); + method public void getSentenceSuggestions(android.view.textservice.TextInfo[], int); + method public android.view.textservice.SpellCheckerInfo getSpellChecker(); + method public deprecated void getSuggestions(android.view.textservice.TextInfo, int); + method public deprecated void getSuggestions(android.view.textservice.TextInfo[], int, boolean); + method public boolean isSessionDisconnected(); + field public static final java.lang.String SERVICE_META_DATA = "android.view.textservice.scs"; + } + + public static abstract interface SpellCheckerSession.SpellCheckerSessionListener { + method public abstract void onGetSentenceSuggestions(android.view.textservice.SentenceSuggestionsInfo[]); + method public abstract void onGetSuggestions(android.view.textservice.SuggestionsInfo[]); + } + + public final class SpellCheckerSubtype implements android.os.Parcelable { + ctor public SpellCheckerSubtype(int, java.lang.String, java.lang.String); + method public boolean containsExtraValueKey(java.lang.String); + method public int describeContents(); + method public java.lang.CharSequence getDisplayName(android.content.Context, java.lang.String, android.content.pm.ApplicationInfo); + method public java.lang.String getExtraValue(); + method public java.lang.String getExtraValueOf(java.lang.String); + method public java.lang.String getLocale(); + method public int getNameResId(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public final class SuggestionsInfo implements android.os.Parcelable { + ctor public SuggestionsInfo(int, java.lang.String[]); + ctor public SuggestionsInfo(int, java.lang.String[], int, int); + ctor public SuggestionsInfo(android.os.Parcel); + method public int describeContents(); + method public int getCookie(); + method public int getSequence(); + method public java.lang.String getSuggestionAt(int); + method public int getSuggestionsAttributes(); + method public int getSuggestionsCount(); + method public void setCookieAndSequence(int, int); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int RESULT_ATTR_HAS_RECOMMENDED_SUGGESTIONS = 4; // 0x4 + field public static final int RESULT_ATTR_IN_THE_DICTIONARY = 1; // 0x1 + field public static final int RESULT_ATTR_LOOKS_LIKE_TYPO = 2; // 0x2 + } + + public final class TextInfo implements android.os.Parcelable { + ctor public TextInfo(java.lang.String); + ctor public TextInfo(java.lang.String, int, int); + ctor public TextInfo(java.lang.CharSequence, int, int, int, int); + ctor public TextInfo(android.os.Parcel); + method public int describeContents(); + method public java.lang.CharSequence getCharSequence(); + method public int getCookie(); + method public int getSequence(); + method public java.lang.String getText(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public final class TextServicesManager { + method public android.view.textservice.SpellCheckerSession newSpellCheckerSession(android.os.Bundle, java.util.Locale, android.view.textservice.SpellCheckerSession.SpellCheckerSessionListener, boolean); + } + +} + +package android.webkit { + + public abstract class ClientCertRequest { + ctor public ClientCertRequest(); + method public abstract void cancel(); + method public abstract java.lang.String getHost(); + method public abstract java.lang.String[] getKeyTypes(); + method public abstract int getPort(); + method public abstract java.security.Principal[] getPrincipals(); + method public abstract void ignore(); + method public abstract void proceed(java.security.PrivateKey, java.security.cert.X509Certificate[]); + } + + public class ConsoleMessage { + ctor public ConsoleMessage(java.lang.String, java.lang.String, int, android.webkit.ConsoleMessage.MessageLevel); + method public int lineNumber(); + method public java.lang.String message(); + method public android.webkit.ConsoleMessage.MessageLevel messageLevel(); + method public java.lang.String sourceId(); + } + + public static final class ConsoleMessage.MessageLevel extends java.lang.Enum { + method public static android.webkit.ConsoleMessage.MessageLevel valueOf(java.lang.String); + method public static final android.webkit.ConsoleMessage.MessageLevel[] values(); + enum_constant public static final android.webkit.ConsoleMessage.MessageLevel DEBUG; + enum_constant public static final android.webkit.ConsoleMessage.MessageLevel ERROR; + enum_constant public static final android.webkit.ConsoleMessage.MessageLevel LOG; + enum_constant public static final android.webkit.ConsoleMessage.MessageLevel TIP; + enum_constant public static final android.webkit.ConsoleMessage.MessageLevel WARNING; + } + + public abstract class CookieManager { + ctor public CookieManager(); + method public abstract boolean acceptCookie(); + method public abstract boolean acceptThirdPartyCookies(android.webkit.WebView); + method public static boolean allowFileSchemeCookies(); + method protected abstract boolean allowFileSchemeCookiesImpl(); + method public abstract void flush(); + method public abstract java.lang.String getCookie(java.lang.String); + method public abstract java.lang.String getCookie(java.lang.String, boolean); + method public synchronized java.lang.String getCookie(android.net.WebAddress); + method public static synchronized android.webkit.CookieManager getInstance(); + method public abstract boolean hasCookies(); + method public abstract boolean hasCookies(boolean); + method public abstract deprecated void removeAllCookie(); + method public abstract void removeAllCookies(android.webkit.ValueCallback); + method public abstract deprecated void removeExpiredCookie(); + method public abstract deprecated void removeSessionCookie(); + method public abstract void removeSessionCookies(android.webkit.ValueCallback); + method public abstract void setAcceptCookie(boolean); + method public static void setAcceptFileSchemeCookies(boolean); + method protected abstract void setAcceptFileSchemeCookiesImpl(boolean); + method public abstract void setAcceptThirdPartyCookies(android.webkit.WebView, boolean); + method public abstract void setCookie(java.lang.String, java.lang.String); + method public abstract void setCookie(java.lang.String, java.lang.String, android.webkit.ValueCallback); + } + + public final deprecated class CookieSyncManager extends android.webkit.WebSyncManager { + method public static synchronized android.webkit.CookieSyncManager createInstance(android.content.Context); + method public static synchronized android.webkit.CookieSyncManager getInstance(); + method protected deprecated void syncFromRamToFlash(); + field protected static final java.lang.String LOGTAG = "websync"; + field protected android.webkit.WebViewDatabase mDataBase; + field protected android.os.Handler mHandler; + } + + public class DateSorter { + ctor public DateSorter(android.content.Context); + method public long getBoundary(int); + method public int getIndex(long); + method public java.lang.String getLabel(int); + field public static final int DAY_COUNT = 5; // 0x5 + } + + public abstract interface DownloadListener { + method public abstract void onDownloadStart(java.lang.String, java.lang.String, java.lang.String, java.lang.String, long); + } + + public class FindActionModeCallback implements android.view.ActionMode.Callback android.text.TextWatcher android.view.View.OnClickListener android.webkit.WebView.FindListener { + ctor public FindActionModeCallback(android.content.Context); + method public void afterTextChanged(android.text.Editable); + method public void beforeTextChanged(java.lang.CharSequence, int, int, int); + method public void findAll(); + method public void finish(); + method public int getActionModeGlobalBottom(); + method public boolean onActionItemClicked(android.view.ActionMode, android.view.MenuItem); + method public void onClick(android.view.View); + method public boolean onCreateActionMode(android.view.ActionMode, android.view.Menu); + method public void onDestroyActionMode(android.view.ActionMode); + method public void onFindResultReceived(int, int, boolean); + method public boolean onPrepareActionMode(android.view.ActionMode, android.view.Menu); + method public void onTextChanged(java.lang.CharSequence, int, int, int); + method public void setText(java.lang.String); + method public void setWebView(android.webkit.WebView); + method public void showSoftInput(); + method public void updateMatchCount(int, int, boolean); + } + + public static class FindActionModeCallback.NoAction implements android.view.ActionMode.Callback { + ctor public FindActionModeCallback.NoAction(); + method public boolean onActionItemClicked(android.view.ActionMode, android.view.MenuItem); + method public boolean onCreateActionMode(android.view.ActionMode, android.view.Menu); + method public void onDestroyActionMode(android.view.ActionMode); + method public boolean onPrepareActionMode(android.view.ActionMode, android.view.Menu); + } + + public class GeolocationPermissions { + ctor public GeolocationPermissions(); + method public void allow(java.lang.String); + method public void clear(java.lang.String); + method public void clearAll(); + method public void getAllowed(java.lang.String, android.webkit.ValueCallback); + method public static android.webkit.GeolocationPermissions getInstance(); + method public void getOrigins(android.webkit.ValueCallback>); + } + + public static abstract interface GeolocationPermissions.Callback { + method public abstract void invoke(java.lang.String, boolean, boolean); + } + + public class HttpAuthHandler extends android.os.Handler { + ctor public HttpAuthHandler(); + method public void cancel(); + method public void proceed(java.lang.String, java.lang.String); + method public boolean useHttpAuthUsernamePassword(); + } + + public abstract class JavascriptInterface implements java.lang.annotation.Annotation { + } + + public class JsDialogHelper { + ctor public JsDialogHelper(android.webkit.JsPromptResult, int, java.lang.String, java.lang.String, java.lang.String); + ctor public JsDialogHelper(android.webkit.JsPromptResult, android.os.Message); + method public boolean invokeCallback(android.webkit.WebChromeClient, android.webkit.WebView); + method public void showDialog(android.content.Context); + field public static final int ALERT = 1; // 0x1 + field public static final int CONFIRM = 2; // 0x2 + field public static final int PROMPT = 3; // 0x3 + field public static final int UNLOAD = 4; // 0x4 + } + + public class JsPromptResult extends android.webkit.JsResult { + ctor public JsPromptResult(android.webkit.JsResult.ResultReceiver); + method public void confirm(java.lang.String); + method public java.lang.String getStringResult(); + } + + public class JsResult { + ctor public JsResult(android.webkit.JsResult.ResultReceiver); + method public final void cancel(); + method public final void confirm(); + method public final boolean getResult(); + } + + public static abstract interface JsResult.ResultReceiver { + method public abstract void onJsResultComplete(android.webkit.JsResult); + } + + public class MimeTypeMap { + method public java.lang.String getExtensionFromMimeType(java.lang.String); + method public static java.lang.String getFileExtensionFromUrl(java.lang.String); + method public java.lang.String getMimeTypeFromExtension(java.lang.String); + method public static android.webkit.MimeTypeMap getSingleton(); + method public boolean hasExtension(java.lang.String); + method public boolean hasMimeType(java.lang.String); + } + + public abstract class PermissionRequest { + ctor public PermissionRequest(); + method public abstract void deny(); + method public abstract android.net.Uri getOrigin(); + method public abstract java.lang.String[] getResources(); + method public abstract void grant(java.lang.String[]); + field public static final java.lang.String RESOURCE_AUDIO_CAPTURE = "android.webkit.resource.AUDIO_CAPTURE"; + field public static final java.lang.String RESOURCE_PROTECTED_MEDIA_ID = "android.webkit.resource.PROTECTED_MEDIA_ID"; + field public static final java.lang.String RESOURCE_VIDEO_CAPTURE = "android.webkit.resource.VIDEO_CAPTURE"; + } + + public abstract interface PluginStub { + method public abstract android.view.View getEmbeddedView(int, android.content.Context); + method public abstract android.view.View getFullScreenView(int, android.content.Context); + } + + public class SslErrorHandler extends android.os.Handler { + ctor public SslErrorHandler(); + method public void cancel(); + method public void proceed(); + } + + public final class URLUtil { + ctor public URLUtil(); + method public static java.lang.String composeSearchUrl(java.lang.String, java.lang.String, java.lang.String); + method public static byte[] decode(byte[]) throws java.lang.IllegalArgumentException; + method public static final java.lang.String guessFileName(java.lang.String, java.lang.String, java.lang.String); + method public static java.lang.String guessUrl(java.lang.String); + method public static boolean isAboutUrl(java.lang.String); + method public static boolean isAssetUrl(java.lang.String); + method public static boolean isContentUrl(java.lang.String); + method public static deprecated boolean isCookielessProxyUrl(java.lang.String); + method public static boolean isDataUrl(java.lang.String); + method public static boolean isFileUrl(java.lang.String); + method public static boolean isHttpUrl(java.lang.String); + method public static boolean isHttpsUrl(java.lang.String); + method public static boolean isJavaScriptUrl(java.lang.String); + method public static boolean isNetworkUrl(java.lang.String); + method public static boolean isValidUrl(java.lang.String); + method public static java.lang.String stripAnchor(java.lang.String); + } + + public abstract interface ValueCallback { + method public abstract void onReceiveValue(T); + } + + public abstract class WebBackForwardList implements java.lang.Cloneable java.io.Serializable { + ctor public WebBackForwardList(); + method protected abstract android.webkit.WebBackForwardList clone(); + method public abstract int getCurrentIndex(); + method public abstract android.webkit.WebHistoryItem getCurrentItem(); + method public abstract android.webkit.WebHistoryItem getItemAtIndex(int); + method public abstract int getSize(); + } + + public class WebChromeClient { + ctor public WebChromeClient(); + method public android.graphics.Bitmap getDefaultVideoPoster(); + method public android.view.View getVideoLoadingProgressView(); + method public void getVisitedHistory(android.webkit.ValueCallback); + method public void onCloseWindow(android.webkit.WebView); + method public deprecated void onConsoleMessage(java.lang.String, int, java.lang.String); + method public boolean onConsoleMessage(android.webkit.ConsoleMessage); + method public boolean onCreateWindow(android.webkit.WebView, boolean, boolean, android.os.Message); + method public deprecated void onExceededDatabaseQuota(java.lang.String, java.lang.String, long, long, long, android.webkit.WebStorage.QuotaUpdater); + method public void onGeolocationPermissionsHidePrompt(); + method public void onGeolocationPermissionsShowPrompt(java.lang.String, android.webkit.GeolocationPermissions.Callback); + method public void onHideCustomView(); + method public boolean onJsAlert(android.webkit.WebView, java.lang.String, java.lang.String, android.webkit.JsResult); + method public boolean onJsBeforeUnload(android.webkit.WebView, java.lang.String, java.lang.String, android.webkit.JsResult); + method public boolean onJsConfirm(android.webkit.WebView, java.lang.String, java.lang.String, android.webkit.JsResult); + method public boolean onJsPrompt(android.webkit.WebView, java.lang.String, java.lang.String, java.lang.String, android.webkit.JsPromptResult); + method public deprecated boolean onJsTimeout(); + method public void onPermissionRequest(android.webkit.PermissionRequest); + method public void onPermissionRequestCanceled(android.webkit.PermissionRequest); + method public void onProgressChanged(android.webkit.WebView, int); + method public deprecated void onReachedMaxAppCacheSize(long, long, android.webkit.WebStorage.QuotaUpdater); + method public void onReceivedIcon(android.webkit.WebView, android.graphics.Bitmap); + method public void onReceivedTitle(android.webkit.WebView, java.lang.String); + method public void onReceivedTouchIconUrl(android.webkit.WebView, java.lang.String, boolean); + method public void onRequestFocus(android.webkit.WebView); + method public void onShowCustomView(android.view.View, android.webkit.WebChromeClient.CustomViewCallback); + method public deprecated void onShowCustomView(android.view.View, int, android.webkit.WebChromeClient.CustomViewCallback); + method public boolean onShowFileChooser(android.webkit.WebView, android.webkit.ValueCallback, android.webkit.WebChromeClient.FileChooserParams); + method public deprecated void openFileChooser(android.webkit.ValueCallback, java.lang.String, java.lang.String); + } + + public static abstract interface WebChromeClient.CustomViewCallback { + method public abstract void onCustomViewHidden(); + } + + public static abstract class WebChromeClient.FileChooserParams { + ctor public WebChromeClient.FileChooserParams(); + method public abstract android.content.Intent createIntent(); + method public abstract java.lang.String[] getAcceptTypes(); + method public abstract java.lang.String getFilenameHint(); + method public abstract int getMode(); + method public abstract java.lang.CharSequence getTitle(); + method public abstract boolean isCaptureEnabled(); + method public static android.net.Uri[] parseResult(int, android.content.Intent); + field public static final int MODE_OPEN = 0; // 0x0 + field public static final int MODE_OPEN_MULTIPLE = 1; // 0x1 + field public static final int MODE_SAVE = 3; // 0x3 + } + + public abstract class WebHistoryItem implements java.lang.Cloneable { + ctor public WebHistoryItem(); + method protected abstract android.webkit.WebHistoryItem clone(); + method public abstract android.graphics.Bitmap getFavicon(); + method public abstract deprecated int getId(); + method public abstract java.lang.String getOriginalUrl(); + method public abstract java.lang.String getTitle(); + method public abstract java.lang.String getUrl(); + } + + public abstract deprecated class WebIconDatabase { + ctor public WebIconDatabase(); + method public abstract void bulkRequestIconForPageUrl(android.content.ContentResolver, java.lang.String, android.webkit.WebIconDatabase.IconListener); + method public abstract void close(); + method public static android.webkit.WebIconDatabase getInstance(); + method public abstract void open(java.lang.String); + method public abstract void releaseIconForPageUrl(java.lang.String); + method public abstract void removeAllIcons(); + method public abstract void requestIconForPageUrl(java.lang.String, android.webkit.WebIconDatabase.IconListener); + method public abstract void retainIconForPageUrl(java.lang.String); + } + + public static abstract deprecated interface WebIconDatabase.IconListener { + method public abstract void onReceivedIcon(java.lang.String, android.graphics.Bitmap); + } + + public abstract interface WebResourceRequest { + method public abstract java.lang.String getMethod(); + method public abstract java.util.Map getRequestHeaders(); + method public abstract android.net.Uri getUrl(); + method public abstract boolean hasGesture(); + method public abstract boolean isForMainFrame(); + } + + public class WebResourceResponse { + ctor public WebResourceResponse(java.lang.String, java.lang.String, java.io.InputStream); + ctor public WebResourceResponse(java.lang.String, java.lang.String, int, java.lang.String, java.util.Map, java.io.InputStream); + method public java.io.InputStream getData(); + method public java.lang.String getEncoding(); + method public java.lang.String getMimeType(); + method public java.lang.String getReasonPhrase(); + method public java.util.Map getResponseHeaders(); + method public int getStatusCode(); + method public void setData(java.io.InputStream); + method public void setEncoding(java.lang.String); + method public void setMimeType(java.lang.String); + method public void setResponseHeaders(java.util.Map); + method public void setStatusCodeAndReasonPhrase(int, java.lang.String); + } + + public abstract class WebSettings { + ctor public WebSettings(); + method public abstract deprecated boolean enableSmoothTransition(); + method public abstract boolean getAcceptThirdPartyCookies(); + method public abstract boolean getAllowContentAccess(); + method public abstract boolean getAllowFileAccess(); + method public abstract boolean getAllowFileAccessFromFileURLs(); + method public abstract boolean getAllowUniversalAccessFromFileURLs(); + method public abstract boolean getBlockNetworkImage(); + method public abstract boolean getBlockNetworkLoads(); + method public abstract boolean getBuiltInZoomControls(); + method public abstract int getCacheMode(); + method public abstract java.lang.String getCursiveFontFamily(); + method public abstract boolean getDatabaseEnabled(); + method public abstract deprecated java.lang.String getDatabasePath(); + method public abstract int getDefaultFixedFontSize(); + method public abstract int getDefaultFontSize(); + method public abstract java.lang.String getDefaultTextEncodingName(); + method public static java.lang.String getDefaultUserAgent(android.content.Context); + method public abstract deprecated android.webkit.WebSettings.ZoomDensity getDefaultZoom(); + method public abstract boolean getDisplayZoomControls(); + method public abstract boolean getDomStorageEnabled(); + method public abstract java.lang.String getFantasyFontFamily(); + method public abstract java.lang.String getFixedFontFamily(); + method public abstract boolean getJavaScriptCanOpenWindowsAutomatically(); + method public abstract boolean getJavaScriptEnabled(); + method public abstract android.webkit.WebSettings.LayoutAlgorithm getLayoutAlgorithm(); + method public abstract deprecated boolean getLightTouchEnabled(); + method public abstract boolean getLoadWithOverviewMode(); + method public abstract boolean getLoadsImagesAutomatically(); + method public abstract boolean getMediaPlaybackRequiresUserGesture(); + method public abstract int getMinimumFontSize(); + method public abstract int getMinimumLogicalFontSize(); + method public abstract int getMixedContentMode(); + method public abstract deprecated boolean getNavDump(); + method public abstract deprecated android.webkit.WebSettings.PluginState getPluginState(); + method public abstract deprecated boolean getPluginsEnabled(); + method public abstract java.lang.String getSansSerifFontFamily(); + method public abstract boolean getSaveFormData(); + method public abstract deprecated boolean getSavePassword(); + method public abstract java.lang.String getSerifFontFamily(); + method public abstract java.lang.String getStandardFontFamily(); + method public deprecated synchronized android.webkit.WebSettings.TextSize getTextSize(); + method public abstract int getTextZoom(); + method public abstract deprecated boolean getUseWebViewBackgroundForOverscrollBackground(); + method public abstract boolean getUseWideViewPort(); + method public abstract deprecated int getUserAgent(); + method public abstract java.lang.String getUserAgentString(); + method public abstract boolean getVideoOverlayForEmbeddedEncryptedVideoEnabled(); + method public abstract void setAcceptThirdPartyCookies(boolean); + method public abstract void setAllowContentAccess(boolean); + method public abstract void setAllowFileAccess(boolean); + method public abstract void setAllowFileAccessFromFileURLs(boolean); + method public abstract void setAllowUniversalAccessFromFileURLs(boolean); + method public abstract void setAppCacheEnabled(boolean); + method public abstract deprecated void setAppCacheMaxSize(long); + method public abstract void setAppCachePath(java.lang.String); + method public abstract void setBlockNetworkImage(boolean); + method public abstract void setBlockNetworkLoads(boolean); + method public abstract void setBuiltInZoomControls(boolean); + method public abstract void setCacheMode(int); + method public abstract void setCursiveFontFamily(java.lang.String); + method public abstract void setDatabaseEnabled(boolean); + method public abstract deprecated void setDatabasePath(java.lang.String); + method public abstract void setDefaultFixedFontSize(int); + method public abstract void setDefaultFontSize(int); + method public abstract void setDefaultTextEncodingName(java.lang.String); + method public abstract deprecated void setDefaultZoom(android.webkit.WebSettings.ZoomDensity); + method public abstract void setDisplayZoomControls(boolean); + method public abstract void setDomStorageEnabled(boolean); + method public abstract deprecated void setEnableSmoothTransition(boolean); + method public abstract void setFantasyFontFamily(java.lang.String); + method public abstract void setFixedFontFamily(java.lang.String); + method public abstract void setGeolocationDatabasePath(java.lang.String); + method public abstract void setGeolocationEnabled(boolean); + method public abstract void setJavaScriptCanOpenWindowsAutomatically(boolean); + method public abstract void setJavaScriptEnabled(boolean); + method public abstract void setLayoutAlgorithm(android.webkit.WebSettings.LayoutAlgorithm); + method public abstract deprecated void setLightTouchEnabled(boolean); + method public abstract void setLoadWithOverviewMode(boolean); + method public abstract void setLoadsImagesAutomatically(boolean); + method public abstract void setMediaPlaybackRequiresUserGesture(boolean); + method public abstract void setMinimumFontSize(int); + method public abstract void setMinimumLogicalFontSize(int); + method public abstract void setMixedContentMode(int); + method public abstract deprecated void setNavDump(boolean); + method public abstract void setNeedInitialFocus(boolean); + method public abstract deprecated void setPluginState(android.webkit.WebSettings.PluginState); + method public abstract deprecated void setPluginsEnabled(boolean); + method public abstract deprecated void setRenderPriority(android.webkit.WebSettings.RenderPriority); + method public abstract void setSansSerifFontFamily(java.lang.String); + method public abstract void setSaveFormData(boolean); + method public abstract deprecated void setSavePassword(boolean); + method public abstract void setSerifFontFamily(java.lang.String); + method public abstract void setStandardFontFamily(java.lang.String); + method public abstract void setSupportMultipleWindows(boolean); + method public abstract void setSupportZoom(boolean); + method public deprecated synchronized void setTextSize(android.webkit.WebSettings.TextSize); + method public abstract void setTextZoom(int); + method public abstract deprecated void setUseWebViewBackgroundForOverscrollBackground(boolean); + method public abstract void setUseWideViewPort(boolean); + method public abstract deprecated void setUserAgent(int); + method public abstract void setUserAgentString(java.lang.String); + method public abstract void setVideoOverlayForEmbeddedEncryptedVideoEnabled(boolean); + method public abstract boolean supportMultipleWindows(); + method public abstract boolean supportZoom(); + field public static final int LOAD_CACHE_ELSE_NETWORK = 1; // 0x1 + field public static final int LOAD_CACHE_ONLY = 3; // 0x3 + field public static final int LOAD_DEFAULT = -1; // 0xffffffff + field public static final deprecated int LOAD_NORMAL = 0; // 0x0 + field public static final int LOAD_NO_CACHE = 2; // 0x2 + field public static final int MIXED_CONTENT_ALWAYS_ALLOW = 0; // 0x0 + field public static final int MIXED_CONTENT_COMPATIBILITY_MODE = 2; // 0x2 + field public static final int MIXED_CONTENT_NEVER_ALLOW = 1; // 0x1 + } + + public static final class WebSettings.LayoutAlgorithm extends java.lang.Enum { + method public static android.webkit.WebSettings.LayoutAlgorithm valueOf(java.lang.String); + method public static final android.webkit.WebSettings.LayoutAlgorithm[] values(); + enum_constant public static final deprecated android.webkit.WebSettings.LayoutAlgorithm NARROW_COLUMNS; + enum_constant public static final android.webkit.WebSettings.LayoutAlgorithm NORMAL; + enum_constant public static final deprecated android.webkit.WebSettings.LayoutAlgorithm SINGLE_COLUMN; + enum_constant public static final android.webkit.WebSettings.LayoutAlgorithm TEXT_AUTOSIZING; + } + + public static final class WebSettings.PluginState extends java.lang.Enum { + method public static android.webkit.WebSettings.PluginState valueOf(java.lang.String); + method public static final android.webkit.WebSettings.PluginState[] values(); + enum_constant public static final android.webkit.WebSettings.PluginState OFF; + enum_constant public static final android.webkit.WebSettings.PluginState ON; + enum_constant public static final android.webkit.WebSettings.PluginState ON_DEMAND; + } + + public static final class WebSettings.RenderPriority extends java.lang.Enum { + method public static android.webkit.WebSettings.RenderPriority valueOf(java.lang.String); + method public static final android.webkit.WebSettings.RenderPriority[] values(); + enum_constant public static final android.webkit.WebSettings.RenderPriority HIGH; + enum_constant public static final android.webkit.WebSettings.RenderPriority LOW; + enum_constant public static final android.webkit.WebSettings.RenderPriority NORMAL; + } + + public static final deprecated class WebSettings.TextSize extends java.lang.Enum { + method public static android.webkit.WebSettings.TextSize valueOf(java.lang.String); + method public static final android.webkit.WebSettings.TextSize[] values(); + enum_constant public static final android.webkit.WebSettings.TextSize LARGER; + enum_constant public static final android.webkit.WebSettings.TextSize LARGEST; + enum_constant public static final android.webkit.WebSettings.TextSize NORMAL; + enum_constant public static final android.webkit.WebSettings.TextSize SMALLER; + enum_constant public static final android.webkit.WebSettings.TextSize SMALLEST; + } + + public static final class WebSettings.ZoomDensity extends java.lang.Enum { + method public static android.webkit.WebSettings.ZoomDensity valueOf(java.lang.String); + method public static final android.webkit.WebSettings.ZoomDensity[] values(); + enum_constant public static final android.webkit.WebSettings.ZoomDensity CLOSE; + enum_constant public static final android.webkit.WebSettings.ZoomDensity FAR; + enum_constant public static final android.webkit.WebSettings.ZoomDensity MEDIUM; + } + + public class WebStorage { + ctor public WebStorage(); + method public void deleteAllData(); + method public void deleteOrigin(java.lang.String); + method public static android.webkit.WebStorage getInstance(); + method public void getOrigins(android.webkit.ValueCallback); + method public void getQuotaForOrigin(java.lang.String, android.webkit.ValueCallback); + method public void getUsageForOrigin(java.lang.String, android.webkit.ValueCallback); + method public deprecated void setQuotaForOrigin(java.lang.String, long); + } + + public static class WebStorage.Origin { + ctor protected WebStorage.Origin(java.lang.String, long, long); + method public java.lang.String getOrigin(); + method public long getQuota(); + method public long getUsage(); + } + + public static abstract deprecated interface WebStorage.QuotaUpdater { + method public abstract void updateQuota(long); + } + + abstract deprecated class WebSyncManager implements java.lang.Runnable { + ctor protected WebSyncManager(android.content.Context, java.lang.String); + method protected void onSyncInit(); + method public void resetSync(); + method public void run(); + method public void startSync(); + method public void stopSync(); + method public void sync(); + field protected static final java.lang.String LOGTAG = "websync"; + field protected android.webkit.WebViewDatabase mDataBase; + field protected android.os.Handler mHandler; + } + + public class WebView extends android.widget.AbsoluteLayout implements android.view.ViewGroup.OnHierarchyChangeListener android.view.ViewTreeObserver.OnGlobalFocusChangeListener { + ctor public WebView(android.content.Context); + ctor public WebView(android.content.Context, android.util.AttributeSet); + ctor public WebView(android.content.Context, android.util.AttributeSet, int); + ctor public WebView(android.content.Context, android.util.AttributeSet, int, int); + ctor public deprecated WebView(android.content.Context, android.util.AttributeSet, int, boolean); + method public void addJavascriptInterface(java.lang.Object, java.lang.String); + method public boolean canGoBack(); + method public boolean canGoBackOrForward(int); + method public boolean canGoForward(); + method public deprecated boolean canZoomIn(); + method public deprecated boolean canZoomOut(); + method public deprecated android.graphics.Picture capturePicture(); + method public void clearCache(boolean); + method public static void clearClientCertPreferences(java.lang.Runnable); + method public void clearFormData(); + method public void clearHistory(); + method public void clearMatches(); + method public void clearSslPreferences(); + method public deprecated void clearView(); + method public android.webkit.WebBackForwardList copyBackForwardList(); + method public deprecated android.print.PrintDocumentAdapter createPrintDocumentAdapter(); + method public android.print.PrintDocumentAdapter createPrintDocumentAdapter(java.lang.String); + method public void destroy(); + method public void documentHasImages(android.os.Message); + method public static void enableSlowWholeDocumentDraw(); + method public void evaluateJavascript(java.lang.String, android.webkit.ValueCallback); + method public static java.lang.String findAddress(java.lang.String); + method public deprecated int findAll(java.lang.String); + method public void findAllAsync(java.lang.String); + method public void findNext(boolean); + method public void flingScroll(int, int); + method public deprecated void freeMemory(); + method public android.net.http.SslCertificate getCertificate(); + method public int getContentHeight(); + method public android.graphics.Bitmap getFavicon(); + method public android.webkit.WebView.HitTestResult getHitTestResult(); + method public java.lang.String[] getHttpAuthUsernamePassword(java.lang.String, java.lang.String); + method public java.lang.String getOriginalUrl(); + method public int getProgress(); + method public deprecated float getScale(); + method public android.webkit.WebSettings getSettings(); + method public java.lang.String getTitle(); + method public java.lang.String getUrl(); + method public android.webkit.WebViewProvider getWebViewProvider(); + method public void goBack(); + method public void goBackOrForward(int); + method public void goForward(); + method public void invokeZoomPicker(); + method public boolean isPrivateBrowsingEnabled(); + method public void loadData(java.lang.String, java.lang.String, java.lang.String); + method public void loadDataWithBaseURL(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String); + method public void loadUrl(java.lang.String, java.util.Map); + method public void loadUrl(java.lang.String); + method public deprecated void onChildViewAdded(android.view.View, android.view.View); + method public deprecated void onChildViewRemoved(android.view.View, android.view.View); + method public deprecated void onGlobalFocusChanged(android.view.View, android.view.View); + method public void onPause(); + method public void onResume(); + method public boolean overlayHorizontalScrollbar(); + method public boolean overlayVerticalScrollbar(); + method public boolean pageDown(boolean); + method public boolean pageUp(boolean); + method public void pauseTimers(); + method public void postUrl(java.lang.String, byte[]); + method public void reload(); + method public void removeJavascriptInterface(java.lang.String); + method public void requestFocusNodeHref(android.os.Message); + method public void requestImageRef(android.os.Message); + method public android.webkit.WebBackForwardList restoreState(android.os.Bundle); + method public void resumeTimers(); + method public deprecated void savePassword(java.lang.String, java.lang.String, java.lang.String); + method public android.webkit.WebBackForwardList saveState(android.os.Bundle); + method public void saveWebArchive(java.lang.String); + method public void saveWebArchive(java.lang.String, boolean, android.webkit.ValueCallback); + method public deprecated void setCertificate(android.net.http.SslCertificate); + method public void setDownloadListener(android.webkit.DownloadListener); + method public void setFindListener(android.webkit.WebView.FindListener); + method public void setHorizontalScrollbarOverlay(boolean); + method public void setHttpAuthUsernamePassword(java.lang.String, java.lang.String, java.lang.String, java.lang.String); + method public void setInitialScale(int); + method public deprecated void setMapTrackballToArrowKeys(boolean); + method public void setNetworkAvailable(boolean); + method public deprecated void setPictureListener(android.webkit.WebView.PictureListener); + method public void setVerticalScrollbarOverlay(boolean); + method public void setWebChromeClient(android.webkit.WebChromeClient); + method public static void setWebContentsDebuggingEnabled(boolean); + method public void setWebViewClient(android.webkit.WebViewClient); + method public deprecated boolean showFindDialog(java.lang.String, boolean); + method public void stopLoading(); + method public void zoomBy(float); + method public boolean zoomIn(); + method public boolean zoomOut(); + field public static final java.lang.String DATA_REDUCTION_PROXY_SETTING_CHANGED = "android.webkit.DATA_REDUCTION_PROXY_SETTING_CHANGED"; + field public static final java.lang.String SCHEME_GEO = "geo:0,0?q="; + field public static final java.lang.String SCHEME_MAILTO = "mailto:"; + field public static final java.lang.String SCHEME_TEL = "tel:"; + } + + public static abstract interface WebView.FindListener { + method public abstract void onFindResultReceived(int, int, boolean); + } + + public static class WebView.HitTestResult { + ctor public WebView.HitTestResult(); + method public java.lang.String getExtra(); + method public int getType(); + method public void setExtra(java.lang.String); + method public void setType(int); + field public static final deprecated int ANCHOR_TYPE = 1; // 0x1 + field public static final int EDIT_TEXT_TYPE = 9; // 0x9 + field public static final int EMAIL_TYPE = 4; // 0x4 + field public static final int GEO_TYPE = 3; // 0x3 + field public static final deprecated int IMAGE_ANCHOR_TYPE = 6; // 0x6 + field public static final int IMAGE_TYPE = 5; // 0x5 + field public static final int PHONE_TYPE = 2; // 0x2 + field public static final int SRC_ANCHOR_TYPE = 7; // 0x7 + field public static final int SRC_IMAGE_ANCHOR_TYPE = 8; // 0x8 + field public static final int UNKNOWN_TYPE = 0; // 0x0 + } + + public static abstract deprecated interface WebView.PictureListener { + method public abstract deprecated void onNewPicture(android.webkit.WebView, android.graphics.Picture); + } + + public class WebView.PrivateAccess { + ctor public WebView.PrivateAccess(); + method public void awakenScrollBars(int); + method public void awakenScrollBars(int, boolean); + method public float getHorizontalScrollFactor(); + method public int getHorizontalScrollbarHeight(); + method public float getVerticalScrollFactor(); + method public void onScrollChanged(int, int, int, int); + method public void overScrollBy(int, int, int, int, int, int, int, int, boolean); + method public void setMeasuredDimension(int, int); + method public void setScrollXRaw(int); + method public void setScrollYRaw(int); + method public void super_computeScroll(); + method public boolean super_dispatchKeyEvent(android.view.KeyEvent); + method public int super_getScrollBarStyle(); + method public void super_onDrawVerticalScrollBar(android.graphics.Canvas, android.graphics.drawable.Drawable, int, int, int, int); + method public boolean super_onGenericMotionEvent(android.view.MotionEvent); + method public boolean super_onHoverEvent(android.view.MotionEvent); + method public boolean super_performAccessibilityAction(int, android.os.Bundle); + method public boolean super_performLongClick(); + method public boolean super_requestFocus(int, android.graphics.Rect); + method public void super_scrollTo(int, int); + method public boolean super_setFrame(int, int, int, int); + method public void super_setLayoutParams(android.view.ViewGroup.LayoutParams); + } + + public class WebView.WebViewTransport { + ctor public WebView.WebViewTransport(); + method public synchronized android.webkit.WebView getWebView(); + method public synchronized void setWebView(android.webkit.WebView); + } + + public class WebViewClient { + ctor public WebViewClient(); + method public void doUpdateVisitedHistory(android.webkit.WebView, java.lang.String, boolean); + method public void onFormResubmission(android.webkit.WebView, android.os.Message, android.os.Message); + method public void onLoadResource(android.webkit.WebView, java.lang.String); + method public void onPageFinished(android.webkit.WebView, java.lang.String); + method public void onPageStarted(android.webkit.WebView, java.lang.String, android.graphics.Bitmap); + method public void onReceivedClientCertRequest(android.webkit.WebView, android.webkit.ClientCertRequest); + method public void onReceivedError(android.webkit.WebView, int, java.lang.String, java.lang.String); + method public void onReceivedHttpAuthRequest(android.webkit.WebView, android.webkit.HttpAuthHandler, java.lang.String, java.lang.String); + method public void onReceivedLoginRequest(android.webkit.WebView, java.lang.String, java.lang.String, java.lang.String); + method public void onReceivedSslError(android.webkit.WebView, android.webkit.SslErrorHandler, android.net.http.SslError); + method public void onScaleChanged(android.webkit.WebView, float, float); + method public deprecated void onTooManyRedirects(android.webkit.WebView, android.os.Message, android.os.Message); + method public void onUnhandledInputEvent(android.webkit.WebView, android.view.InputEvent); + method public deprecated void onUnhandledKeyEvent(android.webkit.WebView, android.view.KeyEvent); + method public deprecated android.webkit.WebResourceResponse shouldInterceptRequest(android.webkit.WebView, java.lang.String); + method public android.webkit.WebResourceResponse shouldInterceptRequest(android.webkit.WebView, android.webkit.WebResourceRequest); + method public boolean shouldOverrideKeyEvent(android.webkit.WebView, android.view.KeyEvent); + method public boolean shouldOverrideUrlLoading(android.webkit.WebView, java.lang.String); + field public static final int ERROR_AUTHENTICATION = -4; // 0xfffffffc + field public static final int ERROR_BAD_URL = -12; // 0xfffffff4 + field public static final int ERROR_CONNECT = -6; // 0xfffffffa + field public static final int ERROR_FAILED_SSL_HANDSHAKE = -11; // 0xfffffff5 + field public static final int ERROR_FILE = -13; // 0xfffffff3 + field public static final int ERROR_FILE_NOT_FOUND = -14; // 0xfffffff2 + field public static final int ERROR_HOST_LOOKUP = -2; // 0xfffffffe + field public static final int ERROR_IO = -7; // 0xfffffff9 + field public static final int ERROR_PROXY_AUTHENTICATION = -5; // 0xfffffffb + field public static final int ERROR_REDIRECT_LOOP = -9; // 0xfffffff7 + field public static final int ERROR_TIMEOUT = -8; // 0xfffffff8 + field public static final int ERROR_TOO_MANY_REQUESTS = -15; // 0xfffffff1 + field public static final int ERROR_UNKNOWN = -1; // 0xffffffff + field public static final int ERROR_UNSUPPORTED_AUTH_SCHEME = -3; // 0xfffffffd + field public static final int ERROR_UNSUPPORTED_SCHEME = -10; // 0xfffffff6 + } + + public abstract class WebViewDatabase { + ctor public WebViewDatabase(); + method public abstract void clearFormData(); + method public abstract void clearHttpAuthUsernamePassword(); + method public abstract deprecated void clearUsernamePassword(); + method public static android.webkit.WebViewDatabase getInstance(android.content.Context); + method public abstract boolean hasFormData(); + method public abstract boolean hasHttpAuthUsernamePassword(); + method public abstract deprecated boolean hasUsernamePassword(); + } + + public final class WebViewDelegate { + method public void addWebViewAssetPath(android.content.Context); + method public void callDrawGlFunction(android.graphics.Canvas, long); + method public boolean canInvokeDrawGlFunctor(android.view.View); + method public void detachDrawGlFunctor(android.view.View, long); + method public android.app.Application getApplication(); + method public java.lang.String getErrorString(android.content.Context, int); + method public int getPackageId(android.content.res.Resources, java.lang.String); + method public void invokeDrawGlFunctor(android.view.View, long, boolean); + method public boolean isTraceTagEnabled(); + method public void setOnTraceEnabledChangeListener(android.webkit.WebViewDelegate.OnTraceEnabledChangeListener); + } + + public static abstract interface WebViewDelegate.OnTraceEnabledChangeListener { + method public abstract void onTraceEnabledChange(boolean); + } + + public final class WebViewFactory { + ctor public WebViewFactory(); + method public static android.content.pm.PackageInfo getLoadedPackageInfo(); + method public static java.lang.String getWebViewPackageName(); + method public static void onWebViewUpdateInstalled(); + method public static void prepareWebViewInSystemServer(); + method public static void prepareWebViewInZygote(); + field public static final java.lang.String CHROMIUM_WEBVIEW_VMSIZE_SIZE_PROPERTY = "persist.sys.webview.vmsize"; + } + + public abstract interface WebViewFactoryProvider { + method public abstract android.webkit.WebViewProvider createWebView(android.webkit.WebView, android.webkit.WebView.PrivateAccess); + method public abstract android.webkit.CookieManager getCookieManager(); + method public abstract android.webkit.GeolocationPermissions getGeolocationPermissions(); + method public abstract android.webkit.WebViewFactoryProvider.Statics getStatics(); + method public abstract android.webkit.WebIconDatabase getWebIconDatabase(); + method public abstract android.webkit.WebStorage getWebStorage(); + method public abstract android.webkit.WebViewDatabase getWebViewDatabase(android.content.Context); + } + + public static abstract interface WebViewFactoryProvider.Statics { + method public abstract void clearClientCertPreferences(java.lang.Runnable); + method public abstract void enableSlowWholeDocumentDraw(); + method public abstract java.lang.String findAddress(java.lang.String); + method public abstract void freeMemoryForTests(); + method public abstract java.lang.String getDefaultUserAgent(android.content.Context); + method public abstract android.net.Uri[] parseFileChooserResult(int, android.content.Intent); + method public abstract void setWebContentsDebuggingEnabled(boolean); + } + + public class WebViewFragment extends android.app.Fragment { + ctor public WebViewFragment(); + method public android.webkit.WebView getWebView(); + } + + public abstract interface WebViewProvider { + method public abstract void addJavascriptInterface(java.lang.Object, java.lang.String); + method public abstract boolean canGoBack(); + method public abstract boolean canGoBackOrForward(int); + method public abstract boolean canGoForward(); + method public abstract boolean canZoomIn(); + method public abstract boolean canZoomOut(); + method public abstract android.graphics.Picture capturePicture(); + method public abstract void clearCache(boolean); + method public abstract void clearFormData(); + method public abstract void clearHistory(); + method public abstract void clearMatches(); + method public abstract void clearSslPreferences(); + method public abstract void clearView(); + method public abstract android.webkit.WebBackForwardList copyBackForwardList(); + method public abstract android.print.PrintDocumentAdapter createPrintDocumentAdapter(java.lang.String); + method public abstract void destroy(); + method public abstract void documentHasImages(android.os.Message); + method public abstract void dumpViewHierarchyWithProperties(java.io.BufferedWriter, int); + method public abstract void evaluateJavaScript(java.lang.String, android.webkit.ValueCallback); + method public abstract int findAll(java.lang.String); + method public abstract void findAllAsync(java.lang.String); + method public abstract android.view.View findHierarchyView(java.lang.String, int); + method public abstract void findNext(boolean); + method public abstract void flingScroll(int, int); + method public abstract void freeMemory(); + method public abstract android.net.http.SslCertificate getCertificate(); + method public abstract int getContentHeight(); + method public abstract int getContentWidth(); + method public abstract android.graphics.Bitmap getFavicon(); + method public abstract android.webkit.WebView.HitTestResult getHitTestResult(); + method public abstract java.lang.String[] getHttpAuthUsernamePassword(java.lang.String, java.lang.String); + method public abstract java.lang.String getOriginalUrl(); + method public abstract int getProgress(); + method public abstract float getScale(); + method public abstract android.webkit.WebViewProvider.ScrollDelegate getScrollDelegate(); + method public abstract android.webkit.WebSettings getSettings(); + method public abstract java.lang.String getTitle(); + method public abstract java.lang.String getTouchIconUrl(); + method public abstract java.lang.String getUrl(); + method public abstract android.webkit.WebViewProvider.ViewDelegate getViewDelegate(); + method public abstract int getVisibleTitleHeight(); + method public abstract android.view.View getZoomControls(); + method public abstract void goBack(); + method public abstract void goBackOrForward(int); + method public abstract void goForward(); + method public abstract void init(java.util.Map, boolean); + method public abstract void invokeZoomPicker(); + method public abstract boolean isPaused(); + method public abstract boolean isPrivateBrowsingEnabled(); + method public abstract void loadData(java.lang.String, java.lang.String, java.lang.String); + method public abstract void loadDataWithBaseURL(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String); + method public abstract void loadUrl(java.lang.String, java.util.Map); + method public abstract void loadUrl(java.lang.String); + method public abstract void notifyFindDialogDismissed(); + method public abstract void onPause(); + method public abstract void onResume(); + method public abstract boolean overlayHorizontalScrollbar(); + method public abstract boolean overlayVerticalScrollbar(); + method public abstract boolean pageDown(boolean); + method public abstract boolean pageUp(boolean); + method public abstract void pauseTimers(); + method public abstract void postUrl(java.lang.String, byte[]); + method public abstract void reload(); + method public abstract void removeJavascriptInterface(java.lang.String); + method public abstract void requestFocusNodeHref(android.os.Message); + method public abstract void requestImageRef(android.os.Message); + method public abstract boolean restorePicture(android.os.Bundle, java.io.File); + method public abstract android.webkit.WebBackForwardList restoreState(android.os.Bundle); + method public abstract void resumeTimers(); + method public abstract void savePassword(java.lang.String, java.lang.String, java.lang.String); + method public abstract boolean savePicture(android.os.Bundle, java.io.File); + method public abstract android.webkit.WebBackForwardList saveState(android.os.Bundle); + method public abstract void saveWebArchive(java.lang.String); + method public abstract void saveWebArchive(java.lang.String, boolean, android.webkit.ValueCallback); + method public abstract void setCertificate(android.net.http.SslCertificate); + method public abstract void setDownloadListener(android.webkit.DownloadListener); + method public abstract void setFindListener(android.webkit.WebView.FindListener); + method public abstract void setHorizontalScrollbarOverlay(boolean); + method public abstract void setHttpAuthUsernamePassword(java.lang.String, java.lang.String, java.lang.String, java.lang.String); + method public abstract void setInitialScale(int); + method public abstract void setMapTrackballToArrowKeys(boolean); + method public abstract void setNetworkAvailable(boolean); + method public abstract void setPictureListener(android.webkit.WebView.PictureListener); + method public abstract void setVerticalScrollbarOverlay(boolean); + method public abstract void setWebChromeClient(android.webkit.WebChromeClient); + method public abstract void setWebViewClient(android.webkit.WebViewClient); + method public abstract boolean showFindDialog(java.lang.String, boolean); + method public abstract void stopLoading(); + method public abstract boolean zoomBy(float); + method public abstract boolean zoomIn(); + method public abstract boolean zoomOut(); + } + + public static abstract interface WebViewProvider.ScrollDelegate { + method public abstract int computeHorizontalScrollOffset(); + method public abstract int computeHorizontalScrollRange(); + method public abstract void computeScroll(); + method public abstract int computeVerticalScrollExtent(); + method public abstract int computeVerticalScrollOffset(); + method public abstract int computeVerticalScrollRange(); + } + + public static abstract interface WebViewProvider.ViewDelegate { + method public abstract boolean dispatchKeyEvent(android.view.KeyEvent); + method public abstract android.view.accessibility.AccessibilityNodeProvider getAccessibilityNodeProvider(); + method public abstract void onAttachedToWindow(); + method public abstract void onConfigurationChanged(android.content.res.Configuration); + method public abstract android.view.inputmethod.InputConnection onCreateInputConnection(android.view.inputmethod.EditorInfo); + method public abstract void onDetachedFromWindow(); + method public abstract void onDraw(android.graphics.Canvas); + method public abstract void onDrawVerticalScrollBar(android.graphics.Canvas, android.graphics.drawable.Drawable, int, int, int, int); + method public abstract void onFinishTemporaryDetach(); + method public abstract void onFocusChanged(boolean, int, android.graphics.Rect); + method public abstract boolean onGenericMotionEvent(android.view.MotionEvent); + method public abstract boolean onHoverEvent(android.view.MotionEvent); + method public abstract void onInitializeAccessibilityEvent(android.view.accessibility.AccessibilityEvent); + method public abstract void onInitializeAccessibilityNodeInfo(android.view.accessibility.AccessibilityNodeInfo); + method public abstract boolean onKeyDown(int, android.view.KeyEvent); + method public abstract boolean onKeyMultiple(int, int, android.view.KeyEvent); + method public abstract boolean onKeyUp(int, android.view.KeyEvent); + method public abstract void onMeasure(int, int); + method public abstract void onOverScrolled(int, int, boolean, boolean); + method public abstract void onScrollChanged(int, int, int, int); + method public abstract void onSizeChanged(int, int, int, int); + method public abstract void onStartTemporaryDetach(); + method public abstract boolean onTouchEvent(android.view.MotionEvent); + method public abstract boolean onTrackballEvent(android.view.MotionEvent); + method public abstract void onVisibilityChanged(android.view.View, int); + method public abstract void onWindowFocusChanged(boolean); + method public abstract void onWindowVisibilityChanged(int); + method public abstract boolean performAccessibilityAction(int, android.os.Bundle); + method public abstract boolean performLongClick(); + method public abstract void preDispatchDraw(android.graphics.Canvas); + method public abstract boolean requestChildRectangleOnScreen(android.view.View, android.graphics.Rect, boolean); + method public abstract boolean requestFocus(int, android.graphics.Rect); + method public abstract void setBackgroundColor(int); + method public abstract boolean setFrame(int, int, int, int); + method public abstract void setLayerType(int, android.graphics.Paint); + method public abstract void setLayoutParams(android.view.ViewGroup.LayoutParams); + method public abstract void setOverScrollMode(int); + method public abstract void setScrollBarStyle(int); + method public abstract boolean shouldDelayChildPressedState(); + } + +} + +package android.widget { + + public abstract class AbsListView extends android.widget.AdapterView implements android.widget.Filter.FilterListener android.text.TextWatcher android.view.ViewTreeObserver.OnGlobalLayoutListener android.view.ViewTreeObserver.OnTouchModeChangeListener { + ctor public AbsListView(android.content.Context); + ctor public AbsListView(android.content.Context, android.util.AttributeSet); + ctor public AbsListView(android.content.Context, android.util.AttributeSet, int); + ctor public AbsListView(android.content.Context, android.util.AttributeSet, int, int); + method public void afterTextChanged(android.text.Editable); + method public void beforeTextChanged(java.lang.CharSequence, int, int, int); + method public boolean canScrollList(int); + method public void clearChoices(); + method public void clearTextFilter(); + method public void deferNotifyDataSetChanged(); + method public void fling(int); + method public int getCacheColorHint(); + method public int getCheckedItemCount(); + method public long[] getCheckedItemIds(); + method public int getCheckedItemPosition(); + method public android.util.SparseBooleanArray getCheckedItemPositions(); + method public int getChoiceMode(); + method public int getListPaddingBottom(); + method public int getListPaddingLeft(); + method public int getListPaddingRight(); + method public int getListPaddingTop(); + method public android.view.View getSelectedView(); + method public android.graphics.drawable.Drawable getSelector(); + method public java.lang.CharSequence getTextFilter(); + method public int getTranscriptMode(); + method protected void handleDataChanged(); + method public boolean hasTextFilter(); + method public void invalidateViews(); + method public boolean isFastScrollAlwaysVisible(); + method public boolean isFastScrollEnabled(); + method protected boolean isInFilterMode(); + method public boolean isItemChecked(int); + method public boolean isScrollingCacheEnabled(); + method public boolean isSmoothScrollbarEnabled(); + method public boolean isStackFromBottom(); + method public boolean isTextFilterEnabled(); + method protected void layoutChildren(); + method public void onFilterComplete(int); + method public void onGlobalLayout(); + method public void onInitializeAccessibilityNodeInfoForItem(android.view.View, int, android.view.accessibility.AccessibilityNodeInfo); + method public boolean onRemoteAdapterConnected(); + method public void onRemoteAdapterDisconnected(); + method public void onRestoreInstanceState(android.os.Parcelable); + method public android.os.Parcelable onSaveInstanceState(); + method public void onTextChanged(java.lang.CharSequence, int, int, int); + method public void onTouchModeChanged(boolean); + method public int pointToPosition(int, int); + method public long pointToRowId(int, int); + method public void reclaimViews(java.util.List); + method public void scrollListBy(int); + method public void setAdapter(android.widget.ListAdapter); + method public void setCacheColorHint(int); + method public void setChoiceMode(int); + method public void setDrawSelectorOnTop(boolean); + method public void setFastScrollAlwaysVisible(boolean); + method public void setFastScrollEnabled(boolean); + method public void setFastScrollStyle(int); + method public void setFilterText(java.lang.String); + method public void setFriction(float); + method public void setItemChecked(int, boolean); + method public void setMultiChoiceModeListener(android.widget.AbsListView.MultiChoiceModeListener); + method public void setOnScrollListener(android.widget.AbsListView.OnScrollListener); + method public void setRecyclerListener(android.widget.AbsListView.RecyclerListener); + method public void setRemoteViewsAdapter(android.content.Intent); + method public void setScrollIndicators(android.view.View, android.view.View); + method public void setScrollingCacheEnabled(boolean); + method public void setSelectionFromTop(int, int); + method public void setSelector(int); + method public void setSelector(android.graphics.drawable.Drawable); + method public void setSmoothScrollbarEnabled(boolean); + method public void setStackFromBottom(boolean); + method public void setTextFilterEnabled(boolean); + method public void setTranscriptMode(int); + method public void setVelocityScale(float); + method public void smoothScrollBy(int, int); + method public void smoothScrollToPosition(int); + method public void smoothScrollToPosition(int, int); + method public void smoothScrollToPositionFromTop(int, int, int); + method public void smoothScrollToPositionFromTop(int, int); + method public boolean verifyDrawable(android.graphics.drawable.Drawable); + field public static final int CHOICE_MODE_MULTIPLE = 2; // 0x2 + field public static final int CHOICE_MODE_MULTIPLE_MODAL = 3; // 0x3 + field public static final int CHOICE_MODE_NONE = 0; // 0x0 + field public static final int CHOICE_MODE_SINGLE = 1; // 0x1 + field public static final int TRANSCRIPT_MODE_ALWAYS_SCROLL = 2; // 0x2 + field public static final int TRANSCRIPT_MODE_DISABLED = 0; // 0x0 + field public static final int TRANSCRIPT_MODE_NORMAL = 1; // 0x1 + } + + public static class AbsListView.LayoutParams extends android.view.ViewGroup.LayoutParams { + ctor public AbsListView.LayoutParams(android.content.Context, android.util.AttributeSet); + ctor public AbsListView.LayoutParams(int, int); + ctor public AbsListView.LayoutParams(int, int, int); + ctor public AbsListView.LayoutParams(android.view.ViewGroup.LayoutParams); + } + + public static abstract interface AbsListView.MultiChoiceModeListener implements android.view.ActionMode.Callback { + method public abstract void onItemCheckedStateChanged(android.view.ActionMode, int, long, boolean); + } + + public static abstract interface AbsListView.OnScrollListener { + method public abstract void onScroll(android.widget.AbsListView, int, int, int); + method public abstract void onScrollStateChanged(android.widget.AbsListView, int); + field public static final int SCROLL_STATE_FLING = 2; // 0x2 + field public static final int SCROLL_STATE_IDLE = 0; // 0x0 + field public static final int SCROLL_STATE_TOUCH_SCROLL = 1; // 0x1 + } + + public static abstract interface AbsListView.RecyclerListener { + method public abstract void onMovedToScrapHeap(android.view.View); + } + + public static abstract interface AbsListView.SelectionBoundsAdjuster { + method public abstract void adjustListItemSelectionBounds(android.graphics.Rect); + } + + public abstract class AbsSeekBar extends android.widget.ProgressBar { + ctor public AbsSeekBar(android.content.Context); + ctor public AbsSeekBar(android.content.Context, android.util.AttributeSet); + ctor public AbsSeekBar(android.content.Context, android.util.AttributeSet, int); + ctor public AbsSeekBar(android.content.Context, android.util.AttributeSet, int, int); + method public int getKeyProgressIncrement(); + method public boolean getSplitTrack(); + method public android.graphics.drawable.Drawable getThumb(); + method public int getThumbOffset(); + method public android.content.res.ColorStateList getThumbTintList(); + method public android.graphics.PorterDuff.Mode getThumbTintMode(); + method public void setKeyProgressIncrement(int); + method public void setSplitTrack(boolean); + method public void setThumb(android.graphics.drawable.Drawable); + method public void setThumbOffset(int); + method public void setThumbTintList(android.content.res.ColorStateList); + method public void setThumbTintMode(android.graphics.PorterDuff.Mode); + } + + public abstract class AbsSpinner extends android.widget.AdapterView { + ctor public AbsSpinner(android.content.Context); + ctor public AbsSpinner(android.content.Context, android.util.AttributeSet); + ctor public AbsSpinner(android.content.Context, android.util.AttributeSet, int); + ctor public AbsSpinner(android.content.Context, android.util.AttributeSet, int, int); + method public android.widget.SpinnerAdapter getAdapter(); + method public android.view.View getSelectedView(); + method public void onRestoreInstanceState(android.os.Parcelable); + method public android.os.Parcelable onSaveInstanceState(); + method public int pointToPosition(int, int); + method public void setAdapter(android.widget.SpinnerAdapter); + method public void setSelection(int, boolean); + method public void setSelection(int); + } + + public deprecated class AbsoluteLayout extends android.view.ViewGroup { + ctor public AbsoluteLayout(android.content.Context); + ctor public AbsoluteLayout(android.content.Context, android.util.AttributeSet); + ctor public AbsoluteLayout(android.content.Context, android.util.AttributeSet, int); + ctor public AbsoluteLayout(android.content.Context, android.util.AttributeSet, int, int); + method protected void onLayout(boolean, int, int, int, int); + } + + public static class AbsoluteLayout.LayoutParams extends android.view.ViewGroup.LayoutParams { + ctor public AbsoluteLayout.LayoutParams(int, int, int, int); + ctor public AbsoluteLayout.LayoutParams(android.content.Context, android.util.AttributeSet); + ctor public AbsoluteLayout.LayoutParams(android.view.ViewGroup.LayoutParams); + method public java.lang.String debug(java.lang.String); + field public int x; + field public int y; + } + + public class ActionMenuView extends android.widget.LinearLayout { + ctor public ActionMenuView(android.content.Context); + ctor public ActionMenuView(android.content.Context, android.util.AttributeSet); + method public void dismissPopupMenus(); + method public android.view.Menu getMenu(); + method public int getPopupTheme(); + method public boolean hideOverflowMenu(); + method public boolean isOverflowMenuShowing(); + method public void onConfigurationChanged(android.content.res.Configuration); + method public void onDetachedFromWindow(); + method public void setOnMenuItemClickListener(android.widget.ActionMenuView.OnMenuItemClickListener); + method public void setPopupTheme(int); + method public boolean showOverflowMenu(); + } + + public static class ActionMenuView.LayoutParams extends android.widget.LinearLayout.LayoutParams { + ctor public ActionMenuView.LayoutParams(android.content.Context, android.util.AttributeSet); + ctor public ActionMenuView.LayoutParams(android.view.ViewGroup.LayoutParams); + ctor public ActionMenuView.LayoutParams(android.widget.ActionMenuView.LayoutParams); + ctor public ActionMenuView.LayoutParams(int, int); + } + + public static abstract interface ActionMenuView.OnMenuItemClickListener { + method public abstract boolean onMenuItemClick(android.view.MenuItem); + } + + public abstract interface Adapter { + method public abstract int getCount(); + method public abstract java.lang.Object getItem(int); + method public abstract long getItemId(int); + method public abstract int getItemViewType(int); + method public abstract android.view.View getView(int, android.view.View, android.view.ViewGroup); + method public abstract int getViewTypeCount(); + method public abstract boolean hasStableIds(); + method public abstract boolean isEmpty(); + method public abstract void registerDataSetObserver(android.database.DataSetObserver); + method public abstract void unregisterDataSetObserver(android.database.DataSetObserver); + field public static final int IGNORE_ITEM_VIEW_TYPE = -1; // 0xffffffff + field public static final int NO_SELECTION = -2147483648; // 0x80000000 + } + + public abstract class AdapterView extends android.view.ViewGroup { + ctor public AdapterView(android.content.Context); + ctor public AdapterView(android.content.Context, android.util.AttributeSet); + ctor public AdapterView(android.content.Context, android.util.AttributeSet, int); + ctor public AdapterView(android.content.Context, android.util.AttributeSet, int, int); + method public abstract T getAdapter(); + method public int getCount(); + method public android.view.View getEmptyView(); + method public int getFirstVisiblePosition(); + method public java.lang.Object getItemAtPosition(int); + method public long getItemIdAtPosition(int); + method public int getLastVisiblePosition(); + method public final android.widget.AdapterView.OnItemClickListener getOnItemClickListener(); + method public final android.widget.AdapterView.OnItemLongClickListener getOnItemLongClickListener(); + method public final android.widget.AdapterView.OnItemSelectedListener getOnItemSelectedListener(); + method public int getPositionForView(android.view.View); + method public java.lang.Object getSelectedItem(); + method public long getSelectedItemId(); + method public int getSelectedItemPosition(); + method public abstract android.view.View getSelectedView(); + method protected void onLayout(boolean, int, int, int, int); + method public boolean performItemClick(android.view.View, int, long); + method public abstract void setAdapter(T); + method public void setEmptyView(android.view.View); + method public void setOnItemClickListener(android.widget.AdapterView.OnItemClickListener); + method public void setOnItemLongClickListener(android.widget.AdapterView.OnItemLongClickListener); + method public void setOnItemSelectedListener(android.widget.AdapterView.OnItemSelectedListener); + method public abstract void setSelection(int); + field public static final int INVALID_POSITION = -1; // 0xffffffff + field public static final long INVALID_ROW_ID = -9223372036854775808L; // 0x8000000000000000L + field public static final int ITEM_VIEW_TYPE_HEADER_OR_FOOTER = -2; // 0xfffffffe + field public static final int ITEM_VIEW_TYPE_IGNORE = -1; // 0xffffffff + } + + public static class AdapterView.AdapterContextMenuInfo implements android.view.ContextMenu.ContextMenuInfo { + ctor public AdapterView.AdapterContextMenuInfo(android.view.View, int, long); + field public long id; + field public int position; + field public android.view.View targetView; + } + + public static abstract interface AdapterView.OnItemClickListener { + method public abstract void onItemClick(android.widget.AdapterView, android.view.View, int, long); + } + + public static abstract interface AdapterView.OnItemLongClickListener { + method public abstract boolean onItemLongClick(android.widget.AdapterView, android.view.View, int, long); + } + + public static abstract interface AdapterView.OnItemSelectedListener { + method public abstract void onItemSelected(android.widget.AdapterView, android.view.View, int, long); + method public abstract void onNothingSelected(android.widget.AdapterView); + } + + public abstract class AdapterViewAnimator extends android.widget.AdapterView implements android.widget.Advanceable { + ctor public AdapterViewAnimator(android.content.Context); + ctor public AdapterViewAnimator(android.content.Context, android.util.AttributeSet); + ctor public AdapterViewAnimator(android.content.Context, android.util.AttributeSet, int); + ctor public AdapterViewAnimator(android.content.Context, android.util.AttributeSet, int, int); + method public void advance(); + method public void deferNotifyDataSetChanged(); + method public void fyiWillBeAdvancedByHostKThx(); + method public android.widget.Adapter getAdapter(); + method public android.view.View getCurrentView(); + method public int getDisplayedChild(); + method public android.animation.ObjectAnimator getInAnimation(); + method public android.animation.ObjectAnimator getOutAnimation(); + method public android.view.View getSelectedView(); + method public boolean onRemoteAdapterConnected(); + method public void onRemoteAdapterDisconnected(); + method public void onRestoreInstanceState(android.os.Parcelable); + method public android.os.Parcelable onSaveInstanceState(); + method public void setAdapter(android.widget.Adapter); + method public void setAnimateFirstView(boolean); + method public void setDisplayedChild(int); + method public void setInAnimation(android.animation.ObjectAnimator); + method public void setInAnimation(android.content.Context, int); + method public void setOutAnimation(android.animation.ObjectAnimator); + method public void setOutAnimation(android.content.Context, int); + method public void setRemoteViewsAdapter(android.content.Intent); + method public void setSelection(int); + method public void showNext(); + method public void showPrevious(); + } + + public class AdapterViewFlipper extends android.widget.AdapterViewAnimator { + ctor public AdapterViewFlipper(android.content.Context); + ctor public AdapterViewFlipper(android.content.Context, android.util.AttributeSet); + ctor public AdapterViewFlipper(android.content.Context, android.util.AttributeSet, int); + ctor public AdapterViewFlipper(android.content.Context, android.util.AttributeSet, int, int); + method public int getFlipInterval(); + method public boolean isAutoStart(); + method public boolean isFlipping(); + method public void setAutoStart(boolean); + method public void setFlipInterval(int); + method public void startFlipping(); + method public void stopFlipping(); + } + + public abstract interface Advanceable { + method public abstract void advance(); + method public abstract void fyiWillBeAdvancedByHostKThx(); + } + + public class AlphabetIndexer extends android.database.DataSetObserver implements android.widget.SectionIndexer { + ctor public AlphabetIndexer(android.database.Cursor, int, java.lang.CharSequence); + method protected int compare(java.lang.String, java.lang.String); + method public int getPositionForSection(int); + method public int getSectionForPosition(int); + method public java.lang.Object[] getSections(); + method public void setCursor(android.database.Cursor); + field protected java.lang.CharSequence mAlphabet; + field protected int mColumnIndex; + field protected android.database.Cursor mDataCursor; + } + + public class AnalogClock extends android.view.View { + ctor public AnalogClock(android.content.Context); + ctor public AnalogClock(android.content.Context, android.util.AttributeSet); + ctor public AnalogClock(android.content.Context, android.util.AttributeSet, int); + ctor public AnalogClock(android.content.Context, android.util.AttributeSet, int, int); + } + + public class ArrayAdapter extends android.widget.BaseAdapter implements android.widget.Filterable { + ctor public ArrayAdapter(android.content.Context, int); + ctor public ArrayAdapter(android.content.Context, int, int); + ctor public ArrayAdapter(android.content.Context, int, T[]); + ctor public ArrayAdapter(android.content.Context, int, int, T[]); + ctor public ArrayAdapter(android.content.Context, int, java.util.List); + ctor public ArrayAdapter(android.content.Context, int, int, java.util.List); + method public void add(T); + method public void addAll(java.util.Collection); + method public void addAll(T...); + method public void clear(); + method public static android.widget.ArrayAdapter createFromResource(android.content.Context, int, int); + method public android.content.Context getContext(); + method public int getCount(); + method public android.widget.Filter getFilter(); + method public T getItem(int); + method public long getItemId(int); + method public int getPosition(T); + method public android.view.View getView(int, android.view.View, android.view.ViewGroup); + method public void insert(T, int); + method public void remove(T); + method public void setDropDownViewResource(int); + method public void setNotifyOnChange(boolean); + method public void sort(java.util.Comparator); + } + + public class AutoCompleteTextView extends android.widget.EditText implements android.widget.Filter.FilterListener { + ctor public AutoCompleteTextView(android.content.Context); + ctor public AutoCompleteTextView(android.content.Context, android.util.AttributeSet); + ctor public AutoCompleteTextView(android.content.Context, android.util.AttributeSet, int); + ctor public AutoCompleteTextView(android.content.Context, android.util.AttributeSet, int, int); + method public void clearListSelection(); + method protected java.lang.CharSequence convertSelectionToString(java.lang.Object); + method public void dismissDropDown(); + method public boolean enoughToFilter(); + method public android.widget.ListAdapter getAdapter(); + method public java.lang.CharSequence getCompletionHint(); + method public int getDropDownAnchor(); + method public android.graphics.drawable.Drawable getDropDownBackground(); + method public int getDropDownHeight(); + method public int getDropDownHorizontalOffset(); + method public int getDropDownVerticalOffset(); + method public int getDropDownWidth(); + method protected android.widget.Filter getFilter(); + method public deprecated android.widget.AdapterView.OnItemClickListener getItemClickListener(); + method public deprecated android.widget.AdapterView.OnItemSelectedListener getItemSelectedListener(); + method public int getListSelection(); + method public android.widget.AdapterView.OnItemClickListener getOnItemClickListener(); + method public android.widget.AdapterView.OnItemSelectedListener getOnItemSelectedListener(); + method public int getThreshold(); + method public android.widget.AutoCompleteTextView.Validator getValidator(); + method public boolean isPerformingCompletion(); + method public boolean isPopupShowing(); + method public void onFilterComplete(int); + method public void performCompletion(); + method protected void performFiltering(java.lang.CharSequence, int); + method public void performValidation(); + method protected void replaceText(java.lang.CharSequence); + method public void setAdapter(T); + method public void setCompletionHint(java.lang.CharSequence); + method public void setDropDownAnchor(int); + method public void setDropDownBackgroundDrawable(android.graphics.drawable.Drawable); + method public void setDropDownBackgroundResource(int); + method public void setDropDownHeight(int); + method public void setDropDownHorizontalOffset(int); + method public void setDropDownVerticalOffset(int); + method public void setDropDownWidth(int); + method public void setListSelection(int); + method public void setOnDismissListener(android.widget.AutoCompleteTextView.OnDismissListener); + method public void setOnItemClickListener(android.widget.AdapterView.OnItemClickListener); + method public void setOnItemSelectedListener(android.widget.AdapterView.OnItemSelectedListener); + method public void setText(java.lang.CharSequence, boolean); + method public void setThreshold(int); + method public void setValidator(android.widget.AutoCompleteTextView.Validator); + method public void showDropDown(); + } + + public static abstract interface AutoCompleteTextView.OnDismissListener { + method public abstract void onDismiss(); + } + + public static abstract interface AutoCompleteTextView.Validator { + method public abstract java.lang.CharSequence fixText(java.lang.CharSequence); + method public abstract boolean isValid(java.lang.CharSequence); + } + + public abstract class BaseAdapter implements android.widget.ListAdapter android.widget.SpinnerAdapter { + ctor public BaseAdapter(); + method public boolean areAllItemsEnabled(); + method public android.view.View getDropDownView(int, android.view.View, android.view.ViewGroup); + method public int getItemViewType(int); + method public int getViewTypeCount(); + method public boolean hasStableIds(); + method public boolean isEmpty(); + method public boolean isEnabled(int); + method public void notifyDataSetChanged(); + method public void notifyDataSetInvalidated(); + method public void registerDataSetObserver(android.database.DataSetObserver); + method public void unregisterDataSetObserver(android.database.DataSetObserver); + } + + public abstract class BaseExpandableListAdapter implements android.widget.ExpandableListAdapter android.widget.HeterogeneousExpandableList { + ctor public BaseExpandableListAdapter(); + method public boolean areAllItemsEnabled(); + method public int getChildType(int, int); + method public int getChildTypeCount(); + method public long getCombinedChildId(long, long); + method public long getCombinedGroupId(long); + method public int getGroupType(int); + method public int getGroupTypeCount(); + method public boolean isEmpty(); + method public void notifyDataSetChanged(); + method public void notifyDataSetInvalidated(); + method public void onGroupCollapsed(int); + method public void onGroupExpanded(int); + method public void registerDataSetObserver(android.database.DataSetObserver); + method public void unregisterDataSetObserver(android.database.DataSetObserver); + } + + public class Button extends android.widget.TextView { + ctor public Button(android.content.Context); + ctor public Button(android.content.Context, android.util.AttributeSet); + ctor public Button(android.content.Context, android.util.AttributeSet, int); + ctor public Button(android.content.Context, android.util.AttributeSet, int, int); + } + + public class CalendarView extends android.widget.FrameLayout { + ctor public CalendarView(android.content.Context); + ctor public CalendarView(android.content.Context, android.util.AttributeSet); + ctor public CalendarView(android.content.Context, android.util.AttributeSet, int); + ctor public CalendarView(android.content.Context, android.util.AttributeSet, int, int); + method public long getDate(); + method public int getDateTextAppearance(); + method public int getFirstDayOfWeek(); + method public int getFocusedMonthDateColor(); + method public long getMaxDate(); + method public long getMinDate(); + method public android.graphics.drawable.Drawable getSelectedDateVerticalBar(); + method public int getSelectedWeekBackgroundColor(); + method public boolean getShowWeekNumber(); + method public int getShownWeekCount(); + method public int getUnfocusedMonthDateColor(); + method public int getWeekDayTextAppearance(); + method public int getWeekNumberColor(); + method public int getWeekSeparatorLineColor(); + method public void setDate(long); + method public void setDate(long, boolean, boolean); + method public void setDateTextAppearance(int); + method public void setFirstDayOfWeek(int); + method public void setFocusedMonthDateColor(int); + method public void setMaxDate(long); + method public void setMinDate(long); + method public void setOnDateChangeListener(android.widget.CalendarView.OnDateChangeListener); + method public void setSelectedDateVerticalBar(int); + method public void setSelectedDateVerticalBar(android.graphics.drawable.Drawable); + method public void setSelectedWeekBackgroundColor(int); + method public void setShowWeekNumber(boolean); + method public void setShownWeekCount(int); + method public void setUnfocusedMonthDateColor(int); + method public void setWeekDayTextAppearance(int); + method public void setWeekNumberColor(int); + method public void setWeekSeparatorLineColor(int); + } + + public static abstract interface CalendarView.OnDateChangeListener { + method public abstract void onSelectedDayChange(android.widget.CalendarView, int, int, int); + } + + public class CheckBox extends android.widget.CompoundButton { + ctor public CheckBox(android.content.Context); + ctor public CheckBox(android.content.Context, android.util.AttributeSet); + ctor public CheckBox(android.content.Context, android.util.AttributeSet, int); + ctor public CheckBox(android.content.Context, android.util.AttributeSet, int, int); + } + + public abstract interface Checkable { + method public abstract boolean isChecked(); + method public abstract void setChecked(boolean); + method public abstract void toggle(); + } + + public class CheckedTextView extends android.widget.TextView implements android.widget.Checkable { + ctor public CheckedTextView(android.content.Context); + ctor public CheckedTextView(android.content.Context, android.util.AttributeSet); + ctor public CheckedTextView(android.content.Context, android.util.AttributeSet, int); + ctor public CheckedTextView(android.content.Context, android.util.AttributeSet, int, int); + method public android.graphics.drawable.Drawable getCheckMarkDrawable(); + method public android.content.res.ColorStateList getCheckMarkTintList(); + method public android.graphics.PorterDuff.Mode getCheckMarkTintMode(); + method public boolean isChecked(); + method public void setCheckMarkDrawable(int); + method public void setCheckMarkDrawable(android.graphics.drawable.Drawable); + method public void setCheckMarkTintList(android.content.res.ColorStateList); + method public void setCheckMarkTintMode(android.graphics.PorterDuff.Mode); + method public void setChecked(boolean); + method public void toggle(); + } + + public class Chronometer extends android.widget.TextView { + ctor public Chronometer(android.content.Context); + ctor public Chronometer(android.content.Context, android.util.AttributeSet); + ctor public Chronometer(android.content.Context, android.util.AttributeSet, int); + ctor public Chronometer(android.content.Context, android.util.AttributeSet, int, int); + method public long getBase(); + method public java.lang.String getFormat(); + method public android.widget.Chronometer.OnChronometerTickListener getOnChronometerTickListener(); + method public void setBase(long); + method public void setFormat(java.lang.String); + method public void setOnChronometerTickListener(android.widget.Chronometer.OnChronometerTickListener); + method public void start(); + method public void stop(); + } + + public static abstract interface Chronometer.OnChronometerTickListener { + method public abstract void onChronometerTick(android.widget.Chronometer); + } + + public abstract class CompoundButton extends android.widget.Button implements android.widget.Checkable { + ctor public CompoundButton(android.content.Context); + ctor public CompoundButton(android.content.Context, android.util.AttributeSet); + ctor public CompoundButton(android.content.Context, android.util.AttributeSet, int); + ctor public CompoundButton(android.content.Context, android.util.AttributeSet, int, int); + method public android.content.res.ColorStateList getButtonTintList(); + method public android.graphics.PorterDuff.Mode getButtonTintMode(); + method public boolean isChecked(); + method public void setButtonDrawable(int); + method public void setButtonDrawable(android.graphics.drawable.Drawable); + method public void setButtonTintList(android.content.res.ColorStateList); + method public void setButtonTintMode(android.graphics.PorterDuff.Mode); + method public void setChecked(boolean); + method public void setOnCheckedChangeListener(android.widget.CompoundButton.OnCheckedChangeListener); + method public void toggle(); + } + + public static abstract interface CompoundButton.OnCheckedChangeListener { + method public abstract void onCheckedChanged(android.widget.CompoundButton, boolean); + } + + public abstract class CursorAdapter extends android.widget.BaseAdapter implements android.widget.Filterable { + ctor public deprecated CursorAdapter(android.content.Context, android.database.Cursor); + ctor public CursorAdapter(android.content.Context, android.database.Cursor, boolean); + ctor public CursorAdapter(android.content.Context, android.database.Cursor, int); + method public abstract void bindView(android.view.View, android.content.Context, android.database.Cursor); + method public void changeCursor(android.database.Cursor); + method public java.lang.CharSequence convertToString(android.database.Cursor); + method public int getCount(); + method public android.database.Cursor getCursor(); + method public android.widget.Filter getFilter(); + method public android.widget.FilterQueryProvider getFilterQueryProvider(); + method public java.lang.Object getItem(int); + method public long getItemId(int); + method public android.view.View getView(int, android.view.View, android.view.ViewGroup); + method protected deprecated void init(android.content.Context, android.database.Cursor, boolean); + method public android.view.View newDropDownView(android.content.Context, android.database.Cursor, android.view.ViewGroup); + method public abstract android.view.View newView(android.content.Context, android.database.Cursor, android.view.ViewGroup); + method protected void onContentChanged(); + method public android.database.Cursor runQueryOnBackgroundThread(java.lang.CharSequence); + method public void setFilterQueryProvider(android.widget.FilterQueryProvider); + method public android.database.Cursor swapCursor(android.database.Cursor); + field public static final deprecated int FLAG_AUTO_REQUERY = 1; // 0x1 + field public static final int FLAG_REGISTER_CONTENT_OBSERVER = 2; // 0x2 + } + + public abstract class CursorTreeAdapter extends android.widget.BaseExpandableListAdapter implements android.widget.Filterable { + ctor public CursorTreeAdapter(android.database.Cursor, android.content.Context); + ctor public CursorTreeAdapter(android.database.Cursor, android.content.Context, boolean); + method protected abstract void bindChildView(android.view.View, android.content.Context, android.database.Cursor, boolean); + method protected abstract void bindGroupView(android.view.View, android.content.Context, android.database.Cursor, boolean); + method public void changeCursor(android.database.Cursor); + method public java.lang.String convertToString(android.database.Cursor); + method public android.database.Cursor getChild(int, int); + method public long getChildId(int, int); + method public android.view.View getChildView(int, int, boolean, android.view.View, android.view.ViewGroup); + method public int getChildrenCount(int); + method protected abstract android.database.Cursor getChildrenCursor(android.database.Cursor); + method public android.database.Cursor getCursor(); + method public android.widget.Filter getFilter(); + method public android.widget.FilterQueryProvider getFilterQueryProvider(); + method public android.database.Cursor getGroup(int); + method public int getGroupCount(); + method public long getGroupId(int); + method public android.view.View getGroupView(int, boolean, android.view.View, android.view.ViewGroup); + method public boolean hasStableIds(); + method public boolean isChildSelectable(int, int); + method protected abstract android.view.View newChildView(android.content.Context, android.database.Cursor, boolean, android.view.ViewGroup); + method protected abstract android.view.View newGroupView(android.content.Context, android.database.Cursor, boolean, android.view.ViewGroup); + method public void notifyDataSetChanged(boolean); + method public android.database.Cursor runQueryOnBackgroundThread(java.lang.CharSequence); + method public void setChildrenCursor(int, android.database.Cursor); + method public void setFilterQueryProvider(android.widget.FilterQueryProvider); + method public void setGroupCursor(android.database.Cursor); + } + + public class DatePicker extends android.widget.FrameLayout { + ctor public DatePicker(android.content.Context); + ctor public DatePicker(android.content.Context, android.util.AttributeSet); + ctor public DatePicker(android.content.Context, android.util.AttributeSet, int); + ctor public DatePicker(android.content.Context, android.util.AttributeSet, int, int); + method public android.widget.CalendarView getCalendarView(); + method public boolean getCalendarViewShown(); + method public int getDayOfMonth(); + method public int getFirstDayOfWeek(); + method public long getMaxDate(); + method public long getMinDate(); + method public int getMonth(); + method public boolean getSpinnersShown(); + method public int getYear(); + method public void init(int, int, int, android.widget.DatePicker.OnDateChangedListener); + method public void setCalendarViewShown(boolean); + method public void setFirstDayOfWeek(int); + method public void setMaxDate(long); + method public void setMinDate(long); + method public void setSpinnersShown(boolean); + method public void updateDate(int, int, int); + } + + public static abstract interface DatePicker.OnDateChangedListener { + method public abstract void onDateChanged(android.widget.DatePicker, int, int, int); + } + + public class DialerFilter extends android.widget.RelativeLayout { + ctor public DialerFilter(android.content.Context); + ctor public DialerFilter(android.content.Context, android.util.AttributeSet); + method public void append(java.lang.String); + method public void clearText(); + method public java.lang.CharSequence getDigits(); + method public java.lang.CharSequence getFilterText(); + method public java.lang.CharSequence getLetters(); + method public int getMode(); + method public boolean isQwertyKeyboard(); + method protected void onModeChange(int, int); + method public void removeFilterWatcher(android.text.TextWatcher); + method public void setDigitsWatcher(android.text.TextWatcher); + method public void setFilterWatcher(android.text.TextWatcher); + method public void setLettersWatcher(android.text.TextWatcher); + method public void setMode(int); + field public static final int DIGITS_AND_LETTERS = 1; // 0x1 + field public static final int DIGITS_AND_LETTERS_NO_DIGITS = 2; // 0x2 + field public static final int DIGITS_AND_LETTERS_NO_LETTERS = 3; // 0x3 + field public static final int DIGITS_ONLY = 4; // 0x4 + field public static final int LETTERS_ONLY = 5; // 0x5 + } + + public deprecated class DigitalClock extends android.widget.TextView { + ctor public DigitalClock(android.content.Context); + ctor public DigitalClock(android.content.Context, android.util.AttributeSet); + } + + public class EdgeEffect { + ctor public EdgeEffect(android.content.Context); + method public boolean draw(android.graphics.Canvas); + method public void finish(); + method public int getColor(); + method public int getMaxHeight(); + method public boolean isFinished(); + method public void onAbsorb(int); + method public void onPull(float); + method public void onPull(float, float); + method public void onRelease(); + method public void setColor(int); + method public void setSize(int, int); + } + + public class EditText extends android.widget.TextView { + ctor public EditText(android.content.Context); + ctor public EditText(android.content.Context, android.util.AttributeSet); + ctor public EditText(android.content.Context, android.util.AttributeSet, int); + ctor public EditText(android.content.Context, android.util.AttributeSet, int, int); + method public void extendSelection(int); + method public void selectAll(); + method public void setSelection(int, int); + method public void setSelection(int); + } + + public abstract interface ExpandableListAdapter { + method public abstract boolean areAllItemsEnabled(); + method public abstract java.lang.Object getChild(int, int); + method public abstract long getChildId(int, int); + method public abstract android.view.View getChildView(int, int, boolean, android.view.View, android.view.ViewGroup); + method public abstract int getChildrenCount(int); + method public abstract long getCombinedChildId(long, long); + method public abstract long getCombinedGroupId(long); + method public abstract java.lang.Object getGroup(int); + method public abstract int getGroupCount(); + method public abstract long getGroupId(int); + method public abstract android.view.View getGroupView(int, boolean, android.view.View, android.view.ViewGroup); + method public abstract boolean hasStableIds(); + method public abstract boolean isChildSelectable(int, int); + method public abstract boolean isEmpty(); + method public abstract void onGroupCollapsed(int); + method public abstract void onGroupExpanded(int); + method public abstract void registerDataSetObserver(android.database.DataSetObserver); + method public abstract void unregisterDataSetObserver(android.database.DataSetObserver); + } + + public class ExpandableListView extends android.widget.ListView { + ctor public ExpandableListView(android.content.Context); + ctor public ExpandableListView(android.content.Context, android.util.AttributeSet); + ctor public ExpandableListView(android.content.Context, android.util.AttributeSet, int); + ctor public ExpandableListView(android.content.Context, android.util.AttributeSet, int, int); + method public boolean collapseGroup(int); + method public boolean expandGroup(int); + method public boolean expandGroup(int, boolean); + method public android.widget.ExpandableListAdapter getExpandableListAdapter(); + method public long getExpandableListPosition(int); + method public int getFlatListPosition(long); + method public static int getPackedPositionChild(long); + method public static long getPackedPositionForChild(int, int); + method public static long getPackedPositionForGroup(int); + method public static int getPackedPositionGroup(long); + method public static int getPackedPositionType(long); + method public long getSelectedId(); + method public long getSelectedPosition(); + method public boolean isGroupExpanded(int); + method public void setAdapter(android.widget.ExpandableListAdapter); + method public void setChildDivider(android.graphics.drawable.Drawable); + method public void setChildIndicator(android.graphics.drawable.Drawable); + method public void setChildIndicatorBounds(int, int); + method public void setChildIndicatorBoundsRelative(int, int); + method public void setGroupIndicator(android.graphics.drawable.Drawable); + method public void setIndicatorBounds(int, int); + method public void setIndicatorBoundsRelative(int, int); + method public void setOnChildClickListener(android.widget.ExpandableListView.OnChildClickListener); + method public void setOnGroupClickListener(android.widget.ExpandableListView.OnGroupClickListener); + method public void setOnGroupCollapseListener(android.widget.ExpandableListView.OnGroupCollapseListener); + method public void setOnGroupExpandListener(android.widget.ExpandableListView.OnGroupExpandListener); + method public boolean setSelectedChild(int, int, boolean); + method public void setSelectedGroup(int); + field public static final int CHILD_INDICATOR_INHERIT = -1; // 0xffffffff + field public static final int PACKED_POSITION_TYPE_CHILD = 1; // 0x1 + field public static final int PACKED_POSITION_TYPE_GROUP = 0; // 0x0 + field public static final int PACKED_POSITION_TYPE_NULL = 2; // 0x2 + field public static final long PACKED_POSITION_VALUE_NULL = 4294967295L; // 0xffffffffL + } + + public static class ExpandableListView.ExpandableListContextMenuInfo implements android.view.ContextMenu.ContextMenuInfo { + ctor public ExpandableListView.ExpandableListContextMenuInfo(android.view.View, long, long); + field public long id; + field public long packedPosition; + field public android.view.View targetView; + } + + public static abstract interface ExpandableListView.OnChildClickListener { + method public abstract boolean onChildClick(android.widget.ExpandableListView, android.view.View, int, int, long); + } + + public static abstract interface ExpandableListView.OnGroupClickListener { + method public abstract boolean onGroupClick(android.widget.ExpandableListView, android.view.View, int, long); + } + + public static abstract interface ExpandableListView.OnGroupCollapseListener { + method public abstract void onGroupCollapse(int); + } + + public static abstract interface ExpandableListView.OnGroupExpandListener { + method public abstract void onGroupExpand(int); + } + + public abstract class Filter { + ctor public Filter(); + method public java.lang.CharSequence convertResultToString(java.lang.Object); + method public final void filter(java.lang.CharSequence); + method public final void filter(java.lang.CharSequence, android.widget.Filter.FilterListener); + method protected abstract android.widget.Filter.FilterResults performFiltering(java.lang.CharSequence); + method protected abstract void publishResults(java.lang.CharSequence, android.widget.Filter.FilterResults); + } + + public static abstract interface Filter.FilterListener { + method public abstract void onFilterComplete(int); + } + + protected static class Filter.FilterResults { + ctor public Filter.FilterResults(); + field public int count; + field public java.lang.Object values; + } + + public abstract interface FilterQueryProvider { + method public abstract android.database.Cursor runQuery(java.lang.CharSequence); + } + + public abstract interface Filterable { + method public abstract android.widget.Filter getFilter(); + } + + public class FrameLayout extends android.view.ViewGroup { + ctor public FrameLayout(android.content.Context); + ctor public FrameLayout(android.content.Context, android.util.AttributeSet); + ctor public FrameLayout(android.content.Context, android.util.AttributeSet, int); + ctor public FrameLayout(android.content.Context, android.util.AttributeSet, int, int); + method public deprecated boolean getConsiderGoneChildrenWhenMeasuring(); + method public android.graphics.drawable.Drawable getForeground(); + method public int getForegroundGravity(); + method public android.content.res.ColorStateList getForegroundTintList(); + method public android.graphics.PorterDuff.Mode getForegroundTintMode(); + method public boolean getMeasureAllChildren(); + method protected void onLayout(boolean, int, int, int, int); + method public void setForeground(android.graphics.drawable.Drawable); + method public void setForegroundGravity(int); + method public void setForegroundTintList(android.content.res.ColorStateList); + method public void setForegroundTintMode(android.graphics.PorterDuff.Mode); + method public void setMeasureAllChildren(boolean); + } + + public static class FrameLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams { + ctor public FrameLayout.LayoutParams(android.content.Context, android.util.AttributeSet); + ctor public FrameLayout.LayoutParams(int, int); + ctor public FrameLayout.LayoutParams(int, int, int); + ctor public FrameLayout.LayoutParams(android.view.ViewGroup.LayoutParams); + ctor public FrameLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams); + ctor public FrameLayout.LayoutParams(android.widget.FrameLayout.LayoutParams); + field public int gravity; + } + + public deprecated class Gallery extends android.widget.AbsSpinner implements android.view.GestureDetector.OnGestureListener { + ctor public Gallery(android.content.Context); + ctor public Gallery(android.content.Context, android.util.AttributeSet); + ctor public Gallery(android.content.Context, android.util.AttributeSet, int); + ctor public Gallery(android.content.Context, android.util.AttributeSet, int, int); + method public boolean onDown(android.view.MotionEvent); + method public boolean onFling(android.view.MotionEvent, android.view.MotionEvent, float, float); + method public void onLongPress(android.view.MotionEvent); + method public boolean onScroll(android.view.MotionEvent, android.view.MotionEvent, float, float); + method public void onShowPress(android.view.MotionEvent); + method public boolean onSingleTapUp(android.view.MotionEvent); + method public void setAnimationDuration(int); + method public void setCallbackDuringFling(boolean); + method public void setGravity(int); + method public void setSpacing(int); + method public void setUnselectedAlpha(float); + } + + public static class Gallery.LayoutParams extends android.view.ViewGroup.LayoutParams { + ctor public Gallery.LayoutParams(android.content.Context, android.util.AttributeSet); + ctor public Gallery.LayoutParams(int, int); + ctor public Gallery.LayoutParams(android.view.ViewGroup.LayoutParams); + } + + public class GridLayout extends android.view.ViewGroup { + ctor public GridLayout(android.content.Context); + ctor public GridLayout(android.content.Context, android.util.AttributeSet); + ctor public GridLayout(android.content.Context, android.util.AttributeSet, int); + ctor public GridLayout(android.content.Context, android.util.AttributeSet, int, int); + method public int getAlignmentMode(); + method public int getColumnCount(); + method public int getOrientation(); + method public int getRowCount(); + method public boolean getUseDefaultMargins(); + method public boolean isColumnOrderPreserved(); + method public boolean isRowOrderPreserved(); + method protected void onLayout(boolean, int, int, int, int); + method public void setAlignmentMode(int); + method public void setColumnCount(int); + method public void setColumnOrderPreserved(boolean); + method public void setOrientation(int); + method public void setRowCount(int); + method public void setRowOrderPreserved(boolean); + method public void setUseDefaultMargins(boolean); + method public static android.widget.GridLayout.Spec spec(int, int, android.widget.GridLayout.Alignment, float); + method public static android.widget.GridLayout.Spec spec(int, android.widget.GridLayout.Alignment, float); + method public static android.widget.GridLayout.Spec spec(int, int, float); + method public static android.widget.GridLayout.Spec spec(int, float); + method public static android.widget.GridLayout.Spec spec(int, int, android.widget.GridLayout.Alignment); + method public static android.widget.GridLayout.Spec spec(int, android.widget.GridLayout.Alignment); + method public static android.widget.GridLayout.Spec spec(int, int); + method public static android.widget.GridLayout.Spec spec(int); + field public static final int ALIGN_BOUNDS = 0; // 0x0 + field public static final int ALIGN_MARGINS = 1; // 0x1 + field public static final android.widget.GridLayout.Alignment BASELINE; + field public static final android.widget.GridLayout.Alignment BOTTOM; + field public static final android.widget.GridLayout.Alignment CENTER; + field public static final android.widget.GridLayout.Alignment END; + field public static final android.widget.GridLayout.Alignment FILL; + field public static final int HORIZONTAL = 0; // 0x0 + field public static final android.widget.GridLayout.Alignment LEFT; + field public static final android.widget.GridLayout.Alignment RIGHT; + field public static final android.widget.GridLayout.Alignment START; + field public static final android.widget.GridLayout.Alignment TOP; + field public static final int UNDEFINED = -2147483648; // 0x80000000 + field public static final int VERTICAL = 1; // 0x1 + } + + public static abstract class GridLayout.Alignment { + } + + public static class GridLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams { + ctor public GridLayout.LayoutParams(android.widget.GridLayout.Spec, android.widget.GridLayout.Spec); + ctor public GridLayout.LayoutParams(); + ctor public GridLayout.LayoutParams(android.view.ViewGroup.LayoutParams); + ctor public GridLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams); + ctor public GridLayout.LayoutParams(android.widget.GridLayout.LayoutParams); + ctor public GridLayout.LayoutParams(android.content.Context, android.util.AttributeSet); + method public void setGravity(int); + field public android.widget.GridLayout.Spec columnSpec; + field public android.widget.GridLayout.Spec rowSpec; + } + + public static class GridLayout.Spec { + } + + public class GridView extends android.widget.AbsListView { + ctor public GridView(android.content.Context); + ctor public GridView(android.content.Context, android.util.AttributeSet); + ctor public GridView(android.content.Context, android.util.AttributeSet, int); + ctor public GridView(android.content.Context, android.util.AttributeSet, int, int); + method public android.widget.ListAdapter getAdapter(); + method public int getColumnWidth(); + method public int getGravity(); + method public int getHorizontalSpacing(); + method public int getNumColumns(); + method public int getRequestedColumnWidth(); + method public int getRequestedHorizontalSpacing(); + method public int getStretchMode(); + method public int getVerticalSpacing(); + method public void setColumnWidth(int); + method public void setGravity(int); + method public void setHorizontalSpacing(int); + method public void setNumColumns(int); + method public void setSelection(int); + method public void setStretchMode(int); + method public void setVerticalSpacing(int); + method public void smoothScrollByOffset(int); + field public static final int AUTO_FIT = -1; // 0xffffffff + field public static final int NO_STRETCH = 0; // 0x0 + field public static final int STRETCH_COLUMN_WIDTH = 2; // 0x2 + field public static final int STRETCH_SPACING = 1; // 0x1 + field public static final int STRETCH_SPACING_UNIFORM = 3; // 0x3 + } + + public class HeaderViewListAdapter implements android.widget.Filterable android.widget.WrapperListAdapter { + ctor public HeaderViewListAdapter(java.util.ArrayList, java.util.ArrayList, android.widget.ListAdapter); + method public boolean areAllItemsEnabled(); + method public int getCount(); + method public android.widget.Filter getFilter(); + method public int getFootersCount(); + method public int getHeadersCount(); + method public java.lang.Object getItem(int); + method public long getItemId(int); + method public int getItemViewType(int); + method public android.view.View getView(int, android.view.View, android.view.ViewGroup); + method public int getViewTypeCount(); + method public android.widget.ListAdapter getWrappedAdapter(); + method public boolean hasStableIds(); + method public boolean isEmpty(); + method public boolean isEnabled(int); + method public void registerDataSetObserver(android.database.DataSetObserver); + method public boolean removeFooter(android.view.View); + method public boolean removeHeader(android.view.View); + method public void unregisterDataSetObserver(android.database.DataSetObserver); + } + + public abstract interface HeterogeneousExpandableList { + method public abstract int getChildType(int, int); + method public abstract int getChildTypeCount(); + method public abstract int getGroupType(int); + method public abstract int getGroupTypeCount(); + } + + public class HorizontalScrollView extends android.widget.FrameLayout { + ctor public HorizontalScrollView(android.content.Context); + ctor public HorizontalScrollView(android.content.Context, android.util.AttributeSet); + ctor public HorizontalScrollView(android.content.Context, android.util.AttributeSet, int); + ctor public HorizontalScrollView(android.content.Context, android.util.AttributeSet, int, int); + method public boolean arrowScroll(int); + method protected int computeScrollDeltaToGetChildRectOnScreen(android.graphics.Rect); + method public boolean executeKeyEvent(android.view.KeyEvent); + method public void fling(int); + method public boolean fullScroll(int); + method public int getMaxScrollAmount(); + method public boolean isFillViewport(); + method public boolean isSmoothScrollingEnabled(); + method public boolean pageScroll(int); + method public void setFillViewport(boolean); + method public void setSmoothScrollingEnabled(boolean); + method public final void smoothScrollBy(int, int); + method public final void smoothScrollTo(int, int); + } + + public class ImageButton extends android.widget.ImageView { + ctor public ImageButton(android.content.Context); + ctor public ImageButton(android.content.Context, android.util.AttributeSet); + ctor public ImageButton(android.content.Context, android.util.AttributeSet, int); + ctor public ImageButton(android.content.Context, android.util.AttributeSet, int, int); + } + + public class ImageSwitcher extends android.widget.ViewSwitcher { + ctor public ImageSwitcher(android.content.Context); + ctor public ImageSwitcher(android.content.Context, android.util.AttributeSet); + method public void setImageDrawable(android.graphics.drawable.Drawable); + method public void setImageResource(int); + method public void setImageURI(android.net.Uri); + } + + public class ImageView extends android.view.View { + ctor public ImageView(android.content.Context); + ctor public ImageView(android.content.Context, android.util.AttributeSet); + ctor public ImageView(android.content.Context, android.util.AttributeSet, int); + ctor public ImageView(android.content.Context, android.util.AttributeSet, int, int); + method public final void clearColorFilter(); + method public boolean getAdjustViewBounds(); + method public boolean getBaselineAlignBottom(); + method public android.graphics.ColorFilter getColorFilter(); + method public boolean getCropToPadding(); + method public android.graphics.drawable.Drawable getDrawable(); + method public int getImageAlpha(); + method public android.graphics.Matrix getImageMatrix(); + method public android.content.res.ColorStateList getImageTintList(); + method public android.graphics.PorterDuff.Mode getImageTintMode(); + method public int getMaxHeight(); + method public int getMaxWidth(); + method public android.widget.ImageView.ScaleType getScaleType(); + method public int[] onCreateDrawableState(int); + method public void setAdjustViewBounds(boolean); + method public deprecated void setAlpha(int); + method public void setBaseline(int); + method public void setBaselineAlignBottom(boolean); + method public final void setColorFilter(int, android.graphics.PorterDuff.Mode); + method public final void setColorFilter(int); + method public void setColorFilter(android.graphics.ColorFilter); + method public void setCropToPadding(boolean); + method protected boolean setFrame(int, int, int, int); + method public void setImageAlpha(int); + method public void setImageBitmap(android.graphics.Bitmap); + method public void setImageDrawable(android.graphics.drawable.Drawable); + method public void setImageLevel(int); + method public void setImageMatrix(android.graphics.Matrix); + method public void setImageResource(int); + method public void setImageState(int[], boolean); + method public void setImageTintList(android.content.res.ColorStateList); + method public void setImageTintMode(android.graphics.PorterDuff.Mode); + method public void setImageURI(android.net.Uri); + method public void setMaxHeight(int); + method public void setMaxWidth(int); + method public void setScaleType(android.widget.ImageView.ScaleType); + } + + public static final class ImageView.ScaleType extends java.lang.Enum { + method public static android.widget.ImageView.ScaleType valueOf(java.lang.String); + method public static final android.widget.ImageView.ScaleType[] values(); + enum_constant public static final android.widget.ImageView.ScaleType CENTER; + enum_constant public static final android.widget.ImageView.ScaleType CENTER_CROP; + enum_constant public static final android.widget.ImageView.ScaleType CENTER_INSIDE; + enum_constant public static final android.widget.ImageView.ScaleType FIT_CENTER; + enum_constant public static final android.widget.ImageView.ScaleType FIT_END; + enum_constant public static final android.widget.ImageView.ScaleType FIT_START; + enum_constant public static final android.widget.ImageView.ScaleType FIT_XY; + enum_constant public static final android.widget.ImageView.ScaleType MATRIX; + } + + public class LinearLayout extends android.view.ViewGroup { + ctor public LinearLayout(android.content.Context); + ctor public LinearLayout(android.content.Context, android.util.AttributeSet); + ctor public LinearLayout(android.content.Context, android.util.AttributeSet, int); + ctor public LinearLayout(android.content.Context, android.util.AttributeSet, int, int); + method public int getBaselineAlignedChildIndex(); + method public android.graphics.drawable.Drawable getDividerDrawable(); + method public int getDividerPadding(); + method public int getOrientation(); + method public int getShowDividers(); + method public float getWeightSum(); + method public boolean isBaselineAligned(); + method public boolean isMeasureWithLargestChildEnabled(); + method protected void onLayout(boolean, int, int, int, int); + method public void setBaselineAligned(boolean); + method public void setBaselineAlignedChildIndex(int); + method public void setDividerDrawable(android.graphics.drawable.Drawable); + method public void setDividerPadding(int); + method public void setGravity(int); + method public void setHorizontalGravity(int); + method public void setMeasureWithLargestChildEnabled(boolean); + method public void setOrientation(int); + method public void setShowDividers(int); + method public void setVerticalGravity(int); + method public void setWeightSum(float); + field public static final int HORIZONTAL = 0; // 0x0 + field public static final int SHOW_DIVIDER_BEGINNING = 1; // 0x1 + field public static final int SHOW_DIVIDER_END = 4; // 0x4 + field public static final int SHOW_DIVIDER_MIDDLE = 2; // 0x2 + field public static final int SHOW_DIVIDER_NONE = 0; // 0x0 + field public static final int VERTICAL = 1; // 0x1 + } + + public static class LinearLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams { + ctor public LinearLayout.LayoutParams(android.content.Context, android.util.AttributeSet); + ctor public LinearLayout.LayoutParams(int, int); + ctor public LinearLayout.LayoutParams(int, int, float); + ctor public LinearLayout.LayoutParams(android.view.ViewGroup.LayoutParams); + ctor public LinearLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams); + ctor public LinearLayout.LayoutParams(android.widget.LinearLayout.LayoutParams); + method public java.lang.String debug(java.lang.String); + field public int gravity; + field public float weight; + } + + public abstract interface ListAdapter implements android.widget.Adapter { + method public abstract boolean areAllItemsEnabled(); + method public abstract boolean isEnabled(int); + } + + public class ListPopupWindow { + ctor public ListPopupWindow(android.content.Context); + ctor public ListPopupWindow(android.content.Context, android.util.AttributeSet); + ctor public ListPopupWindow(android.content.Context, android.util.AttributeSet, int); + ctor public ListPopupWindow(android.content.Context, android.util.AttributeSet, int, int); + method public void clearListSelection(); + method public android.view.View.OnTouchListener createDragToOpenListener(android.view.View); + method public void dismiss(); + method public android.view.View getAnchorView(); + method public int getAnimationStyle(); + method public android.graphics.drawable.Drawable getBackground(); + method public int getHeight(); + method public int getHorizontalOffset(); + method public int getInputMethodMode(); + method public android.widget.ListView getListView(); + method public int getPromptPosition(); + method public java.lang.Object getSelectedItem(); + method public long getSelectedItemId(); + method public int getSelectedItemPosition(); + method public android.view.View getSelectedView(); + method public int getSoftInputMode(); + method public int getVerticalOffset(); + method public int getWidth(); + method public boolean isInputMethodNotNeeded(); + method public boolean isModal(); + method public boolean isShowing(); + method public boolean onKeyDown(int, android.view.KeyEvent); + method public boolean onKeyPreIme(int, android.view.KeyEvent); + method public boolean onKeyUp(int, android.view.KeyEvent); + method public boolean performItemClick(int); + method public void postShow(); + method public void setAdapter(android.widget.ListAdapter); + method public void setAnchorView(android.view.View); + method public void setAnimationStyle(int); + method public void setBackgroundDrawable(android.graphics.drawable.Drawable); + method public void setContentWidth(int); + method public void setDropDownGravity(int); + method public void setHeight(int); + method public void setHorizontalOffset(int); + method public void setInputMethodMode(int); + method public void setListSelector(android.graphics.drawable.Drawable); + method public void setModal(boolean); + method public void setOnDismissListener(android.widget.PopupWindow.OnDismissListener); + method public void setOnItemClickListener(android.widget.AdapterView.OnItemClickListener); + method public void setOnItemSelectedListener(android.widget.AdapterView.OnItemSelectedListener); + method public void setPromptPosition(int); + method public void setPromptView(android.view.View); + method public void setSelection(int); + method public void setSoftInputMode(int); + method public void setVerticalOffset(int); + method public void setWidth(int); + method public void show(); + field public static final int INPUT_METHOD_FROM_FOCUSABLE = 0; // 0x0 + field public static final int INPUT_METHOD_NEEDED = 1; // 0x1 + field public static final int INPUT_METHOD_NOT_NEEDED = 2; // 0x2 + field public static final int MATCH_PARENT = -1; // 0xffffffff + field public static final int POSITION_PROMPT_ABOVE = 0; // 0x0 + field public static final int POSITION_PROMPT_BELOW = 1; // 0x1 + field public static final int WRAP_CONTENT = -2; // 0xfffffffe + } + + public class ListView extends android.widget.AbsListView { + ctor public ListView(android.content.Context); + ctor public ListView(android.content.Context, android.util.AttributeSet); + ctor public ListView(android.content.Context, android.util.AttributeSet, int); + ctor public ListView(android.content.Context, android.util.AttributeSet, int, int); + method public void addFooterView(android.view.View, java.lang.Object, boolean); + method public void addFooterView(android.view.View); + method public void addHeaderView(android.view.View, java.lang.Object, boolean); + method public void addHeaderView(android.view.View); + method public boolean areFooterDividersEnabled(); + method public boolean areHeaderDividersEnabled(); + method protected android.view.View findViewTraversal(int); + method protected android.view.View findViewWithTagTraversal(java.lang.Object); + method public android.widget.ListAdapter getAdapter(); + method public deprecated long[] getCheckItemIds(); + method public android.graphics.drawable.Drawable getDivider(); + method public int getDividerHeight(); + method public int getFooterViewsCount(); + method public int getHeaderViewsCount(); + method public boolean getItemsCanFocus(); + method public int getMaxScrollAmount(); + method public android.graphics.drawable.Drawable getOverscrollFooter(); + method public android.graphics.drawable.Drawable getOverscrollHeader(); + method public boolean removeFooterView(android.view.View); + method public boolean removeHeaderView(android.view.View); + method public void setDivider(android.graphics.drawable.Drawable); + method public void setDividerHeight(int); + method public void setFooterDividersEnabled(boolean); + method public void setHeaderDividersEnabled(boolean); + method public void setItemsCanFocus(boolean); + method public void setOverscrollFooter(android.graphics.drawable.Drawable); + method public void setOverscrollHeader(android.graphics.drawable.Drawable); + method public void setSelection(int); + method public void setSelectionAfterHeaderView(); + method public void smoothScrollByOffset(int); + } + + public class ListView.FixedViewInfo { + ctor public ListView.FixedViewInfo(); + field public java.lang.Object data; + field public boolean isSelectable; + field public android.view.View view; + } + + public class MediaController extends android.widget.FrameLayout { + ctor public MediaController(android.content.Context, android.util.AttributeSet); + ctor public MediaController(android.content.Context, boolean); + ctor public MediaController(android.content.Context); + method public void hide(); + method public boolean isShowing(); + method public void onFinishInflate(); + method public void setAnchorView(android.view.View); + method public void setMediaPlayer(android.widget.MediaController.MediaPlayerControl); + method public void setPrevNextListeners(android.view.View.OnClickListener, android.view.View.OnClickListener); + method public void show(); + method public void show(int); + } + + public static abstract interface MediaController.MediaPlayerControl { + method public abstract boolean canPause(); + method public abstract boolean canSeekBackward(); + method public abstract boolean canSeekForward(); + method public abstract int getAudioSessionId(); + method public abstract int getBufferPercentage(); + method public abstract int getCurrentPosition(); + method public abstract int getDuration(); + method public abstract boolean isPlaying(); + method public abstract void pause(); + method public abstract void seekTo(int); + method public abstract void start(); + } + + public class MultiAutoCompleteTextView extends android.widget.AutoCompleteTextView { + ctor public MultiAutoCompleteTextView(android.content.Context); + ctor public MultiAutoCompleteTextView(android.content.Context, android.util.AttributeSet); + ctor public MultiAutoCompleteTextView(android.content.Context, android.util.AttributeSet, int); + ctor public MultiAutoCompleteTextView(android.content.Context, android.util.AttributeSet, int, int); + method protected void performFiltering(java.lang.CharSequence, int, int, int); + method public void setTokenizer(android.widget.MultiAutoCompleteTextView.Tokenizer); + } + + public static class MultiAutoCompleteTextView.CommaTokenizer implements android.widget.MultiAutoCompleteTextView.Tokenizer { + ctor public MultiAutoCompleteTextView.CommaTokenizer(); + method public int findTokenEnd(java.lang.CharSequence, int); + method public int findTokenStart(java.lang.CharSequence, int); + method public java.lang.CharSequence terminateToken(java.lang.CharSequence); + } + + public static abstract interface MultiAutoCompleteTextView.Tokenizer { + method public abstract int findTokenEnd(java.lang.CharSequence, int); + method public abstract int findTokenStart(java.lang.CharSequence, int); + method public abstract java.lang.CharSequence terminateToken(java.lang.CharSequence); + } + + public class NumberPicker extends android.widget.LinearLayout { + ctor public NumberPicker(android.content.Context); + ctor public NumberPicker(android.content.Context, android.util.AttributeSet); + ctor public NumberPicker(android.content.Context, android.util.AttributeSet, int); + ctor public NumberPicker(android.content.Context, android.util.AttributeSet, int, int); + method public java.lang.String[] getDisplayedValues(); + method public int getMaxValue(); + method public int getMinValue(); + method public int getValue(); + method public boolean getWrapSelectorWheel(); + method public void setDisplayedValues(java.lang.String[]); + method public void setFormatter(android.widget.NumberPicker.Formatter); + method public void setMaxValue(int); + method public void setMinValue(int); + method public void setOnLongPressUpdateInterval(long); + method public void setOnScrollListener(android.widget.NumberPicker.OnScrollListener); + method public void setOnValueChangedListener(android.widget.NumberPicker.OnValueChangeListener); + method public void setValue(int); + method public void setWrapSelectorWheel(boolean); + } + + public static abstract interface NumberPicker.Formatter { + method public abstract java.lang.String format(int); + } + + public static abstract interface NumberPicker.OnScrollListener { + method public abstract void onScrollStateChange(android.widget.NumberPicker, int); + field public static final int SCROLL_STATE_FLING = 2; // 0x2 + field public static final int SCROLL_STATE_IDLE = 0; // 0x0 + field public static final int SCROLL_STATE_TOUCH_SCROLL = 1; // 0x1 + } + + public static abstract interface NumberPicker.OnValueChangeListener { + method public abstract void onValueChange(android.widget.NumberPicker, int, int); + } + + public class OverScroller { + ctor public OverScroller(android.content.Context); + ctor public OverScroller(android.content.Context, android.view.animation.Interpolator); + ctor public OverScroller(android.content.Context, android.view.animation.Interpolator, float, float); + ctor public OverScroller(android.content.Context, android.view.animation.Interpolator, float, float, boolean); + method public void abortAnimation(); + method public boolean computeScrollOffset(); + method public void fling(int, int, int, int, int, int, int, int); + method public void fling(int, int, int, int, int, int, int, int, int, int); + method public final void forceFinished(boolean); + method public float getCurrVelocity(); + method public final int getCurrX(); + method public final int getCurrY(); + method public final int getFinalX(); + method public final int getFinalY(); + method public final int getStartX(); + method public final int getStartY(); + method public final boolean isFinished(); + method public boolean isOverScrolled(); + method public void notifyHorizontalEdgeReached(int, int, int); + method public void notifyVerticalEdgeReached(int, int, int); + method public final void setFriction(float); + method public boolean springBack(int, int, int, int, int, int); + method public void startScroll(int, int, int, int); + method public void startScroll(int, int, int, int, int); + } + + public class PopupMenu { + ctor public PopupMenu(android.content.Context, android.view.View); + ctor public PopupMenu(android.content.Context, android.view.View, int); + ctor public PopupMenu(android.content.Context, android.view.View, int, int, int); + method public void dismiss(); + method public android.view.View.OnTouchListener getDragToOpenListener(); + method public android.view.Menu getMenu(); + method public android.view.MenuInflater getMenuInflater(); + method public void inflate(int); + method public void setOnDismissListener(android.widget.PopupMenu.OnDismissListener); + method public void setOnMenuItemClickListener(android.widget.PopupMenu.OnMenuItemClickListener); + method public void show(); + } + + public static abstract interface PopupMenu.OnDismissListener { + method public abstract void onDismiss(android.widget.PopupMenu); + } + + public static abstract interface PopupMenu.OnMenuItemClickListener { + method public abstract boolean onMenuItemClick(android.view.MenuItem); + } + + public class PopupWindow { + ctor public PopupWindow(android.content.Context); + ctor public PopupWindow(android.content.Context, android.util.AttributeSet); + ctor public PopupWindow(android.content.Context, android.util.AttributeSet, int); + ctor public PopupWindow(android.content.Context, android.util.AttributeSet, int, int); + ctor public PopupWindow(); + ctor public PopupWindow(android.view.View); + ctor public PopupWindow(int, int); + ctor public PopupWindow(android.view.View, int, int); + ctor public PopupWindow(android.view.View, int, int, boolean); + method public void dismiss(); + method public int getAnimationStyle(); + method public android.graphics.drawable.Drawable getBackground(); + method public android.view.View getContentView(); + method public float getElevation(); + method public int getHeight(); + method public int getInputMethodMode(); + method public int getMaxAvailableHeight(android.view.View); + method public int getMaxAvailableHeight(android.view.View, int); + method public int getSoftInputMode(); + method public int getWidth(); + method public boolean isAboveAnchor(); + method public boolean isAttachedInDecor(); + method public boolean isClippingEnabled(); + method public boolean isFocusable(); + method public boolean isOutsideTouchable(); + method public boolean isShowing(); + method public boolean isSplitTouchEnabled(); + method public boolean isTouchable(); + method public void setAnimationStyle(int); + method public void setAttachedInDecor(boolean); + method public void setBackgroundDrawable(android.graphics.drawable.Drawable); + method public void setClippingEnabled(boolean); + method public void setContentView(android.view.View); + method public void setElevation(float); + method public void setFocusable(boolean); + method public void setHeight(int); + method public void setIgnoreCheekPress(); + method public void setInputMethodMode(int); + method public void setOnDismissListener(android.widget.PopupWindow.OnDismissListener); + method public void setOutsideTouchable(boolean); + method public void setSoftInputMode(int); + method public void setSplitTouchEnabled(boolean); + method public void setTouchInterceptor(android.view.View.OnTouchListener); + method public void setTouchable(boolean); + method public void setWidth(int); + method public void setWindowLayoutMode(int, int); + method public void showAsDropDown(android.view.View); + method public void showAsDropDown(android.view.View, int, int); + method public void showAsDropDown(android.view.View, int, int, int); + method public void showAtLocation(android.view.View, int, int, int); + method public void update(); + method public void update(int, int); + method public void update(int, int, int, int); + method public void update(int, int, int, int, boolean); + method public void update(android.view.View, int, int); + method public void update(android.view.View, int, int, int, int); + field public static final int INPUT_METHOD_FROM_FOCUSABLE = 0; // 0x0 + field public static final int INPUT_METHOD_NEEDED = 1; // 0x1 + field public static final int INPUT_METHOD_NOT_NEEDED = 2; // 0x2 + } + + public static abstract interface PopupWindow.OnDismissListener { + method public abstract void onDismiss(); + } + + public class ProgressBar extends android.view.View { + ctor public ProgressBar(android.content.Context); + ctor public ProgressBar(android.content.Context, android.util.AttributeSet); + ctor public ProgressBar(android.content.Context, android.util.AttributeSet, int); + ctor public ProgressBar(android.content.Context, android.util.AttributeSet, int, int); + method public android.graphics.drawable.Drawable getIndeterminateDrawable(); + method public android.content.res.ColorStateList getIndeterminateTintList(); + method public android.graphics.PorterDuff.Mode getIndeterminateTintMode(); + method public android.view.animation.Interpolator getInterpolator(); + method public synchronized int getMax(); + method public synchronized int getProgress(); + method public android.content.res.ColorStateList getProgressBackgroundTintList(); + method public android.graphics.PorterDuff.Mode getProgressBackgroundTintMode(); + method public android.graphics.drawable.Drawable getProgressDrawable(); + method public android.content.res.ColorStateList getProgressTintList(); + method public android.graphics.PorterDuff.Mode getProgressTintMode(); + method public synchronized int getSecondaryProgress(); + method public android.content.res.ColorStateList getSecondaryProgressTintList(); + method public android.graphics.PorterDuff.Mode getSecondaryProgressTintMode(); + method public final synchronized void incrementProgressBy(int); + method public final synchronized void incrementSecondaryProgressBy(int); + method public synchronized boolean isIndeterminate(); + method public void onRestoreInstanceState(android.os.Parcelable); + method public android.os.Parcelable onSaveInstanceState(); + method public synchronized void setIndeterminate(boolean); + method public void setIndeterminateDrawable(android.graphics.drawable.Drawable); + method public void setIndeterminateDrawableTiled(android.graphics.drawable.Drawable); + method public void setIndeterminateTintList(android.content.res.ColorStateList); + method public void setIndeterminateTintMode(android.graphics.PorterDuff.Mode); + method public void setInterpolator(android.content.Context, int); + method public void setInterpolator(android.view.animation.Interpolator); + method public synchronized void setMax(int); + method public synchronized void setProgress(int); + method public void setProgressBackgroundTintList(android.content.res.ColorStateList); + method public void setProgressBackgroundTintMode(android.graphics.PorterDuff.Mode); + method public void setProgressDrawable(android.graphics.drawable.Drawable); + method public void setProgressDrawableTiled(android.graphics.drawable.Drawable); + method public void setProgressTintList(android.content.res.ColorStateList); + method public void setProgressTintMode(android.graphics.PorterDuff.Mode); + method public synchronized void setSecondaryProgress(int); + method public void setSecondaryProgressTintList(android.content.res.ColorStateList); + method public void setSecondaryProgressTintMode(android.graphics.PorterDuff.Mode); + } + + public class QuickContactBadge extends android.widget.ImageView implements android.view.View.OnClickListener { + ctor public QuickContactBadge(android.content.Context); + ctor public QuickContactBadge(android.content.Context, android.util.AttributeSet); + ctor public QuickContactBadge(android.content.Context, android.util.AttributeSet, int); + ctor public QuickContactBadge(android.content.Context, android.util.AttributeSet, int, int); + method public void assignContactFromEmail(java.lang.String, boolean); + method public void assignContactFromEmail(java.lang.String, boolean, android.os.Bundle); + method public void assignContactFromPhone(java.lang.String, boolean); + method public void assignContactFromPhone(java.lang.String, boolean, android.os.Bundle); + method public void assignContactUri(android.net.Uri); + method public void onClick(android.view.View); + method public void setExcludeMimes(java.lang.String[]); + method public void setImageToDefault(); + method public void setMode(int); + method public void setOverlay(android.graphics.drawable.Drawable); + field protected java.lang.String[] mExcludeMimes; + } + + public class RadioButton extends android.widget.CompoundButton { + ctor public RadioButton(android.content.Context); + ctor public RadioButton(android.content.Context, android.util.AttributeSet); + ctor public RadioButton(android.content.Context, android.util.AttributeSet, int); + ctor public RadioButton(android.content.Context, android.util.AttributeSet, int, int); + } + + public class RadioGroup extends android.widget.LinearLayout { + ctor public RadioGroup(android.content.Context); + ctor public RadioGroup(android.content.Context, android.util.AttributeSet); + method public void check(int); + method public void clearCheck(); + method public int getCheckedRadioButtonId(); + method public void setOnCheckedChangeListener(android.widget.RadioGroup.OnCheckedChangeListener); + } + + public static class RadioGroup.LayoutParams extends android.widget.LinearLayout.LayoutParams { + ctor public RadioGroup.LayoutParams(android.content.Context, android.util.AttributeSet); + ctor public RadioGroup.LayoutParams(int, int); + ctor public RadioGroup.LayoutParams(int, int, float); + ctor public RadioGroup.LayoutParams(android.view.ViewGroup.LayoutParams); + ctor public RadioGroup.LayoutParams(android.view.ViewGroup.MarginLayoutParams); + } + + public static abstract interface RadioGroup.OnCheckedChangeListener { + method public abstract void onCheckedChanged(android.widget.RadioGroup, int); + } + + public class RatingBar extends android.widget.AbsSeekBar { + ctor public RatingBar(android.content.Context, android.util.AttributeSet, int); + ctor public RatingBar(android.content.Context, android.util.AttributeSet, int, int); + ctor public RatingBar(android.content.Context, android.util.AttributeSet); + ctor public RatingBar(android.content.Context); + method public int getNumStars(); + method public android.widget.RatingBar.OnRatingBarChangeListener getOnRatingBarChangeListener(); + method public float getRating(); + method public float getStepSize(); + method public boolean isIndicator(); + method public void setIsIndicator(boolean); + method public void setNumStars(int); + method public void setOnRatingBarChangeListener(android.widget.RatingBar.OnRatingBarChangeListener); + method public void setRating(float); + method public void setStepSize(float); + } + + public static abstract interface RatingBar.OnRatingBarChangeListener { + method public abstract void onRatingChanged(android.widget.RatingBar, float, boolean); + } + + public class RelativeLayout extends android.view.ViewGroup { + ctor public RelativeLayout(android.content.Context); + ctor public RelativeLayout(android.content.Context, android.util.AttributeSet); + ctor public RelativeLayout(android.content.Context, android.util.AttributeSet, int); + ctor public RelativeLayout(android.content.Context, android.util.AttributeSet, int, int); + method public int getGravity(); + method protected void onLayout(boolean, int, int, int, int); + method public void setGravity(int); + method public void setHorizontalGravity(int); + method public void setIgnoreGravity(int); + method public void setVerticalGravity(int); + field public static final int ABOVE = 2; // 0x2 + field public static final int ALIGN_BASELINE = 4; // 0x4 + field public static final int ALIGN_BOTTOM = 8; // 0x8 + field public static final int ALIGN_END = 19; // 0x13 + field public static final int ALIGN_LEFT = 5; // 0x5 + field public static final int ALIGN_PARENT_BOTTOM = 12; // 0xc + field public static final int ALIGN_PARENT_END = 21; // 0x15 + field public static final int ALIGN_PARENT_LEFT = 9; // 0x9 + field public static final int ALIGN_PARENT_RIGHT = 11; // 0xb + field public static final int ALIGN_PARENT_START = 20; // 0x14 + field public static final int ALIGN_PARENT_TOP = 10; // 0xa + field public static final int ALIGN_RIGHT = 7; // 0x7 + field public static final int ALIGN_START = 18; // 0x12 + field public static final int ALIGN_TOP = 6; // 0x6 + field public static final int BELOW = 3; // 0x3 + field public static final int CENTER_HORIZONTAL = 14; // 0xe + field public static final int CENTER_IN_PARENT = 13; // 0xd + field public static final int CENTER_VERTICAL = 15; // 0xf + field public static final int END_OF = 17; // 0x11 + field public static final int LEFT_OF = 0; // 0x0 + field public static final int RIGHT_OF = 1; // 0x1 + field public static final int START_OF = 16; // 0x10 + field public static final int TRUE = -1; // 0xffffffff + } + + public static class RelativeLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams { + ctor public RelativeLayout.LayoutParams(android.content.Context, android.util.AttributeSet); + ctor public RelativeLayout.LayoutParams(int, int); + ctor public RelativeLayout.LayoutParams(android.view.ViewGroup.LayoutParams); + ctor public RelativeLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams); + ctor public RelativeLayout.LayoutParams(android.widget.RelativeLayout.LayoutParams); + method public void addRule(int); + method public void addRule(int, int); + method public java.lang.String debug(java.lang.String); + method public int[] getRules(); + method public void removeRule(int); + field public boolean alignWithParent; + } + + public class RemoteViews implements android.view.LayoutInflater.Filter android.os.Parcelable { + ctor public RemoteViews(java.lang.String, int); + ctor public RemoteViews(android.widget.RemoteViews, android.widget.RemoteViews); + ctor public RemoteViews(android.os.Parcel); + method public void addView(int, android.widget.RemoteViews); + method public android.view.View apply(android.content.Context, android.view.ViewGroup); + method public android.widget.RemoteViews clone(); + method public int describeContents(); + method public int getLayoutId(); + method public java.lang.String getPackage(); + method public boolean onLoadClass(java.lang.Class); + method public void reapply(android.content.Context, android.view.View); + method public void removeAllViews(int); + method public void setAccessibilityTraversalAfter(int, int); + method public void setAccessibilityTraversalBefore(int, int); + method public void setBitmap(int, java.lang.String, android.graphics.Bitmap); + method public void setBoolean(int, java.lang.String, boolean); + method public void setBundle(int, java.lang.String, android.os.Bundle); + method public void setByte(int, java.lang.String, byte); + method public void setChar(int, java.lang.String, char); + method public void setCharSequence(int, java.lang.String, java.lang.CharSequence); + method public void setChronometer(int, long, java.lang.String, boolean); + method public void setContentDescription(int, java.lang.CharSequence); + method public void setDisplayedChild(int, int); + method public void setDouble(int, java.lang.String, double); + method public void setEmptyView(int, int); + method public void setFloat(int, java.lang.String, float); + method public void setImageViewBitmap(int, android.graphics.Bitmap); + method public void setImageViewResource(int, int); + method public void setImageViewUri(int, android.net.Uri); + method public void setInt(int, java.lang.String, int); + method public void setIntent(int, java.lang.String, android.content.Intent); + method public void setLabelFor(int, int); + method public void setLong(int, java.lang.String, long); + method public void setOnClickFillInIntent(int, android.content.Intent); + method public void setOnClickPendingIntent(int, android.app.PendingIntent); + method public void setPendingIntentTemplate(int, android.app.PendingIntent); + method public void setProgressBar(int, int, int, boolean); + method public void setRelativeScrollPosition(int, int); + method public deprecated void setRemoteAdapter(int, int, android.content.Intent); + method public void setRemoteAdapter(int, android.content.Intent); + method public void setScrollPosition(int, int); + method public void setShort(int, java.lang.String, short); + method public void setString(int, java.lang.String, java.lang.String); + method public void setTextColor(int, int); + method public void setTextViewCompoundDrawables(int, int, int, int, int); + method public void setTextViewCompoundDrawablesRelative(int, int, int, int, int); + method public void setTextViewText(int, java.lang.CharSequence); + method public void setTextViewTextSize(int, int, float); + method public void setUri(int, java.lang.String, android.net.Uri); + method public void setViewPadding(int, int, int, int, int); + method public void setViewVisibility(int, int); + method public void showNext(int); + method public void showPrevious(int); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public static class RemoteViews.ActionException extends java.lang.RuntimeException { + ctor public RemoteViews.ActionException(java.lang.Exception); + ctor public RemoteViews.ActionException(java.lang.String); + } + + public static abstract class RemoteViews.RemoteView implements java.lang.annotation.Annotation { + } + + public abstract class RemoteViewsService extends android.app.Service { + ctor public RemoteViewsService(); + method public android.os.IBinder onBind(android.content.Intent); + method public abstract android.widget.RemoteViewsService.RemoteViewsFactory onGetViewFactory(android.content.Intent); + } + + public static abstract interface RemoteViewsService.RemoteViewsFactory { + method public abstract int getCount(); + method public abstract long getItemId(int); + method public abstract android.widget.RemoteViews getLoadingView(); + method public abstract android.widget.RemoteViews getViewAt(int); + method public abstract int getViewTypeCount(); + method public abstract boolean hasStableIds(); + method public abstract void onCreate(); + method public abstract void onDataSetChanged(); + method public abstract void onDestroy(); + } + + public abstract class ResourceCursorAdapter extends android.widget.CursorAdapter { + ctor public deprecated ResourceCursorAdapter(android.content.Context, int, android.database.Cursor); + ctor public ResourceCursorAdapter(android.content.Context, int, android.database.Cursor, boolean); + ctor public ResourceCursorAdapter(android.content.Context, int, android.database.Cursor, int); + method public android.view.View newView(android.content.Context, android.database.Cursor, android.view.ViewGroup); + method public void setDropDownViewResource(int); + method public void setViewResource(int); + } + + public abstract class ResourceCursorTreeAdapter extends android.widget.CursorTreeAdapter { + ctor public ResourceCursorTreeAdapter(android.content.Context, android.database.Cursor, int, int, int, int); + ctor public ResourceCursorTreeAdapter(android.content.Context, android.database.Cursor, int, int, int); + ctor public ResourceCursorTreeAdapter(android.content.Context, android.database.Cursor, int, int); + method public android.view.View newChildView(android.content.Context, android.database.Cursor, boolean, android.view.ViewGroup); + method public android.view.View newGroupView(android.content.Context, android.database.Cursor, boolean, android.view.ViewGroup); + } + + public class ScrollView extends android.widget.FrameLayout { + ctor public ScrollView(android.content.Context); + ctor public ScrollView(android.content.Context, android.util.AttributeSet); + ctor public ScrollView(android.content.Context, android.util.AttributeSet, int); + ctor public ScrollView(android.content.Context, android.util.AttributeSet, int, int); + method public boolean arrowScroll(int); + method protected int computeScrollDeltaToGetChildRectOnScreen(android.graphics.Rect); + method public boolean executeKeyEvent(android.view.KeyEvent); + method public void fling(int); + method public boolean fullScroll(int); + method public int getMaxScrollAmount(); + method public boolean isFillViewport(); + method public boolean isSmoothScrollingEnabled(); + method public boolean pageScroll(int); + method public void setFillViewport(boolean); + method public void setSmoothScrollingEnabled(boolean); + method public final void smoothScrollBy(int, int); + method public final void smoothScrollTo(int, int); + } + + public class Scroller { + ctor public Scroller(android.content.Context); + ctor public Scroller(android.content.Context, android.view.animation.Interpolator); + ctor public Scroller(android.content.Context, android.view.animation.Interpolator, boolean); + method public void abortAnimation(); + method public boolean computeScrollOffset(); + method public void extendDuration(int); + method public void fling(int, int, int, int, int, int, int, int); + method public final void forceFinished(boolean); + method public float getCurrVelocity(); + method public final int getCurrX(); + method public final int getCurrY(); + method public final int getDuration(); + method public final int getFinalX(); + method public final int getFinalY(); + method public final int getStartX(); + method public final int getStartY(); + method public final boolean isFinished(); + method public void setFinalX(int); + method public void setFinalY(int); + method public final void setFriction(float); + method public void startScroll(int, int, int, int); + method public void startScroll(int, int, int, int, int); + method public int timePassed(); + } + + public class SearchView extends android.widget.LinearLayout implements android.view.CollapsibleActionView { + ctor public SearchView(android.content.Context); + ctor public SearchView(android.content.Context, android.util.AttributeSet); + ctor public SearchView(android.content.Context, android.util.AttributeSet, int); + ctor public SearchView(android.content.Context, android.util.AttributeSet, int, int); + method public int getImeOptions(); + method public int getInputType(); + method public int getMaxWidth(); + method public java.lang.CharSequence getQuery(); + method public java.lang.CharSequence getQueryHint(); + method public android.widget.CursorAdapter getSuggestionsAdapter(); + method public boolean isIconfiedByDefault(); + method public boolean isIconified(); + method public boolean isQueryRefinementEnabled(); + method public boolean isSubmitButtonEnabled(); + method public void onActionViewCollapsed(); + method public void onActionViewExpanded(); + method public void setIconified(boolean); + method public void setIconifiedByDefault(boolean); + method public void setImeOptions(int); + method public void setInputType(int); + method public void setMaxWidth(int); + method public void setOnCloseListener(android.widget.SearchView.OnCloseListener); + method public void setOnQueryTextFocusChangeListener(android.view.View.OnFocusChangeListener); + method public void setOnQueryTextListener(android.widget.SearchView.OnQueryTextListener); + method public void setOnSearchClickListener(android.view.View.OnClickListener); + method public void setOnSuggestionListener(android.widget.SearchView.OnSuggestionListener); + method public void setQuery(java.lang.CharSequence, boolean); + method public void setQueryHint(java.lang.CharSequence); + method public void setQueryRefinementEnabled(boolean); + method public void setSearchableInfo(android.app.SearchableInfo); + method public void setSubmitButtonEnabled(boolean); + method public void setSuggestionsAdapter(android.widget.CursorAdapter); + } + + public static abstract interface SearchView.OnCloseListener { + method public abstract boolean onClose(); + } + + public static abstract interface SearchView.OnQueryTextListener { + method public abstract boolean onQueryTextChange(java.lang.String); + method public abstract boolean onQueryTextSubmit(java.lang.String); + } + + public static abstract interface SearchView.OnSuggestionListener { + method public abstract boolean onSuggestionClick(int); + method public abstract boolean onSuggestionSelect(int); + } + + public abstract interface SectionIndexer { + method public abstract int getPositionForSection(int); + method public abstract int getSectionForPosition(int); + method public abstract java.lang.Object[] getSections(); + } + + public class SeekBar extends android.widget.AbsSeekBar { + ctor public SeekBar(android.content.Context); + ctor public SeekBar(android.content.Context, android.util.AttributeSet); + ctor public SeekBar(android.content.Context, android.util.AttributeSet, int); + ctor public SeekBar(android.content.Context, android.util.AttributeSet, int, int); + method public void setOnSeekBarChangeListener(android.widget.SeekBar.OnSeekBarChangeListener); + } + + public static abstract interface SeekBar.OnSeekBarChangeListener { + method public abstract void onProgressChanged(android.widget.SeekBar, int, boolean); + method public abstract void onStartTrackingTouch(android.widget.SeekBar); + method public abstract void onStopTrackingTouch(android.widget.SeekBar); + } + + public class ShareActionProvider extends android.view.ActionProvider { + ctor public ShareActionProvider(android.content.Context); + method public android.view.View onCreateActionView(); + method public void setOnShareTargetSelectedListener(android.widget.ShareActionProvider.OnShareTargetSelectedListener); + method public void setShareHistoryFileName(java.lang.String); + method public void setShareIntent(android.content.Intent); + field public static final java.lang.String DEFAULT_SHARE_HISTORY_FILE_NAME = "share_history.xml"; + } + + public static abstract interface ShareActionProvider.OnShareTargetSelectedListener { + method public abstract boolean onShareTargetSelected(android.widget.ShareActionProvider, android.content.Intent); + } + + public class SimpleAdapter extends android.widget.BaseAdapter implements android.widget.Filterable { + ctor public SimpleAdapter(android.content.Context, java.util.List>, int, java.lang.String[], int[]); + method public int getCount(); + method public android.widget.Filter getFilter(); + method public java.lang.Object getItem(int); + method public long getItemId(int); + method public android.view.View getView(int, android.view.View, android.view.ViewGroup); + method public android.widget.SimpleAdapter.ViewBinder getViewBinder(); + method public void setDropDownViewResource(int); + method public void setViewBinder(android.widget.SimpleAdapter.ViewBinder); + method public void setViewImage(android.widget.ImageView, int); + method public void setViewImage(android.widget.ImageView, java.lang.String); + method public void setViewText(android.widget.TextView, java.lang.String); + } + + public static abstract interface SimpleAdapter.ViewBinder { + method public abstract boolean setViewValue(android.view.View, java.lang.Object, java.lang.String); + } + + public class SimpleCursorAdapter extends android.widget.ResourceCursorAdapter { + ctor public deprecated SimpleCursorAdapter(android.content.Context, int, android.database.Cursor, java.lang.String[], int[]); + ctor public SimpleCursorAdapter(android.content.Context, int, android.database.Cursor, java.lang.String[], int[], int); + method public void bindView(android.view.View, android.content.Context, android.database.Cursor); + method public void changeCursorAndColumns(android.database.Cursor, java.lang.String[], int[]); + method public android.widget.SimpleCursorAdapter.CursorToStringConverter getCursorToStringConverter(); + method public int getStringConversionColumn(); + method public android.widget.SimpleCursorAdapter.ViewBinder getViewBinder(); + method public void setCursorToStringConverter(android.widget.SimpleCursorAdapter.CursorToStringConverter); + method public void setStringConversionColumn(int); + method public void setViewBinder(android.widget.SimpleCursorAdapter.ViewBinder); + method public void setViewImage(android.widget.ImageView, java.lang.String); + method public void setViewText(android.widget.TextView, java.lang.String); + } + + public static abstract interface SimpleCursorAdapter.CursorToStringConverter { + method public abstract java.lang.CharSequence convertToString(android.database.Cursor); + } + + public static abstract interface SimpleCursorAdapter.ViewBinder { + method public abstract boolean setViewValue(android.view.View, android.database.Cursor, int); + } + + public abstract class SimpleCursorTreeAdapter extends android.widget.ResourceCursorTreeAdapter { + ctor public SimpleCursorTreeAdapter(android.content.Context, android.database.Cursor, int, int, java.lang.String[], int[], int, int, java.lang.String[], int[]); + ctor public SimpleCursorTreeAdapter(android.content.Context, android.database.Cursor, int, int, java.lang.String[], int[], int, java.lang.String[], int[]); + ctor public SimpleCursorTreeAdapter(android.content.Context, android.database.Cursor, int, java.lang.String[], int[], int, java.lang.String[], int[]); + method protected void bindChildView(android.view.View, android.content.Context, android.database.Cursor, boolean); + method protected void bindGroupView(android.view.View, android.content.Context, android.database.Cursor, boolean); + method public android.widget.SimpleCursorTreeAdapter.ViewBinder getViewBinder(); + method public void setViewBinder(android.widget.SimpleCursorTreeAdapter.ViewBinder); + method protected void setViewImage(android.widget.ImageView, java.lang.String); + method public void setViewText(android.widget.TextView, java.lang.String); + } + + public static abstract interface SimpleCursorTreeAdapter.ViewBinder { + method public abstract boolean setViewValue(android.view.View, android.database.Cursor, int); + } + + public class SimpleExpandableListAdapter extends android.widget.BaseExpandableListAdapter { + ctor public SimpleExpandableListAdapter(android.content.Context, java.util.List>, int, java.lang.String[], int[], java.util.List>>, int, java.lang.String[], int[]); + ctor public SimpleExpandableListAdapter(android.content.Context, java.util.List>, int, int, java.lang.String[], int[], java.util.List>>, int, java.lang.String[], int[]); + ctor public SimpleExpandableListAdapter(android.content.Context, java.util.List>, int, int, java.lang.String[], int[], java.util.List>>, int, int, java.lang.String[], int[]); + method public java.lang.Object getChild(int, int); + method public long getChildId(int, int); + method public android.view.View getChildView(int, int, boolean, android.view.View, android.view.ViewGroup); + method public int getChildrenCount(int); + method public java.lang.Object getGroup(int); + method public int getGroupCount(); + method public long getGroupId(int); + method public android.view.View getGroupView(int, boolean, android.view.View, android.view.ViewGroup); + method public boolean hasStableIds(); + method public boolean isChildSelectable(int, int); + method public android.view.View newChildView(boolean, android.view.ViewGroup); + method public android.view.View newGroupView(boolean, android.view.ViewGroup); + } + + public deprecated class SlidingDrawer extends android.view.ViewGroup { + ctor public SlidingDrawer(android.content.Context, android.util.AttributeSet); + ctor public SlidingDrawer(android.content.Context, android.util.AttributeSet, int); + ctor public SlidingDrawer(android.content.Context, android.util.AttributeSet, int, int); + method public void animateClose(); + method public void animateOpen(); + method public void animateToggle(); + method public void close(); + method public android.view.View getContent(); + method public android.view.View getHandle(); + method public boolean isMoving(); + method public boolean isOpened(); + method public void lock(); + method protected void onLayout(boolean, int, int, int, int); + method public void open(); + method public void setOnDrawerCloseListener(android.widget.SlidingDrawer.OnDrawerCloseListener); + method public void setOnDrawerOpenListener(android.widget.SlidingDrawer.OnDrawerOpenListener); + method public void setOnDrawerScrollListener(android.widget.SlidingDrawer.OnDrawerScrollListener); + method public void toggle(); + method public void unlock(); + field public static final int ORIENTATION_HORIZONTAL = 0; // 0x0 + field public static final int ORIENTATION_VERTICAL = 1; // 0x1 + } + + public static abstract interface SlidingDrawer.OnDrawerCloseListener { + method public abstract void onDrawerClosed(); + } + + public static abstract interface SlidingDrawer.OnDrawerOpenListener { + method public abstract void onDrawerOpened(); + } + + public static abstract interface SlidingDrawer.OnDrawerScrollListener { + method public abstract void onScrollEnded(); + method public abstract void onScrollStarted(); + } + + public final class Space extends android.view.View { + ctor public Space(android.content.Context, android.util.AttributeSet, int, int); + ctor public Space(android.content.Context, android.util.AttributeSet, int); + ctor public Space(android.content.Context, android.util.AttributeSet); + ctor public Space(android.content.Context); + } + + public class Spinner extends android.widget.AbsSpinner implements android.content.DialogInterface.OnClickListener { + ctor public Spinner(android.content.Context); + ctor public Spinner(android.content.Context, int); + ctor public Spinner(android.content.Context, android.util.AttributeSet); + ctor public Spinner(android.content.Context, android.util.AttributeSet, int); + ctor public Spinner(android.content.Context, android.util.AttributeSet, int, int); + ctor public Spinner(android.content.Context, android.util.AttributeSet, int, int, int); + method public int getDropDownHorizontalOffset(); + method public int getDropDownVerticalOffset(); + method public int getDropDownWidth(); + method public int getGravity(); + method public android.graphics.drawable.Drawable getPopupBackground(); + method public java.lang.CharSequence getPrompt(); + method public void onClick(android.content.DialogInterface, int); + method public void setDropDownHorizontalOffset(int); + method public void setDropDownVerticalOffset(int); + method public void setDropDownWidth(int); + method public void setGravity(int); + method public void setPopupBackgroundDrawable(android.graphics.drawable.Drawable); + method public void setPopupBackgroundResource(int); + method public void setPrompt(java.lang.CharSequence); + method public void setPromptId(int); + field public static final int MODE_DIALOG = 0; // 0x0 + field public static final int MODE_DROPDOWN = 1; // 0x1 + } + + public abstract interface SpinnerAdapter implements android.widget.Adapter { + method public abstract android.view.View getDropDownView(int, android.view.View, android.view.ViewGroup); + } + + public class StackView extends android.widget.AdapterViewAnimator { + ctor public StackView(android.content.Context); + ctor public StackView(android.content.Context, android.util.AttributeSet); + ctor public StackView(android.content.Context, android.util.AttributeSet, int); + ctor public StackView(android.content.Context, android.util.AttributeSet, int, int); + } + + public class Switch extends android.widget.CompoundButton { + ctor public Switch(android.content.Context); + ctor public Switch(android.content.Context, android.util.AttributeSet); + ctor public Switch(android.content.Context, android.util.AttributeSet, int); + ctor public Switch(android.content.Context, android.util.AttributeSet, int, int); + method public boolean getShowText(); + method public boolean getSplitTrack(); + method public int getSwitchMinWidth(); + method public int getSwitchPadding(); + method public java.lang.CharSequence getTextOff(); + method public java.lang.CharSequence getTextOn(); + method public android.graphics.drawable.Drawable getThumbDrawable(); + method public int getThumbTextPadding(); + method public android.graphics.drawable.Drawable getTrackDrawable(); + method public void onMeasure(int, int); + method public void setShowText(boolean); + method public void setSplitTrack(boolean); + method public void setSwitchMinWidth(int); + method public void setSwitchPadding(int); + method public void setSwitchTextAppearance(android.content.Context, int); + method public void setSwitchTypeface(android.graphics.Typeface, int); + method public void setSwitchTypeface(android.graphics.Typeface); + method public void setTextOff(java.lang.CharSequence); + method public void setTextOn(java.lang.CharSequence); + method public void setThumbDrawable(android.graphics.drawable.Drawable); + method public void setThumbResource(int); + method public void setThumbTextPadding(int); + method public void setTrackDrawable(android.graphics.drawable.Drawable); + method public void setTrackResource(int); + } + + public class TabHost extends android.widget.FrameLayout implements android.view.ViewTreeObserver.OnTouchModeChangeListener { + ctor public TabHost(android.content.Context); + ctor public TabHost(android.content.Context, android.util.AttributeSet); + ctor public TabHost(android.content.Context, android.util.AttributeSet, int); + ctor public TabHost(android.content.Context, android.util.AttributeSet, int, int); + method public void addTab(android.widget.TabHost.TabSpec); + method public void clearAllTabs(); + method public int getCurrentTab(); + method public java.lang.String getCurrentTabTag(); + method public android.view.View getCurrentTabView(); + method public android.view.View getCurrentView(); + method public android.widget.FrameLayout getTabContentView(); + method public android.widget.TabWidget getTabWidget(); + method public android.widget.TabHost.TabSpec newTabSpec(java.lang.String); + method public void onTouchModeChanged(boolean); + method public void setCurrentTab(int); + method public void setCurrentTabByTag(java.lang.String); + method public void setOnTabChangedListener(android.widget.TabHost.OnTabChangeListener); + method public void setup(); + method public void setup(android.app.LocalActivityManager); + } + + public static abstract interface TabHost.OnTabChangeListener { + method public abstract void onTabChanged(java.lang.String); + } + + public static abstract interface TabHost.TabContentFactory { + method public abstract android.view.View createTabContent(java.lang.String); + } + + public class TabHost.TabSpec { + method public java.lang.String getTag(); + method public android.widget.TabHost.TabSpec setContent(int); + method public android.widget.TabHost.TabSpec setContent(android.widget.TabHost.TabContentFactory); + method public android.widget.TabHost.TabSpec setContent(android.content.Intent); + method public android.widget.TabHost.TabSpec setIndicator(java.lang.CharSequence); + method public android.widget.TabHost.TabSpec setIndicator(java.lang.CharSequence, android.graphics.drawable.Drawable); + method public android.widget.TabHost.TabSpec setIndicator(android.view.View); + } + + public class TabWidget extends android.widget.LinearLayout implements android.view.View.OnFocusChangeListener { + ctor public TabWidget(android.content.Context); + ctor public TabWidget(android.content.Context, android.util.AttributeSet); + ctor public TabWidget(android.content.Context, android.util.AttributeSet, int); + ctor public TabWidget(android.content.Context, android.util.AttributeSet, int, int); + method public void dispatchDraw(android.graphics.Canvas); + method public void focusCurrentTab(int); + method public android.view.View getChildTabViewAt(int); + method public int getTabCount(); + method public boolean isStripEnabled(); + method public void onFocusChange(android.view.View, boolean); + method public void setCurrentTab(int); + method public void setDividerDrawable(int); + method public void setLeftStripDrawable(android.graphics.drawable.Drawable); + method public void setLeftStripDrawable(int); + method public void setRightStripDrawable(android.graphics.drawable.Drawable); + method public void setRightStripDrawable(int); + method public void setStripEnabled(boolean); + } + + public class TableLayout extends android.widget.LinearLayout { + ctor public TableLayout(android.content.Context); + ctor public TableLayout(android.content.Context, android.util.AttributeSet); + method public boolean isColumnCollapsed(int); + method public boolean isColumnShrinkable(int); + method public boolean isColumnStretchable(int); + method public boolean isShrinkAllColumns(); + method public boolean isStretchAllColumns(); + method public void setColumnCollapsed(int, boolean); + method public void setColumnShrinkable(int, boolean); + method public void setColumnStretchable(int, boolean); + method public void setShrinkAllColumns(boolean); + method public void setStretchAllColumns(boolean); + } + + public static class TableLayout.LayoutParams extends android.widget.LinearLayout.LayoutParams { + ctor public TableLayout.LayoutParams(android.content.Context, android.util.AttributeSet); + ctor public TableLayout.LayoutParams(int, int); + ctor public TableLayout.LayoutParams(int, int, float); + ctor public TableLayout.LayoutParams(); + ctor public TableLayout.LayoutParams(android.view.ViewGroup.LayoutParams); + ctor public TableLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams); + } + + public class TableRow extends android.widget.LinearLayout { + ctor public TableRow(android.content.Context); + ctor public TableRow(android.content.Context, android.util.AttributeSet); + method public android.view.View getVirtualChildAt(int); + method public int getVirtualChildCount(); + } + + public static class TableRow.LayoutParams extends android.widget.LinearLayout.LayoutParams { + ctor public TableRow.LayoutParams(android.content.Context, android.util.AttributeSet); + ctor public TableRow.LayoutParams(int, int); + ctor public TableRow.LayoutParams(int, int, float); + ctor public TableRow.LayoutParams(); + ctor public TableRow.LayoutParams(int); + ctor public TableRow.LayoutParams(android.view.ViewGroup.LayoutParams); + ctor public TableRow.LayoutParams(android.view.ViewGroup.MarginLayoutParams); + field public int column; + field public int span; + } + + public class TextClock extends android.widget.TextView { + ctor public TextClock(android.content.Context); + ctor public TextClock(android.content.Context, android.util.AttributeSet); + ctor public TextClock(android.content.Context, android.util.AttributeSet, int); + ctor public TextClock(android.content.Context, android.util.AttributeSet, int, int); + method public java.lang.CharSequence getFormat12Hour(); + method public java.lang.CharSequence getFormat24Hour(); + method public java.lang.String getTimeZone(); + method public boolean is24HourModeEnabled(); + method public void setFormat12Hour(java.lang.CharSequence); + method public void setFormat24Hour(java.lang.CharSequence); + method public void setTimeZone(java.lang.String); + field public static final deprecated java.lang.CharSequence DEFAULT_FORMAT_12_HOUR; + field public static final deprecated java.lang.CharSequence DEFAULT_FORMAT_24_HOUR; + } + + public class TextSwitcher extends android.widget.ViewSwitcher { + ctor public TextSwitcher(android.content.Context); + ctor public TextSwitcher(android.content.Context, android.util.AttributeSet); + method public void setCurrentText(java.lang.CharSequence); + method public void setText(java.lang.CharSequence); + } + + public class TextView extends android.view.View implements android.view.ViewTreeObserver.OnPreDrawListener { + ctor public TextView(android.content.Context); + ctor public TextView(android.content.Context, android.util.AttributeSet); + ctor public TextView(android.content.Context, android.util.AttributeSet, int); + ctor public TextView(android.content.Context, android.util.AttributeSet, int, int); + method public void addTextChangedListener(android.text.TextWatcher); + method public final void append(java.lang.CharSequence); + method public void append(java.lang.CharSequence, int, int); + method public void beginBatchEdit(); + method public boolean bringPointIntoView(int); + method public void clearComposingText(); + method public void debug(int); + method public boolean didTouchFocusSelect(); + method public void endBatchEdit(); + method public boolean extractText(android.view.inputmethod.ExtractedTextRequest, android.view.inputmethod.ExtractedText); + method public final int getAutoLinkMask(); + method public int getCompoundDrawablePadding(); + method public android.graphics.drawable.Drawable[] getCompoundDrawables(); + method public android.graphics.drawable.Drawable[] getCompoundDrawablesRelative(); + method public int getCompoundPaddingBottom(); + method public int getCompoundPaddingEnd(); + method public int getCompoundPaddingLeft(); + method public int getCompoundPaddingRight(); + method public int getCompoundPaddingStart(); + method public int getCompoundPaddingTop(); + method public final int getCurrentHintTextColor(); + method public final int getCurrentTextColor(); + method public android.view.ActionMode.Callback getCustomSelectionActionModeCallback(); + method protected boolean getDefaultEditable(); + method protected android.text.method.MovementMethod getDefaultMovementMethod(); + method public android.text.Editable getEditableText(); + method public android.text.TextUtils.TruncateAt getEllipsize(); + method public java.lang.CharSequence getError(); + method public int getExtendedPaddingBottom(); + method public int getExtendedPaddingTop(); + method public android.text.InputFilter[] getFilters(); + method public java.lang.String getFontFeatureSettings(); + method public boolean getFreezesText(); + method public int getGravity(); + method public int getHighlightColor(); + method public java.lang.CharSequence getHint(); + method public final android.content.res.ColorStateList getHintTextColors(); + method public int getImeActionId(); + method public java.lang.CharSequence getImeActionLabel(); + method public int getImeOptions(); + method public boolean getIncludeFontPadding(); + method public android.os.Bundle getInputExtras(boolean); + method public int getInputType(); + method public final android.text.method.KeyListener getKeyListener(); + method public final android.text.Layout getLayout(); + method public float getLetterSpacing(); + method public int getLineBounds(int, android.graphics.Rect); + method public int getLineCount(); + method public int getLineHeight(); + method public float getLineSpacingExtra(); + method public float getLineSpacingMultiplier(); + method public final android.content.res.ColorStateList getLinkTextColors(); + method public final boolean getLinksClickable(); + method public int getMarqueeRepeatLimit(); + method public int getMaxEms(); + method public int getMaxHeight(); + method public int getMaxLines(); + method public int getMaxWidth(); + method public int getMinEms(); + method public int getMinHeight(); + method public int getMinLines(); + method public int getMinWidth(); + method public final android.text.method.MovementMethod getMovementMethod(); + method public int getOffsetForPosition(float, float); + method public android.text.TextPaint getPaint(); + method public int getPaintFlags(); + method public java.lang.String getPrivateImeOptions(); + method public int getSelectionEnd(); + method public int getSelectionStart(); + method public int getShadowColor(); + method public float getShadowDx(); + method public float getShadowDy(); + method public float getShadowRadius(); + method public final boolean getShowSoftInputOnFocus(); + method public java.lang.CharSequence getText(); + method public final android.content.res.ColorStateList getTextColors(); + method public java.util.Locale getTextLocale(); + method public float getTextScaleX(); + method public float getTextSize(); + method public int getTotalPaddingBottom(); + method public int getTotalPaddingEnd(); + method public int getTotalPaddingLeft(); + method public int getTotalPaddingRight(); + method public int getTotalPaddingStart(); + method public int getTotalPaddingTop(); + method public final android.text.method.TransformationMethod getTransformationMethod(); + method public android.graphics.Typeface getTypeface(); + method public android.text.style.URLSpan[] getUrls(); + method public boolean hasSelection(); + method public boolean isCursorVisible(); + method public boolean isInputMethodTarget(); + method public boolean isSuggestionsEnabled(); + method public boolean isTextSelectable(); + method public int length(); + method public boolean moveCursorToVisibleOffset(); + method public void onBeginBatchEdit(); + method public void onCommitCompletion(android.view.inputmethod.CompletionInfo); + method public void onCommitCorrection(android.view.inputmethod.CorrectionInfo); + method public void onEditorAction(int); + method public void onEndBatchEdit(); + method public boolean onPreDraw(); + method public boolean onPrivateIMECommand(java.lang.String, android.os.Bundle); + method public void onRestoreInstanceState(android.os.Parcelable); + method public android.os.Parcelable onSaveInstanceState(); + method protected void onSelectionChanged(int, int); + method protected void onTextChanged(java.lang.CharSequence, int, int, int); + method public boolean onTextContextMenuItem(int); + method public void removeTextChangedListener(android.text.TextWatcher); + method public void setAllCaps(boolean); + method public final void setAutoLinkMask(int); + method public void setCompoundDrawablePadding(int); + method public void setCompoundDrawables(android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable); + method public void setCompoundDrawablesRelative(android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable); + method public void setCompoundDrawablesRelativeWithIntrinsicBounds(int, int, int, int); + method public void setCompoundDrawablesRelativeWithIntrinsicBounds(android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable); + method public void setCompoundDrawablesWithIntrinsicBounds(int, int, int, int); + method public void setCompoundDrawablesWithIntrinsicBounds(android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable); + method public void setCursorVisible(boolean); + method public void setCustomSelectionActionModeCallback(android.view.ActionMode.Callback); + method public final void setEditableFactory(android.text.Editable.Factory); + method public void setElegantTextHeight(boolean); + method public void setEllipsize(android.text.TextUtils.TruncateAt); + method public void setEms(int); + method public void setError(java.lang.CharSequence); + method public void setError(java.lang.CharSequence, android.graphics.drawable.Drawable); + method public void setExtractedText(android.view.inputmethod.ExtractedText); + method public void setFilters(android.text.InputFilter[]); + method public void setFontFeatureSettings(java.lang.String); + method protected boolean setFrame(int, int, int, int); + method public void setFreezesText(boolean); + method public void setGravity(int); + method public void setHeight(int); + method public void setHighlightColor(int); + method public final void setHint(java.lang.CharSequence); + method public final void setHint(int); + method public final void setHintTextColor(int); + method public final void setHintTextColor(android.content.res.ColorStateList); + method public void setHorizontallyScrolling(boolean); + method public void setImeActionLabel(java.lang.CharSequence, int); + method public void setImeOptions(int); + method public void setIncludeFontPadding(boolean); + method public void setInputExtras(int) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException; + method public void setInputType(int); + method public void setKeyListener(android.text.method.KeyListener); + method public void setLetterSpacing(float); + method public void setLineSpacing(float, float); + method public void setLines(int); + method public final void setLinkTextColor(int); + method public final void setLinkTextColor(android.content.res.ColorStateList); + method public final void setLinksClickable(boolean); + method public void setMarqueeRepeatLimit(int); + method public void setMaxEms(int); + method public void setMaxHeight(int); + method public void setMaxLines(int); + method public void setMaxWidth(int); + method public void setMinEms(int); + method public void setMinHeight(int); + method public void setMinLines(int); + method public void setMinWidth(int); + method public final void setMovementMethod(android.text.method.MovementMethod); + method public void setOnEditorActionListener(android.widget.TextView.OnEditorActionListener); + method public void setPaintFlags(int); + method public void setPrivateImeOptions(java.lang.String); + method public void setRawInputType(int); + method public void setScroller(android.widget.Scroller); + method public void setSelectAllOnFocus(boolean); + method public void setShadowLayer(float, float, float, int); + method public final void setShowSoftInputOnFocus(boolean); + method public void setSingleLine(); + method public void setSingleLine(boolean); + method public final void setSpannableFactory(android.text.Spannable.Factory); + method public final void setText(java.lang.CharSequence); + method public void setText(java.lang.CharSequence, android.widget.TextView.BufferType); + method public final void setText(char[], int, int); + method public final void setText(int); + method public final void setText(int, android.widget.TextView.BufferType); + method public void setTextAppearance(android.content.Context, int); + method public void setTextColor(int); + method public void setTextColor(android.content.res.ColorStateList); + method public void setTextIsSelectable(boolean); + method public final void setTextKeepState(java.lang.CharSequence); + method public final void setTextKeepState(java.lang.CharSequence, android.widget.TextView.BufferType); + method public void setTextLocale(java.util.Locale); + method public void setTextScaleX(float); + method public void setTextSize(float); + method public void setTextSize(int, float); + method public final void setTransformationMethod(android.text.method.TransformationMethod); + method public void setTypeface(android.graphics.Typeface, int); + method public void setTypeface(android.graphics.Typeface); + method public void setWidth(int); + } + + public static final class TextView.BufferType extends java.lang.Enum { + method public static android.widget.TextView.BufferType valueOf(java.lang.String); + method public static final android.widget.TextView.BufferType[] values(); + enum_constant public static final android.widget.TextView.BufferType EDITABLE; + enum_constant public static final android.widget.TextView.BufferType NORMAL; + enum_constant public static final android.widget.TextView.BufferType SPANNABLE; + } + + public static abstract interface TextView.OnEditorActionListener { + method public abstract boolean onEditorAction(android.widget.TextView, int, android.view.KeyEvent); + } + + public static class TextView.SavedState extends android.view.View.BaseSavedState { + field public static final android.os.Parcelable.Creator CREATOR; + } + + public class TimePicker extends android.widget.FrameLayout { + ctor public TimePicker(android.content.Context); + ctor public TimePicker(android.content.Context, android.util.AttributeSet); + ctor public TimePicker(android.content.Context, android.util.AttributeSet, int); + ctor public TimePicker(android.content.Context, android.util.AttributeSet, int, int); + method public java.lang.Integer getCurrentHour(); + method public java.lang.Integer getCurrentMinute(); + method public boolean is24HourView(); + method public void setCurrentHour(java.lang.Integer); + method public void setCurrentMinute(java.lang.Integer); + method public void setIs24HourView(java.lang.Boolean); + method public void setOnTimeChangedListener(android.widget.TimePicker.OnTimeChangedListener); + } + + public static abstract interface TimePicker.OnTimeChangedListener { + method public abstract void onTimeChanged(android.widget.TimePicker, int, int); + } + + public class Toast { + ctor public Toast(android.content.Context); + method public void cancel(); + method public int getDuration(); + method public int getGravity(); + method public float getHorizontalMargin(); + method public float getVerticalMargin(); + method public android.view.View getView(); + method public int getXOffset(); + method public int getYOffset(); + method public static android.widget.Toast makeText(android.content.Context, java.lang.CharSequence, int); + method public static android.widget.Toast makeText(android.content.Context, int, int) throws android.content.res.Resources.NotFoundException; + method public void setDuration(int); + method public void setGravity(int, int, int); + method public void setMargin(float, float); + method public void setText(int); + method public void setText(java.lang.CharSequence); + method public void setView(android.view.View); + method public void show(); + field public static final int LENGTH_LONG = 1; // 0x1 + field public static final int LENGTH_SHORT = 0; // 0x0 + } + + public class ToggleButton extends android.widget.CompoundButton { + ctor public ToggleButton(android.content.Context, android.util.AttributeSet, int, int); + ctor public ToggleButton(android.content.Context, android.util.AttributeSet, int); + ctor public ToggleButton(android.content.Context, android.util.AttributeSet); + ctor public ToggleButton(android.content.Context); + method public java.lang.CharSequence getTextOff(); + method public java.lang.CharSequence getTextOn(); + method public void setTextOff(java.lang.CharSequence); + method public void setTextOn(java.lang.CharSequence); + } + + public class Toolbar extends android.view.ViewGroup { + ctor public Toolbar(android.content.Context); + ctor public Toolbar(android.content.Context, android.util.AttributeSet); + ctor public Toolbar(android.content.Context, android.util.AttributeSet, int); + ctor public Toolbar(android.content.Context, android.util.AttributeSet, int, int); + method public void collapseActionView(); + method public void dismissPopupMenus(); + method public int getContentInsetEnd(); + method public int getContentInsetLeft(); + method public int getContentInsetRight(); + method public int getContentInsetStart(); + method public android.graphics.drawable.Drawable getLogo(); + method public java.lang.CharSequence getLogoDescription(); + method public android.view.Menu getMenu(); + method public java.lang.CharSequence getNavigationContentDescription(); + method public android.graphics.drawable.Drawable getNavigationIcon(); + method public int getPopupTheme(); + method public java.lang.CharSequence getSubtitle(); + method public java.lang.CharSequence getTitle(); + method public boolean hasExpandedActionView(); + method public boolean hideOverflowMenu(); + method public void inflateMenu(int); + method public boolean isOverflowMenuShowing(); + method protected void onLayout(boolean, int, int, int, int); + method public void setContentInsetsAbsolute(int, int); + method public void setContentInsetsRelative(int, int); + method public void setLogo(int); + method public void setLogo(android.graphics.drawable.Drawable); + method public void setLogoDescription(int); + method public void setLogoDescription(java.lang.CharSequence); + method public void setNavigationContentDescription(int); + method public void setNavigationContentDescription(java.lang.CharSequence); + method public void setNavigationIcon(int); + method public void setNavigationIcon(android.graphics.drawable.Drawable); + method public void setNavigationOnClickListener(android.view.View.OnClickListener); + method public void setOnMenuItemClickListener(android.widget.Toolbar.OnMenuItemClickListener); + method public void setPopupTheme(int); + method public void setSubtitle(int); + method public void setSubtitle(java.lang.CharSequence); + method public void setSubtitleTextAppearance(android.content.Context, int); + method public void setSubtitleTextColor(int); + method public void setTitle(int); + method public void setTitle(java.lang.CharSequence); + method public void setTitleTextAppearance(android.content.Context, int); + method public void setTitleTextColor(int); + method public boolean showOverflowMenu(); + } + + public static class Toolbar.LayoutParams extends android.app.ActionBar.LayoutParams { + ctor public Toolbar.LayoutParams(android.content.Context, android.util.AttributeSet); + ctor public Toolbar.LayoutParams(int, int); + ctor public Toolbar.LayoutParams(int, int, int); + ctor public Toolbar.LayoutParams(int); + ctor public Toolbar.LayoutParams(android.widget.Toolbar.LayoutParams); + ctor public Toolbar.LayoutParams(android.app.ActionBar.LayoutParams); + ctor public Toolbar.LayoutParams(android.view.ViewGroup.MarginLayoutParams); + ctor public Toolbar.LayoutParams(android.view.ViewGroup.LayoutParams); + } + + public static abstract interface Toolbar.OnMenuItemClickListener { + method public abstract boolean onMenuItemClick(android.view.MenuItem); + } + + public deprecated class TwoLineListItem extends android.widget.RelativeLayout { + ctor public TwoLineListItem(android.content.Context); + ctor public TwoLineListItem(android.content.Context, android.util.AttributeSet); + ctor public TwoLineListItem(android.content.Context, android.util.AttributeSet, int); + ctor public TwoLineListItem(android.content.Context, android.util.AttributeSet, int, int); + method public android.widget.TextView getText1(); + method public android.widget.TextView getText2(); + } + + public class VideoView extends android.view.SurfaceView implements android.widget.MediaController.MediaPlayerControl { + ctor public VideoView(android.content.Context); + ctor public VideoView(android.content.Context, android.util.AttributeSet); + ctor public VideoView(android.content.Context, android.util.AttributeSet, int); + ctor public VideoView(android.content.Context, android.util.AttributeSet, int, int); + method public void addSubtitleSource(java.io.InputStream, android.media.MediaFormat); + method public boolean canPause(); + method public boolean canSeekBackward(); + method public boolean canSeekForward(); + method public int getAudioSessionId(); + method public int getBufferPercentage(); + method public int getCurrentPosition(); + method public int getDuration(); + method public boolean isPlaying(); + method public void pause(); + method public int resolveAdjustedSize(int, int); + method public void resume(); + method public void seekTo(int); + method public void setMediaController(android.widget.MediaController); + method public void setOnCompletionListener(android.media.MediaPlayer.OnCompletionListener); + method public void setOnErrorListener(android.media.MediaPlayer.OnErrorListener); + method public void setOnInfoListener(android.media.MediaPlayer.OnInfoListener); + method public void setOnPreparedListener(android.media.MediaPlayer.OnPreparedListener); + method public void setVideoPath(java.lang.String); + method public void setVideoURI(android.net.Uri); + method public void setVideoURI(android.net.Uri, java.util.Map); + method public void start(); + method public void stopPlayback(); + method public void suspend(); + } + + public class ViewAnimator extends android.widget.FrameLayout { + ctor public ViewAnimator(android.content.Context); + ctor public ViewAnimator(android.content.Context, android.util.AttributeSet); + method public boolean getAnimateFirstView(); + method public android.view.View getCurrentView(); + method public int getDisplayedChild(); + method public android.view.animation.Animation getInAnimation(); + method public android.view.animation.Animation getOutAnimation(); + method public void setAnimateFirstView(boolean); + method public void setDisplayedChild(int); + method public void setInAnimation(android.view.animation.Animation); + method public void setInAnimation(android.content.Context, int); + method public void setOutAnimation(android.view.animation.Animation); + method public void setOutAnimation(android.content.Context, int); + method public void showNext(); + method public void showPrevious(); + } + + public class ViewFlipper extends android.widget.ViewAnimator { + ctor public ViewFlipper(android.content.Context); + ctor public ViewFlipper(android.content.Context, android.util.AttributeSet); + method public boolean isAutoStart(); + method public boolean isFlipping(); + method public void setAutoStart(boolean); + method public void setFlipInterval(int); + method public void startFlipping(); + method public void stopFlipping(); + } + + public class ViewSwitcher extends android.widget.ViewAnimator { + ctor public ViewSwitcher(android.content.Context); + ctor public ViewSwitcher(android.content.Context, android.util.AttributeSet); + method public android.view.View getNextView(); + method public void reset(); + method public void setFactory(android.widget.ViewSwitcher.ViewFactory); + } + + public static abstract interface ViewSwitcher.ViewFactory { + method public abstract android.view.View makeView(); + } + + public abstract interface WrapperListAdapter implements android.widget.ListAdapter { + method public abstract android.widget.ListAdapter getWrappedAdapter(); + } + + public class ZoomButton extends android.widget.ImageButton implements android.view.View.OnLongClickListener { + ctor public ZoomButton(android.content.Context); + ctor public ZoomButton(android.content.Context, android.util.AttributeSet); + ctor public ZoomButton(android.content.Context, android.util.AttributeSet, int); + ctor public ZoomButton(android.content.Context, android.util.AttributeSet, int, int); + method public boolean onLongClick(android.view.View); + method public void setZoomSpeed(long); + } + + public class ZoomButtonsController implements android.view.View.OnTouchListener { + ctor public ZoomButtonsController(android.view.View); + method public android.view.ViewGroup getContainer(); + method public android.view.View getZoomControls(); + method public boolean isAutoDismissed(); + method public boolean isVisible(); + method public boolean onTouch(android.view.View, android.view.MotionEvent); + method public void setAutoDismissed(boolean); + method public void setFocusable(boolean); + method public void setOnZoomListener(android.widget.ZoomButtonsController.OnZoomListener); + method public void setVisible(boolean); + method public void setZoomInEnabled(boolean); + method public void setZoomOutEnabled(boolean); + method public void setZoomSpeed(long); + } + + public static abstract interface ZoomButtonsController.OnZoomListener { + method public abstract void onVisibilityChanged(boolean); + method public abstract void onZoom(boolean); + } + + public class ZoomControls extends android.widget.LinearLayout { + ctor public ZoomControls(android.content.Context); + ctor public ZoomControls(android.content.Context, android.util.AttributeSet); + method public void hide(); + method public void setIsZoomInEnabled(boolean); + method public void setIsZoomOutEnabled(boolean); + method public void setOnZoomInClickListener(android.view.View.OnClickListener); + method public void setOnZoomOutClickListener(android.view.View.OnClickListener); + method public void setZoomSpeed(long); + method public void show(); + } + +} + +package com.android.internal.util { + + public abstract interface Predicate { + method public abstract boolean apply(T); + } + +} + +package dalvik.annotation { + + public abstract deprecated class TestTarget implements java.lang.annotation.Annotation { + } + + public abstract deprecated class TestTargetClass implements java.lang.annotation.Annotation { + } + +} + +package dalvik.bytecode { + + public final class OpcodeInfo { + field public static final int MAXIMUM_PACKED_VALUE; + field public static final int MAXIMUM_VALUE; + } + + public abstract interface Opcodes { + field public static final int OP_ADD_DOUBLE = 171; // 0xab + field public static final int OP_ADD_DOUBLE_2ADDR = 203; // 0xcb + field public static final int OP_ADD_FLOAT = 166; // 0xa6 + field public static final int OP_ADD_FLOAT_2ADDR = 198; // 0xc6 + field public static final int OP_ADD_INT = 144; // 0x90 + field public static final int OP_ADD_INT_2ADDR = 176; // 0xb0 + field public static final int OP_ADD_INT_LIT16 = 208; // 0xd0 + field public static final int OP_ADD_INT_LIT8 = 216; // 0xd8 + field public static final int OP_ADD_LONG = 155; // 0x9b + field public static final int OP_ADD_LONG_2ADDR = 187; // 0xbb + field public static final int OP_AGET = 68; // 0x44 + field public static final int OP_AGET_BOOLEAN = 71; // 0x47 + field public static final int OP_AGET_BYTE = 72; // 0x48 + field public static final int OP_AGET_CHAR = 73; // 0x49 + field public static final int OP_AGET_OBJECT = 70; // 0x46 + field public static final int OP_AGET_SHORT = 74; // 0x4a + field public static final int OP_AGET_WIDE = 69; // 0x45 + field public static final int OP_AND_INT = 149; // 0x95 + field public static final int OP_AND_INT_2ADDR = 181; // 0xb5 + field public static final int OP_AND_INT_LIT16 = 213; // 0xd5 + field public static final int OP_AND_INT_LIT8 = 221; // 0xdd + field public static final int OP_AND_LONG = 160; // 0xa0 + field public static final int OP_AND_LONG_2ADDR = 192; // 0xc0 + field public static final int OP_APUT = 75; // 0x4b + field public static final int OP_APUT_BOOLEAN = 78; // 0x4e + field public static final int OP_APUT_BYTE = 79; // 0x4f + field public static final int OP_APUT_CHAR = 80; // 0x50 + field public static final int OP_APUT_OBJECT = 77; // 0x4d + field public static final int OP_APUT_SHORT = 81; // 0x51 + field public static final int OP_APUT_WIDE = 76; // 0x4c + field public static final int OP_ARRAY_LENGTH = 33; // 0x21 + field public static final deprecated int OP_BREAKPOINT = 236; // 0xec + field public static final int OP_CHECK_CAST = 31; // 0x1f + field public static final int OP_CHECK_CAST_JUMBO = 511; // 0x1ff + field public static final int OP_CMPG_DOUBLE = 48; // 0x30 + field public static final int OP_CMPG_FLOAT = 46; // 0x2e + field public static final int OP_CMPL_DOUBLE = 47; // 0x2f + field public static final int OP_CMPL_FLOAT = 45; // 0x2d + field public static final int OP_CMP_LONG = 49; // 0x31 + field public static final int OP_CONST = 20; // 0x14 + field public static final int OP_CONST_16 = 19; // 0x13 + field public static final int OP_CONST_4 = 18; // 0x12 + field public static final int OP_CONST_CLASS = 28; // 0x1c + field public static final int OP_CONST_CLASS_JUMBO = 255; // 0xff + field public static final int OP_CONST_HIGH16 = 21; // 0x15 + field public static final int OP_CONST_STRING = 26; // 0x1a + field public static final int OP_CONST_STRING_JUMBO = 27; // 0x1b + field public static final int OP_CONST_WIDE = 24; // 0x18 + field public static final int OP_CONST_WIDE_16 = 22; // 0x16 + field public static final int OP_CONST_WIDE_32 = 23; // 0x17 + field public static final int OP_CONST_WIDE_HIGH16 = 25; // 0x19 + field public static final int OP_DIV_DOUBLE = 174; // 0xae + field public static final int OP_DIV_DOUBLE_2ADDR = 206; // 0xce + field public static final int OP_DIV_FLOAT = 169; // 0xa9 + field public static final int OP_DIV_FLOAT_2ADDR = 201; // 0xc9 + field public static final int OP_DIV_INT = 147; // 0x93 + field public static final int OP_DIV_INT_2ADDR = 179; // 0xb3 + field public static final int OP_DIV_INT_LIT16 = 211; // 0xd3 + field public static final int OP_DIV_INT_LIT8 = 219; // 0xdb + field public static final int OP_DIV_LONG = 158; // 0x9e + field public static final int OP_DIV_LONG_2ADDR = 190; // 0xbe + field public static final int OP_DOUBLE_TO_FLOAT = 140; // 0x8c + field public static final int OP_DOUBLE_TO_INT = 138; // 0x8a + field public static final int OP_DOUBLE_TO_LONG = 139; // 0x8b + field public static final deprecated int OP_EXECUTE_INLINE = 238; // 0xee + field public static final deprecated int OP_EXECUTE_INLINE_RANGE = 239; // 0xef + field public static final int OP_FILLED_NEW_ARRAY = 36; // 0x24 + field public static final int OP_FILLED_NEW_ARRAY_JUMBO = 1535; // 0x5ff + field public static final int OP_FILLED_NEW_ARRAY_RANGE = 37; // 0x25 + field public static final int OP_FILL_ARRAY_DATA = 38; // 0x26 + field public static final int OP_FLOAT_TO_DOUBLE = 137; // 0x89 + field public static final int OP_FLOAT_TO_INT = 135; // 0x87 + field public static final int OP_FLOAT_TO_LONG = 136; // 0x88 + field public static final int OP_GOTO = 40; // 0x28 + field public static final int OP_GOTO_16 = 41; // 0x29 + field public static final int OP_GOTO_32 = 42; // 0x2a + field public static final int OP_IF_EQ = 50; // 0x32 + field public static final int OP_IF_EQZ = 56; // 0x38 + field public static final int OP_IF_GE = 53; // 0x35 + field public static final int OP_IF_GEZ = 59; // 0x3b + field public static final int OP_IF_GT = 54; // 0x36 + field public static final int OP_IF_GTZ = 60; // 0x3c + field public static final int OP_IF_LE = 55; // 0x37 + field public static final int OP_IF_LEZ = 61; // 0x3d + field public static final int OP_IF_LT = 52; // 0x34 + field public static final int OP_IF_LTZ = 58; // 0x3a + field public static final int OP_IF_NE = 51; // 0x33 + field public static final int OP_IF_NEZ = 57; // 0x39 + field public static final int OP_IGET = 82; // 0x52 + field public static final int OP_IGET_BOOLEAN = 85; // 0x55 + field public static final int OP_IGET_BOOLEAN_JUMBO = 2559; // 0x9ff + field public static final int OP_IGET_BYTE = 86; // 0x56 + field public static final int OP_IGET_BYTE_JUMBO = 2815; // 0xaff + field public static final int OP_IGET_CHAR = 87; // 0x57 + field public static final int OP_IGET_CHAR_JUMBO = 3071; // 0xbff + field public static final int OP_IGET_JUMBO = 1791; // 0x6ff + field public static final int OP_IGET_OBJECT = 84; // 0x54 + field public static final int OP_IGET_OBJECT_JUMBO = 2303; // 0x8ff + field public static final deprecated int OP_IGET_OBJECT_QUICK = 244; // 0xf4 + field public static final deprecated int OP_IGET_QUICK = 242; // 0xf2 + field public static final int OP_IGET_SHORT = 88; // 0x58 + field public static final int OP_IGET_SHORT_JUMBO = 3327; // 0xcff + field public static final int OP_IGET_WIDE = 83; // 0x53 + field public static final int OP_IGET_WIDE_JUMBO = 2047; // 0x7ff + field public static final deprecated int OP_IGET_WIDE_QUICK = 243; // 0xf3 + field public static final deprecated int OP_IGET_WIDE_VOLATILE = 232; // 0xe8 + field public static final int OP_INSTANCE_OF = 32; // 0x20 + field public static final int OP_INSTANCE_OF_JUMBO = 767; // 0x2ff + field public static final int OP_INT_TO_BYTE = 141; // 0x8d + field public static final int OP_INT_TO_CHAR = 142; // 0x8e + field public static final int OP_INT_TO_DOUBLE = 131; // 0x83 + field public static final int OP_INT_TO_FLOAT = 130; // 0x82 + field public static final int OP_INT_TO_LONG = 129; // 0x81 + field public static final int OP_INT_TO_SHORT = 143; // 0x8f + field public static final int OP_INVOKE_DIRECT = 112; // 0x70 + field public static final deprecated int OP_INVOKE_DIRECT_EMPTY = 240; // 0xf0 + field public static final int OP_INVOKE_DIRECT_JUMBO = 9471; // 0x24ff + field public static final int OP_INVOKE_DIRECT_RANGE = 118; // 0x76 + field public static final int OP_INVOKE_INTERFACE = 114; // 0x72 + field public static final int OP_INVOKE_INTERFACE_JUMBO = 9983; // 0x26ff + field public static final int OP_INVOKE_INTERFACE_RANGE = 120; // 0x78 + field public static final int OP_INVOKE_STATIC = 113; // 0x71 + field public static final int OP_INVOKE_STATIC_JUMBO = 9727; // 0x25ff + field public static final int OP_INVOKE_STATIC_RANGE = 119; // 0x77 + field public static final int OP_INVOKE_SUPER = 111; // 0x6f + field public static final int OP_INVOKE_SUPER_JUMBO = 9215; // 0x23ff + field public static final deprecated int OP_INVOKE_SUPER_QUICK = 250; // 0xfa + field public static final deprecated int OP_INVOKE_SUPER_QUICK_RANGE = 251; // 0xfb + field public static final int OP_INVOKE_SUPER_RANGE = 117; // 0x75 + field public static final int OP_INVOKE_VIRTUAL = 110; // 0x6e + field public static final int OP_INVOKE_VIRTUAL_JUMBO = 8959; // 0x22ff + field public static final deprecated int OP_INVOKE_VIRTUAL_QUICK = 248; // 0xf8 + field public static final deprecated int OP_INVOKE_VIRTUAL_QUICK_RANGE = 249; // 0xf9 + field public static final int OP_INVOKE_VIRTUAL_RANGE = 116; // 0x74 + field public static final int OP_IPUT = 89; // 0x59 + field public static final int OP_IPUT_BOOLEAN = 92; // 0x5c + field public static final int OP_IPUT_BOOLEAN_JUMBO = 4351; // 0x10ff + field public static final int OP_IPUT_BYTE = 93; // 0x5d + field public static final int OP_IPUT_BYTE_JUMBO = 4607; // 0x11ff + field public static final int OP_IPUT_CHAR = 94; // 0x5e + field public static final int OP_IPUT_CHAR_JUMBO = 4863; // 0x12ff + field public static final int OP_IPUT_JUMBO = 3583; // 0xdff + field public static final int OP_IPUT_OBJECT = 91; // 0x5b + field public static final int OP_IPUT_OBJECT_JUMBO = 4095; // 0xfff + field public static final deprecated int OP_IPUT_OBJECT_QUICK = 247; // 0xf7 + field public static final deprecated int OP_IPUT_QUICK = 245; // 0xf5 + field public static final int OP_IPUT_SHORT = 95; // 0x5f + field public static final int OP_IPUT_SHORT_JUMBO = 5119; // 0x13ff + field public static final int OP_IPUT_WIDE = 90; // 0x5a + field public static final int OP_IPUT_WIDE_JUMBO = 3839; // 0xeff + field public static final deprecated int OP_IPUT_WIDE_QUICK = 246; // 0xf6 + field public static final deprecated int OP_IPUT_WIDE_VOLATILE = 233; // 0xe9 + field public static final int OP_LONG_TO_DOUBLE = 134; // 0x86 + field public static final int OP_LONG_TO_FLOAT = 133; // 0x85 + field public static final int OP_LONG_TO_INT = 132; // 0x84 + field public static final int OP_MONITOR_ENTER = 29; // 0x1d + field public static final int OP_MONITOR_EXIT = 30; // 0x1e + field public static final int OP_MOVE = 1; // 0x1 + field public static final int OP_MOVE_16 = 3; // 0x3 + field public static final int OP_MOVE_EXCEPTION = 13; // 0xd + field public static final int OP_MOVE_FROM16 = 2; // 0x2 + field public static final int OP_MOVE_OBJECT = 7; // 0x7 + field public static final int OP_MOVE_OBJECT_16 = 9; // 0x9 + field public static final int OP_MOVE_OBJECT_FROM16 = 8; // 0x8 + field public static final int OP_MOVE_RESULT = 10; // 0xa + field public static final int OP_MOVE_RESULT_OBJECT = 12; // 0xc + field public static final int OP_MOVE_RESULT_WIDE = 11; // 0xb + field public static final int OP_MOVE_WIDE = 4; // 0x4 + field public static final int OP_MOVE_WIDE_16 = 6; // 0x6 + field public static final int OP_MOVE_WIDE_FROM16 = 5; // 0x5 + field public static final int OP_MUL_DOUBLE = 173; // 0xad + field public static final int OP_MUL_DOUBLE_2ADDR = 205; // 0xcd + field public static final int OP_MUL_FLOAT = 168; // 0xa8 + field public static final int OP_MUL_FLOAT_2ADDR = 200; // 0xc8 + field public static final int OP_MUL_INT = 146; // 0x92 + field public static final int OP_MUL_INT_2ADDR = 178; // 0xb2 + field public static final int OP_MUL_INT_LIT16 = 210; // 0xd2 + field public static final int OP_MUL_INT_LIT8 = 218; // 0xda + field public static final int OP_MUL_LONG = 157; // 0x9d + field public static final int OP_MUL_LONG_2ADDR = 189; // 0xbd + field public static final int OP_NEG_DOUBLE = 128; // 0x80 + field public static final int OP_NEG_FLOAT = 127; // 0x7f + field public static final int OP_NEG_INT = 123; // 0x7b + field public static final int OP_NEG_LONG = 125; // 0x7d + field public static final int OP_NEW_ARRAY = 35; // 0x23 + field public static final int OP_NEW_ARRAY_JUMBO = 1279; // 0x4ff + field public static final int OP_NEW_INSTANCE = 34; // 0x22 + field public static final int OP_NEW_INSTANCE_JUMBO = 1023; // 0x3ff + field public static final int OP_NOP = 0; // 0x0 + field public static final int OP_NOT_INT = 124; // 0x7c + field public static final int OP_NOT_LONG = 126; // 0x7e + field public static final int OP_OR_INT = 150; // 0x96 + field public static final int OP_OR_INT_2ADDR = 182; // 0xb6 + field public static final int OP_OR_INT_LIT16 = 214; // 0xd6 + field public static final int OP_OR_INT_LIT8 = 222; // 0xde + field public static final int OP_OR_LONG = 161; // 0xa1 + field public static final int OP_OR_LONG_2ADDR = 193; // 0xc1 + field public static final int OP_PACKED_SWITCH = 43; // 0x2b + field public static final int OP_REM_DOUBLE = 175; // 0xaf + field public static final int OP_REM_DOUBLE_2ADDR = 207; // 0xcf + field public static final int OP_REM_FLOAT = 170; // 0xaa + field public static final int OP_REM_FLOAT_2ADDR = 202; // 0xca + field public static final int OP_REM_INT = 148; // 0x94 + field public static final int OP_REM_INT_2ADDR = 180; // 0xb4 + field public static final int OP_REM_INT_LIT16 = 212; // 0xd4 + field public static final int OP_REM_INT_LIT8 = 220; // 0xdc + field public static final int OP_REM_LONG = 159; // 0x9f + field public static final int OP_REM_LONG_2ADDR = 191; // 0xbf + field public static final int OP_RETURN = 15; // 0xf + field public static final int OP_RETURN_OBJECT = 17; // 0x11 + field public static final int OP_RETURN_VOID = 14; // 0xe + field public static final int OP_RETURN_WIDE = 16; // 0x10 + field public static final int OP_RSUB_INT = 209; // 0xd1 + field public static final int OP_RSUB_INT_LIT8 = 217; // 0xd9 + field public static final int OP_SGET = 96; // 0x60 + field public static final int OP_SGET_BOOLEAN = 99; // 0x63 + field public static final int OP_SGET_BOOLEAN_JUMBO = 6143; // 0x17ff + field public static final int OP_SGET_BYTE = 100; // 0x64 + field public static final int OP_SGET_BYTE_JUMBO = 6399; // 0x18ff + field public static final int OP_SGET_CHAR = 101; // 0x65 + field public static final int OP_SGET_CHAR_JUMBO = 6655; // 0x19ff + field public static final int OP_SGET_JUMBO = 5375; // 0x14ff + field public static final int OP_SGET_OBJECT = 98; // 0x62 + field public static final int OP_SGET_OBJECT_JUMBO = 5887; // 0x16ff + field public static final int OP_SGET_SHORT = 102; // 0x66 + field public static final int OP_SGET_SHORT_JUMBO = 6911; // 0x1aff + field public static final int OP_SGET_WIDE = 97; // 0x61 + field public static final int OP_SGET_WIDE_JUMBO = 5631; // 0x15ff + field public static final deprecated int OP_SGET_WIDE_VOLATILE = 234; // 0xea + field public static final int OP_SHL_INT = 152; // 0x98 + field public static final int OP_SHL_INT_2ADDR = 184; // 0xb8 + field public static final int OP_SHL_INT_LIT8 = 224; // 0xe0 + field public static final int OP_SHL_LONG = 163; // 0xa3 + field public static final int OP_SHL_LONG_2ADDR = 195; // 0xc3 + field public static final int OP_SHR_INT = 153; // 0x99 + field public static final int OP_SHR_INT_2ADDR = 185; // 0xb9 + field public static final int OP_SHR_INT_LIT8 = 225; // 0xe1 + field public static final int OP_SHR_LONG = 164; // 0xa4 + field public static final int OP_SHR_LONG_2ADDR = 196; // 0xc4 + field public static final int OP_SPARSE_SWITCH = 44; // 0x2c + field public static final int OP_SPUT = 103; // 0x67 + field public static final int OP_SPUT_BOOLEAN = 106; // 0x6a + field public static final int OP_SPUT_BOOLEAN_JUMBO = 7935; // 0x1eff + field public static final int OP_SPUT_BYTE = 107; // 0x6b + field public static final int OP_SPUT_BYTE_JUMBO = 8191; // 0x1fff + field public static final int OP_SPUT_CHAR = 108; // 0x6c + field public static final int OP_SPUT_CHAR_JUMBO = 8447; // 0x20ff + field public static final int OP_SPUT_JUMBO = 7167; // 0x1bff + field public static final int OP_SPUT_OBJECT = 105; // 0x69 + field public static final int OP_SPUT_OBJECT_JUMBO = 7679; // 0x1dff + field public static final int OP_SPUT_SHORT = 109; // 0x6d + field public static final int OP_SPUT_SHORT_JUMBO = 8703; // 0x21ff + field public static final int OP_SPUT_WIDE = 104; // 0x68 + field public static final int OP_SPUT_WIDE_JUMBO = 7423; // 0x1cff + field public static final deprecated int OP_SPUT_WIDE_VOLATILE = 235; // 0xeb + field public static final int OP_SUB_DOUBLE = 172; // 0xac + field public static final int OP_SUB_DOUBLE_2ADDR = 204; // 0xcc + field public static final int OP_SUB_FLOAT = 167; // 0xa7 + field public static final int OP_SUB_FLOAT_2ADDR = 199; // 0xc7 + field public static final int OP_SUB_INT = 145; // 0x91 + field public static final int OP_SUB_INT_2ADDR = 177; // 0xb1 + field public static final int OP_SUB_LONG = 156; // 0x9c + field public static final int OP_SUB_LONG_2ADDR = 188; // 0xbc + field public static final int OP_THROW = 39; // 0x27 + field public static final deprecated int OP_THROW_VERIFICATION_ERROR = 237; // 0xed + field public static final int OP_USHR_INT = 154; // 0x9a + field public static final int OP_USHR_INT_2ADDR = 186; // 0xba + field public static final int OP_USHR_INT_LIT8 = 226; // 0xe2 + field public static final int OP_USHR_LONG = 165; // 0xa5 + field public static final int OP_USHR_LONG_2ADDR = 197; // 0xc5 + field public static final int OP_XOR_INT = 151; // 0x97 + field public static final int OP_XOR_INT_2ADDR = 183; // 0xb7 + field public static final int OP_XOR_INT_LIT16 = 215; // 0xd7 + field public static final int OP_XOR_INT_LIT8 = 223; // 0xdf + field public static final int OP_XOR_LONG = 162; // 0xa2 + field public static final int OP_XOR_LONG_2ADDR = 194; // 0xc2 + } + +} + +package dalvik.system { + + public class BaseDexClassLoader extends java.lang.ClassLoader { + ctor public BaseDexClassLoader(java.lang.String, java.io.File, java.lang.String, java.lang.ClassLoader); + method public java.lang.String findLibrary(java.lang.String); + } + + public class DexClassLoader extends dalvik.system.BaseDexClassLoader { + ctor public DexClassLoader(java.lang.String, java.lang.String, java.lang.String, java.lang.ClassLoader); + } + + public final class DexFile { + ctor public DexFile(java.io.File) throws java.io.IOException; + ctor public DexFile(java.lang.String) throws java.io.IOException; + method public void close() throws java.io.IOException; + method public java.util.Enumeration entries(); + method public java.lang.String getName(); + method public static boolean isDexOptNeeded(java.lang.String) throws java.io.FileNotFoundException, java.io.IOException; + method public java.lang.Class loadClass(java.lang.String, java.lang.ClassLoader); + method public static dalvik.system.DexFile loadDex(java.lang.String, java.lang.String, int) throws java.io.IOException; + } + + public class PathClassLoader extends dalvik.system.BaseDexClassLoader { + ctor public PathClassLoader(java.lang.String, java.lang.ClassLoader); + ctor public PathClassLoader(java.lang.String, java.lang.String, java.lang.ClassLoader); + } + +} + +package java.awt.font { + + public final class NumericShaper implements java.io.Serializable { + method public static java.awt.font.NumericShaper getContextualShaper(int, int); + method public static java.awt.font.NumericShaper getContextualShaper(int); + method public int getRanges(); + method public static java.awt.font.NumericShaper getShaper(int); + method public boolean isContextual(); + method public void shape(char[], int, int, int); + method public void shape(char[], int, int); + field public static final int ALL_RANGES = 524287; // 0x7ffff + field public static final int ARABIC = 2; // 0x2 + field public static final int BENGALI = 16; // 0x10 + field public static final int DEVANAGARI = 8; // 0x8 + field public static final int EASTERN_ARABIC = 4; // 0x4 + field public static final int ETHIOPIC = 65536; // 0x10000 + field public static final int EUROPEAN = 1; // 0x1 + field public static final int GUJARATI = 64; // 0x40 + field public static final int GURMUKHI = 32; // 0x20 + field public static final int KANNADA = 1024; // 0x400 + field public static final int KHMER = 131072; // 0x20000 + field public static final int LAO = 8192; // 0x2000 + field public static final int MALAYALAM = 2048; // 0x800 + field public static final int MONGOLIAN = 262144; // 0x40000 + field public static final int MYANMAR = 32768; // 0x8000 + field public static final int ORIYA = 128; // 0x80 + field public static final int TAMIL = 256; // 0x100 + field public static final int TELUGU = 512; // 0x200 + field public static final int THAI = 4096; // 0x1000 + field public static final int TIBETAN = 16384; // 0x4000 + } + + public final class TextAttribute extends java.text.AttributedCharacterIterator.Attribute { + ctor protected TextAttribute(java.lang.String); + field public static final java.awt.font.TextAttribute BACKGROUND; + field public static final java.awt.font.TextAttribute BIDI_EMBEDDING; + field public static final java.awt.font.TextAttribute CHAR_REPLACEMENT; + field public static final java.awt.font.TextAttribute FAMILY; + field public static final java.awt.font.TextAttribute FONT; + field public static final java.awt.font.TextAttribute FOREGROUND; + field public static final java.awt.font.TextAttribute INPUT_METHOD_HIGHLIGHT; + field public static final java.awt.font.TextAttribute INPUT_METHOD_UNDERLINE; + field public static final java.awt.font.TextAttribute JUSTIFICATION; + field public static final java.lang.Float JUSTIFICATION_FULL; + field public static final java.lang.Float JUSTIFICATION_NONE; + field public static final java.awt.font.TextAttribute KERNING; + field public static final java.lang.Integer KERNING_ON; + field public static final java.awt.font.TextAttribute LIGATURES; + field public static final java.lang.Integer LIGATURES_ON; + field public static final java.awt.font.TextAttribute NUMERIC_SHAPING; + field public static final java.awt.font.TextAttribute POSTURE; + field public static final java.lang.Float POSTURE_OBLIQUE; + field public static final java.lang.Float POSTURE_REGULAR; + field public static final java.awt.font.TextAttribute RUN_DIRECTION; + field public static final java.lang.Boolean RUN_DIRECTION_LTR; + field public static final java.lang.Boolean RUN_DIRECTION_RTL; + field public static final java.awt.font.TextAttribute SIZE; + field public static final java.awt.font.TextAttribute STRIKETHROUGH; + field public static final java.lang.Boolean STRIKETHROUGH_ON; + field public static final java.awt.font.TextAttribute SUPERSCRIPT; + field public static final java.lang.Integer SUPERSCRIPT_SUB; + field public static final java.lang.Integer SUPERSCRIPT_SUPER; + field public static final java.awt.font.TextAttribute SWAP_COLORS; + field public static final java.lang.Boolean SWAP_COLORS_ON; + field public static final java.awt.font.TextAttribute TRACKING; + field public static final java.lang.Float TRACKING_LOOSE; + field public static final java.lang.Float TRACKING_TIGHT; + field public static final java.awt.font.TextAttribute TRANSFORM; + field public static final java.awt.font.TextAttribute UNDERLINE; + field public static final java.lang.Integer UNDERLINE_LOW_DASHED; + field public static final java.lang.Integer UNDERLINE_LOW_DOTTED; + field public static final java.lang.Integer UNDERLINE_LOW_GRAY; + field public static final java.lang.Integer UNDERLINE_LOW_ONE_PIXEL; + field public static final java.lang.Integer UNDERLINE_LOW_TWO_PIXEL; + field public static final java.lang.Integer UNDERLINE_ON; + field public static final java.awt.font.TextAttribute WEIGHT; + field public static final java.lang.Float WEIGHT_BOLD; + field public static final java.lang.Float WEIGHT_DEMIBOLD; + field public static final java.lang.Float WEIGHT_DEMILIGHT; + field public static final java.lang.Float WEIGHT_EXTRABOLD; + field public static final java.lang.Float WEIGHT_EXTRA_LIGHT; + field public static final java.lang.Float WEIGHT_HEAVY; + field public static final java.lang.Float WEIGHT_LIGHT; + field public static final java.lang.Float WEIGHT_MEDIUM; + field public static final java.lang.Float WEIGHT_REGULAR; + field public static final java.lang.Float WEIGHT_SEMIBOLD; + field public static final java.lang.Float WEIGHT_ULTRABOLD; + field public static final java.awt.font.TextAttribute WIDTH; + field public static final java.lang.Float WIDTH_CONDENSED; + field public static final java.lang.Float WIDTH_EXTENDED; + field public static final java.lang.Float WIDTH_REGULAR; + field public static final java.lang.Float WIDTH_SEMI_CONDENSED; + field public static final java.lang.Float WIDTH_SEMI_EXTENDED; + } + +} + +package java.beans { + + public class IndexedPropertyChangeEvent extends java.beans.PropertyChangeEvent { + ctor public IndexedPropertyChangeEvent(java.lang.Object, java.lang.String, java.lang.Object, java.lang.Object, int); + method public int getIndex(); + } + + public class PropertyChangeEvent extends java.util.EventObject { + ctor public PropertyChangeEvent(java.lang.Object, java.lang.String, java.lang.Object, java.lang.Object); + method public java.lang.Object getNewValue(); + method public java.lang.Object getOldValue(); + method public java.lang.Object getPropagationId(); + method public java.lang.String getPropertyName(); + method public void setPropagationId(java.lang.Object); + } + + public abstract interface PropertyChangeListener implements java.util.EventListener { + method public abstract void propertyChange(java.beans.PropertyChangeEvent); + } + + public class PropertyChangeListenerProxy extends java.util.EventListenerProxy implements java.beans.PropertyChangeListener { + ctor public PropertyChangeListenerProxy(java.lang.String, java.beans.PropertyChangeListener); + method public java.lang.String getPropertyName(); + method public void propertyChange(java.beans.PropertyChangeEvent); + } + + public class PropertyChangeSupport implements java.io.Serializable { + ctor public PropertyChangeSupport(java.lang.Object); + method public void addPropertyChangeListener(java.lang.String, java.beans.PropertyChangeListener); + method public void addPropertyChangeListener(java.beans.PropertyChangeListener); + method public void fireIndexedPropertyChange(java.lang.String, int, java.lang.Object, java.lang.Object); + method public void fireIndexedPropertyChange(java.lang.String, int, boolean, boolean); + method public void fireIndexedPropertyChange(java.lang.String, int, int, int); + method public void firePropertyChange(java.lang.String, java.lang.Object, java.lang.Object); + method public void firePropertyChange(java.lang.String, boolean, boolean); + method public void firePropertyChange(java.lang.String, int, int); + method public void firePropertyChange(java.beans.PropertyChangeEvent); + method public java.beans.PropertyChangeListener[] getPropertyChangeListeners(java.lang.String); + method public java.beans.PropertyChangeListener[] getPropertyChangeListeners(); + method public boolean hasListeners(java.lang.String); + method public void removePropertyChangeListener(java.lang.String, java.beans.PropertyChangeListener); + method public void removePropertyChangeListener(java.beans.PropertyChangeListener); + } + +} + +package java.io { + + public class BufferedInputStream extends java.io.FilterInputStream { + ctor public BufferedInputStream(java.io.InputStream); + ctor public BufferedInputStream(java.io.InputStream, int); + field protected volatile byte[] buf; + field protected int count; + field protected int marklimit; + field protected int markpos; + field protected int pos; + } + + public class BufferedOutputStream extends java.io.FilterOutputStream { + ctor public BufferedOutputStream(java.io.OutputStream); + ctor public BufferedOutputStream(java.io.OutputStream, int); + field protected byte[] buf; + field protected int count; + } + + public class BufferedReader extends java.io.Reader { + ctor public BufferedReader(java.io.Reader); + ctor public BufferedReader(java.io.Reader, int); + method public void close() throws java.io.IOException; + method public int read(char[], int, int) throws java.io.IOException; + method public java.lang.String readLine() throws java.io.IOException; + } + + public class BufferedWriter extends java.io.Writer { + ctor public BufferedWriter(java.io.Writer); + ctor public BufferedWriter(java.io.Writer, int); + method public void close() throws java.io.IOException; + method public void flush() throws java.io.IOException; + method public void newLine() throws java.io.IOException; + method public void write(char[], int, int) throws java.io.IOException; + } + + public class ByteArrayInputStream extends java.io.InputStream { + ctor public ByteArrayInputStream(byte[]); + ctor public ByteArrayInputStream(byte[], int, int); + method public synchronized int read(); + field protected byte[] buf; + field protected int count; + field protected int mark; + field protected int pos; + } + + public class ByteArrayOutputStream extends java.io.OutputStream { + ctor public ByteArrayOutputStream(); + ctor public ByteArrayOutputStream(int); + method public synchronized void reset(); + method public int size(); + method public synchronized byte[] toByteArray(); + method public deprecated java.lang.String toString(int); + method public java.lang.String toString(java.lang.String) throws java.io.UnsupportedEncodingException; + method public synchronized void write(int); + method public synchronized void writeTo(java.io.OutputStream) throws java.io.IOException; + field protected byte[] buf; + field protected int count; + } + + public class CharArrayReader extends java.io.Reader { + ctor public CharArrayReader(char[]); + ctor public CharArrayReader(char[], int, int); + method public void close(); + method public int read(char[], int, int) throws java.io.IOException; + field protected char[] buf; + field protected int count; + field protected int markedPos; + field protected int pos; + } + + public class CharArrayWriter extends java.io.Writer { + ctor public CharArrayWriter(); + ctor public CharArrayWriter(int); + method public void close(); + method public void flush(); + method public void reset(); + method public int size(); + method public char[] toCharArray(); + method public void write(char[], int, int); + method public void writeTo(java.io.Writer) throws java.io.IOException; + field protected char[] buf; + field protected int count; + } + + public class CharConversionException extends java.io.IOException { + ctor public CharConversionException(); + ctor public CharConversionException(java.lang.String); + } + + public abstract interface Closeable implements java.lang.AutoCloseable { + method public abstract void close() throws java.io.IOException; + } + + public final class Console implements java.io.Flushable { + method public void flush(); + method public java.io.Console format(java.lang.String, java.lang.Object...); + method public java.io.Console printf(java.lang.String, java.lang.Object...); + method public java.lang.String readLine(); + method public java.lang.String readLine(java.lang.String, java.lang.Object...); + method public char[] readPassword(); + method public char[] readPassword(java.lang.String, java.lang.Object...); + method public java.io.Reader reader(); + method public java.io.PrintWriter writer(); + } + + public abstract interface DataInput { + method public abstract boolean readBoolean() throws java.io.IOException; + method public abstract byte readByte() throws java.io.IOException; + method public abstract char readChar() throws java.io.IOException; + method public abstract double readDouble() throws java.io.IOException; + method public abstract float readFloat() throws java.io.IOException; + method public abstract void readFully(byte[]) throws java.io.IOException; + method public abstract void readFully(byte[], int, int) throws java.io.IOException; + method public abstract int readInt() throws java.io.IOException; + method public abstract java.lang.String readLine() throws java.io.IOException; + method public abstract long readLong() throws java.io.IOException; + method public abstract short readShort() throws java.io.IOException; + method public abstract java.lang.String readUTF() throws java.io.IOException; + method public abstract int readUnsignedByte() throws java.io.IOException; + method public abstract int readUnsignedShort() throws java.io.IOException; + method public abstract int skipBytes(int) throws java.io.IOException; + } + + public class DataInputStream extends java.io.FilterInputStream implements java.io.DataInput { + ctor public DataInputStream(java.io.InputStream); + method public final int read(byte[]) throws java.io.IOException; + method public final int read(byte[], int, int) throws java.io.IOException; + method public final boolean readBoolean() throws java.io.IOException; + method public final byte readByte() throws java.io.IOException; + method public final char readChar() throws java.io.IOException; + method public final double readDouble() throws java.io.IOException; + method public final float readFloat() throws java.io.IOException; + method public final void readFully(byte[]) throws java.io.IOException; + method public final void readFully(byte[], int, int) throws java.io.IOException; + method public final int readInt() throws java.io.IOException; + method public final deprecated java.lang.String readLine() throws java.io.IOException; + method public final long readLong() throws java.io.IOException; + method public final short readShort() throws java.io.IOException; + method public final java.lang.String readUTF() throws java.io.IOException; + method public static final java.lang.String readUTF(java.io.DataInput) throws java.io.IOException; + method public final int readUnsignedByte() throws java.io.IOException; + method public final int readUnsignedShort() throws java.io.IOException; + method public final int skipBytes(int) throws java.io.IOException; + } + + public abstract interface DataOutput { + method public abstract void write(byte[]) throws java.io.IOException; + method public abstract void write(byte[], int, int) throws java.io.IOException; + method public abstract void write(int) throws java.io.IOException; + method public abstract void writeBoolean(boolean) throws java.io.IOException; + method public abstract void writeByte(int) throws java.io.IOException; + method public abstract void writeBytes(java.lang.String) throws java.io.IOException; + method public abstract void writeChar(int) throws java.io.IOException; + method public abstract void writeChars(java.lang.String) throws java.io.IOException; + method public abstract void writeDouble(double) throws java.io.IOException; + method public abstract void writeFloat(float) throws java.io.IOException; + method public abstract void writeInt(int) throws java.io.IOException; + method public abstract void writeLong(long) throws java.io.IOException; + method public abstract void writeShort(int) throws java.io.IOException; + method public abstract void writeUTF(java.lang.String) throws java.io.IOException; + } + + public class DataOutputStream extends java.io.FilterOutputStream implements java.io.DataOutput { + ctor public DataOutputStream(java.io.OutputStream); + method public final int size(); + method public final void writeBoolean(boolean) throws java.io.IOException; + method public final void writeByte(int) throws java.io.IOException; + method public final void writeBytes(java.lang.String) throws java.io.IOException; + method public final void writeChar(int) throws java.io.IOException; + method public final void writeChars(java.lang.String) throws java.io.IOException; + method public final void writeDouble(double) throws java.io.IOException; + method public final void writeFloat(float) throws java.io.IOException; + method public final void writeInt(int) throws java.io.IOException; + method public final void writeLong(long) throws java.io.IOException; + method public final void writeShort(int) throws java.io.IOException; + method public final void writeUTF(java.lang.String) throws java.io.IOException; + field protected int written; + } + + public class EOFException extends java.io.IOException { + ctor public EOFException(); + ctor public EOFException(java.lang.String); + } + + public abstract interface Externalizable implements java.io.Serializable { + method public abstract void readExternal(java.io.ObjectInput) throws java.lang.ClassNotFoundException, java.io.IOException; + method public abstract void writeExternal(java.io.ObjectOutput) throws java.io.IOException; + } + + public class File implements java.lang.Comparable java.io.Serializable { + ctor public File(java.io.File, java.lang.String); + ctor public File(java.lang.String); + ctor public File(java.lang.String, java.lang.String); + ctor public File(java.net.URI); + method public boolean canExecute(); + method public boolean canRead(); + method public boolean canWrite(); + method public int compareTo(java.io.File); + method public boolean createNewFile() throws java.io.IOException; + method public static java.io.File createTempFile(java.lang.String, java.lang.String) throws java.io.IOException; + method public static java.io.File createTempFile(java.lang.String, java.lang.String, java.io.File) throws java.io.IOException; + method public boolean delete(); + method public void deleteOnExit(); + method public boolean exists(); + method public java.io.File getAbsoluteFile(); + method public java.lang.String getAbsolutePath(); + method public java.io.File getCanonicalFile() throws java.io.IOException; + method public java.lang.String getCanonicalPath() throws java.io.IOException; + method public long getFreeSpace(); + method public java.lang.String getName(); + method public java.lang.String getParent(); + method public java.io.File getParentFile(); + method public java.lang.String getPath(); + method public long getTotalSpace(); + method public long getUsableSpace(); + method public boolean isAbsolute(); + method public boolean isDirectory(); + method public boolean isFile(); + method public boolean isHidden(); + method public long lastModified(); + method public long length(); + method public java.lang.String[] list(); + method public java.lang.String[] list(java.io.FilenameFilter); + method public java.io.File[] listFiles(); + method public java.io.File[] listFiles(java.io.FilenameFilter); + method public java.io.File[] listFiles(java.io.FileFilter); + method public static java.io.File[] listRoots(); + method public boolean mkdir(); + method public boolean mkdirs(); + method public boolean renameTo(java.io.File); + method public boolean setExecutable(boolean, boolean); + method public boolean setExecutable(boolean); + method public boolean setLastModified(long); + method public boolean setReadOnly(); + method public boolean setReadable(boolean, boolean); + method public boolean setReadable(boolean); + method public boolean setWritable(boolean, boolean); + method public boolean setWritable(boolean); + method public java.net.URI toURI(); + method public deprecated java.net.URL toURL() throws java.net.MalformedURLException; + field public static final java.lang.String pathSeparator; + field public static final char pathSeparatorChar; + field public static final java.lang.String separator; + field public static final char separatorChar; + } + + public final class FileDescriptor { + ctor public FileDescriptor(); + method public void sync() throws java.io.SyncFailedException; + method public boolean valid(); + field public static final java.io.FileDescriptor err; + field public static final java.io.FileDescriptor in; + field public static final java.io.FileDescriptor out; + } + + public abstract interface FileFilter { + method public abstract boolean accept(java.io.File); + } + + public class FileInputStream extends java.io.InputStream { + ctor public FileInputStream(java.io.File) throws java.io.FileNotFoundException; + ctor public FileInputStream(java.io.FileDescriptor); + ctor public FileInputStream(java.lang.String) throws java.io.FileNotFoundException; + method public java.nio.channels.FileChannel getChannel(); + method public final java.io.FileDescriptor getFD() throws java.io.IOException; + method public int read() throws java.io.IOException; + } + + public class FileNotFoundException extends java.io.IOException { + ctor public FileNotFoundException(); + ctor public FileNotFoundException(java.lang.String); + } + + public class FileOutputStream extends java.io.OutputStream { + ctor public FileOutputStream(java.io.File) throws java.io.FileNotFoundException; + ctor public FileOutputStream(java.io.File, boolean) throws java.io.FileNotFoundException; + ctor public FileOutputStream(java.io.FileDescriptor); + ctor public FileOutputStream(java.lang.String) throws java.io.FileNotFoundException; + ctor public FileOutputStream(java.lang.String, boolean) throws java.io.FileNotFoundException; + method public java.nio.channels.FileChannel getChannel(); + method public final java.io.FileDescriptor getFD() throws java.io.IOException; + method public void write(int) throws java.io.IOException; + } + + public final class FilePermission extends java.security.Permission implements java.io.Serializable { + ctor public FilePermission(java.lang.String, java.lang.String); + method public java.lang.String getActions(); + method public boolean implies(java.security.Permission); + } + + public class FileReader extends java.io.InputStreamReader { + ctor public FileReader(java.io.File) throws java.io.FileNotFoundException; + ctor public FileReader(java.io.FileDescriptor); + ctor public FileReader(java.lang.String) throws java.io.FileNotFoundException; + } + + public class FileWriter extends java.io.OutputStreamWriter { + ctor public FileWriter(java.io.File) throws java.io.IOException; + ctor public FileWriter(java.io.File, boolean) throws java.io.IOException; + ctor public FileWriter(java.io.FileDescriptor); + ctor public FileWriter(java.lang.String) throws java.io.IOException; + ctor public FileWriter(java.lang.String, boolean) throws java.io.IOException; + } + + public abstract interface FilenameFilter { + method public abstract boolean accept(java.io.File, java.lang.String); + } + + public class FilterInputStream extends java.io.InputStream { + ctor protected FilterInputStream(java.io.InputStream); + method public int read() throws java.io.IOException; + field protected volatile java.io.InputStream in; + } + + public class FilterOutputStream extends java.io.OutputStream { + ctor public FilterOutputStream(java.io.OutputStream); + method public void write(int) throws java.io.IOException; + field protected java.io.OutputStream out; + } + + public abstract class FilterReader extends java.io.Reader { + ctor protected FilterReader(java.io.Reader); + method public void close() throws java.io.IOException; + method public int read(char[], int, int) throws java.io.IOException; + field protected java.io.Reader in; + } + + public abstract class FilterWriter extends java.io.Writer { + ctor protected FilterWriter(java.io.Writer); + method public void close() throws java.io.IOException; + method public void flush() throws java.io.IOException; + method public void write(char[], int, int) throws java.io.IOException; + field protected java.io.Writer out; + } + + public abstract interface Flushable { + method public abstract void flush() throws java.io.IOException; + } + + public class IOError extends java.lang.Error { + ctor public IOError(java.lang.Throwable); + } + + public class IOException extends java.lang.Exception { + ctor public IOException(); + ctor public IOException(java.lang.String); + ctor public IOException(java.lang.String, java.lang.Throwable); + ctor public IOException(java.lang.Throwable); + } + + public abstract class InputStream implements java.io.Closeable { + ctor public InputStream(); + method public int available() throws java.io.IOException; + method public void close() throws java.io.IOException; + method public void mark(int); + method public boolean markSupported(); + method public abstract int read() throws java.io.IOException; + method public int read(byte[]) throws java.io.IOException; + method public int read(byte[], int, int) throws java.io.IOException; + method public synchronized void reset() throws java.io.IOException; + method public long skip(long) throws java.io.IOException; + } + + public class InputStreamReader extends java.io.Reader { + ctor public InputStreamReader(java.io.InputStream); + ctor public InputStreamReader(java.io.InputStream, java.lang.String) throws java.io.UnsupportedEncodingException; + ctor public InputStreamReader(java.io.InputStream, java.nio.charset.CharsetDecoder); + ctor public InputStreamReader(java.io.InputStream, java.nio.charset.Charset); + method public void close() throws java.io.IOException; + method public java.lang.String getEncoding(); + method public int read(char[], int, int) throws java.io.IOException; + } + + public class InterruptedIOException extends java.io.IOException { + ctor public InterruptedIOException(); + ctor public InterruptedIOException(java.lang.String); + field public int bytesTransferred; + } + + public class InvalidClassException extends java.io.ObjectStreamException { + ctor public InvalidClassException(java.lang.String); + ctor public InvalidClassException(java.lang.String, java.lang.String); + field public java.lang.String classname; + } + + public class InvalidObjectException extends java.io.ObjectStreamException { + ctor public InvalidObjectException(java.lang.String); + } + + public deprecated class LineNumberInputStream extends java.io.FilterInputStream { + ctor public LineNumberInputStream(java.io.InputStream); + method public int getLineNumber(); + method public void setLineNumber(int); + } + + public class LineNumberReader extends java.io.BufferedReader { + ctor public LineNumberReader(java.io.Reader); + ctor public LineNumberReader(java.io.Reader, int); + method public int getLineNumber(); + method public void setLineNumber(int); + } + + public class NotActiveException extends java.io.ObjectStreamException { + ctor public NotActiveException(); + ctor public NotActiveException(java.lang.String); + } + + public class NotSerializableException extends java.io.ObjectStreamException { + ctor public NotSerializableException(); + ctor public NotSerializableException(java.lang.String); + } + + public abstract interface ObjectInput implements java.lang.AutoCloseable java.io.DataInput { + method public abstract int available() throws java.io.IOException; + method public abstract void close() throws java.io.IOException; + method public abstract int read() throws java.io.IOException; + method public abstract int read(byte[]) throws java.io.IOException; + method public abstract int read(byte[], int, int) throws java.io.IOException; + method public abstract java.lang.Object readObject() throws java.lang.ClassNotFoundException, java.io.IOException; + method public abstract long skip(long) throws java.io.IOException; + } + + public class ObjectInputStream extends java.io.InputStream implements java.io.ObjectInput java.io.ObjectStreamConstants { + ctor protected ObjectInputStream() throws java.io.IOException; + ctor public ObjectInputStream(java.io.InputStream) throws java.io.IOException, java.io.StreamCorruptedException; + method public void defaultReadObject() throws java.lang.ClassNotFoundException, java.io.IOException, java.io.NotActiveException; + method protected boolean enableResolveObject(boolean); + method public int read() throws java.io.IOException; + method public boolean readBoolean() throws java.io.IOException; + method public byte readByte() throws java.io.IOException; + method public char readChar() throws java.io.IOException; + method protected java.io.ObjectStreamClass readClassDescriptor() throws java.lang.ClassNotFoundException, java.io.IOException; + method public double readDouble() throws java.io.IOException; + method public java.io.ObjectInputStream.GetField readFields() throws java.lang.ClassNotFoundException, java.io.IOException, java.io.NotActiveException; + method public float readFloat() throws java.io.IOException; + method public void readFully(byte[]) throws java.io.IOException; + method public void readFully(byte[], int, int) throws java.io.IOException; + method public int readInt() throws java.io.IOException; + method public deprecated java.lang.String readLine() throws java.io.IOException; + method public long readLong() throws java.io.IOException; + method public final java.lang.Object readObject() throws java.lang.ClassNotFoundException, java.io.IOException, java.io.OptionalDataException; + method protected java.lang.Object readObjectOverride() throws java.lang.ClassNotFoundException, java.io.IOException, java.io.OptionalDataException; + method public short readShort() throws java.io.IOException; + method protected void readStreamHeader() throws java.io.IOException, java.io.StreamCorruptedException; + method public java.lang.String readUTF() throws java.io.IOException; + method public java.lang.Object readUnshared() throws java.lang.ClassNotFoundException, java.io.IOException; + method public int readUnsignedByte() throws java.io.IOException; + method public int readUnsignedShort() throws java.io.IOException; + method public synchronized void registerValidation(java.io.ObjectInputValidation, int) throws java.io.InvalidObjectException, java.io.NotActiveException; + method protected java.lang.Class resolveClass(java.io.ObjectStreamClass) throws java.lang.ClassNotFoundException, java.io.IOException; + method protected java.lang.Object resolveObject(java.lang.Object) throws java.io.IOException; + method protected java.lang.Class resolveProxyClass(java.lang.String[]) throws java.lang.ClassNotFoundException, java.io.IOException; + method public int skipBytes(int) throws java.io.IOException; + } + + public static abstract class ObjectInputStream.GetField { + ctor public ObjectInputStream.GetField(); + method public abstract boolean defaulted(java.lang.String) throws java.io.IOException, java.lang.IllegalArgumentException; + method public abstract boolean get(java.lang.String, boolean) throws java.io.IOException, java.lang.IllegalArgumentException; + method public abstract char get(java.lang.String, char) throws java.io.IOException, java.lang.IllegalArgumentException; + method public abstract byte get(java.lang.String, byte) throws java.io.IOException, java.lang.IllegalArgumentException; + method public abstract short get(java.lang.String, short) throws java.io.IOException, java.lang.IllegalArgumentException; + method public abstract int get(java.lang.String, int) throws java.io.IOException, java.lang.IllegalArgumentException; + method public abstract long get(java.lang.String, long) throws java.io.IOException, java.lang.IllegalArgumentException; + method public abstract float get(java.lang.String, float) throws java.io.IOException, java.lang.IllegalArgumentException; + method public abstract double get(java.lang.String, double) throws java.io.IOException, java.lang.IllegalArgumentException; + method public abstract java.lang.Object get(java.lang.String, java.lang.Object) throws java.io.IOException, java.lang.IllegalArgumentException; + method public abstract java.io.ObjectStreamClass getObjectStreamClass(); + } + + public abstract interface ObjectInputValidation { + method public abstract void validateObject() throws java.io.InvalidObjectException; + } + + public abstract interface ObjectOutput implements java.lang.AutoCloseable java.io.DataOutput { + method public abstract void close() throws java.io.IOException; + method public abstract void flush() throws java.io.IOException; + method public abstract void write(byte[]) throws java.io.IOException; + method public abstract void write(byte[], int, int) throws java.io.IOException; + method public abstract void write(int) throws java.io.IOException; + method public abstract void writeObject(java.lang.Object) throws java.io.IOException; + } + + public class ObjectOutputStream extends java.io.OutputStream implements java.io.ObjectOutput java.io.ObjectStreamConstants { + ctor protected ObjectOutputStream() throws java.io.IOException; + ctor public ObjectOutputStream(java.io.OutputStream) throws java.io.IOException; + method protected void annotateClass(java.lang.Class) throws java.io.IOException; + method protected void annotateProxyClass(java.lang.Class) throws java.io.IOException; + method public void defaultWriteObject() throws java.io.IOException; + method protected void drain() throws java.io.IOException; + method protected boolean enableReplaceObject(boolean); + method public java.io.ObjectOutputStream.PutField putFields() throws java.io.IOException; + method protected java.lang.Object replaceObject(java.lang.Object) throws java.io.IOException; + method public void reset() throws java.io.IOException; + method public void useProtocolVersion(int) throws java.io.IOException; + method public void write(int) throws java.io.IOException; + method public void writeBoolean(boolean) throws java.io.IOException; + method public void writeByte(int) throws java.io.IOException; + method public void writeBytes(java.lang.String) throws java.io.IOException; + method public void writeChar(int) throws java.io.IOException; + method public void writeChars(java.lang.String) throws java.io.IOException; + method protected void writeClassDescriptor(java.io.ObjectStreamClass) throws java.io.IOException; + method public void writeDouble(double) throws java.io.IOException; + method public void writeFields() throws java.io.IOException; + method public void writeFloat(float) throws java.io.IOException; + method public void writeInt(int) throws java.io.IOException; + method public void writeLong(long) throws java.io.IOException; + method public final void writeObject(java.lang.Object) throws java.io.IOException; + method protected void writeObjectOverride(java.lang.Object) throws java.io.IOException; + method public void writeShort(int) throws java.io.IOException; + method protected void writeStreamHeader() throws java.io.IOException; + method public void writeUTF(java.lang.String) throws java.io.IOException; + method public void writeUnshared(java.lang.Object) throws java.io.IOException; + } + + public static abstract class ObjectOutputStream.PutField { + ctor public ObjectOutputStream.PutField(); + method public abstract void put(java.lang.String, boolean); + method public abstract void put(java.lang.String, char); + method public abstract void put(java.lang.String, byte); + method public abstract void put(java.lang.String, short); + method public abstract void put(java.lang.String, int); + method public abstract void put(java.lang.String, long); + method public abstract void put(java.lang.String, float); + method public abstract void put(java.lang.String, double); + method public abstract void put(java.lang.String, java.lang.Object); + method public abstract deprecated void write(java.io.ObjectOutput) throws java.io.IOException; + } + + public class ObjectStreamClass implements java.io.Serializable { + method public java.lang.Class forClass(); + method public java.io.ObjectStreamField getField(java.lang.String); + method public java.io.ObjectStreamField[] getFields(); + method public java.lang.String getName(); + method public long getSerialVersionUID(); + method public static java.io.ObjectStreamClass lookup(java.lang.Class); + method public static java.io.ObjectStreamClass lookupAny(java.lang.Class); + field public static final java.io.ObjectStreamField[] NO_FIELDS; + } + + public abstract interface ObjectStreamConstants { + field public static final int PROTOCOL_VERSION_1 = 1; // 0x1 + field public static final int PROTOCOL_VERSION_2 = 2; // 0x2 + field public static final byte SC_BLOCK_DATA = 8; // 0x8 + field public static final byte SC_ENUM = 16; // 0x10 + field public static final byte SC_EXTERNALIZABLE = 4; // 0x4 + field public static final byte SC_SERIALIZABLE = 2; // 0x2 + field public static final byte SC_WRITE_METHOD = 1; // 0x1 + field public static final short STREAM_MAGIC = -21267; // 0xffffaced + field public static final short STREAM_VERSION = 5; // 0x5 + field public static final java.io.SerializablePermission SUBCLASS_IMPLEMENTATION_PERMISSION; + field public static final java.io.SerializablePermission SUBSTITUTION_PERMISSION; + field public static final byte TC_ARRAY = 117; // 0x75 + field public static final byte TC_BASE = 112; // 0x70 + field public static final byte TC_BLOCKDATA = 119; // 0x77 + field public static final byte TC_BLOCKDATALONG = 122; // 0x7a + field public static final byte TC_CLASS = 118; // 0x76 + field public static final byte TC_CLASSDESC = 114; // 0x72 + field public static final byte TC_ENDBLOCKDATA = 120; // 0x78 + field public static final byte TC_ENUM = 126; // 0x7e + field public static final byte TC_EXCEPTION = 123; // 0x7b + field public static final byte TC_LONGSTRING = 124; // 0x7c + field public static final byte TC_MAX = 126; // 0x7e + field public static final byte TC_NULL = 112; // 0x70 + field public static final byte TC_OBJECT = 115; // 0x73 + field public static final byte TC_PROXYCLASSDESC = 125; // 0x7d + field public static final byte TC_REFERENCE = 113; // 0x71 + field public static final byte TC_RESET = 121; // 0x79 + field public static final byte TC_STRING = 116; // 0x74 + field public static final int baseWireHandle = 8257536; // 0x7e0000 + } + + public abstract class ObjectStreamException extends java.io.IOException { + ctor protected ObjectStreamException(); + ctor protected ObjectStreamException(java.lang.String); + } + + public class ObjectStreamField implements java.lang.Comparable { + ctor public ObjectStreamField(java.lang.String, java.lang.Class); + ctor public ObjectStreamField(java.lang.String, java.lang.Class, boolean); + method public int compareTo(java.lang.Object); + method public java.lang.String getName(); + method public int getOffset(); + method public java.lang.Class getType(); + method public char getTypeCode(); + method public java.lang.String getTypeString(); + method public boolean isPrimitive(); + method public boolean isUnshared(); + method protected void setOffset(int); + } + + public class OptionalDataException extends java.io.ObjectStreamException { + field public boolean eof; + field public int length; + } + + public abstract class OutputStream implements java.io.Closeable java.io.Flushable { + ctor public OutputStream(); + method public void close() throws java.io.IOException; + method public void flush() throws java.io.IOException; + method public void write(byte[]) throws java.io.IOException; + method public void write(byte[], int, int) throws java.io.IOException; + method public abstract void write(int) throws java.io.IOException; + } + + public class OutputStreamWriter extends java.io.Writer { + ctor public OutputStreamWriter(java.io.OutputStream); + ctor public OutputStreamWriter(java.io.OutputStream, java.lang.String) throws java.io.UnsupportedEncodingException; + ctor public OutputStreamWriter(java.io.OutputStream, java.nio.charset.Charset); + ctor public OutputStreamWriter(java.io.OutputStream, java.nio.charset.CharsetEncoder); + method public void close() throws java.io.IOException; + method public void flush() throws java.io.IOException; + method public java.lang.String getEncoding(); + method public void write(char[], int, int) throws java.io.IOException; + } + + public class PipedInputStream extends java.io.InputStream { + ctor public PipedInputStream(); + ctor public PipedInputStream(java.io.PipedOutputStream) throws java.io.IOException; + ctor public PipedInputStream(int); + ctor public PipedInputStream(java.io.PipedOutputStream, int) throws java.io.IOException; + method public void connect(java.io.PipedOutputStream) throws java.io.IOException; + method public synchronized int read() throws java.io.IOException; + method protected synchronized void receive(int) throws java.io.IOException; + field protected static final int PIPE_SIZE = 1024; // 0x400 + field protected byte[] buffer; + field protected int in; + field protected int out; + } + + public class PipedOutputStream extends java.io.OutputStream { + ctor public PipedOutputStream(); + ctor public PipedOutputStream(java.io.PipedInputStream) throws java.io.IOException; + method public void connect(java.io.PipedInputStream) throws java.io.IOException; + method public void write(int) throws java.io.IOException; + } + + public class PipedReader extends java.io.Reader { + ctor public PipedReader(); + ctor public PipedReader(java.io.PipedWriter) throws java.io.IOException; + ctor public PipedReader(int); + ctor public PipedReader(java.io.PipedWriter, int) throws java.io.IOException; + method public synchronized void close() throws java.io.IOException; + method public void connect(java.io.PipedWriter) throws java.io.IOException; + method public synchronized int read(char[], int, int) throws java.io.IOException; + } + + public class PipedWriter extends java.io.Writer { + ctor public PipedWriter(); + ctor public PipedWriter(java.io.PipedReader) throws java.io.IOException; + method public void close() throws java.io.IOException; + method public void connect(java.io.PipedReader) throws java.io.IOException; + method public void flush() throws java.io.IOException; + method public void write(char[], int, int) throws java.io.IOException; + } + + public class PrintStream extends java.io.FilterOutputStream implements java.lang.Appendable java.io.Closeable { + ctor public PrintStream(java.io.OutputStream); + ctor public PrintStream(java.io.OutputStream, boolean); + ctor public PrintStream(java.io.OutputStream, boolean, java.lang.String) throws java.io.UnsupportedEncodingException; + ctor public PrintStream(java.io.File) throws java.io.FileNotFoundException; + ctor public PrintStream(java.io.File, java.lang.String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException; + ctor public PrintStream(java.lang.String) throws java.io.FileNotFoundException; + ctor public PrintStream(java.lang.String, java.lang.String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException; + method public java.io.PrintStream append(char); + method public java.io.PrintStream append(java.lang.CharSequence); + method public java.io.PrintStream append(java.lang.CharSequence, int, int); + method public boolean checkError(); + method protected void clearError(); + method public java.io.PrintStream format(java.lang.String, java.lang.Object...); + method public java.io.PrintStream format(java.util.Locale, java.lang.String, java.lang.Object...); + method public void print(char[]); + method public void print(char); + method public void print(double); + method public void print(float); + method public void print(int); + method public void print(long); + method public void print(java.lang.Object); + method public synchronized void print(java.lang.String); + method public void print(boolean); + method public java.io.PrintStream printf(java.lang.String, java.lang.Object...); + method public java.io.PrintStream printf(java.util.Locale, java.lang.String, java.lang.Object...); + method public void println(); + method public void println(char[]); + method public void println(char); + method public void println(double); + method public void println(float); + method public void println(int); + method public void println(long); + method public void println(java.lang.Object); + method public synchronized void println(java.lang.String); + method public void println(boolean); + method protected void setError(); + } + + public class PrintWriter extends java.io.Writer { + ctor public PrintWriter(java.io.OutputStream); + ctor public PrintWriter(java.io.OutputStream, boolean); + ctor public PrintWriter(java.io.Writer); + ctor public PrintWriter(java.io.Writer, boolean); + ctor public PrintWriter(java.io.File) throws java.io.FileNotFoundException; + ctor public PrintWriter(java.io.File, java.lang.String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException; + ctor public PrintWriter(java.lang.String) throws java.io.FileNotFoundException; + ctor public PrintWriter(java.lang.String, java.lang.String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException; + method public boolean checkError(); + method protected void clearError(); + method public void close(); + method public void flush(); + method public java.io.PrintWriter format(java.lang.String, java.lang.Object...); + method public java.io.PrintWriter format(java.util.Locale, java.lang.String, java.lang.Object...); + method public void print(char[]); + method public void print(char); + method public void print(double); + method public void print(float); + method public void print(int); + method public void print(long); + method public void print(java.lang.Object); + method public void print(java.lang.String); + method public void print(boolean); + method public java.io.PrintWriter printf(java.lang.String, java.lang.Object...); + method public java.io.PrintWriter printf(java.util.Locale, java.lang.String, java.lang.Object...); + method public void println(); + method public void println(char[]); + method public void println(char); + method public void println(double); + method public void println(float); + method public void println(int); + method public void println(long); + method public void println(java.lang.Object); + method public void println(java.lang.String); + method public void println(boolean); + method protected void setError(); + method public void write(char[], int, int); + field protected java.io.Writer out; + } + + public class PushbackInputStream extends java.io.FilterInputStream { + ctor public PushbackInputStream(java.io.InputStream); + ctor public PushbackInputStream(java.io.InputStream, int); + method public void unread(byte[]) throws java.io.IOException; + method public void unread(byte[], int, int) throws java.io.IOException; + method public void unread(int) throws java.io.IOException; + field protected byte[] buf; + field protected int pos; + } + + public class PushbackReader extends java.io.FilterReader { + ctor public PushbackReader(java.io.Reader); + ctor public PushbackReader(java.io.Reader, int); + method public void unread(char[]) throws java.io.IOException; + method public void unread(char[], int, int) throws java.io.IOException; + method public void unread(int) throws java.io.IOException; + } + + public class RandomAccessFile implements java.io.Closeable java.io.DataInput java.io.DataOutput { + ctor public RandomAccessFile(java.io.File, java.lang.String) throws java.io.FileNotFoundException; + ctor public RandomAccessFile(java.lang.String, java.lang.String) throws java.io.FileNotFoundException; + method public void close() throws java.io.IOException; + method public final synchronized java.nio.channels.FileChannel getChannel(); + method public final java.io.FileDescriptor getFD() throws java.io.IOException; + method public long getFilePointer() throws java.io.IOException; + method public long length() throws java.io.IOException; + method public int read() throws java.io.IOException; + method public int read(byte[]) throws java.io.IOException; + method public int read(byte[], int, int) throws java.io.IOException; + method public final boolean readBoolean() throws java.io.IOException; + method public final byte readByte() throws java.io.IOException; + method public final char readChar() throws java.io.IOException; + method public final double readDouble() throws java.io.IOException; + method public final float readFloat() throws java.io.IOException; + method public final void readFully(byte[]) throws java.io.IOException; + method public final void readFully(byte[], int, int) throws java.io.IOException; + method public final int readInt() throws java.io.IOException; + method public final java.lang.String readLine() throws java.io.IOException; + method public final long readLong() throws java.io.IOException; + method public final short readShort() throws java.io.IOException; + method public final java.lang.String readUTF() throws java.io.IOException; + method public final int readUnsignedByte() throws java.io.IOException; + method public final int readUnsignedShort() throws java.io.IOException; + method public void seek(long) throws java.io.IOException; + method public void setLength(long) throws java.io.IOException; + method public int skipBytes(int) throws java.io.IOException; + method public void write(byte[]) throws java.io.IOException; + method public void write(byte[], int, int) throws java.io.IOException; + method public void write(int) throws java.io.IOException; + method public final void writeBoolean(boolean) throws java.io.IOException; + method public final void writeByte(int) throws java.io.IOException; + method public final void writeBytes(java.lang.String) throws java.io.IOException; + method public final void writeChar(int) throws java.io.IOException; + method public final void writeChars(java.lang.String) throws java.io.IOException; + method public final void writeDouble(double) throws java.io.IOException; + method public final void writeFloat(float) throws java.io.IOException; + method public final void writeInt(int) throws java.io.IOException; + method public final void writeLong(long) throws java.io.IOException; + method public final void writeShort(int) throws java.io.IOException; + method public final void writeUTF(java.lang.String) throws java.io.IOException; + } + + public abstract class Reader implements java.io.Closeable java.lang.Readable { + ctor protected Reader(); + ctor protected Reader(java.lang.Object); + method public abstract void close() throws java.io.IOException; + method public void mark(int) throws java.io.IOException; + method public boolean markSupported(); + method public int read() throws java.io.IOException; + method public int read(char[]) throws java.io.IOException; + method public abstract int read(char[], int, int) throws java.io.IOException; + method public int read(java.nio.CharBuffer) throws java.io.IOException; + method public boolean ready() throws java.io.IOException; + method public void reset() throws java.io.IOException; + method public long skip(long) throws java.io.IOException; + field protected java.lang.Object lock; + } + + public class SequenceInputStream extends java.io.InputStream { + ctor public SequenceInputStream(java.io.InputStream, java.io.InputStream); + ctor public SequenceInputStream(java.util.Enumeration); + method public int read() throws java.io.IOException; + } + + public abstract interface Serializable { + } + + public final class SerializablePermission extends java.security.BasicPermission { + ctor public SerializablePermission(java.lang.String); + ctor public SerializablePermission(java.lang.String, java.lang.String); + } + + public class StreamCorruptedException extends java.io.ObjectStreamException { + ctor public StreamCorruptedException(); + ctor public StreamCorruptedException(java.lang.String); + } + + public class StreamTokenizer { + ctor public deprecated StreamTokenizer(java.io.InputStream); + ctor public StreamTokenizer(java.io.Reader); + method public void commentChar(int); + method public void eolIsSignificant(boolean); + method public int lineno(); + method public void lowerCaseMode(boolean); + method public int nextToken() throws java.io.IOException; + method public void ordinaryChar(int); + method public void ordinaryChars(int, int); + method public void parseNumbers(); + method public void pushBack(); + method public void quoteChar(int); + method public void resetSyntax(); + method public void slashSlashComments(boolean); + method public void slashStarComments(boolean); + method public void whitespaceChars(int, int); + method public void wordChars(int, int); + field public static final int TT_EOF = -1; // 0xffffffff + field public static final int TT_EOL = 10; // 0xa + field public static final int TT_NUMBER = -2; // 0xfffffffe + field public static final int TT_WORD = -3; // 0xfffffffd + field public double nval; + field public java.lang.String sval; + field public int ttype; + } + + public deprecated class StringBufferInputStream extends java.io.InputStream { + ctor public StringBufferInputStream(java.lang.String); + method public synchronized int read(); + field protected java.lang.String buffer; + field protected int count; + field protected int pos; + } + + public class StringReader extends java.io.Reader { + ctor public StringReader(java.lang.String); + method public void close(); + method public int read(char[], int, int) throws java.io.IOException; + } + + public class StringWriter extends java.io.Writer { + ctor public StringWriter(); + ctor public StringWriter(int); + method public void close() throws java.io.IOException; + method public void flush(); + method public java.lang.StringBuffer getBuffer(); + method public void write(char[], int, int); + } + + public class SyncFailedException extends java.io.IOException { + ctor public SyncFailedException(java.lang.String); + } + + public class UTFDataFormatException extends java.io.IOException { + ctor public UTFDataFormatException(); + ctor public UTFDataFormatException(java.lang.String); + } + + public class UnsupportedEncodingException extends java.io.IOException { + ctor public UnsupportedEncodingException(); + ctor public UnsupportedEncodingException(java.lang.String); + } + + public class WriteAbortedException extends java.io.ObjectStreamException { + ctor public WriteAbortedException(java.lang.String, java.lang.Exception); + field public java.lang.Exception detail; + } + + public abstract class Writer implements java.lang.Appendable java.io.Closeable java.io.Flushable { + ctor protected Writer(); + ctor protected Writer(java.lang.Object); + method public java.io.Writer append(char) throws java.io.IOException; + method public java.io.Writer append(java.lang.CharSequence) throws java.io.IOException; + method public java.io.Writer append(java.lang.CharSequence, int, int) throws java.io.IOException; + method public abstract void close() throws java.io.IOException; + method public abstract void flush() throws java.io.IOException; + method public void write(char[]) throws java.io.IOException; + method public abstract void write(char[], int, int) throws java.io.IOException; + method public void write(int) throws java.io.IOException; + method public void write(java.lang.String) throws java.io.IOException; + method public void write(java.lang.String, int, int) throws java.io.IOException; + field protected java.lang.Object lock; + } + +} + +package java.lang { + + public class AbstractMethodError extends java.lang.IncompatibleClassChangeError { + ctor public AbstractMethodError(); + ctor public AbstractMethodError(java.lang.String); + } + + abstract class AbstractStringBuilder { + method public int capacity(); + method public char charAt(int); + method public int codePointAt(int); + method public int codePointBefore(int); + method public int codePointCount(int, int); + method public void ensureCapacity(int); + method public void getChars(int, int, char[], int); + method public int indexOf(java.lang.String); + method public int indexOf(java.lang.String, int); + method public int lastIndexOf(java.lang.String); + method public int lastIndexOf(java.lang.String, int); + method public int length(); + method public int offsetByCodePoints(int, int); + method public void setCharAt(int, char); + method public void setLength(int); + method public java.lang.CharSequence subSequence(int, int); + method public java.lang.String substring(int); + method public java.lang.String substring(int, int); + method public void trimToSize(); + } + + public abstract interface Appendable { + method public abstract java.lang.Appendable append(char) throws java.io.IOException; + method public abstract java.lang.Appendable append(java.lang.CharSequence) throws java.io.IOException; + method public abstract java.lang.Appendable append(java.lang.CharSequence, int, int) throws java.io.IOException; + } + + public class ArithmeticException extends java.lang.RuntimeException { + ctor public ArithmeticException(); + ctor public ArithmeticException(java.lang.String); + } + + public class ArrayIndexOutOfBoundsException extends java.lang.IndexOutOfBoundsException { + ctor public ArrayIndexOutOfBoundsException(); + ctor public ArrayIndexOutOfBoundsException(int); + ctor public ArrayIndexOutOfBoundsException(java.lang.String); + } + + public class ArrayStoreException extends java.lang.RuntimeException { + ctor public ArrayStoreException(); + ctor public ArrayStoreException(java.lang.String); + } + + public class AssertionError extends java.lang.Error { + ctor public AssertionError(); + ctor public AssertionError(java.lang.String, java.lang.Throwable); + ctor public AssertionError(java.lang.Object); + ctor public AssertionError(boolean); + ctor public AssertionError(char); + ctor public AssertionError(int); + ctor public AssertionError(long); + ctor public AssertionError(float); + ctor public AssertionError(double); + } + + public abstract interface AutoCloseable { + method public abstract void close() throws java.lang.Exception; + } + + public final class Boolean implements java.lang.Comparable java.io.Serializable { + ctor public Boolean(java.lang.String); + ctor public Boolean(boolean); + method public boolean booleanValue(); + method public static int compare(boolean, boolean); + method public int compareTo(java.lang.Boolean); + method public static boolean getBoolean(java.lang.String); + method public static boolean parseBoolean(java.lang.String); + method public static java.lang.String toString(boolean); + method public static java.lang.Boolean valueOf(java.lang.String); + method public static java.lang.Boolean valueOf(boolean); + field public static final java.lang.Boolean FALSE; + field public static final java.lang.Boolean TRUE; + field public static final java.lang.Class TYPE; + } + + public final class Byte extends java.lang.Number implements java.lang.Comparable { + ctor public Byte(byte); + ctor public Byte(java.lang.String) throws java.lang.NumberFormatException; + method public static int compare(byte, byte); + method public int compareTo(java.lang.Byte); + method public static java.lang.Byte decode(java.lang.String) throws java.lang.NumberFormatException; + method public double doubleValue(); + method public float floatValue(); + method public int intValue(); + method public long longValue(); + method public static byte parseByte(java.lang.String) throws java.lang.NumberFormatException; + method public static byte parseByte(java.lang.String, int) throws java.lang.NumberFormatException; + method public static java.lang.String toString(byte); + method public static java.lang.Byte valueOf(java.lang.String) throws java.lang.NumberFormatException; + method public static java.lang.Byte valueOf(java.lang.String, int) throws java.lang.NumberFormatException; + method public static java.lang.Byte valueOf(byte); + field public static final byte MAX_VALUE = 127; // 0x7f + field public static final byte MIN_VALUE = -128; // 0xffffff80 + field public static final int SIZE = 8; // 0x8 + field public static final java.lang.Class TYPE; + } + + public abstract interface CharSequence { + method public abstract char charAt(int); + method public abstract int length(); + method public abstract java.lang.CharSequence subSequence(int, int); + method public abstract java.lang.String toString(); + } + + public final class Character implements java.lang.Comparable java.io.Serializable { + ctor public Character(char); + method public static int charCount(int); + method public char charValue(); + method public static int codePointAt(java.lang.CharSequence, int); + method public static int codePointAt(char[], int); + method public static int codePointAt(char[], int, int); + method public static int codePointBefore(java.lang.CharSequence, int); + method public static int codePointBefore(char[], int); + method public static int codePointBefore(char[], int, int); + method public static int codePointCount(java.lang.CharSequence, int, int); + method public static int codePointCount(char[], int, int); + method public static int compare(char, char); + method public int compareTo(java.lang.Character); + method public static int digit(char, int); + method public static int digit(int, int); + method public static char forDigit(int, int); + method public static byte getDirectionality(char); + method public static byte getDirectionality(int); + method public static java.lang.String getName(int); + method public static int getNumericValue(char); + method public static int getNumericValue(int); + method public static int getType(char); + method public static int getType(int); + method public static char highSurrogate(int); + method public static boolean isAlphabetic(int); + method public static boolean isBmpCodePoint(int); + method public static boolean isDefined(char); + method public static boolean isDefined(int); + method public static boolean isDigit(char); + method public static boolean isDigit(int); + method public static boolean isHighSurrogate(char); + method public static boolean isISOControl(char); + method public static boolean isISOControl(int); + method public static boolean isIdentifierIgnorable(char); + method public static boolean isIdentifierIgnorable(int); + method public static boolean isIdeographic(int); + method public static boolean isJavaIdentifierPart(char); + method public static boolean isJavaIdentifierPart(int); + method public static boolean isJavaIdentifierStart(char); + method public static boolean isJavaIdentifierStart(int); + method public static deprecated boolean isJavaLetter(char); + method public static deprecated boolean isJavaLetterOrDigit(char); + method public static boolean isLetter(char); + method public static boolean isLetter(int); + method public static boolean isLetterOrDigit(char); + method public static boolean isLetterOrDigit(int); + method public static boolean isLowSurrogate(char); + method public static boolean isLowerCase(char); + method public static boolean isLowerCase(int); + method public static boolean isMirrored(char); + method public static boolean isMirrored(int); + method public static deprecated boolean isSpace(char); + method public static boolean isSpaceChar(char); + method public static boolean isSpaceChar(int); + method public static boolean isSupplementaryCodePoint(int); + method public static boolean isSurrogate(char); + method public static boolean isSurrogatePair(char, char); + method public static boolean isTitleCase(char); + method public static boolean isTitleCase(int); + method public static boolean isUnicodeIdentifierPart(char); + method public static boolean isUnicodeIdentifierPart(int); + method public static boolean isUnicodeIdentifierStart(char); + method public static boolean isUnicodeIdentifierStart(int); + method public static boolean isUpperCase(char); + method public static boolean isUpperCase(int); + method public static boolean isValidCodePoint(int); + method public static boolean isWhitespace(char); + method public static boolean isWhitespace(int); + method public static char lowSurrogate(int); + method public static int offsetByCodePoints(java.lang.CharSequence, int, int); + method public static int offsetByCodePoints(char[], int, int, int, int); + method public static char reverseBytes(char); + method public static int toChars(int, char[], int); + method public static char[] toChars(int); + method public static int toCodePoint(char, char); + method public static char toLowerCase(char); + method public static int toLowerCase(int); + method public static java.lang.String toString(char); + method public static char toTitleCase(char); + method public static int toTitleCase(int); + method public static char toUpperCase(char); + method public static int toUpperCase(int); + method public static java.lang.Character valueOf(char); + field public static final byte COMBINING_SPACING_MARK = 8; // 0x8 + field public static final byte CONNECTOR_PUNCTUATION = 23; // 0x17 + field public static final byte CONTROL = 15; // 0xf + field public static final byte CURRENCY_SYMBOL = 26; // 0x1a + field public static final byte DASH_PUNCTUATION = 20; // 0x14 + field public static final byte DECIMAL_DIGIT_NUMBER = 9; // 0x9 + field public static final byte DIRECTIONALITY_ARABIC_NUMBER = 6; // 0x6 + field public static final byte DIRECTIONALITY_BOUNDARY_NEUTRAL = 9; // 0x9 + field public static final byte DIRECTIONALITY_COMMON_NUMBER_SEPARATOR = 7; // 0x7 + field public static final byte DIRECTIONALITY_EUROPEAN_NUMBER = 3; // 0x3 + field public static final byte DIRECTIONALITY_EUROPEAN_NUMBER_SEPARATOR = 4; // 0x4 + field public static final byte DIRECTIONALITY_EUROPEAN_NUMBER_TERMINATOR = 5; // 0x5 + field public static final byte DIRECTIONALITY_LEFT_TO_RIGHT = 0; // 0x0 + field public static final byte DIRECTIONALITY_LEFT_TO_RIGHT_EMBEDDING = 14; // 0xe + field public static final byte DIRECTIONALITY_LEFT_TO_RIGHT_OVERRIDE = 15; // 0xf + field public static final byte DIRECTIONALITY_NONSPACING_MARK = 8; // 0x8 + field public static final byte DIRECTIONALITY_OTHER_NEUTRALS = 13; // 0xd + field public static final byte DIRECTIONALITY_PARAGRAPH_SEPARATOR = 10; // 0xa + field public static final byte DIRECTIONALITY_POP_DIRECTIONAL_FORMAT = 18; // 0x12 + field public static final byte DIRECTIONALITY_RIGHT_TO_LEFT = 1; // 0x1 + field public static final byte DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC = 2; // 0x2 + field public static final byte DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING = 16; // 0x10 + field public static final byte DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE = 17; // 0x11 + field public static final byte DIRECTIONALITY_SEGMENT_SEPARATOR = 11; // 0xb + field public static final byte DIRECTIONALITY_UNDEFINED = -1; // 0xffffffff + field public static final byte DIRECTIONALITY_WHITESPACE = 12; // 0xc + field public static final byte ENCLOSING_MARK = 7; // 0x7 + field public static final byte END_PUNCTUATION = 22; // 0x16 + field public static final byte FINAL_QUOTE_PUNCTUATION = 30; // 0x1e + field public static final byte FORMAT = 16; // 0x10 + field public static final byte INITIAL_QUOTE_PUNCTUATION = 29; // 0x1d + field public static final byte LETTER_NUMBER = 10; // 0xa + field public static final byte LINE_SEPARATOR = 13; // 0xd + field public static final byte LOWERCASE_LETTER = 2; // 0x2 + field public static final byte MATH_SYMBOL = 25; // 0x19 + field public static final int MAX_CODE_POINT = 1114111; // 0x10ffff + field public static final char MAX_HIGH_SURROGATE = 56319; // 0xdbff '\udbff' + field public static final char MAX_LOW_SURROGATE = 57343; // 0xdfff '\udfff' + field public static final int MAX_RADIX = 36; // 0x24 + field public static final char MAX_SURROGATE = 57343; // 0xdfff '\udfff' + field public static final char MAX_VALUE = 65535; // 0xffff '\uffff' + field public static final int MIN_CODE_POINT = 0; // 0x0 + field public static final char MIN_HIGH_SURROGATE = 55296; // 0xd800 '\ud800' + field public static final char MIN_LOW_SURROGATE = 56320; // 0xdc00 '\udc00' + field public static final int MIN_RADIX = 2; // 0x2 + field public static final int MIN_SUPPLEMENTARY_CODE_POINT = 65536; // 0x10000 + field public static final char MIN_SURROGATE = 55296; // 0xd800 '\ud800' + field public static final char MIN_VALUE = 0; // 0x0000 '\u0000' + field public static final byte MODIFIER_LETTER = 4; // 0x4 + field public static final byte MODIFIER_SYMBOL = 27; // 0x1b + field public static final byte NON_SPACING_MARK = 6; // 0x6 + field public static final byte OTHER_LETTER = 5; // 0x5 + field public static final byte OTHER_NUMBER = 11; // 0xb + field public static final byte OTHER_PUNCTUATION = 24; // 0x18 + field public static final byte OTHER_SYMBOL = 28; // 0x1c + field public static final byte PARAGRAPH_SEPARATOR = 14; // 0xe + field public static final byte PRIVATE_USE = 18; // 0x12 + field public static final int SIZE = 16; // 0x10 + field public static final byte SPACE_SEPARATOR = 12; // 0xc + field public static final byte START_PUNCTUATION = 21; // 0x15 + field public static final byte SURROGATE = 19; // 0x13 + field public static final byte TITLECASE_LETTER = 3; // 0x3 + field public static final java.lang.Class TYPE; + field public static final byte UNASSIGNED = 0; // 0x0 + field public static final byte UPPERCASE_LETTER = 1; // 0x1 + } + + public static class Character.Subset { + ctor protected Character.Subset(java.lang.String); + method public final boolean equals(java.lang.Object); + method public final int hashCode(); + method public final java.lang.String toString(); + } + + public static final class Character.UnicodeBlock extends java.lang.Character.Subset { + method public static java.lang.Character.UnicodeBlock forName(java.lang.String); + method public static java.lang.Character.UnicodeBlock of(char); + method public static java.lang.Character.UnicodeBlock of(int); + field public static final java.lang.Character.UnicodeBlock AEGEAN_NUMBERS; + field public static final java.lang.Character.UnicodeBlock ALCHEMICAL_SYMBOLS; + field public static final java.lang.Character.UnicodeBlock ALPHABETIC_PRESENTATION_FORMS; + field public static final java.lang.Character.UnicodeBlock ANCIENT_GREEK_MUSICAL_NOTATION; + field public static final java.lang.Character.UnicodeBlock ANCIENT_GREEK_NUMBERS; + field public static final java.lang.Character.UnicodeBlock ANCIENT_SYMBOLS; + field public static final java.lang.Character.UnicodeBlock ARABIC; + field public static final java.lang.Character.UnicodeBlock ARABIC_PRESENTATION_FORMS_A; + field public static final java.lang.Character.UnicodeBlock ARABIC_PRESENTATION_FORMS_B; + field public static final java.lang.Character.UnicodeBlock ARABIC_SUPPLEMENT; + field public static final java.lang.Character.UnicodeBlock ARMENIAN; + field public static final java.lang.Character.UnicodeBlock ARROWS; + field public static final java.lang.Character.UnicodeBlock AVESTAN; + field public static final java.lang.Character.UnicodeBlock BALINESE; + field public static final java.lang.Character.UnicodeBlock BAMUM; + field public static final java.lang.Character.UnicodeBlock BAMUM_SUPPLEMENT; + field public static final java.lang.Character.UnicodeBlock BASIC_LATIN; + field public static final java.lang.Character.UnicodeBlock BATAK; + field public static final java.lang.Character.UnicodeBlock BENGALI; + field public static final java.lang.Character.UnicodeBlock BLOCK_ELEMENTS; + field public static final java.lang.Character.UnicodeBlock BOPOMOFO; + field public static final java.lang.Character.UnicodeBlock BOPOMOFO_EXTENDED; + field public static final java.lang.Character.UnicodeBlock BOX_DRAWING; + field public static final java.lang.Character.UnicodeBlock BRAHMI; + field public static final java.lang.Character.UnicodeBlock BRAILLE_PATTERNS; + field public static final java.lang.Character.UnicodeBlock BUGINESE; + field public static final java.lang.Character.UnicodeBlock BUHID; + field public static final java.lang.Character.UnicodeBlock BYZANTINE_MUSICAL_SYMBOLS; + field public static final java.lang.Character.UnicodeBlock CARIAN; + field public static final java.lang.Character.UnicodeBlock CHAM; + field public static final java.lang.Character.UnicodeBlock CHEROKEE; + field public static final java.lang.Character.UnicodeBlock CJK_COMPATIBILITY; + field public static final java.lang.Character.UnicodeBlock CJK_COMPATIBILITY_FORMS; + field public static final java.lang.Character.UnicodeBlock CJK_COMPATIBILITY_IDEOGRAPHS; + field public static final java.lang.Character.UnicodeBlock CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT; + field public static final java.lang.Character.UnicodeBlock CJK_RADICALS_SUPPLEMENT; + field public static final java.lang.Character.UnicodeBlock CJK_STROKES; + field public static final java.lang.Character.UnicodeBlock CJK_SYMBOLS_AND_PUNCTUATION; + field public static final java.lang.Character.UnicodeBlock CJK_UNIFIED_IDEOGRAPHS; + field public static final java.lang.Character.UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A; + field public static final java.lang.Character.UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B; + field public static final java.lang.Character.UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_C; + field public static final java.lang.Character.UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_D; + field public static final java.lang.Character.UnicodeBlock COMBINING_DIACRITICAL_MARKS; + field public static final java.lang.Character.UnicodeBlock COMBINING_DIACRITICAL_MARKS_SUPPLEMENT; + field public static final java.lang.Character.UnicodeBlock COMBINING_HALF_MARKS; + field public static final java.lang.Character.UnicodeBlock COMBINING_MARKS_FOR_SYMBOLS; + field public static final java.lang.Character.UnicodeBlock COMMON_INDIC_NUMBER_FORMS; + field public static final java.lang.Character.UnicodeBlock CONTROL_PICTURES; + field public static final java.lang.Character.UnicodeBlock COPTIC; + field public static final java.lang.Character.UnicodeBlock COUNTING_ROD_NUMERALS; + field public static final java.lang.Character.UnicodeBlock CUNEIFORM; + field public static final java.lang.Character.UnicodeBlock CUNEIFORM_NUMBERS_AND_PUNCTUATION; + field public static final java.lang.Character.UnicodeBlock CURRENCY_SYMBOLS; + field public static final java.lang.Character.UnicodeBlock CYPRIOT_SYLLABARY; + field public static final java.lang.Character.UnicodeBlock CYRILLIC; + field public static final java.lang.Character.UnicodeBlock CYRILLIC_EXTENDED_A; + field public static final java.lang.Character.UnicodeBlock CYRILLIC_EXTENDED_B; + field public static final java.lang.Character.UnicodeBlock CYRILLIC_SUPPLEMENTARY; + field public static final java.lang.Character.UnicodeBlock DESERET; + field public static final java.lang.Character.UnicodeBlock DEVANAGARI; + field public static final java.lang.Character.UnicodeBlock DEVANAGARI_EXTENDED; + field public static final java.lang.Character.UnicodeBlock DINGBATS; + field public static final java.lang.Character.UnicodeBlock DOMINO_TILES; + field public static final java.lang.Character.UnicodeBlock EGYPTIAN_HIEROGLYPHS; + field public static final java.lang.Character.UnicodeBlock EMOTICONS; + field public static final java.lang.Character.UnicodeBlock ENCLOSED_ALPHANUMERICS; + field public static final java.lang.Character.UnicodeBlock ENCLOSED_ALPHANUMERIC_SUPPLEMENT; + field public static final java.lang.Character.UnicodeBlock ENCLOSED_CJK_LETTERS_AND_MONTHS; + field public static final java.lang.Character.UnicodeBlock ENCLOSED_IDEOGRAPHIC_SUPPLEMENT; + field public static final java.lang.Character.UnicodeBlock ETHIOPIC; + field public static final java.lang.Character.UnicodeBlock ETHIOPIC_EXTENDED; + field public static final java.lang.Character.UnicodeBlock ETHIOPIC_EXTENDED_A; + field public static final java.lang.Character.UnicodeBlock ETHIOPIC_SUPPLEMENT; + field public static final java.lang.Character.UnicodeBlock GENERAL_PUNCTUATION; + field public static final java.lang.Character.UnicodeBlock GEOMETRIC_SHAPES; + field public static final java.lang.Character.UnicodeBlock GEORGIAN; + field public static final java.lang.Character.UnicodeBlock GEORGIAN_SUPPLEMENT; + field public static final java.lang.Character.UnicodeBlock GLAGOLITIC; + field public static final java.lang.Character.UnicodeBlock GOTHIC; + field public static final java.lang.Character.UnicodeBlock GREEK; + field public static final java.lang.Character.UnicodeBlock GREEK_EXTENDED; + field public static final java.lang.Character.UnicodeBlock GUJARATI; + field public static final java.lang.Character.UnicodeBlock GURMUKHI; + field public static final java.lang.Character.UnicodeBlock HALFWIDTH_AND_FULLWIDTH_FORMS; + field public static final java.lang.Character.UnicodeBlock HANGUL_COMPATIBILITY_JAMO; + field public static final java.lang.Character.UnicodeBlock HANGUL_JAMO; + field public static final java.lang.Character.UnicodeBlock HANGUL_JAMO_EXTENDED_A; + field public static final java.lang.Character.UnicodeBlock HANGUL_JAMO_EXTENDED_B; + field public static final java.lang.Character.UnicodeBlock HANGUL_SYLLABLES; + field public static final java.lang.Character.UnicodeBlock HANUNOO; + field public static final java.lang.Character.UnicodeBlock HEBREW; + field public static final java.lang.Character.UnicodeBlock HIGH_PRIVATE_USE_SURROGATES; + field public static final java.lang.Character.UnicodeBlock HIGH_SURROGATES; + field public static final java.lang.Character.UnicodeBlock HIRAGANA; + field public static final java.lang.Character.UnicodeBlock IDEOGRAPHIC_DESCRIPTION_CHARACTERS; + field public static final java.lang.Character.UnicodeBlock IMPERIAL_ARAMAIC; + field public static final java.lang.Character.UnicodeBlock INSCRIPTIONAL_PAHLAVI; + field public static final java.lang.Character.UnicodeBlock INSCRIPTIONAL_PARTHIAN; + field public static final java.lang.Character.UnicodeBlock IPA_EXTENSIONS; + field public static final java.lang.Character.UnicodeBlock JAVANESE; + field public static final java.lang.Character.UnicodeBlock KAITHI; + field public static final java.lang.Character.UnicodeBlock KANA_SUPPLEMENT; + field public static final java.lang.Character.UnicodeBlock KANBUN; + field public static final java.lang.Character.UnicodeBlock KANGXI_RADICALS; + field public static final java.lang.Character.UnicodeBlock KANNADA; + field public static final java.lang.Character.UnicodeBlock KATAKANA; + field public static final java.lang.Character.UnicodeBlock KATAKANA_PHONETIC_EXTENSIONS; + field public static final java.lang.Character.UnicodeBlock KAYAH_LI; + field public static final java.lang.Character.UnicodeBlock KHAROSHTHI; + field public static final java.lang.Character.UnicodeBlock KHMER; + field public static final java.lang.Character.UnicodeBlock KHMER_SYMBOLS; + field public static final java.lang.Character.UnicodeBlock LAO; + field public static final java.lang.Character.UnicodeBlock LATIN_1_SUPPLEMENT; + field public static final java.lang.Character.UnicodeBlock LATIN_EXTENDED_A; + field public static final java.lang.Character.UnicodeBlock LATIN_EXTENDED_ADDITIONAL; + field public static final java.lang.Character.UnicodeBlock LATIN_EXTENDED_B; + field public static final java.lang.Character.UnicodeBlock LATIN_EXTENDED_C; + field public static final java.lang.Character.UnicodeBlock LATIN_EXTENDED_D; + field public static final java.lang.Character.UnicodeBlock LEPCHA; + field public static final java.lang.Character.UnicodeBlock LETTERLIKE_SYMBOLS; + field public static final java.lang.Character.UnicodeBlock LIMBU; + field public static final java.lang.Character.UnicodeBlock LINEAR_B_IDEOGRAMS; + field public static final java.lang.Character.UnicodeBlock LINEAR_B_SYLLABARY; + field public static final java.lang.Character.UnicodeBlock LISU; + field public static final java.lang.Character.UnicodeBlock LOW_SURROGATES; + field public static final java.lang.Character.UnicodeBlock LYCIAN; + field public static final java.lang.Character.UnicodeBlock LYDIAN; + field public static final java.lang.Character.UnicodeBlock MAHJONG_TILES; + field public static final java.lang.Character.UnicodeBlock MALAYALAM; + field public static final java.lang.Character.UnicodeBlock MANDAIC; + field public static final java.lang.Character.UnicodeBlock MATHEMATICAL_ALPHANUMERIC_SYMBOLS; + field public static final java.lang.Character.UnicodeBlock MATHEMATICAL_OPERATORS; + field public static final java.lang.Character.UnicodeBlock MEETEI_MAYEK; + field public static final java.lang.Character.UnicodeBlock MISCELLANEOUS_MATHEMATICAL_SYMBOLS_A; + field public static final java.lang.Character.UnicodeBlock MISCELLANEOUS_MATHEMATICAL_SYMBOLS_B; + field public static final java.lang.Character.UnicodeBlock MISCELLANEOUS_SYMBOLS; + field public static final java.lang.Character.UnicodeBlock MISCELLANEOUS_SYMBOLS_AND_ARROWS; + field public static final java.lang.Character.UnicodeBlock MISCELLANEOUS_SYMBOLS_AND_PICTOGRAPHS; + field public static final java.lang.Character.UnicodeBlock MISCELLANEOUS_TECHNICAL; + field public static final java.lang.Character.UnicodeBlock MODIFIER_TONE_LETTERS; + field public static final java.lang.Character.UnicodeBlock MONGOLIAN; + field public static final java.lang.Character.UnicodeBlock MUSICAL_SYMBOLS; + field public static final java.lang.Character.UnicodeBlock MYANMAR; + field public static final java.lang.Character.UnicodeBlock MYANMAR_EXTENDED_A; + field public static final java.lang.Character.UnicodeBlock NEW_TAI_LUE; + field public static final java.lang.Character.UnicodeBlock NKO; + field public static final java.lang.Character.UnicodeBlock NUMBER_FORMS; + field public static final java.lang.Character.UnicodeBlock OGHAM; + field public static final java.lang.Character.UnicodeBlock OLD_ITALIC; + field public static final java.lang.Character.UnicodeBlock OLD_PERSIAN; + field public static final java.lang.Character.UnicodeBlock OLD_SOUTH_ARABIAN; + field public static final java.lang.Character.UnicodeBlock OLD_TURKIC; + field public static final java.lang.Character.UnicodeBlock OL_CHIKI; + field public static final java.lang.Character.UnicodeBlock OPTICAL_CHARACTER_RECOGNITION; + field public static final java.lang.Character.UnicodeBlock ORIYA; + field public static final java.lang.Character.UnicodeBlock OSMANYA; + field public static final java.lang.Character.UnicodeBlock PHAGS_PA; + field public static final java.lang.Character.UnicodeBlock PHAISTOS_DISC; + field public static final java.lang.Character.UnicodeBlock PHOENICIAN; + field public static final java.lang.Character.UnicodeBlock PHONETIC_EXTENSIONS; + field public static final java.lang.Character.UnicodeBlock PHONETIC_EXTENSIONS_SUPPLEMENT; + field public static final java.lang.Character.UnicodeBlock PLAYING_CARDS; + field public static final java.lang.Character.UnicodeBlock PRIVATE_USE_AREA; + field public static final java.lang.Character.UnicodeBlock REJANG; + field public static final java.lang.Character.UnicodeBlock RUMI_NUMERAL_SYMBOLS; + field public static final java.lang.Character.UnicodeBlock RUNIC; + field public static final java.lang.Character.UnicodeBlock SAMARITAN; + field public static final java.lang.Character.UnicodeBlock SAURASHTRA; + field public static final java.lang.Character.UnicodeBlock SHAVIAN; + field public static final java.lang.Character.UnicodeBlock SINHALA; + field public static final java.lang.Character.UnicodeBlock SMALL_FORM_VARIANTS; + field public static final java.lang.Character.UnicodeBlock SPACING_MODIFIER_LETTERS; + field public static final java.lang.Character.UnicodeBlock SPECIALS; + field public static final java.lang.Character.UnicodeBlock SUNDANESE; + field public static final java.lang.Character.UnicodeBlock SUPERSCRIPTS_AND_SUBSCRIPTS; + field public static final java.lang.Character.UnicodeBlock SUPPLEMENTAL_ARROWS_A; + field public static final java.lang.Character.UnicodeBlock SUPPLEMENTAL_ARROWS_B; + field public static final java.lang.Character.UnicodeBlock SUPPLEMENTAL_MATHEMATICAL_OPERATORS; + field public static final java.lang.Character.UnicodeBlock SUPPLEMENTAL_PUNCTUATION; + field public static final java.lang.Character.UnicodeBlock SUPPLEMENTARY_PRIVATE_USE_AREA_A; + field public static final java.lang.Character.UnicodeBlock SUPPLEMENTARY_PRIVATE_USE_AREA_B; + field public static final deprecated java.lang.Character.UnicodeBlock SURROGATES_AREA; + field public static final java.lang.Character.UnicodeBlock SYLOTI_NAGRI; + field public static final java.lang.Character.UnicodeBlock SYRIAC; + field public static final java.lang.Character.UnicodeBlock TAGALOG; + field public static final java.lang.Character.UnicodeBlock TAGBANWA; + field public static final java.lang.Character.UnicodeBlock TAGS; + field public static final java.lang.Character.UnicodeBlock TAI_LE; + field public static final java.lang.Character.UnicodeBlock TAI_THAM; + field public static final java.lang.Character.UnicodeBlock TAI_VIET; + field public static final java.lang.Character.UnicodeBlock TAI_XUAN_JING_SYMBOLS; + field public static final java.lang.Character.UnicodeBlock TAMIL; + field public static final java.lang.Character.UnicodeBlock TELUGU; + field public static final java.lang.Character.UnicodeBlock THAANA; + field public static final java.lang.Character.UnicodeBlock THAI; + field public static final java.lang.Character.UnicodeBlock TIBETAN; + field public static final java.lang.Character.UnicodeBlock TIFINAGH; + field public static final java.lang.Character.UnicodeBlock TRANSPORT_AND_MAP_SYMBOLS; + field public static final java.lang.Character.UnicodeBlock UGARITIC; + field public static final java.lang.Character.UnicodeBlock UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS; + field public static final java.lang.Character.UnicodeBlock UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_EXTENDED; + field public static final java.lang.Character.UnicodeBlock VAI; + field public static final java.lang.Character.UnicodeBlock VARIATION_SELECTORS; + field public static final java.lang.Character.UnicodeBlock VARIATION_SELECTORS_SUPPLEMENT; + field public static final java.lang.Character.UnicodeBlock VEDIC_EXTENSIONS; + field public static final java.lang.Character.UnicodeBlock VERTICAL_FORMS; + field public static final java.lang.Character.UnicodeBlock YIJING_HEXAGRAM_SYMBOLS; + field public static final java.lang.Character.UnicodeBlock YI_RADICALS; + field public static final java.lang.Character.UnicodeBlock YI_SYLLABLES; + } + + public final class Class implements java.lang.reflect.AnnotatedElement java.lang.reflect.GenericDeclaration java.io.Serializable java.lang.reflect.Type { + method public java.lang.Class asSubclass(java.lang.Class); + method public T cast(java.lang.Object); + method public boolean desiredAssertionStatus(); + method public static java.lang.Class forName(java.lang.String) throws java.lang.ClassNotFoundException; + method public static java.lang.Class forName(java.lang.String, boolean, java.lang.ClassLoader) throws java.lang.ClassNotFoundException; + method public A getAnnotation(java.lang.Class); + method public java.lang.annotation.Annotation[] getAnnotations(); + method public java.lang.String getCanonicalName(); + method public java.lang.ClassLoader getClassLoader(); + method public java.lang.Class[] getClasses(); + method public java.lang.Class getComponentType(); + method public java.lang.reflect.Constructor getConstructor(java.lang.Class...) throws java.lang.NoSuchMethodException; + method public java.lang.reflect.Constructor[] getConstructors(); + method public java.lang.annotation.Annotation[] getDeclaredAnnotations(); + method public java.lang.Class[] getDeclaredClasses(); + method public java.lang.reflect.Constructor getDeclaredConstructor(java.lang.Class...) throws java.lang.NoSuchMethodException; + method public java.lang.reflect.Constructor[] getDeclaredConstructors(); + method public java.lang.reflect.Field getDeclaredField(java.lang.String) throws java.lang.NoSuchFieldException; + method public java.lang.reflect.Field[] getDeclaredFields(); + method public java.lang.reflect.Method getDeclaredMethod(java.lang.String, java.lang.Class...) throws java.lang.NoSuchMethodException; + method public java.lang.reflect.Method[] getDeclaredMethods(); + method public java.lang.Class getDeclaringClass(); + method public java.lang.Class getEnclosingClass(); + method public java.lang.reflect.Constructor getEnclosingConstructor(); + method public java.lang.reflect.Method getEnclosingMethod(); + method public T[] getEnumConstants(); + method public java.lang.reflect.Field getField(java.lang.String) throws java.lang.NoSuchFieldException; + method public java.lang.reflect.Field[] getFields(); + method public java.lang.reflect.Type[] getGenericInterfaces(); + method public java.lang.reflect.Type getGenericSuperclass(); + method public java.lang.Class[] getInterfaces(); + method public java.lang.reflect.Method getMethod(java.lang.String, java.lang.Class...) throws java.lang.NoSuchMethodException; + method public java.lang.reflect.Method[] getMethods(); + method public int getModifiers(); + method public java.lang.String getName(); + method public java.lang.Package getPackage(); + method public java.security.ProtectionDomain getProtectionDomain(); + method public java.net.URL getResource(java.lang.String); + method public java.io.InputStream getResourceAsStream(java.lang.String); + method public java.lang.Object[] getSigners(); + method public java.lang.String getSimpleName(); + method public java.lang.Class getSuperclass(); + method public synchronized java.lang.reflect.TypeVariable>[] getTypeParameters(); + method public boolean isAnnotation(); + method public boolean isAnnotationPresent(java.lang.Class); + method public boolean isAnonymousClass(); + method public boolean isArray(); + method public boolean isAssignableFrom(java.lang.Class); + method public boolean isEnum(); + method public boolean isInstance(java.lang.Object); + method public boolean isInterface(); + method public boolean isLocalClass(); + method public boolean isMemberClass(); + method public boolean isPrimitive(); + method public boolean isSynthetic(); + method public T newInstance() throws java.lang.IllegalAccessException, java.lang.InstantiationException; + } + + public class ClassCastException extends java.lang.RuntimeException { + ctor public ClassCastException(); + ctor public ClassCastException(java.lang.String); + } + + public class ClassCircularityError extends java.lang.LinkageError { + ctor public ClassCircularityError(); + ctor public ClassCircularityError(java.lang.String); + } + + public class ClassFormatError extends java.lang.LinkageError { + ctor public ClassFormatError(); + ctor public ClassFormatError(java.lang.String); + } + + public abstract class ClassLoader { + ctor protected ClassLoader(); + ctor protected ClassLoader(java.lang.ClassLoader); + method public void clearAssertionStatus(); + method protected final deprecated java.lang.Class defineClass(byte[], int, int) throws java.lang.ClassFormatError; + method protected final java.lang.Class defineClass(java.lang.String, byte[], int, int) throws java.lang.ClassFormatError; + method protected final java.lang.Class defineClass(java.lang.String, byte[], int, int, java.security.ProtectionDomain) throws java.lang.ClassFormatError; + method protected final java.lang.Class defineClass(java.lang.String, java.nio.ByteBuffer, java.security.ProtectionDomain) throws java.lang.ClassFormatError; + method protected java.lang.Package definePackage(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.net.URL) throws java.lang.IllegalArgumentException; + method protected java.lang.Class findClass(java.lang.String) throws java.lang.ClassNotFoundException; + method protected java.lang.String findLibrary(java.lang.String); + method protected final java.lang.Class findLoadedClass(java.lang.String); + method protected java.net.URL findResource(java.lang.String); + method protected java.util.Enumeration findResources(java.lang.String) throws java.io.IOException; + method protected final java.lang.Class findSystemClass(java.lang.String) throws java.lang.ClassNotFoundException; + method protected java.lang.Package getPackage(java.lang.String); + method protected java.lang.Package[] getPackages(); + method public final java.lang.ClassLoader getParent(); + method public java.net.URL getResource(java.lang.String); + method public java.io.InputStream getResourceAsStream(java.lang.String); + method public java.util.Enumeration getResources(java.lang.String) throws java.io.IOException; + method public static java.lang.ClassLoader getSystemClassLoader(); + method public static java.net.URL getSystemResource(java.lang.String); + method public static java.io.InputStream getSystemResourceAsStream(java.lang.String); + method public static java.util.Enumeration getSystemResources(java.lang.String) throws java.io.IOException; + method public java.lang.Class loadClass(java.lang.String) throws java.lang.ClassNotFoundException; + method protected java.lang.Class loadClass(java.lang.String, boolean) throws java.lang.ClassNotFoundException; + method protected final void resolveClass(java.lang.Class); + method public void setClassAssertionStatus(java.lang.String, boolean); + method public void setDefaultAssertionStatus(boolean); + method public void setPackageAssertionStatus(java.lang.String, boolean); + method protected final void setSigners(java.lang.Class, java.lang.Object[]); + } + + public class ClassNotFoundException extends java.lang.ReflectiveOperationException { + ctor public ClassNotFoundException(); + ctor public ClassNotFoundException(java.lang.String); + ctor public ClassNotFoundException(java.lang.String, java.lang.Throwable); + method public java.lang.Throwable getException(); + } + + public class CloneNotSupportedException extends java.lang.Exception { + ctor public CloneNotSupportedException(); + ctor public CloneNotSupportedException(java.lang.String); + } + + public abstract interface Cloneable { + } + + public abstract interface Comparable { + method public abstract int compareTo(T); + } + + public final class Compiler { + method public static java.lang.Object command(java.lang.Object); + method public static boolean compileClass(java.lang.Class); + method public static boolean compileClasses(java.lang.String); + method public static void disable(); + method public static void enable(); + } + + public abstract class Deprecated implements java.lang.annotation.Annotation { + } + + public final class Double extends java.lang.Number implements java.lang.Comparable { + ctor public Double(double); + ctor public Double(java.lang.String) throws java.lang.NumberFormatException; + method public static int compare(double, double); + method public int compareTo(java.lang.Double); + method public static long doubleToLongBits(double); + method public static long doubleToRawLongBits(double); + method public double doubleValue(); + method public float floatValue(); + method public int intValue(); + method public boolean isInfinite(); + method public static boolean isInfinite(double); + method public boolean isNaN(); + method public static boolean isNaN(double); + method public static double longBitsToDouble(long); + method public long longValue(); + method public static double parseDouble(java.lang.String) throws java.lang.NumberFormatException; + method public static java.lang.String toHexString(double); + method public static java.lang.String toString(double); + method public static java.lang.Double valueOf(java.lang.String) throws java.lang.NumberFormatException; + method public static java.lang.Double valueOf(double); + field public static final int MAX_EXPONENT = 1023; // 0x3ff + field public static final double MAX_VALUE = 1.7976931348623157E308; + field public static final int MIN_EXPONENT = -1022; // 0xfffffc02 + field public static final double MIN_NORMAL = 2.2250738585072014E-308; + field public static final double MIN_VALUE = 4.9E-324; + field public static final double NEGATIVE_INFINITY = (-1.0/0.0); + field public static final double NaN = (0.0/0.0); + field public static final double POSITIVE_INFINITY = (1.0/0.0); + field public static final int SIZE = 64; // 0x40 + field public static final java.lang.Class TYPE; + } + + public abstract class Enum implements java.lang.Comparable java.io.Serializable { + ctor protected Enum(java.lang.String, int); + method protected final java.lang.Object clone() throws java.lang.CloneNotSupportedException; + method public final int compareTo(E); + method public final boolean equals(java.lang.Object); + method protected final void finalize(); + method public final java.lang.Class getDeclaringClass(); + method public final int hashCode(); + method public final java.lang.String name(); + method public final int ordinal(); + method public static T valueOf(java.lang.Class, java.lang.String); + } + + public class EnumConstantNotPresentException extends java.lang.RuntimeException { + ctor public EnumConstantNotPresentException(java.lang.Class, java.lang.String); + method public java.lang.String constantName(); + method public java.lang.Class enumType(); + } + + public class Error extends java.lang.Throwable { + ctor public Error(); + ctor public Error(java.lang.String); + ctor public Error(java.lang.String, java.lang.Throwable); + ctor public Error(java.lang.Throwable); + } + + public class Exception extends java.lang.Throwable { + ctor public Exception(); + ctor public Exception(java.lang.String); + ctor public Exception(java.lang.String, java.lang.Throwable); + ctor public Exception(java.lang.Throwable); + } + + public class ExceptionInInitializerError extends java.lang.LinkageError { + ctor public ExceptionInInitializerError(); + ctor public ExceptionInInitializerError(java.lang.String); + ctor public ExceptionInInitializerError(java.lang.Throwable); + method public java.lang.Throwable getException(); + } + + public final class Float extends java.lang.Number implements java.lang.Comparable { + ctor public Float(float); + ctor public Float(double); + ctor public Float(java.lang.String) throws java.lang.NumberFormatException; + method public static int compare(float, float); + method public int compareTo(java.lang.Float); + method public double doubleValue(); + method public static int floatToIntBits(float); + method public static int floatToRawIntBits(float); + method public float floatValue(); + method public static float intBitsToFloat(int); + method public int intValue(); + method public boolean isInfinite(); + method public static boolean isInfinite(float); + method public boolean isNaN(); + method public static boolean isNaN(float); + method public long longValue(); + method public static float parseFloat(java.lang.String) throws java.lang.NumberFormatException; + method public static java.lang.String toHexString(float); + method public static java.lang.String toString(float); + method public static java.lang.Float valueOf(java.lang.String) throws java.lang.NumberFormatException; + method public static java.lang.Float valueOf(float); + field public static final int MAX_EXPONENT = 127; // 0x7f + field public static final float MAX_VALUE = 3.4028235E38f; + field public static final int MIN_EXPONENT = -126; // 0xffffff82 + field public static final float MIN_NORMAL = 1.17549435E-38f; + field public static final float MIN_VALUE = 1.4E-45f; + field public static final float NEGATIVE_INFINITY = (-1.0f/0.0f); + field public static final float NaN = (0.0f/0.0f); + field public static final float POSITIVE_INFINITY = (1.0f/0.0f); + field public static final int SIZE = 32; // 0x20 + field public static final java.lang.Class TYPE; + } + + public class IllegalAccessError extends java.lang.IncompatibleClassChangeError { + ctor public IllegalAccessError(); + ctor public IllegalAccessError(java.lang.String); + } + + public class IllegalAccessException extends java.lang.ReflectiveOperationException { + ctor public IllegalAccessException(); + ctor public IllegalAccessException(java.lang.String); + } + + public class IllegalArgumentException extends java.lang.RuntimeException { + ctor public IllegalArgumentException(); + ctor public IllegalArgumentException(java.lang.String); + ctor public IllegalArgumentException(java.lang.String, java.lang.Throwable); + ctor public IllegalArgumentException(java.lang.Throwable); + } + + public class IllegalMonitorStateException extends java.lang.RuntimeException { + ctor public IllegalMonitorStateException(); + ctor public IllegalMonitorStateException(java.lang.String); + } + + public class IllegalStateException extends java.lang.RuntimeException { + ctor public IllegalStateException(); + ctor public IllegalStateException(java.lang.String); + ctor public IllegalStateException(java.lang.String, java.lang.Throwable); + ctor public IllegalStateException(java.lang.Throwable); + } + + public class IllegalThreadStateException extends java.lang.IllegalArgumentException { + ctor public IllegalThreadStateException(); + ctor public IllegalThreadStateException(java.lang.String); + } + + public class IncompatibleClassChangeError extends java.lang.LinkageError { + ctor public IncompatibleClassChangeError(); + ctor public IncompatibleClassChangeError(java.lang.String); + } + + public class IndexOutOfBoundsException extends java.lang.RuntimeException { + ctor public IndexOutOfBoundsException(); + ctor public IndexOutOfBoundsException(java.lang.String); + } + + public class InheritableThreadLocal extends java.lang.ThreadLocal { + ctor public InheritableThreadLocal(); + method protected T childValue(T); + } + + public class InstantiationError extends java.lang.IncompatibleClassChangeError { + ctor public InstantiationError(); + ctor public InstantiationError(java.lang.String); + } + + public class InstantiationException extends java.lang.ReflectiveOperationException { + ctor public InstantiationException(); + ctor public InstantiationException(java.lang.String); + } + + public final class Integer extends java.lang.Number implements java.lang.Comparable { + ctor public Integer(int); + ctor public Integer(java.lang.String) throws java.lang.NumberFormatException; + method public static int bitCount(int); + method public static int compare(int, int); + method public int compareTo(java.lang.Integer); + method public static java.lang.Integer decode(java.lang.String) throws java.lang.NumberFormatException; + method public double doubleValue(); + method public float floatValue(); + method public static java.lang.Integer getInteger(java.lang.String); + method public static java.lang.Integer getInteger(java.lang.String, int); + method public static java.lang.Integer getInteger(java.lang.String, java.lang.Integer); + method public static int highestOneBit(int); + method public int intValue(); + method public long longValue(); + method public static int lowestOneBit(int); + method public static int numberOfLeadingZeros(int); + method public static int numberOfTrailingZeros(int); + method public static int parseInt(java.lang.String) throws java.lang.NumberFormatException; + method public static int parseInt(java.lang.String, int) throws java.lang.NumberFormatException; + method public static int reverse(int); + method public static int reverseBytes(int); + method public static int rotateLeft(int, int); + method public static int rotateRight(int, int); + method public static int signum(int); + method public static java.lang.String toBinaryString(int); + method public static java.lang.String toHexString(int); + method public static java.lang.String toOctalString(int); + method public static java.lang.String toString(int); + method public static java.lang.String toString(int, int); + method public static java.lang.Integer valueOf(java.lang.String) throws java.lang.NumberFormatException; + method public static java.lang.Integer valueOf(java.lang.String, int) throws java.lang.NumberFormatException; + method public static java.lang.Integer valueOf(int); + field public static final int MAX_VALUE = 2147483647; // 0x7fffffff + field public static final int MIN_VALUE = -2147483648; // 0x80000000 + field public static final int SIZE = 32; // 0x20 + field public static final java.lang.Class TYPE; + } + + public class InternalError extends java.lang.VirtualMachineError { + ctor public InternalError(); + ctor public InternalError(java.lang.String); + } + + public class InterruptedException extends java.lang.Exception { + ctor public InterruptedException(); + ctor public InterruptedException(java.lang.String); + } + + public abstract interface Iterable { + method public abstract java.util.Iterator iterator(); + } + + public class LinkageError extends java.lang.Error { + ctor public LinkageError(); + ctor public LinkageError(java.lang.String); + ctor public LinkageError(java.lang.String, java.lang.Throwable); + } + + public final class Long extends java.lang.Number implements java.lang.Comparable { + ctor public Long(long); + ctor public Long(java.lang.String) throws java.lang.NumberFormatException; + method public static int bitCount(long); + method public static int compare(long, long); + method public int compareTo(java.lang.Long); + method public static java.lang.Long decode(java.lang.String) throws java.lang.NumberFormatException; + method public double doubleValue(); + method public float floatValue(); + method public static java.lang.Long getLong(java.lang.String); + method public static java.lang.Long getLong(java.lang.String, long); + method public static java.lang.Long getLong(java.lang.String, java.lang.Long); + method public static long highestOneBit(long); + method public int intValue(); + method public long longValue(); + method public static long lowestOneBit(long); + method public static int numberOfLeadingZeros(long); + method public static int numberOfTrailingZeros(long); + method public static long parseLong(java.lang.String) throws java.lang.NumberFormatException; + method public static long parseLong(java.lang.String, int) throws java.lang.NumberFormatException; + method public static long reverse(long); + method public static long reverseBytes(long); + method public static long rotateLeft(long, int); + method public static long rotateRight(long, int); + method public static int signum(long); + method public static java.lang.String toBinaryString(long); + method public static java.lang.String toHexString(long); + method public static java.lang.String toOctalString(long); + method public static java.lang.String toString(long); + method public static java.lang.String toString(long, int); + method public static java.lang.Long valueOf(java.lang.String) throws java.lang.NumberFormatException; + method public static java.lang.Long valueOf(java.lang.String, int) throws java.lang.NumberFormatException; + method public static java.lang.Long valueOf(long); + field public static final long MAX_VALUE = 9223372036854775807L; // 0x7fffffffffffffffL + field public static final long MIN_VALUE = -9223372036854775808L; // 0x8000000000000000L + field public static final int SIZE = 64; // 0x40 + field public static final java.lang.Class TYPE; + } + + public final class Math { + method public static double IEEEremainder(double, double); + method public static double abs(double); + method public static float abs(float); + method public static int abs(int); + method public static long abs(long); + method public static double acos(double); + method public static double asin(double); + method public static double atan(double); + method public static double atan2(double, double); + method public static double cbrt(double); + method public static double ceil(double); + method public static double copySign(double, double); + method public static float copySign(float, float); + method public static double cos(double); + method public static double cosh(double); + method public static double exp(double); + method public static double expm1(double); + method public static double floor(double); + method public static int getExponent(float); + method public static int getExponent(double); + method public static double hypot(double, double); + method public static double log(double); + method public static double log10(double); + method public static double log1p(double); + method public static double max(double, double); + method public static float max(float, float); + method public static int max(int, int); + method public static long max(long, long); + method public static double min(double, double); + method public static float min(float, float); + method public static int min(int, int); + method public static long min(long, long); + method public static double nextAfter(double, double); + method public static float nextAfter(float, double); + method public static double nextUp(double); + method public static float nextUp(float); + method public static double pow(double, double); + method public static synchronized double random(); + method public static double rint(double); + method public static long round(double); + method public static int round(float); + method public static double scalb(double, int); + method public static float scalb(float, int); + method public static double signum(double); + method public static float signum(float); + method public static double sin(double); + method public static double sinh(double); + method public static double sqrt(double); + method public static double tan(double); + method public static double tanh(double); + method public static double toDegrees(double); + method public static double toRadians(double); + method public static double ulp(double); + method public static float ulp(float); + field public static final double E = 2.718281828459045; + field public static final double PI = 3.141592653589793; + } + + public class NegativeArraySizeException extends java.lang.RuntimeException { + ctor public NegativeArraySizeException(); + ctor public NegativeArraySizeException(java.lang.String); + } + + public class NoClassDefFoundError extends java.lang.LinkageError { + ctor public NoClassDefFoundError(); + ctor public NoClassDefFoundError(java.lang.String); + } + + public class NoSuchFieldError extends java.lang.IncompatibleClassChangeError { + ctor public NoSuchFieldError(); + ctor public NoSuchFieldError(java.lang.String); + } + + public class NoSuchFieldException extends java.lang.ReflectiveOperationException { + ctor public NoSuchFieldException(); + ctor public NoSuchFieldException(java.lang.String); + } + + public class NoSuchMethodError extends java.lang.IncompatibleClassChangeError { + ctor public NoSuchMethodError(); + ctor public NoSuchMethodError(java.lang.String); + } + + public class NoSuchMethodException extends java.lang.ReflectiveOperationException { + ctor public NoSuchMethodException(); + ctor public NoSuchMethodException(java.lang.String); + } + + public class NullPointerException extends java.lang.RuntimeException { + ctor public NullPointerException(); + ctor public NullPointerException(java.lang.String); + } + + public abstract class Number implements java.io.Serializable { + ctor public Number(); + method public byte byteValue(); + method public abstract double doubleValue(); + method public abstract float floatValue(); + method public abstract int intValue(); + method public abstract long longValue(); + method public short shortValue(); + } + + public class NumberFormatException extends java.lang.IllegalArgumentException { + ctor public NumberFormatException(); + ctor public NumberFormatException(java.lang.String); + } + + public class Object { + ctor public Object(); + method protected java.lang.Object clone() throws java.lang.CloneNotSupportedException; + method public boolean equals(java.lang.Object); + method protected void finalize() throws java.lang.Throwable; + method public final java.lang.Class getClass(); + method public int hashCode(); + method public final void notify(); + method public final void notifyAll(); + method public java.lang.String toString(); + method public final void wait() throws java.lang.InterruptedException; + method public final void wait(long) throws java.lang.InterruptedException; + method public final void wait(long, int) throws java.lang.InterruptedException; + } + + public class OutOfMemoryError extends java.lang.VirtualMachineError { + ctor public OutOfMemoryError(); + ctor public OutOfMemoryError(java.lang.String); + } + + public abstract class Override implements java.lang.annotation.Annotation { + } + + public class Package implements java.lang.reflect.AnnotatedElement { + method public A getAnnotation(java.lang.Class); + method public java.lang.annotation.Annotation[] getAnnotations(); + method public java.lang.annotation.Annotation[] getDeclaredAnnotations(); + method public java.lang.String getImplementationTitle(); + method public java.lang.String getImplementationVendor(); + method public java.lang.String getImplementationVersion(); + method public java.lang.String getName(); + method public static java.lang.Package getPackage(java.lang.String); + method public static java.lang.Package[] getPackages(); + method public java.lang.String getSpecificationTitle(); + method public java.lang.String getSpecificationVendor(); + method public java.lang.String getSpecificationVersion(); + method public boolean isAnnotationPresent(java.lang.Class); + method public boolean isCompatibleWith(java.lang.String) throws java.lang.NumberFormatException; + method public boolean isSealed(); + method public boolean isSealed(java.net.URL); + } + + public abstract class Process { + ctor public Process(); + method public abstract void destroy(); + method public abstract int exitValue(); + method public abstract java.io.InputStream getErrorStream(); + method public abstract java.io.InputStream getInputStream(); + method public abstract java.io.OutputStream getOutputStream(); + method public abstract int waitFor() throws java.lang.InterruptedException; + } + + public final class ProcessBuilder { + ctor public ProcessBuilder(java.lang.String...); + ctor public ProcessBuilder(java.util.List); + method public java.util.List command(); + method public java.lang.ProcessBuilder command(java.lang.String...); + method public java.lang.ProcessBuilder command(java.util.List); + method public java.io.File directory(); + method public java.lang.ProcessBuilder directory(java.io.File); + method public java.util.Map environment(); + method public boolean redirectErrorStream(); + method public java.lang.ProcessBuilder redirectErrorStream(boolean); + method public java.lang.Process start() throws java.io.IOException; + } + + public abstract interface Readable { + method public abstract int read(java.nio.CharBuffer) throws java.io.IOException; + } + + public class ReflectiveOperationException extends java.lang.Exception { + ctor public ReflectiveOperationException(); + ctor public ReflectiveOperationException(java.lang.String); + ctor public ReflectiveOperationException(java.lang.Throwable); + ctor public ReflectiveOperationException(java.lang.String, java.lang.Throwable); + } + + public abstract interface Runnable { + method public abstract void run(); + } + + public class Runtime { + method public void addShutdownHook(java.lang.Thread); + method public int availableProcessors(); + method public java.lang.Process exec(java.lang.String[]) throws java.io.IOException; + method public java.lang.Process exec(java.lang.String[], java.lang.String[]) throws java.io.IOException; + method public java.lang.Process exec(java.lang.String[], java.lang.String[], java.io.File) throws java.io.IOException; + method public java.lang.Process exec(java.lang.String) throws java.io.IOException; + method public java.lang.Process exec(java.lang.String, java.lang.String[]) throws java.io.IOException; + method public java.lang.Process exec(java.lang.String, java.lang.String[], java.io.File) throws java.io.IOException; + method public void exit(int); + method public long freeMemory(); + method public void gc(); + method public deprecated java.io.InputStream getLocalizedInputStream(java.io.InputStream); + method public deprecated java.io.OutputStream getLocalizedOutputStream(java.io.OutputStream); + method public static java.lang.Runtime getRuntime(); + method public void halt(int); + method public void load(java.lang.String); + method public void loadLibrary(java.lang.String); + method public long maxMemory(); + method public boolean removeShutdownHook(java.lang.Thread); + method public void runFinalization(); + method public static deprecated void runFinalizersOnExit(boolean); + method public long totalMemory(); + method public void traceInstructions(boolean); + method public void traceMethodCalls(boolean); + } + + public class RuntimeException extends java.lang.Exception { + ctor public RuntimeException(); + ctor public RuntimeException(java.lang.String); + ctor public RuntimeException(java.lang.String, java.lang.Throwable); + ctor public RuntimeException(java.lang.Throwable); + } + + public final class RuntimePermission extends java.security.BasicPermission { + ctor public RuntimePermission(java.lang.String); + ctor public RuntimePermission(java.lang.String, java.lang.String); + } + + public abstract class SafeVarargs implements java.lang.annotation.Annotation { + } + + public class SecurityException extends java.lang.RuntimeException { + ctor public SecurityException(); + ctor public SecurityException(java.lang.String); + ctor public SecurityException(java.lang.String, java.lang.Throwable); + ctor public SecurityException(java.lang.Throwable); + } + + public class SecurityManager { + ctor public SecurityManager(); + method public void checkAccept(java.lang.String, int); + method public void checkAccess(java.lang.Thread); + method public void checkAccess(java.lang.ThreadGroup); + method public void checkAwtEventQueueAccess(); + method public void checkConnect(java.lang.String, int); + method public void checkConnect(java.lang.String, int, java.lang.Object); + method public void checkCreateClassLoader(); + method public void checkDelete(java.lang.String); + method public void checkExec(java.lang.String); + method public void checkExit(int); + method public void checkLink(java.lang.String); + method public void checkListen(int); + method public void checkMemberAccess(java.lang.Class, int); + method public void checkMulticast(java.net.InetAddress); + method public deprecated void checkMulticast(java.net.InetAddress, byte); + method public void checkPackageAccess(java.lang.String); + method public void checkPackageDefinition(java.lang.String); + method public void checkPermission(java.security.Permission); + method public void checkPermission(java.security.Permission, java.lang.Object); + method public void checkPrintJobAccess(); + method public void checkPropertiesAccess(); + method public void checkPropertyAccess(java.lang.String); + method public void checkRead(java.io.FileDescriptor); + method public void checkRead(java.lang.String); + method public void checkRead(java.lang.String, java.lang.Object); + method public void checkSecurityAccess(java.lang.String); + method public void checkSetFactory(); + method public void checkSystemClipboardAccess(); + method public boolean checkTopLevelWindow(java.lang.Object); + method public void checkWrite(java.io.FileDescriptor); + method public void checkWrite(java.lang.String); + method protected deprecated int classDepth(java.lang.String); + method protected deprecated int classLoaderDepth(); + method protected deprecated java.lang.ClassLoader currentClassLoader(); + method protected deprecated java.lang.Class currentLoadedClass(); + method protected java.lang.Class[] getClassContext(); + method public deprecated boolean getInCheck(); + method public java.lang.Object getSecurityContext(); + method public java.lang.ThreadGroup getThreadGroup(); + method protected deprecated boolean inClass(java.lang.String); + method protected deprecated boolean inClassLoader(); + field protected deprecated boolean inCheck; + } + + public final class Short extends java.lang.Number implements java.lang.Comparable { + ctor public Short(java.lang.String) throws java.lang.NumberFormatException; + ctor public Short(short); + method public static int compare(short, short); + method public int compareTo(java.lang.Short); + method public static java.lang.Short decode(java.lang.String) throws java.lang.NumberFormatException; + method public double doubleValue(); + method public float floatValue(); + method public int intValue(); + method public long longValue(); + method public static short parseShort(java.lang.String) throws java.lang.NumberFormatException; + method public static short parseShort(java.lang.String, int) throws java.lang.NumberFormatException; + method public static short reverseBytes(short); + method public static java.lang.String toString(short); + method public static java.lang.Short valueOf(java.lang.String) throws java.lang.NumberFormatException; + method public static java.lang.Short valueOf(java.lang.String, int) throws java.lang.NumberFormatException; + method public static java.lang.Short valueOf(short); + field public static final short MAX_VALUE = 32767; // 0x7fff + field public static final short MIN_VALUE = -32768; // 0xffff8000 + field public static final int SIZE = 16; // 0x10 + field public static final java.lang.Class TYPE; + } + + public class StackOverflowError extends java.lang.VirtualMachineError { + ctor public StackOverflowError(); + ctor public StackOverflowError(java.lang.String); + } + + public final class StackTraceElement implements java.io.Serializable { + ctor public StackTraceElement(java.lang.String, java.lang.String, java.lang.String, int); + method public java.lang.String getClassName(); + method public java.lang.String getFileName(); + method public int getLineNumber(); + method public java.lang.String getMethodName(); + method public boolean isNativeMethod(); + } + + public final class StrictMath { + method public static double IEEEremainder(double, double); + method public static double abs(double); + method public static float abs(float); + method public static int abs(int); + method public static long abs(long); + method public static double acos(double); + method public static double asin(double); + method public static double atan(double); + method public static double atan2(double, double); + method public static double cbrt(double); + method public static double ceil(double); + method public static double copySign(double, double); + method public static float copySign(float, float); + method public static double cos(double); + method public static double cosh(double); + method public static double exp(double); + method public static double expm1(double); + method public static double floor(double); + method public static int getExponent(float); + method public static int getExponent(double); + method public static double hypot(double, double); + method public static double log(double); + method public static double log10(double); + method public static double log1p(double); + method public static double max(double, double); + method public static float max(float, float); + method public static int max(int, int); + method public static long max(long, long); + method public static double min(double, double); + method public static float min(float, float); + method public static int min(int, int); + method public static long min(long, long); + method public static double nextAfter(double, double); + method public static float nextAfter(float, double); + method public static double nextUp(double); + method public static float nextUp(float); + method public static double pow(double, double); + method public static double random(); + method public static double rint(double); + method public static long round(double); + method public static int round(float); + method public static double scalb(double, int); + method public static float scalb(float, int); + method public static double signum(double); + method public static float signum(float); + method public static double sin(double); + method public static double sinh(double); + method public static double sqrt(double); + method public static double tan(double); + method public static double tanh(double); + method public static double toDegrees(double); + method public static double toRadians(double); + method public static double ulp(double); + method public static float ulp(float); + field public static final double E = 2.718281828459045; + field public static final double PI = 3.141592653589793; + } + + public final class String implements java.lang.CharSequence java.lang.Comparable java.io.Serializable { + ctor public String(); + ctor public String(byte[]); + ctor public deprecated String(byte[], int); + ctor public String(byte[], int, int); + ctor public deprecated String(byte[], int, int, int); + ctor public String(byte[], int, int, java.lang.String) throws java.io.UnsupportedEncodingException; + ctor public String(byte[], java.lang.String) throws java.io.UnsupportedEncodingException; + ctor public String(byte[], int, int, java.nio.charset.Charset); + ctor public String(byte[], java.nio.charset.Charset); + ctor public String(char[]); + ctor public String(char[], int, int); + ctor public String(java.lang.String); + ctor public String(java.lang.StringBuffer); + ctor public String(int[], int, int); + ctor public String(java.lang.StringBuilder); + method public char charAt(int); + method public int codePointAt(int); + method public int codePointBefore(int); + method public int codePointCount(int, int); + method public int compareTo(java.lang.String); + method public int compareToIgnoreCase(java.lang.String); + method public java.lang.String concat(java.lang.String); + method public boolean contains(java.lang.CharSequence); + method public boolean contentEquals(java.lang.StringBuffer); + method public boolean contentEquals(java.lang.CharSequence); + method public static java.lang.String copyValueOf(char[]); + method public static java.lang.String copyValueOf(char[], int, int); + method public boolean endsWith(java.lang.String); + method public boolean equalsIgnoreCase(java.lang.String); + method public static java.lang.String format(java.lang.String, java.lang.Object...); + method public static java.lang.String format(java.util.Locale, java.lang.String, java.lang.Object...); + method public deprecated void getBytes(int, int, byte[], int); + method public byte[] getBytes(); + method public byte[] getBytes(java.lang.String) throws java.io.UnsupportedEncodingException; + method public byte[] getBytes(java.nio.charset.Charset); + method public void getChars(int, int, char[], int); + method public int indexOf(int); + method public int indexOf(int, int); + method public int indexOf(java.lang.String); + method public int indexOf(java.lang.String, int); + method public java.lang.String intern(); + method public boolean isEmpty(); + method public int lastIndexOf(int); + method public int lastIndexOf(int, int); + method public int lastIndexOf(java.lang.String); + method public int lastIndexOf(java.lang.String, int); + method public int length(); + method public boolean matches(java.lang.String); + method public int offsetByCodePoints(int, int); + method public boolean regionMatches(int, java.lang.String, int, int); + method public boolean regionMatches(boolean, int, java.lang.String, int, int); + method public java.lang.String replace(char, char); + method public java.lang.String replace(java.lang.CharSequence, java.lang.CharSequence); + method public java.lang.String replaceAll(java.lang.String, java.lang.String); + method public java.lang.String replaceFirst(java.lang.String, java.lang.String); + method public java.lang.String[] split(java.lang.String); + method public java.lang.String[] split(java.lang.String, int); + method public boolean startsWith(java.lang.String); + method public boolean startsWith(java.lang.String, int); + method public java.lang.CharSequence subSequence(int, int); + method public java.lang.String substring(int); + method public java.lang.String substring(int, int); + method public char[] toCharArray(); + method public java.lang.String toLowerCase(); + method public java.lang.String toLowerCase(java.util.Locale); + method public java.lang.String toUpperCase(); + method public java.lang.String toUpperCase(java.util.Locale); + method public java.lang.String trim(); + method public static java.lang.String valueOf(char[]); + method public static java.lang.String valueOf(char[], int, int); + method public static java.lang.String valueOf(char); + method public static java.lang.String valueOf(double); + method public static java.lang.String valueOf(float); + method public static java.lang.String valueOf(int); + method public static java.lang.String valueOf(long); + method public static java.lang.String valueOf(java.lang.Object); + method public static java.lang.String valueOf(boolean); + field public static final java.util.Comparator CASE_INSENSITIVE_ORDER; + } + + public final class StringBuffer extends java.lang.AbstractStringBuilder implements java.lang.Appendable java.lang.CharSequence java.io.Serializable { + ctor public StringBuffer(); + ctor public StringBuffer(int); + ctor public StringBuffer(java.lang.String); + ctor public StringBuffer(java.lang.CharSequence); + method public java.lang.StringBuffer append(boolean); + method public synchronized java.lang.StringBuffer append(char); + method public java.lang.StringBuffer append(double); + method public java.lang.StringBuffer append(float); + method public java.lang.StringBuffer append(int); + method public java.lang.StringBuffer append(long); + method public synchronized java.lang.StringBuffer append(java.lang.Object); + method public synchronized java.lang.StringBuffer append(java.lang.String); + method public synchronized java.lang.StringBuffer append(java.lang.StringBuffer); + method public synchronized java.lang.StringBuffer append(char[]); + method public synchronized java.lang.StringBuffer append(char[], int, int); + method public synchronized java.lang.StringBuffer append(java.lang.CharSequence); + method public synchronized java.lang.StringBuffer append(java.lang.CharSequence, int, int); + method public java.lang.StringBuffer appendCodePoint(int); + method public synchronized java.lang.StringBuffer delete(int, int); + method public synchronized java.lang.StringBuffer deleteCharAt(int); + method public synchronized java.lang.StringBuffer insert(int, char); + method public java.lang.StringBuffer insert(int, boolean); + method public java.lang.StringBuffer insert(int, int); + method public java.lang.StringBuffer insert(int, long); + method public java.lang.StringBuffer insert(int, double); + method public java.lang.StringBuffer insert(int, float); + method public java.lang.StringBuffer insert(int, java.lang.Object); + method public synchronized java.lang.StringBuffer insert(int, java.lang.String); + method public synchronized java.lang.StringBuffer insert(int, char[]); + method public synchronized java.lang.StringBuffer insert(int, char[], int, int); + method public synchronized java.lang.StringBuffer insert(int, java.lang.CharSequence); + method public synchronized java.lang.StringBuffer insert(int, java.lang.CharSequence, int, int); + method public synchronized java.lang.StringBuffer replace(int, int, java.lang.String); + method public synchronized java.lang.StringBuffer reverse(); + } + + public final class StringBuilder extends java.lang.AbstractStringBuilder implements java.lang.Appendable java.lang.CharSequence java.io.Serializable { + ctor public StringBuilder(); + ctor public StringBuilder(int); + ctor public StringBuilder(java.lang.CharSequence); + ctor public StringBuilder(java.lang.String); + method public java.lang.StringBuilder append(boolean); + method public java.lang.StringBuilder append(char); + method public java.lang.StringBuilder append(int); + method public java.lang.StringBuilder append(long); + method public java.lang.StringBuilder append(float); + method public java.lang.StringBuilder append(double); + method public java.lang.StringBuilder append(java.lang.Object); + method public java.lang.StringBuilder append(java.lang.String); + method public java.lang.StringBuilder append(java.lang.StringBuffer); + method public java.lang.StringBuilder append(char[]); + method public java.lang.StringBuilder append(char[], int, int); + method public java.lang.StringBuilder append(java.lang.CharSequence); + method public java.lang.StringBuilder append(java.lang.CharSequence, int, int); + method public java.lang.StringBuilder appendCodePoint(int); + method public java.lang.StringBuilder delete(int, int); + method public java.lang.StringBuilder deleteCharAt(int); + method public java.lang.StringBuilder insert(int, boolean); + method public java.lang.StringBuilder insert(int, char); + method public java.lang.StringBuilder insert(int, int); + method public java.lang.StringBuilder insert(int, long); + method public java.lang.StringBuilder insert(int, float); + method public java.lang.StringBuilder insert(int, double); + method public java.lang.StringBuilder insert(int, java.lang.Object); + method public java.lang.StringBuilder insert(int, java.lang.String); + method public java.lang.StringBuilder insert(int, char[]); + method public java.lang.StringBuilder insert(int, char[], int, int); + method public java.lang.StringBuilder insert(int, java.lang.CharSequence); + method public java.lang.StringBuilder insert(int, java.lang.CharSequence, int, int); + method public java.lang.StringBuilder replace(int, int, java.lang.String); + method public java.lang.StringBuilder reverse(); + } + + public class StringIndexOutOfBoundsException extends java.lang.IndexOutOfBoundsException { + ctor public StringIndexOutOfBoundsException(); + ctor public StringIndexOutOfBoundsException(int); + ctor public StringIndexOutOfBoundsException(java.lang.String); + } + + public abstract class SuppressWarnings implements java.lang.annotation.Annotation { + } + + public final class System { + method public static void arraycopy(java.lang.Object, int, java.lang.Object, int, int); + method public static java.lang.String clearProperty(java.lang.String); + method public static java.io.Console console(); + method public static long currentTimeMillis(); + method public static void exit(int); + method public static void gc(); + method public static java.util.Properties getProperties(); + method public static java.lang.String getProperty(java.lang.String); + method public static java.lang.String getProperty(java.lang.String, java.lang.String); + method public static java.lang.SecurityManager getSecurityManager(); + method public static java.lang.String getenv(java.lang.String); + method public static java.util.Map getenv(); + method public static int identityHashCode(java.lang.Object); + method public static java.nio.channels.Channel inheritedChannel() throws java.io.IOException; + method public static java.lang.String lineSeparator(); + method public static void load(java.lang.String); + method public static void loadLibrary(java.lang.String); + method public static java.lang.String mapLibraryName(java.lang.String); + method public static long nanoTime(); + method public static void runFinalization(); + method public static deprecated void runFinalizersOnExit(boolean); + method public static void setErr(java.io.PrintStream); + method public static void setIn(java.io.InputStream); + method public static void setOut(java.io.PrintStream); + method public static void setProperties(java.util.Properties); + method public static java.lang.String setProperty(java.lang.String, java.lang.String); + method public static void setSecurityManager(java.lang.SecurityManager); + field public static final java.io.PrintStream err; + field public static final java.io.InputStream in; + field public static final java.io.PrintStream out; + } + + public class Thread implements java.lang.Runnable { + ctor public Thread(); + ctor public Thread(java.lang.Runnable); + ctor public Thread(java.lang.Runnable, java.lang.String); + ctor public Thread(java.lang.String); + ctor public Thread(java.lang.ThreadGroup, java.lang.Runnable); + ctor public Thread(java.lang.ThreadGroup, java.lang.Runnable, java.lang.String); + ctor public Thread(java.lang.ThreadGroup, java.lang.String); + ctor public Thread(java.lang.ThreadGroup, java.lang.Runnable, java.lang.String, long); + method public static int activeCount(); + method public final void checkAccess(); + method public deprecated int countStackFrames(); + method public static java.lang.Thread currentThread(); + method public deprecated void destroy(); + method public static void dumpStack(); + method public static int enumerate(java.lang.Thread[]); + method public static java.util.Map getAllStackTraces(); + method public java.lang.ClassLoader getContextClassLoader(); + method public static java.lang.Thread.UncaughtExceptionHandler getDefaultUncaughtExceptionHandler(); + method public long getId(); + method public final java.lang.String getName(); + method public final int getPriority(); + method public java.lang.StackTraceElement[] getStackTrace(); + method public java.lang.Thread.State getState(); + method public final java.lang.ThreadGroup getThreadGroup(); + method public java.lang.Thread.UncaughtExceptionHandler getUncaughtExceptionHandler(); + method public static boolean holdsLock(java.lang.Object); + method public void interrupt(); + method public static boolean interrupted(); + method public final boolean isAlive(); + method public final boolean isDaemon(); + method public boolean isInterrupted(); + method public final void join() throws java.lang.InterruptedException; + method public final void join(long) throws java.lang.InterruptedException; + method public final void join(long, int) throws java.lang.InterruptedException; + method public final deprecated void resume(); + method public void run(); + method public void setContextClassLoader(java.lang.ClassLoader); + method public final void setDaemon(boolean); + method public static void setDefaultUncaughtExceptionHandler(java.lang.Thread.UncaughtExceptionHandler); + method public final void setName(java.lang.String); + method public final void setPriority(int); + method public void setUncaughtExceptionHandler(java.lang.Thread.UncaughtExceptionHandler); + method public static void sleep(long) throws java.lang.InterruptedException; + method public static void sleep(long, int) throws java.lang.InterruptedException; + method public synchronized void start(); + method public final deprecated void stop(); + method public final deprecated synchronized void stop(java.lang.Throwable); + method public final deprecated void suspend(); + method public static void yield(); + field public static final int MAX_PRIORITY = 10; // 0xa + field public static final int MIN_PRIORITY = 1; // 0x1 + field public static final int NORM_PRIORITY = 5; // 0x5 + } + + public static final class Thread.State extends java.lang.Enum { + method public static java.lang.Thread.State valueOf(java.lang.String); + method public static final java.lang.Thread.State[] values(); + enum_constant public static final java.lang.Thread.State BLOCKED; + enum_constant public static final java.lang.Thread.State NEW; + enum_constant public static final java.lang.Thread.State RUNNABLE; + enum_constant public static final java.lang.Thread.State TERMINATED; + enum_constant public static final java.lang.Thread.State TIMED_WAITING; + enum_constant public static final java.lang.Thread.State WAITING; + } + + public static abstract interface Thread.UncaughtExceptionHandler { + method public abstract void uncaughtException(java.lang.Thread, java.lang.Throwable); + } + + public class ThreadDeath extends java.lang.Error { + ctor public ThreadDeath(); + } + + public class ThreadGroup implements java.lang.Thread.UncaughtExceptionHandler { + ctor public ThreadGroup(java.lang.String); + ctor public ThreadGroup(java.lang.ThreadGroup, java.lang.String); + method public int activeCount(); + method public int activeGroupCount(); + method public deprecated boolean allowThreadSuspension(boolean); + method public final void checkAccess(); + method public final void destroy(); + method public int enumerate(java.lang.Thread[]); + method public int enumerate(java.lang.Thread[], boolean); + method public int enumerate(java.lang.ThreadGroup[]); + method public int enumerate(java.lang.ThreadGroup[], boolean); + method public final int getMaxPriority(); + method public final java.lang.String getName(); + method public final java.lang.ThreadGroup getParent(); + method public final void interrupt(); + method public final boolean isDaemon(); + method public synchronized boolean isDestroyed(); + method public void list(); + method public final boolean parentOf(java.lang.ThreadGroup); + method public final deprecated void resume(); + method public final void setDaemon(boolean); + method public final void setMaxPriority(int); + method public final deprecated void stop(); + method public final deprecated void suspend(); + method public void uncaughtException(java.lang.Thread, java.lang.Throwable); + } + + public class ThreadLocal { + ctor public ThreadLocal(); + method public T get(); + method protected T initialValue(); + method public void remove(); + method public void set(T); + } + + public class Throwable implements java.io.Serializable { + ctor public Throwable(); + ctor public Throwable(java.lang.String); + ctor public Throwable(java.lang.String, java.lang.Throwable); + ctor public Throwable(java.lang.Throwable); + ctor protected Throwable(java.lang.String, java.lang.Throwable, boolean, boolean); + method public final void addSuppressed(java.lang.Throwable); + method public java.lang.Throwable fillInStackTrace(); + method public java.lang.Throwable getCause(); + method public java.lang.String getLocalizedMessage(); + method public java.lang.String getMessage(); + method public java.lang.StackTraceElement[] getStackTrace(); + method public final java.lang.Throwable[] getSuppressed(); + method public java.lang.Throwable initCause(java.lang.Throwable); + method public void printStackTrace(); + method public void printStackTrace(java.io.PrintStream); + method public void printStackTrace(java.io.PrintWriter); + method public void setStackTrace(java.lang.StackTraceElement[]); + } + + public class TypeNotPresentException extends java.lang.RuntimeException { + ctor public TypeNotPresentException(java.lang.String, java.lang.Throwable); + method public java.lang.String typeName(); + } + + public class UnknownError extends java.lang.VirtualMachineError { + ctor public UnknownError(); + ctor public UnknownError(java.lang.String); + } + + public class UnsatisfiedLinkError extends java.lang.LinkageError { + ctor public UnsatisfiedLinkError(); + ctor public UnsatisfiedLinkError(java.lang.String); + } + + public class UnsupportedClassVersionError extends java.lang.ClassFormatError { + ctor public UnsupportedClassVersionError(); + ctor public UnsupportedClassVersionError(java.lang.String); + } + + public class UnsupportedOperationException extends java.lang.RuntimeException { + ctor public UnsupportedOperationException(); + ctor public UnsupportedOperationException(java.lang.String); + ctor public UnsupportedOperationException(java.lang.String, java.lang.Throwable); + ctor public UnsupportedOperationException(java.lang.Throwable); + } + + public class VerifyError extends java.lang.LinkageError { + ctor public VerifyError(); + ctor public VerifyError(java.lang.String); + } + + public abstract class VirtualMachineError extends java.lang.Error { + ctor public VirtualMachineError(); + ctor public VirtualMachineError(java.lang.String); + } + + public final class Void { + field public static final java.lang.Class TYPE; + } + +} + +package java.lang.annotation { + + public abstract interface Annotation { + method public abstract java.lang.Class annotationType(); + method public abstract boolean equals(java.lang.Object); + method public abstract int hashCode(); + method public abstract java.lang.String toString(); + } + + public class AnnotationFormatError extends java.lang.Error { + ctor public AnnotationFormatError(java.lang.String); + ctor public AnnotationFormatError(java.lang.String, java.lang.Throwable); + ctor public AnnotationFormatError(java.lang.Throwable); + } + + public class AnnotationTypeMismatchException extends java.lang.RuntimeException { + ctor public AnnotationTypeMismatchException(java.lang.reflect.Method, java.lang.String); + method public java.lang.reflect.Method element(); + method public java.lang.String foundType(); + } + + public abstract class Documented implements java.lang.annotation.Annotation { + } + + public final class ElementType extends java.lang.Enum { + method public static java.lang.annotation.ElementType valueOf(java.lang.String); + method public static final java.lang.annotation.ElementType[] values(); + enum_constant public static final java.lang.annotation.ElementType ANNOTATION_TYPE; + enum_constant public static final java.lang.annotation.ElementType CONSTRUCTOR; + enum_constant public static final java.lang.annotation.ElementType FIELD; + enum_constant public static final java.lang.annotation.ElementType LOCAL_VARIABLE; + enum_constant public static final java.lang.annotation.ElementType METHOD; + enum_constant public static final java.lang.annotation.ElementType PACKAGE; + enum_constant public static final java.lang.annotation.ElementType PARAMETER; + enum_constant public static final java.lang.annotation.ElementType TYPE; + } + + public class IncompleteAnnotationException extends java.lang.RuntimeException { + ctor public IncompleteAnnotationException(java.lang.Class, java.lang.String); + method public java.lang.Class annotationType(); + method public java.lang.String elementName(); + } + + public abstract class Inherited implements java.lang.annotation.Annotation { + } + + public abstract class Retention implements java.lang.annotation.Annotation { + } + + public final class RetentionPolicy extends java.lang.Enum { + method public static java.lang.annotation.RetentionPolicy valueOf(java.lang.String); + method public static final java.lang.annotation.RetentionPolicy[] values(); + enum_constant public static final java.lang.annotation.RetentionPolicy CLASS; + enum_constant public static final java.lang.annotation.RetentionPolicy RUNTIME; + enum_constant public static final java.lang.annotation.RetentionPolicy SOURCE; + } + + public abstract class Target implements java.lang.annotation.Annotation { + } + +} + +package java.lang.ref { + + public class PhantomReference extends java.lang.ref.Reference { + ctor public PhantomReference(T, java.lang.ref.ReferenceQueue); + } + + public abstract class Reference { + method public void clear(); + method public boolean enqueue(); + method public T get(); + method public boolean isEnqueued(); + } + + public class ReferenceQueue { + ctor public ReferenceQueue(); + method public synchronized java.lang.ref.Reference poll(); + method public java.lang.ref.Reference remove() throws java.lang.InterruptedException; + method public synchronized java.lang.ref.Reference remove(long) throws java.lang.InterruptedException; + } + + public class SoftReference extends java.lang.ref.Reference { + ctor public SoftReference(T); + ctor public SoftReference(T, java.lang.ref.ReferenceQueue); + } + + public class WeakReference extends java.lang.ref.Reference { + ctor public WeakReference(T); + ctor public WeakReference(T, java.lang.ref.ReferenceQueue); + } + +} + +package java.lang.reflect { + + public class AccessibleObject implements java.lang.reflect.AnnotatedElement { + ctor protected AccessibleObject(); + method public T getAnnotation(java.lang.Class); + method public java.lang.annotation.Annotation[] getAnnotations(); + method public java.lang.annotation.Annotation[] getDeclaredAnnotations(); + method public boolean isAccessible(); + method public boolean isAnnotationPresent(java.lang.Class); + method public void setAccessible(boolean); + method public static void setAccessible(java.lang.reflect.AccessibleObject[], boolean); + } + + public abstract interface AnnotatedElement { + method public abstract T getAnnotation(java.lang.Class); + method public abstract java.lang.annotation.Annotation[] getAnnotations(); + method public abstract java.lang.annotation.Annotation[] getDeclaredAnnotations(); + method public abstract boolean isAnnotationPresent(java.lang.Class); + } + + public final class Array { + method public static java.lang.Object get(java.lang.Object, int) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException; + method public static boolean getBoolean(java.lang.Object, int) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException; + method public static byte getByte(java.lang.Object, int) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException; + method public static char getChar(java.lang.Object, int) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException; + method public static double getDouble(java.lang.Object, int) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException; + method public static float getFloat(java.lang.Object, int) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException; + method public static int getInt(java.lang.Object, int) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException; + method public static int getLength(java.lang.Object); + method public static long getLong(java.lang.Object, int) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException; + method public static short getShort(java.lang.Object, int) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException; + method public static java.lang.Object newInstance(java.lang.Class, int...) throws java.lang.IllegalArgumentException, java.lang.NegativeArraySizeException; + method public static java.lang.Object newInstance(java.lang.Class, int) throws java.lang.NegativeArraySizeException; + method public static void set(java.lang.Object, int, java.lang.Object) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException; + method public static void setBoolean(java.lang.Object, int, boolean); + method public static void setByte(java.lang.Object, int, byte) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException; + method public static void setChar(java.lang.Object, int, char) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException; + method public static void setDouble(java.lang.Object, int, double) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException; + method public static void setFloat(java.lang.Object, int, float) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException; + method public static void setInt(java.lang.Object, int, int) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException; + method public static void setLong(java.lang.Object, int, long) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException; + method public static void setShort(java.lang.Object, int, short) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException; + } + + public final class Constructor extends java.lang.reflect.AccessibleObject implements java.lang.reflect.GenericDeclaration java.lang.reflect.Member { + method public A getAnnotation(java.lang.Class); + method public java.lang.Class getDeclaringClass(); + method public java.lang.Class[] getExceptionTypes(); + method public java.lang.reflect.Type[] getGenericExceptionTypes(); + method public java.lang.reflect.Type[] getGenericParameterTypes(); + method public int getModifiers(); + method public java.lang.String getName(); + method public java.lang.annotation.Annotation[][] getParameterAnnotations(); + method public java.lang.Class[] getParameterTypes(); + method public java.lang.reflect.TypeVariable>[] getTypeParameters(); + method public boolean isSynthetic(); + method public boolean isVarArgs(); + method public T newInstance(java.lang.Object...) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException, java.lang.InstantiationException, java.lang.reflect.InvocationTargetException; + method public java.lang.String toGenericString(); + } + + public final class Field extends java.lang.reflect.AccessibleObject implements java.lang.reflect.Member { + method public java.lang.Object get(java.lang.Object) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException; + method public A getAnnotation(java.lang.Class); + method public boolean getBoolean(java.lang.Object) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException; + method public byte getByte(java.lang.Object) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException; + method public char getChar(java.lang.Object) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException; + method public java.lang.Class getDeclaringClass(); + method public double getDouble(java.lang.Object) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException; + method public float getFloat(java.lang.Object) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException; + method public java.lang.reflect.Type getGenericType(); + method public int getInt(java.lang.Object) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException; + method public long getLong(java.lang.Object) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException; + method public int getModifiers(); + method public java.lang.String getName(); + method public short getShort(java.lang.Object) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException; + method public java.lang.Class getType(); + method public boolean isEnumConstant(); + method public boolean isSynthetic(); + method public void set(java.lang.Object, java.lang.Object) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException; + method public void setBoolean(java.lang.Object, boolean) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException; + method public void setByte(java.lang.Object, byte) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException; + method public void setChar(java.lang.Object, char) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException; + method public void setDouble(java.lang.Object, double) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException; + method public void setFloat(java.lang.Object, float) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException; + method public void setInt(java.lang.Object, int) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException; + method public void setLong(java.lang.Object, long) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException; + method public void setShort(java.lang.Object, short) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException; + method public java.lang.String toGenericString(); + } + + public abstract interface GenericArrayType implements java.lang.reflect.Type { + method public abstract java.lang.reflect.Type getGenericComponentType(); + } + + public abstract interface GenericDeclaration { + method public abstract java.lang.reflect.TypeVariable[] getTypeParameters(); + } + + public class GenericSignatureFormatError extends java.lang.ClassFormatError { + ctor public GenericSignatureFormatError(); + } + + public abstract interface InvocationHandler { + method public abstract java.lang.Object invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[]) throws java.lang.Throwable; + } + + public class InvocationTargetException extends java.lang.ReflectiveOperationException { + ctor protected InvocationTargetException(); + ctor public InvocationTargetException(java.lang.Throwable); + ctor public InvocationTargetException(java.lang.Throwable, java.lang.String); + method public java.lang.Throwable getTargetException(); + } + + public class MalformedParameterizedTypeException extends java.lang.RuntimeException { + ctor public MalformedParameterizedTypeException(); + } + + public abstract interface Member { + method public abstract java.lang.Class getDeclaringClass(); + method public abstract int getModifiers(); + method public abstract java.lang.String getName(); + method public abstract boolean isSynthetic(); + field public static final int DECLARED = 1; // 0x1 + field public static final int PUBLIC = 0; // 0x0 + } + + public final class Method extends java.lang.reflect.AccessibleObject implements java.lang.reflect.GenericDeclaration java.lang.reflect.Member { + method public A getAnnotation(java.lang.Class); + method public java.lang.Class getDeclaringClass(); + method public java.lang.Object getDefaultValue(); + method public java.lang.Class[] getExceptionTypes(); + method public java.lang.reflect.Type[] getGenericExceptionTypes(); + method public java.lang.reflect.Type[] getGenericParameterTypes(); + method public java.lang.reflect.Type getGenericReturnType(); + method public int getModifiers(); + method public java.lang.String getName(); + method public java.lang.annotation.Annotation[][] getParameterAnnotations(); + method public java.lang.Class[] getParameterTypes(); + method public java.lang.Class getReturnType(); + method public java.lang.reflect.TypeVariable[] getTypeParameters(); + method public java.lang.Object invoke(java.lang.Object, java.lang.Object...) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException, java.lang.reflect.InvocationTargetException; + method public boolean isBridge(); + method public boolean isSynthetic(); + method public boolean isVarArgs(); + method public java.lang.String toGenericString(); + } + + public class Modifier { + ctor public Modifier(); + method public static int classModifiers(); + method public static int constructorModifiers(); + method public static int fieldModifiers(); + method public static int interfaceModifiers(); + method public static boolean isAbstract(int); + method public static boolean isFinal(int); + method public static boolean isInterface(int); + method public static boolean isNative(int); + method public static boolean isPrivate(int); + method public static boolean isProtected(int); + method public static boolean isPublic(int); + method public static boolean isStatic(int); + method public static boolean isStrict(int); + method public static boolean isSynchronized(int); + method public static boolean isTransient(int); + method public static boolean isVolatile(int); + method public static int methodModifiers(); + method public static java.lang.String toString(int); + field public static final int ABSTRACT = 1024; // 0x400 + field public static final int FINAL = 16; // 0x10 + field public static final int INTERFACE = 512; // 0x200 + field public static final int NATIVE = 256; // 0x100 + field public static final int PRIVATE = 2; // 0x2 + field public static final int PROTECTED = 4; // 0x4 + field public static final int PUBLIC = 1; // 0x1 + field public static final int STATIC = 8; // 0x8 + field public static final int STRICT = 2048; // 0x800 + field public static final int SYNCHRONIZED = 32; // 0x20 + field public static final int TRANSIENT = 128; // 0x80 + field public static final int VOLATILE = 64; // 0x40 + } + + public abstract interface ParameterizedType implements java.lang.reflect.Type { + method public abstract java.lang.reflect.Type[] getActualTypeArguments(); + method public abstract java.lang.reflect.Type getOwnerType(); + method public abstract java.lang.reflect.Type getRawType(); + } + + public class Proxy implements java.io.Serializable { + ctor protected Proxy(java.lang.reflect.InvocationHandler); + method public static java.lang.reflect.InvocationHandler getInvocationHandler(java.lang.Object) throws java.lang.IllegalArgumentException; + method public static java.lang.Class getProxyClass(java.lang.ClassLoader, java.lang.Class...) throws java.lang.IllegalArgumentException; + method public static boolean isProxyClass(java.lang.Class); + method public static java.lang.Object newProxyInstance(java.lang.ClassLoader, java.lang.Class[], java.lang.reflect.InvocationHandler) throws java.lang.IllegalArgumentException; + field protected java.lang.reflect.InvocationHandler h; + } + + public final class ReflectPermission extends java.security.BasicPermission { + ctor public ReflectPermission(java.lang.String); + ctor public ReflectPermission(java.lang.String, java.lang.String); + } + + public abstract interface Type { + } + + public abstract interface TypeVariable implements java.lang.reflect.Type { + method public abstract java.lang.reflect.Type[] getBounds(); + method public abstract D getGenericDeclaration(); + method public abstract java.lang.String getName(); + } + + public class UndeclaredThrowableException extends java.lang.RuntimeException { + ctor public UndeclaredThrowableException(java.lang.Throwable); + ctor public UndeclaredThrowableException(java.lang.Throwable, java.lang.String); + method public java.lang.Throwable getUndeclaredThrowable(); + } + + public abstract interface WildcardType implements java.lang.reflect.Type { + method public abstract java.lang.reflect.Type[] getLowerBounds(); + method public abstract java.lang.reflect.Type[] getUpperBounds(); + } + +} + +package java.math { + + public class BigDecimal extends java.lang.Number implements java.lang.Comparable java.io.Serializable { + ctor public BigDecimal(char[], int, int); + ctor public BigDecimal(char[], int, int, java.math.MathContext); + ctor public BigDecimal(char[]); + ctor public BigDecimal(char[], java.math.MathContext); + ctor public BigDecimal(java.lang.String); + ctor public BigDecimal(java.lang.String, java.math.MathContext); + ctor public BigDecimal(double); + ctor public BigDecimal(double, java.math.MathContext); + ctor public BigDecimal(java.math.BigInteger); + ctor public BigDecimal(java.math.BigInteger, java.math.MathContext); + ctor public BigDecimal(java.math.BigInteger, int); + ctor public BigDecimal(java.math.BigInteger, int, java.math.MathContext); + ctor public BigDecimal(int); + ctor public BigDecimal(int, java.math.MathContext); + ctor public BigDecimal(long); + ctor public BigDecimal(long, java.math.MathContext); + method public java.math.BigDecimal abs(); + method public java.math.BigDecimal abs(java.math.MathContext); + method public java.math.BigDecimal add(java.math.BigDecimal); + method public java.math.BigDecimal add(java.math.BigDecimal, java.math.MathContext); + method public byte byteValueExact(); + method public int compareTo(java.math.BigDecimal); + method public java.math.BigDecimal divide(java.math.BigDecimal, int, int); + method public java.math.BigDecimal divide(java.math.BigDecimal, int, java.math.RoundingMode); + method public java.math.BigDecimal divide(java.math.BigDecimal, int); + method public java.math.BigDecimal divide(java.math.BigDecimal, java.math.RoundingMode); + method public java.math.BigDecimal divide(java.math.BigDecimal); + method public java.math.BigDecimal divide(java.math.BigDecimal, java.math.MathContext); + method public java.math.BigDecimal[] divideAndRemainder(java.math.BigDecimal); + method public java.math.BigDecimal[] divideAndRemainder(java.math.BigDecimal, java.math.MathContext); + method public java.math.BigDecimal divideToIntegralValue(java.math.BigDecimal); + method public java.math.BigDecimal divideToIntegralValue(java.math.BigDecimal, java.math.MathContext); + method public double doubleValue(); + method public float floatValue(); + method public int intValue(); + method public int intValueExact(); + method public long longValue(); + method public long longValueExact(); + method public java.math.BigDecimal max(java.math.BigDecimal); + method public java.math.BigDecimal min(java.math.BigDecimal); + method public java.math.BigDecimal movePointLeft(int); + method public java.math.BigDecimal movePointRight(int); + method public java.math.BigDecimal multiply(java.math.BigDecimal); + method public java.math.BigDecimal multiply(java.math.BigDecimal, java.math.MathContext); + method public java.math.BigDecimal negate(); + method public java.math.BigDecimal negate(java.math.MathContext); + method public java.math.BigDecimal plus(); + method public java.math.BigDecimal plus(java.math.MathContext); + method public java.math.BigDecimal pow(int); + method public java.math.BigDecimal pow(int, java.math.MathContext); + method public int precision(); + method public java.math.BigDecimal remainder(java.math.BigDecimal); + method public java.math.BigDecimal remainder(java.math.BigDecimal, java.math.MathContext); + method public java.math.BigDecimal round(java.math.MathContext); + method public int scale(); + method public java.math.BigDecimal scaleByPowerOfTen(int); + method public java.math.BigDecimal setScale(int, java.math.RoundingMode); + method public java.math.BigDecimal setScale(int, int); + method public java.math.BigDecimal setScale(int); + method public short shortValueExact(); + method public int signum(); + method public java.math.BigDecimal stripTrailingZeros(); + method public java.math.BigDecimal subtract(java.math.BigDecimal); + method public java.math.BigDecimal subtract(java.math.BigDecimal, java.math.MathContext); + method public java.math.BigInteger toBigInteger(); + method public java.math.BigInteger toBigIntegerExact(); + method public java.lang.String toEngineeringString(); + method public java.lang.String toPlainString(); + method public java.math.BigDecimal ulp(); + method public java.math.BigInteger unscaledValue(); + method public static java.math.BigDecimal valueOf(long, int); + method public static java.math.BigDecimal valueOf(long); + method public static java.math.BigDecimal valueOf(double); + field public static final java.math.BigDecimal ONE; + field public static final int ROUND_CEILING = 2; // 0x2 + field public static final int ROUND_DOWN = 1; // 0x1 + field public static final int ROUND_FLOOR = 3; // 0x3 + field public static final int ROUND_HALF_DOWN = 5; // 0x5 + field public static final int ROUND_HALF_EVEN = 6; // 0x6 + field public static final int ROUND_HALF_UP = 4; // 0x4 + field public static final int ROUND_UNNECESSARY = 7; // 0x7 + field public static final int ROUND_UP = 0; // 0x0 + field public static final java.math.BigDecimal TEN; + field public static final java.math.BigDecimal ZERO; + } + + public class BigInteger extends java.lang.Number implements java.lang.Comparable java.io.Serializable { + ctor public BigInteger(int, java.util.Random); + ctor public BigInteger(int, int, java.util.Random); + ctor public BigInteger(java.lang.String); + ctor public BigInteger(java.lang.String, int); + ctor public BigInteger(int, byte[]); + ctor public BigInteger(byte[]); + method public java.math.BigInteger abs(); + method public java.math.BigInteger add(java.math.BigInteger); + method public java.math.BigInteger and(java.math.BigInteger); + method public java.math.BigInteger andNot(java.math.BigInteger); + method public int bitCount(); + method public int bitLength(); + method public java.math.BigInteger clearBit(int); + method public int compareTo(java.math.BigInteger); + method public java.math.BigInteger divide(java.math.BigInteger); + method public java.math.BigInteger[] divideAndRemainder(java.math.BigInteger); + method public double doubleValue(); + method public java.math.BigInteger flipBit(int); + method public float floatValue(); + method public java.math.BigInteger gcd(java.math.BigInteger); + method public int getLowestSetBit(); + method public int intValue(); + method public boolean isProbablePrime(int); + method public long longValue(); + method public java.math.BigInteger max(java.math.BigInteger); + method public java.math.BigInteger min(java.math.BigInteger); + method public java.math.BigInteger mod(java.math.BigInteger); + method public java.math.BigInteger modInverse(java.math.BigInteger); + method public java.math.BigInteger modPow(java.math.BigInteger, java.math.BigInteger); + method public java.math.BigInteger multiply(java.math.BigInteger); + method public java.math.BigInteger negate(); + method public java.math.BigInteger nextProbablePrime(); + method public java.math.BigInteger not(); + method public java.math.BigInteger or(java.math.BigInteger); + method public java.math.BigInteger pow(int); + method public static java.math.BigInteger probablePrime(int, java.util.Random); + method public java.math.BigInteger remainder(java.math.BigInteger); + method public java.math.BigInteger setBit(int); + method public java.math.BigInteger shiftLeft(int); + method public java.math.BigInteger shiftRight(int); + method public int signum(); + method public java.math.BigInteger subtract(java.math.BigInteger); + method public boolean testBit(int); + method public byte[] toByteArray(); + method public java.lang.String toString(int); + method public static java.math.BigInteger valueOf(long); + method public java.math.BigInteger xor(java.math.BigInteger); + field public static final java.math.BigInteger ONE; + field public static final java.math.BigInteger TEN; + field public static final java.math.BigInteger ZERO; + } + + public final class MathContext implements java.io.Serializable { + ctor public MathContext(int); + ctor public MathContext(int, java.math.RoundingMode); + ctor public MathContext(java.lang.String); + method public int getPrecision(); + method public java.math.RoundingMode getRoundingMode(); + field public static final java.math.MathContext DECIMAL128; + field public static final java.math.MathContext DECIMAL32; + field public static final java.math.MathContext DECIMAL64; + field public static final java.math.MathContext UNLIMITED; + } + + public final class RoundingMode extends java.lang.Enum { + method public static java.math.RoundingMode valueOf(java.lang.String); + method public static java.math.RoundingMode valueOf(int); + method public static final java.math.RoundingMode[] values(); + enum_constant public static final java.math.RoundingMode CEILING; + enum_constant public static final java.math.RoundingMode DOWN; + enum_constant public static final java.math.RoundingMode FLOOR; + enum_constant public static final java.math.RoundingMode HALF_DOWN; + enum_constant public static final java.math.RoundingMode HALF_EVEN; + enum_constant public static final java.math.RoundingMode HALF_UP; + enum_constant public static final java.math.RoundingMode UNNECESSARY; + enum_constant public static final java.math.RoundingMode UP; + } + +} + +package java.net { + + public abstract class Authenticator { + ctor public Authenticator(); + method protected java.net.PasswordAuthentication getPasswordAuthentication(); + method protected final java.lang.String getRequestingHost(); + method protected final int getRequestingPort(); + method protected final java.lang.String getRequestingPrompt(); + method protected final java.lang.String getRequestingProtocol(); + method protected final java.lang.String getRequestingScheme(); + method protected final java.net.InetAddress getRequestingSite(); + method protected java.net.URL getRequestingURL(); + method protected java.net.Authenticator.RequestorType getRequestorType(); + method public static synchronized java.net.PasswordAuthentication requestPasswordAuthentication(java.net.InetAddress, int, java.lang.String, java.lang.String, java.lang.String); + method public static synchronized java.net.PasswordAuthentication requestPasswordAuthentication(java.lang.String, java.net.InetAddress, int, java.lang.String, java.lang.String, java.lang.String); + method public static java.net.PasswordAuthentication requestPasswordAuthentication(java.lang.String, java.net.InetAddress, int, java.lang.String, java.lang.String, java.lang.String, java.net.URL, java.net.Authenticator.RequestorType); + method public static void setDefault(java.net.Authenticator); + } + + public static final class Authenticator.RequestorType extends java.lang.Enum { + method public static java.net.Authenticator.RequestorType valueOf(java.lang.String); + method public static final java.net.Authenticator.RequestorType[] values(); + enum_constant public static final java.net.Authenticator.RequestorType PROXY; + enum_constant public static final java.net.Authenticator.RequestorType SERVER; + } + + public class BindException extends java.net.SocketException { + ctor public BindException(); + ctor public BindException(java.lang.String); + } + + public abstract class CacheRequest { + ctor public CacheRequest(); + method public abstract void abort(); + method public abstract java.io.OutputStream getBody() throws java.io.IOException; + } + + public abstract class CacheResponse { + ctor public CacheResponse(); + method public abstract java.io.InputStream getBody() throws java.io.IOException; + method public abstract java.util.Map> getHeaders() throws java.io.IOException; + } + + public class ConnectException extends java.net.SocketException { + ctor public ConnectException(); + ctor public ConnectException(java.lang.String); + } + + public abstract class ContentHandler { + ctor public ContentHandler(); + method public abstract java.lang.Object getContent(java.net.URLConnection) throws java.io.IOException; + method public java.lang.Object getContent(java.net.URLConnection, java.lang.Class[]) throws java.io.IOException; + } + + public abstract interface ContentHandlerFactory { + method public abstract java.net.ContentHandler createContentHandler(java.lang.String); + } + + public abstract class CookieHandler { + ctor public CookieHandler(); + method public abstract java.util.Map> get(java.net.URI, java.util.Map>) throws java.io.IOException; + method public static java.net.CookieHandler getDefault(); + method public abstract void put(java.net.URI, java.util.Map>) throws java.io.IOException; + method public static void setDefault(java.net.CookieHandler); + } + + public class CookieManager extends java.net.CookieHandler { + ctor public CookieManager(); + ctor public CookieManager(java.net.CookieStore, java.net.CookiePolicy); + method public java.util.Map> get(java.net.URI, java.util.Map>) throws java.io.IOException; + method public java.net.CookieStore getCookieStore(); + method public void put(java.net.URI, java.util.Map>) throws java.io.IOException; + method public void setCookiePolicy(java.net.CookiePolicy); + } + + public abstract interface CookiePolicy { + method public abstract boolean shouldAccept(java.net.URI, java.net.HttpCookie); + field public static final java.net.CookiePolicy ACCEPT_ALL; + field public static final java.net.CookiePolicy ACCEPT_NONE; + field public static final java.net.CookiePolicy ACCEPT_ORIGINAL_SERVER; + } + + public abstract interface CookieStore { + method public abstract void add(java.net.URI, java.net.HttpCookie); + method public abstract java.util.List get(java.net.URI); + method public abstract java.util.List getCookies(); + method public abstract java.util.List getURIs(); + method public abstract boolean remove(java.net.URI, java.net.HttpCookie); + method public abstract boolean removeAll(); + } + + public final class DatagramPacket { + ctor public DatagramPacket(byte[], int); + ctor public DatagramPacket(byte[], int, int); + ctor public DatagramPacket(byte[], int, int, java.net.InetAddress, int); + ctor public DatagramPacket(byte[], int, java.net.InetAddress, int); + ctor public DatagramPacket(byte[], int, java.net.SocketAddress) throws java.net.SocketException; + ctor public DatagramPacket(byte[], int, int, java.net.SocketAddress) throws java.net.SocketException; + method public synchronized java.net.InetAddress getAddress(); + method public synchronized byte[] getData(); + method public synchronized int getLength(); + method public synchronized int getOffset(); + method public synchronized int getPort(); + method public synchronized java.net.SocketAddress getSocketAddress(); + method public synchronized void setAddress(java.net.InetAddress); + method public synchronized void setData(byte[], int, int); + method public synchronized void setData(byte[]); + method public synchronized void setLength(int); + method public synchronized void setPort(int); + method public synchronized void setSocketAddress(java.net.SocketAddress); + } + + public class DatagramSocket implements java.io.Closeable { + ctor public DatagramSocket() throws java.net.SocketException; + ctor public DatagramSocket(int) throws java.net.SocketException; + ctor public DatagramSocket(int, java.net.InetAddress) throws java.net.SocketException; + ctor protected DatagramSocket(java.net.DatagramSocketImpl); + ctor public DatagramSocket(java.net.SocketAddress) throws java.net.SocketException; + method public void bind(java.net.SocketAddress) throws java.net.SocketException; + method public void close(); + method public void connect(java.net.SocketAddress) throws java.net.SocketException; + method public void connect(java.net.InetAddress, int); + method public void disconnect(); + method public boolean getBroadcast() throws java.net.SocketException; + method public java.nio.channels.DatagramChannel getChannel(); + method public java.net.InetAddress getInetAddress(); + method public java.net.InetAddress getLocalAddress(); + method public int getLocalPort(); + method public java.net.SocketAddress getLocalSocketAddress(); + method public int getPort(); + method public synchronized int getReceiveBufferSize() throws java.net.SocketException; + method public java.net.SocketAddress getRemoteSocketAddress(); + method public boolean getReuseAddress() throws java.net.SocketException; + method public synchronized int getSendBufferSize() throws java.net.SocketException; + method public synchronized int getSoTimeout() throws java.net.SocketException; + method public int getTrafficClass() throws java.net.SocketException; + method public boolean isBound(); + method public boolean isClosed(); + method public boolean isConnected(); + method public synchronized void receive(java.net.DatagramPacket) throws java.io.IOException; + method public void send(java.net.DatagramPacket) throws java.io.IOException; + method public void setBroadcast(boolean) throws java.net.SocketException; + method public static synchronized void setDatagramSocketImplFactory(java.net.DatagramSocketImplFactory) throws java.io.IOException; + method public synchronized void setReceiveBufferSize(int) throws java.net.SocketException; + method public void setReuseAddress(boolean) throws java.net.SocketException; + method public synchronized void setSendBufferSize(int) throws java.net.SocketException; + method public synchronized void setSoTimeout(int) throws java.net.SocketException; + method public void setTrafficClass(int) throws java.net.SocketException; + } + + public abstract class DatagramSocketImpl implements java.net.SocketOptions { + ctor public DatagramSocketImpl(); + method protected abstract void bind(int, java.net.InetAddress) throws java.net.SocketException; + method protected abstract void close(); + method protected void connect(java.net.InetAddress, int) throws java.net.SocketException; + method protected abstract void create() throws java.net.SocketException; + method protected void disconnect(); + method protected java.io.FileDescriptor getFileDescriptor(); + method protected int getLocalPort(); + method protected abstract deprecated byte getTTL() throws java.io.IOException; + method protected abstract int getTimeToLive() throws java.io.IOException; + method protected abstract void join(java.net.InetAddress) throws java.io.IOException; + method protected abstract void joinGroup(java.net.SocketAddress, java.net.NetworkInterface) throws java.io.IOException; + method protected abstract void leave(java.net.InetAddress) throws java.io.IOException; + method protected abstract void leaveGroup(java.net.SocketAddress, java.net.NetworkInterface) throws java.io.IOException; + method protected abstract int peek(java.net.InetAddress) throws java.io.IOException; + method protected abstract int peekData(java.net.DatagramPacket) throws java.io.IOException; + method protected abstract void receive(java.net.DatagramPacket) throws java.io.IOException; + method protected abstract void send(java.net.DatagramPacket) throws java.io.IOException; + method protected abstract deprecated void setTTL(byte) throws java.io.IOException; + method protected abstract void setTimeToLive(int) throws java.io.IOException; + field protected java.io.FileDescriptor fd; + field protected int localPort; + } + + public abstract interface DatagramSocketImplFactory { + method public abstract java.net.DatagramSocketImpl createDatagramSocketImpl(); + } + + public abstract interface FileNameMap { + method public abstract java.lang.String getContentTypeFor(java.lang.String); + } + + public final class HttpCookie implements java.lang.Cloneable { + ctor public HttpCookie(java.lang.String, java.lang.String); + method public java.lang.Object clone(); + method public static boolean domainMatches(java.lang.String, java.lang.String); + method public java.lang.String getComment(); + method public java.lang.String getCommentURL(); + method public boolean getDiscard(); + method public java.lang.String getDomain(); + method public long getMaxAge(); + method public java.lang.String getName(); + method public java.lang.String getPath(); + method public java.lang.String getPortlist(); + method public boolean getSecure(); + method public java.lang.String getValue(); + method public int getVersion(); + method public boolean hasExpired(); + method public static java.util.List parse(java.lang.String); + method public void setComment(java.lang.String); + method public void setCommentURL(java.lang.String); + method public void setDiscard(boolean); + method public void setDomain(java.lang.String); + method public void setMaxAge(long); + method public void setPath(java.lang.String); + method public void setPortlist(java.lang.String); + method public void setSecure(boolean); + method public void setValue(java.lang.String); + method public void setVersion(int); + } + + public class HttpRetryException extends java.io.IOException { + ctor public HttpRetryException(java.lang.String, int); + ctor public HttpRetryException(java.lang.String, int, java.lang.String); + method public java.lang.String getLocation(); + method public java.lang.String getReason(); + method public int responseCode(); + } + + public abstract class HttpURLConnection extends java.net.URLConnection { + ctor protected HttpURLConnection(java.net.URL); + method public abstract void disconnect(); + method public java.io.InputStream getErrorStream(); + method public static boolean getFollowRedirects(); + method public boolean getInstanceFollowRedirects(); + method public java.lang.String getRequestMethod(); + method public int getResponseCode() throws java.io.IOException; + method public java.lang.String getResponseMessage() throws java.io.IOException; + method public void setChunkedStreamingMode(int); + method public void setFixedLengthStreamingMode(long); + method public void setFixedLengthStreamingMode(int); + method public static void setFollowRedirects(boolean); + method public void setInstanceFollowRedirects(boolean); + method public void setRequestMethod(java.lang.String) throws java.net.ProtocolException; + method public abstract boolean usingProxy(); + field public static final int HTTP_ACCEPTED = 202; // 0xca + field public static final int HTTP_BAD_GATEWAY = 502; // 0x1f6 + field public static final int HTTP_BAD_METHOD = 405; // 0x195 + field public static final int HTTP_BAD_REQUEST = 400; // 0x190 + field public static final int HTTP_CLIENT_TIMEOUT = 408; // 0x198 + field public static final int HTTP_CONFLICT = 409; // 0x199 + field public static final int HTTP_CREATED = 201; // 0xc9 + field public static final int HTTP_ENTITY_TOO_LARGE = 413; // 0x19d + field public static final int HTTP_FORBIDDEN = 403; // 0x193 + field public static final int HTTP_GATEWAY_TIMEOUT = 504; // 0x1f8 + field public static final int HTTP_GONE = 410; // 0x19a + field public static final int HTTP_INTERNAL_ERROR = 500; // 0x1f4 + field public static final int HTTP_LENGTH_REQUIRED = 411; // 0x19b + field public static final int HTTP_MOVED_PERM = 301; // 0x12d + field public static final int HTTP_MOVED_TEMP = 302; // 0x12e + field public static final int HTTP_MULT_CHOICE = 300; // 0x12c + field public static final int HTTP_NOT_ACCEPTABLE = 406; // 0x196 + field public static final int HTTP_NOT_AUTHORITATIVE = 203; // 0xcb + field public static final int HTTP_NOT_FOUND = 404; // 0x194 + field public static final int HTTP_NOT_IMPLEMENTED = 501; // 0x1f5 + field public static final int HTTP_NOT_MODIFIED = 304; // 0x130 + field public static final int HTTP_NO_CONTENT = 204; // 0xcc + field public static final int HTTP_OK = 200; // 0xc8 + field public static final int HTTP_PARTIAL = 206; // 0xce + field public static final int HTTP_PAYMENT_REQUIRED = 402; // 0x192 + field public static final int HTTP_PRECON_FAILED = 412; // 0x19c + field public static final int HTTP_PROXY_AUTH = 407; // 0x197 + field public static final int HTTP_REQ_TOO_LONG = 414; // 0x19e + field public static final int HTTP_RESET = 205; // 0xcd + field public static final int HTTP_SEE_OTHER = 303; // 0x12f + field public static final deprecated int HTTP_SERVER_ERROR = 500; // 0x1f4 + field public static final int HTTP_UNAUTHORIZED = 401; // 0x191 + field public static final int HTTP_UNAVAILABLE = 503; // 0x1f7 + field public static final int HTTP_UNSUPPORTED_TYPE = 415; // 0x19f + field public static final int HTTP_USE_PROXY = 305; // 0x131 + field public static final int HTTP_VERSION = 505; // 0x1f9 + field protected int chunkLength; + field protected int fixedContentLength; + field protected long fixedContentLengthLong; + field protected boolean instanceFollowRedirects; + field protected java.lang.String method; + field protected int responseCode; + field protected java.lang.String responseMessage; + } + + public final class IDN { + method public static java.lang.String toASCII(java.lang.String, int); + method public static java.lang.String toASCII(java.lang.String); + method public static java.lang.String toUnicode(java.lang.String, int); + method public static java.lang.String toUnicode(java.lang.String); + field public static final int ALLOW_UNASSIGNED = 1; // 0x1 + field public static final int USE_STD3_ASCII_RULES = 2; // 0x2 + } + + public final class Inet4Address extends java.net.InetAddress { + } + + public final class Inet6Address extends java.net.InetAddress { + method public static java.net.Inet6Address getByAddress(java.lang.String, byte[], int) throws java.net.UnknownHostException; + method public static java.net.Inet6Address getByAddress(java.lang.String, byte[], java.net.NetworkInterface) throws java.net.UnknownHostException; + method public int getScopeId(); + method public java.net.NetworkInterface getScopedInterface(); + method public boolean isIPv4CompatibleAddress(); + } + + public class InetAddress implements java.io.Serializable { + method public byte[] getAddress(); + method public static java.net.InetAddress[] getAllByName(java.lang.String) throws java.net.UnknownHostException; + method public static java.net.InetAddress getByAddress(byte[]) throws java.net.UnknownHostException; + method public static java.net.InetAddress getByAddress(java.lang.String, byte[]) throws java.net.UnknownHostException; + method public static java.net.InetAddress getByName(java.lang.String) throws java.net.UnknownHostException; + method public java.lang.String getCanonicalHostName(); + method public java.lang.String getHostAddress(); + method public java.lang.String getHostName(); + method public static java.net.InetAddress getLocalHost() throws java.net.UnknownHostException; + method public static java.net.InetAddress getLoopbackAddress(); + method public boolean isAnyLocalAddress(); + method public boolean isLinkLocalAddress(); + method public boolean isLoopbackAddress(); + method public boolean isMCGlobal(); + method public boolean isMCLinkLocal(); + method public boolean isMCNodeLocal(); + method public boolean isMCOrgLocal(); + method public boolean isMCSiteLocal(); + method public boolean isMulticastAddress(); + method public boolean isReachable(int) throws java.io.IOException; + method public boolean isReachable(java.net.NetworkInterface, int, int) throws java.io.IOException; + method public boolean isSiteLocalAddress(); + } + + public class InetSocketAddress extends java.net.SocketAddress { + ctor public InetSocketAddress(int); + ctor public InetSocketAddress(java.net.InetAddress, int); + ctor public InetSocketAddress(java.lang.String, int); + method public static java.net.InetSocketAddress createUnresolved(java.lang.String, int); + method public final boolean equals(java.lang.Object); + method public final java.net.InetAddress getAddress(); + method public final java.lang.String getHostName(); + method public final java.lang.String getHostString(); + method public final int getPort(); + method public final int hashCode(); + method public final boolean isUnresolved(); + } + + public class InterfaceAddress { + method public java.net.InetAddress getAddress(); + method public java.net.InetAddress getBroadcast(); + method public short getNetworkPrefixLength(); + } + + public abstract class JarURLConnection extends java.net.URLConnection { + ctor protected JarURLConnection(java.net.URL) throws java.net.MalformedURLException; + method public java.util.jar.Attributes getAttributes() throws java.io.IOException; + method public java.security.cert.Certificate[] getCertificates() throws java.io.IOException; + method public java.lang.String getEntryName(); + method public java.util.jar.JarEntry getJarEntry() throws java.io.IOException; + method public abstract java.util.jar.JarFile getJarFile() throws java.io.IOException; + method public java.net.URL getJarFileURL(); + method public java.util.jar.Attributes getMainAttributes() throws java.io.IOException; + method public java.util.jar.Manifest getManifest() throws java.io.IOException; + field protected java.net.URLConnection jarFileURLConnection; + } + + public class MalformedURLException extends java.io.IOException { + ctor public MalformedURLException(); + ctor public MalformedURLException(java.lang.String); + } + + public class MulticastSocket extends java.net.DatagramSocket { + ctor public MulticastSocket() throws java.io.IOException; + ctor public MulticastSocket(int) throws java.io.IOException; + ctor public MulticastSocket(java.net.SocketAddress) throws java.io.IOException; + method public java.net.InetAddress getInterface() throws java.net.SocketException; + method public boolean getLoopbackMode() throws java.net.SocketException; + method public java.net.NetworkInterface getNetworkInterface() throws java.net.SocketException; + method public deprecated byte getTTL() throws java.io.IOException; + method public int getTimeToLive() throws java.io.IOException; + method public void joinGroup(java.net.InetAddress) throws java.io.IOException; + method public void joinGroup(java.net.SocketAddress, java.net.NetworkInterface) throws java.io.IOException; + method public void leaveGroup(java.net.InetAddress) throws java.io.IOException; + method public void leaveGroup(java.net.SocketAddress, java.net.NetworkInterface) throws java.io.IOException; + method public deprecated void send(java.net.DatagramPacket, byte) throws java.io.IOException; + method public void setInterface(java.net.InetAddress) throws java.net.SocketException; + method public void setLoopbackMode(boolean) throws java.net.SocketException; + method public void setNetworkInterface(java.net.NetworkInterface) throws java.net.SocketException; + method public deprecated void setTTL(byte) throws java.io.IOException; + method public void setTimeToLive(int) throws java.io.IOException; + } + + public final class NetPermission extends java.security.BasicPermission { + ctor public NetPermission(java.lang.String); + ctor public NetPermission(java.lang.String, java.lang.String); + } + + public final class NetworkInterface { + method public static java.net.NetworkInterface getByIndex(int) throws java.net.SocketException; + method public static java.net.NetworkInterface getByInetAddress(java.net.InetAddress) throws java.net.SocketException; + method public static java.net.NetworkInterface getByName(java.lang.String) throws java.net.SocketException; + method public java.lang.String getDisplayName(); + method public byte[] getHardwareAddress() throws java.net.SocketException; + method public int getIndex(); + method public java.util.Enumeration getInetAddresses(); + method public java.util.List getInterfaceAddresses(); + method public int getMTU() throws java.net.SocketException; + method public java.lang.String getName(); + method public static java.util.Enumeration getNetworkInterfaces() throws java.net.SocketException; + method public java.net.NetworkInterface getParent(); + method public java.util.Enumeration getSubInterfaces(); + method public boolean isLoopback() throws java.net.SocketException; + method public boolean isPointToPoint() throws java.net.SocketException; + method public boolean isUp() throws java.net.SocketException; + method public boolean isVirtual(); + method public boolean supportsMulticast() throws java.net.SocketException; + } + + public class NoRouteToHostException extends java.net.SocketException { + ctor public NoRouteToHostException(); + ctor public NoRouteToHostException(java.lang.String); + } + + public final class PasswordAuthentication { + ctor public PasswordAuthentication(java.lang.String, char[]); + method public char[] getPassword(); + method public java.lang.String getUserName(); + } + + public class PortUnreachableException extends java.net.SocketException { + ctor public PortUnreachableException(); + ctor public PortUnreachableException(java.lang.String); + } + + public class ProtocolException extends java.io.IOException { + ctor public ProtocolException(); + ctor public ProtocolException(java.lang.String); + } + + public class Proxy { + ctor public Proxy(java.net.Proxy.Type, java.net.SocketAddress); + method public java.net.SocketAddress address(); + method public final boolean equals(java.lang.Object); + method public final int hashCode(); + method public java.net.Proxy.Type type(); + field public static final java.net.Proxy NO_PROXY; + } + + public static final class Proxy.Type extends java.lang.Enum { + method public static java.net.Proxy.Type valueOf(java.lang.String); + method public static final java.net.Proxy.Type[] values(); + enum_constant public static final java.net.Proxy.Type DIRECT; + enum_constant public static final java.net.Proxy.Type HTTP; + enum_constant public static final java.net.Proxy.Type SOCKS; + } + + public abstract class ProxySelector { + ctor public ProxySelector(); + method public abstract void connectFailed(java.net.URI, java.net.SocketAddress, java.io.IOException); + method public static java.net.ProxySelector getDefault(); + method public abstract java.util.List select(java.net.URI); + method public static void setDefault(java.net.ProxySelector); + } + + public abstract class ResponseCache { + ctor public ResponseCache(); + method public abstract java.net.CacheResponse get(java.net.URI, java.lang.String, java.util.Map>) throws java.io.IOException; + method public static java.net.ResponseCache getDefault(); + method public abstract java.net.CacheRequest put(java.net.URI, java.net.URLConnection) throws java.io.IOException; + method public static void setDefault(java.net.ResponseCache); + } + + public abstract class SecureCacheResponse extends java.net.CacheResponse { + ctor public SecureCacheResponse(); + method public abstract java.lang.String getCipherSuite(); + method public abstract java.util.List getLocalCertificateChain(); + method public abstract java.security.Principal getLocalPrincipal(); + method public abstract java.security.Principal getPeerPrincipal() throws javax.net.ssl.SSLPeerUnverifiedException; + method public abstract java.util.List getServerCertificateChain() throws javax.net.ssl.SSLPeerUnverifiedException; + } + + public class ServerSocket implements java.io.Closeable { + ctor public ServerSocket() throws java.io.IOException; + ctor public ServerSocket(int) throws java.io.IOException; + ctor public ServerSocket(int, int) throws java.io.IOException; + ctor public ServerSocket(int, int, java.net.InetAddress) throws java.io.IOException; + method public java.net.Socket accept() throws java.io.IOException; + method public void bind(java.net.SocketAddress) throws java.io.IOException; + method public void bind(java.net.SocketAddress, int) throws java.io.IOException; + method public void close() throws java.io.IOException; + method public java.nio.channels.ServerSocketChannel getChannel(); + method public java.net.InetAddress getInetAddress(); + method public int getLocalPort(); + method public java.net.SocketAddress getLocalSocketAddress(); + method public int getReceiveBufferSize() throws java.net.SocketException; + method public boolean getReuseAddress() throws java.net.SocketException; + method public synchronized int getSoTimeout() throws java.io.IOException; + method protected final void implAccept(java.net.Socket) throws java.io.IOException; + method public boolean isBound(); + method public boolean isClosed(); + method public void setPerformancePreferences(int, int, int); + method public void setReceiveBufferSize(int) throws java.net.SocketException; + method public void setReuseAddress(boolean) throws java.net.SocketException; + method public synchronized void setSoTimeout(int) throws java.net.SocketException; + method public static synchronized void setSocketFactory(java.net.SocketImplFactory) throws java.io.IOException; + } + + public class Socket implements java.io.Closeable { + ctor public Socket(); + ctor public Socket(java.net.Proxy); + ctor public Socket(java.lang.String, int) throws java.io.IOException, java.net.UnknownHostException; + ctor public Socket(java.lang.String, int, java.net.InetAddress, int) throws java.io.IOException; + ctor public deprecated Socket(java.lang.String, int, boolean) throws java.io.IOException; + ctor public Socket(java.net.InetAddress, int) throws java.io.IOException; + ctor public Socket(java.net.InetAddress, int, java.net.InetAddress, int) throws java.io.IOException; + ctor public deprecated Socket(java.net.InetAddress, int, boolean) throws java.io.IOException; + ctor protected Socket(java.net.SocketImpl) throws java.net.SocketException; + method public void bind(java.net.SocketAddress) throws java.io.IOException; + method public synchronized void close() throws java.io.IOException; + method public void connect(java.net.SocketAddress) throws java.io.IOException; + method public void connect(java.net.SocketAddress, int) throws java.io.IOException; + method public java.nio.channels.SocketChannel getChannel(); + method public java.net.InetAddress getInetAddress(); + method public java.io.InputStream getInputStream() throws java.io.IOException; + method public boolean getKeepAlive() throws java.net.SocketException; + method public java.net.InetAddress getLocalAddress(); + method public int getLocalPort(); + method public java.net.SocketAddress getLocalSocketAddress(); + method public boolean getOOBInline() throws java.net.SocketException; + method public java.io.OutputStream getOutputStream() throws java.io.IOException; + method public int getPort(); + method public synchronized int getReceiveBufferSize() throws java.net.SocketException; + method public java.net.SocketAddress getRemoteSocketAddress(); + method public boolean getReuseAddress() throws java.net.SocketException; + method public synchronized int getSendBufferSize() throws java.net.SocketException; + method public int getSoLinger() throws java.net.SocketException; + method public synchronized int getSoTimeout() throws java.net.SocketException; + method public boolean getTcpNoDelay() throws java.net.SocketException; + method public int getTrafficClass() throws java.net.SocketException; + method public boolean isBound(); + method public boolean isClosed(); + method public boolean isConnected(); + method public boolean isInputShutdown(); + method public boolean isOutputShutdown(); + method public void sendUrgentData(int) throws java.io.IOException; + method public void setKeepAlive(boolean) throws java.net.SocketException; + method public void setOOBInline(boolean) throws java.net.SocketException; + method public void setPerformancePreferences(int, int, int); + method public synchronized void setReceiveBufferSize(int) throws java.net.SocketException; + method public void setReuseAddress(boolean) throws java.net.SocketException; + method public synchronized void setSendBufferSize(int) throws java.net.SocketException; + method public void setSoLinger(boolean, int) throws java.net.SocketException; + method public synchronized void setSoTimeout(int) throws java.net.SocketException; + method public static synchronized void setSocketImplFactory(java.net.SocketImplFactory) throws java.io.IOException; + method public void setTcpNoDelay(boolean) throws java.net.SocketException; + method public void setTrafficClass(int) throws java.net.SocketException; + method public void shutdownInput() throws java.io.IOException; + method public void shutdownOutput() throws java.io.IOException; + } + + public abstract class SocketAddress implements java.io.Serializable { + ctor public SocketAddress(); + } + + public class SocketException extends java.io.IOException { + ctor public SocketException(); + ctor public SocketException(java.lang.String); + } + + public abstract class SocketImpl implements java.net.SocketOptions { + ctor public SocketImpl(); + method protected abstract void accept(java.net.SocketImpl) throws java.io.IOException; + method protected abstract int available() throws java.io.IOException; + method protected abstract void bind(java.net.InetAddress, int) throws java.io.IOException; + method protected abstract void close() throws java.io.IOException; + method protected abstract void connect(java.lang.String, int) throws java.io.IOException; + method protected abstract void connect(java.net.InetAddress, int) throws java.io.IOException; + method protected abstract void connect(java.net.SocketAddress, int) throws java.io.IOException; + method protected abstract void create(boolean) throws java.io.IOException; + method protected java.io.FileDescriptor getFileDescriptor(); + method protected java.net.InetAddress getInetAddress(); + method protected abstract java.io.InputStream getInputStream() throws java.io.IOException; + method protected int getLocalPort(); + method protected abstract java.io.OutputStream getOutputStream() throws java.io.IOException; + method protected int getPort(); + method protected abstract void listen(int) throws java.io.IOException; + method protected abstract void sendUrgentData(int) throws java.io.IOException; + method protected void setPerformancePreferences(int, int, int); + method protected void shutdownInput() throws java.io.IOException; + method protected void shutdownOutput() throws java.io.IOException; + method protected boolean supportsUrgentData(); + field protected java.net.InetAddress address; + field protected java.io.FileDescriptor fd; + field protected int localport; + field protected int port; + } + + public abstract interface SocketImplFactory { + method public abstract java.net.SocketImpl createSocketImpl(); + } + + public abstract interface SocketOptions { + method public abstract java.lang.Object getOption(int) throws java.net.SocketException; + method public abstract void setOption(int, java.lang.Object) throws java.net.SocketException; + field public static final int IP_MULTICAST_IF = 16; // 0x10 + field public static final int IP_MULTICAST_IF2 = 31; // 0x1f + field public static final int IP_MULTICAST_LOOP = 18; // 0x12 + field public static final int IP_TOS = 3; // 0x3 + field public static final int SO_BINDADDR = 15; // 0xf + field public static final int SO_BROADCAST = 32; // 0x20 + field public static final int SO_KEEPALIVE = 8; // 0x8 + field public static final int SO_LINGER = 128; // 0x80 + field public static final int SO_OOBINLINE = 4099; // 0x1003 + field public static final int SO_RCVBUF = 4098; // 0x1002 + field public static final int SO_REUSEADDR = 4; // 0x4 + field public static final int SO_SNDBUF = 4097; // 0x1001 + field public static final int SO_TIMEOUT = 4102; // 0x1006 + field public static final int TCP_NODELAY = 1; // 0x1 + } + + public final class SocketPermission extends java.security.Permission implements java.io.Serializable { + ctor public SocketPermission(java.lang.String, java.lang.String); + method public java.lang.String getActions(); + method public boolean implies(java.security.Permission); + } + + public class SocketTimeoutException extends java.io.InterruptedIOException { + ctor public SocketTimeoutException(); + ctor public SocketTimeoutException(java.lang.String); + } + + public final class URI implements java.lang.Comparable java.io.Serializable { + ctor public URI(java.lang.String) throws java.net.URISyntaxException; + ctor public URI(java.lang.String, java.lang.String, java.lang.String) throws java.net.URISyntaxException; + ctor public URI(java.lang.String, java.lang.String, java.lang.String, int, java.lang.String, java.lang.String, java.lang.String) throws java.net.URISyntaxException; + ctor public URI(java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.net.URISyntaxException; + ctor public URI(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.net.URISyntaxException; + method public int compareTo(java.net.URI); + method public static java.net.URI create(java.lang.String); + method public java.lang.String getAuthority(); + method public java.lang.String getFragment(); + method public java.lang.String getHost(); + method public java.lang.String getPath(); + method public int getPort(); + method public java.lang.String getQuery(); + method public java.lang.String getRawAuthority(); + method public java.lang.String getRawFragment(); + method public java.lang.String getRawPath(); + method public java.lang.String getRawQuery(); + method public java.lang.String getRawSchemeSpecificPart(); + method public java.lang.String getRawUserInfo(); + method public java.lang.String getScheme(); + method public java.lang.String getSchemeSpecificPart(); + method public java.lang.String getUserInfo(); + method public boolean isAbsolute(); + method public boolean isOpaque(); + method public java.net.URI normalize(); + method public java.net.URI parseServerAuthority() throws java.net.URISyntaxException; + method public java.net.URI relativize(java.net.URI); + method public java.net.URI resolve(java.net.URI); + method public java.net.URI resolve(java.lang.String); + method public java.lang.String toASCIIString(); + method public java.net.URL toURL() throws java.net.MalformedURLException; + } + + public class URISyntaxException extends java.lang.Exception { + ctor public URISyntaxException(java.lang.String, java.lang.String, int); + ctor public URISyntaxException(java.lang.String, java.lang.String); + method public int getIndex(); + method public java.lang.String getInput(); + method public java.lang.String getReason(); + } + + public final class URL implements java.io.Serializable { + ctor public URL(java.lang.String) throws java.net.MalformedURLException; + ctor public URL(java.net.URL, java.lang.String) throws java.net.MalformedURLException; + ctor public URL(java.net.URL, java.lang.String, java.net.URLStreamHandler) throws java.net.MalformedURLException; + ctor public URL(java.lang.String, java.lang.String, java.lang.String) throws java.net.MalformedURLException; + ctor public URL(java.lang.String, java.lang.String, int, java.lang.String) throws java.net.MalformedURLException; + ctor public URL(java.lang.String, java.lang.String, int, java.lang.String, java.net.URLStreamHandler) throws java.net.MalformedURLException; + method public java.lang.String getAuthority(); + method public final java.lang.Object getContent() throws java.io.IOException; + method public final java.lang.Object getContent(java.lang.Class[]) throws java.io.IOException; + method public int getDefaultPort(); + method public java.lang.String getFile(); + method public java.lang.String getHost(); + method public java.lang.String getPath(); + method public int getPort(); + method public java.lang.String getProtocol(); + method public java.lang.String getQuery(); + method public java.lang.String getRef(); + method public java.lang.String getUserInfo(); + method public java.net.URLConnection openConnection() throws java.io.IOException; + method public java.net.URLConnection openConnection(java.net.Proxy) throws java.io.IOException; + method public final java.io.InputStream openStream() throws java.io.IOException; + method public boolean sameFile(java.net.URL); + method protected void set(java.lang.String, java.lang.String, int, java.lang.String, java.lang.String); + method protected void set(java.lang.String, java.lang.String, int, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String); + method public static synchronized void setURLStreamHandlerFactory(java.net.URLStreamHandlerFactory); + method public java.lang.String toExternalForm(); + method public java.net.URI toURI() throws java.net.URISyntaxException; + } + + public class URLClassLoader extends java.security.SecureClassLoader { + ctor public URLClassLoader(java.net.URL[]); + ctor public URLClassLoader(java.net.URL[], java.lang.ClassLoader); + ctor public URLClassLoader(java.net.URL[], java.lang.ClassLoader, java.net.URLStreamHandlerFactory); + method protected void addURL(java.net.URL); + method protected java.lang.Package definePackage(java.lang.String, java.util.jar.Manifest, java.net.URL) throws java.lang.IllegalArgumentException; + method public java.net.URL findResource(java.lang.String); + method public java.util.Enumeration findResources(java.lang.String) throws java.io.IOException; + method public java.net.URL[] getURLs(); + method public static java.net.URLClassLoader newInstance(java.net.URL[]); + method public static java.net.URLClassLoader newInstance(java.net.URL[], java.lang.ClassLoader); + } + + public abstract class URLConnection { + ctor protected URLConnection(java.net.URL); + method public void addRequestProperty(java.lang.String, java.lang.String); + method public abstract void connect() throws java.io.IOException; + method public boolean getAllowUserInteraction(); + method public int getConnectTimeout(); + method public java.lang.Object getContent() throws java.io.IOException; + method public java.lang.Object getContent(java.lang.Class[]) throws java.io.IOException; + method public java.lang.String getContentEncoding(); + method public int getContentLength(); + method public java.lang.String getContentType(); + method public long getDate(); + method public static boolean getDefaultAllowUserInteraction(); + method public static deprecated java.lang.String getDefaultRequestProperty(java.lang.String); + method public boolean getDefaultUseCaches(); + method public boolean getDoInput(); + method public boolean getDoOutput(); + method public long getExpiration(); + method public static java.net.FileNameMap getFileNameMap(); + method public java.lang.String getHeaderField(int); + method public java.lang.String getHeaderField(java.lang.String); + method public long getHeaderFieldDate(java.lang.String, long); + method public int getHeaderFieldInt(java.lang.String, int); + method public java.lang.String getHeaderFieldKey(int); + method public java.util.Map> getHeaderFields(); + method public long getIfModifiedSince(); + method public java.io.InputStream getInputStream() throws java.io.IOException; + method public long getLastModified(); + method public java.io.OutputStream getOutputStream() throws java.io.IOException; + method public java.security.Permission getPermission() throws java.io.IOException; + method public int getReadTimeout(); + method public java.util.Map> getRequestProperties(); + method public java.lang.String getRequestProperty(java.lang.String); + method public java.net.URL getURL(); + method public boolean getUseCaches(); + method public static java.lang.String guessContentTypeFromName(java.lang.String); + method public static java.lang.String guessContentTypeFromStream(java.io.InputStream) throws java.io.IOException; + method public void setAllowUserInteraction(boolean); + method public void setConnectTimeout(int); + method public static synchronized void setContentHandlerFactory(java.net.ContentHandlerFactory); + method public static void setDefaultAllowUserInteraction(boolean); + method public static deprecated void setDefaultRequestProperty(java.lang.String, java.lang.String); + method public void setDefaultUseCaches(boolean); + method public void setDoInput(boolean); + method public void setDoOutput(boolean); + method public static void setFileNameMap(java.net.FileNameMap); + method public void setIfModifiedSince(long); + method public void setReadTimeout(int); + method public void setRequestProperty(java.lang.String, java.lang.String); + method public void setUseCaches(boolean); + field protected boolean allowUserInteraction; + field protected boolean connected; + field protected boolean doInput; + field protected boolean doOutput; + field protected long ifModifiedSince; + field protected java.net.URL url; + field protected boolean useCaches; + } + + public class URLDecoder { + ctor public URLDecoder(); + method public static deprecated java.lang.String decode(java.lang.String); + method public static java.lang.String decode(java.lang.String, java.lang.String) throws java.io.UnsupportedEncodingException; + } + + public class URLEncoder { + method public static deprecated java.lang.String encode(java.lang.String); + method public static java.lang.String encode(java.lang.String, java.lang.String) throws java.io.UnsupportedEncodingException; + } + + public abstract class URLStreamHandler { + ctor public URLStreamHandler(); + method protected boolean equals(java.net.URL, java.net.URL); + method protected int getDefaultPort(); + method protected java.net.InetAddress getHostAddress(java.net.URL); + method protected int hashCode(java.net.URL); + method protected boolean hostsEqual(java.net.URL, java.net.URL); + method protected abstract java.net.URLConnection openConnection(java.net.URL) throws java.io.IOException; + method protected java.net.URLConnection openConnection(java.net.URL, java.net.Proxy) throws java.io.IOException; + method protected void parseURL(java.net.URL, java.lang.String, int, int); + method protected boolean sameFile(java.net.URL, java.net.URL); + method protected deprecated void setURL(java.net.URL, java.lang.String, java.lang.String, int, java.lang.String, java.lang.String); + method protected void setURL(java.net.URL, java.lang.String, java.lang.String, int, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String); + method protected java.lang.String toExternalForm(java.net.URL); + } + + public abstract interface URLStreamHandlerFactory { + method public abstract java.net.URLStreamHandler createURLStreamHandler(java.lang.String); + } + + public class UnknownHostException extends java.io.IOException { + ctor public UnknownHostException(); + ctor public UnknownHostException(java.lang.String); + } + + public class UnknownServiceException extends java.io.IOException { + ctor public UnknownServiceException(); + ctor public UnknownServiceException(java.lang.String); + } + +} + +package java.nio { + + public abstract class Buffer { + method public abstract java.lang.Object array(); + method public abstract int arrayOffset(); + method public final int capacity(); + method public final java.nio.Buffer clear(); + method public final java.nio.Buffer flip(); + method public abstract boolean hasArray(); + method public final boolean hasRemaining(); + method public abstract boolean isDirect(); + method public abstract boolean isReadOnly(); + method public final int limit(); + method public final java.nio.Buffer limit(int); + method public final java.nio.Buffer mark(); + method public final int position(); + method public final java.nio.Buffer position(int); + method public final int remaining(); + method public final java.nio.Buffer reset(); + method public final java.nio.Buffer rewind(); + } + + public class BufferOverflowException extends java.lang.RuntimeException { + ctor public BufferOverflowException(); + } + + public class BufferUnderflowException extends java.lang.RuntimeException { + ctor public BufferUnderflowException(); + } + + public abstract class ByteBuffer extends java.nio.Buffer implements java.lang.Comparable { + method public static java.nio.ByteBuffer allocate(int); + method public static java.nio.ByteBuffer allocateDirect(int); + method public final byte[] array(); + method public final int arrayOffset(); + method public abstract java.nio.CharBuffer asCharBuffer(); + method public abstract java.nio.DoubleBuffer asDoubleBuffer(); + method public abstract java.nio.FloatBuffer asFloatBuffer(); + method public abstract java.nio.IntBuffer asIntBuffer(); + method public abstract java.nio.LongBuffer asLongBuffer(); + method public abstract java.nio.ByteBuffer asReadOnlyBuffer(); + method public abstract java.nio.ShortBuffer asShortBuffer(); + method public abstract java.nio.ByteBuffer compact(); + method public int compareTo(java.nio.ByteBuffer); + method public abstract java.nio.ByteBuffer duplicate(); + method public abstract byte get(); + method public java.nio.ByteBuffer get(byte[]); + method public java.nio.ByteBuffer get(byte[], int, int); + method public abstract byte get(int); + method public abstract char getChar(); + method public abstract char getChar(int); + method public abstract double getDouble(); + method public abstract double getDouble(int); + method public abstract float getFloat(); + method public abstract float getFloat(int); + method public abstract int getInt(); + method public abstract int getInt(int); + method public abstract long getLong(); + method public abstract long getLong(int); + method public abstract short getShort(); + method public abstract short getShort(int); + method public final boolean hasArray(); + method public abstract boolean isDirect(); + method public final java.nio.ByteOrder order(); + method public final java.nio.ByteBuffer order(java.nio.ByteOrder); + method public abstract java.nio.ByteBuffer put(byte); + method public final java.nio.ByteBuffer put(byte[]); + method public java.nio.ByteBuffer put(byte[], int, int); + method public java.nio.ByteBuffer put(java.nio.ByteBuffer); + method public abstract java.nio.ByteBuffer put(int, byte); + method public abstract java.nio.ByteBuffer putChar(char); + method public abstract java.nio.ByteBuffer putChar(int, char); + method public abstract java.nio.ByteBuffer putDouble(double); + method public abstract java.nio.ByteBuffer putDouble(int, double); + method public abstract java.nio.ByteBuffer putFloat(float); + method public abstract java.nio.ByteBuffer putFloat(int, float); + method public abstract java.nio.ByteBuffer putInt(int); + method public abstract java.nio.ByteBuffer putInt(int, int); + method public abstract java.nio.ByteBuffer putLong(long); + method public abstract java.nio.ByteBuffer putLong(int, long); + method public abstract java.nio.ByteBuffer putShort(short); + method public abstract java.nio.ByteBuffer putShort(int, short); + method public abstract java.nio.ByteBuffer slice(); + method public static java.nio.ByteBuffer wrap(byte[]); + method public static java.nio.ByteBuffer wrap(byte[], int, int); + } + + public final class ByteOrder { + method public static java.nio.ByteOrder nativeOrder(); + field public static final java.nio.ByteOrder BIG_ENDIAN; + field public static final java.nio.ByteOrder LITTLE_ENDIAN; + } + + public abstract class CharBuffer extends java.nio.Buffer implements java.lang.Appendable java.lang.CharSequence java.lang.Comparable java.lang.Readable { + method public static java.nio.CharBuffer allocate(int); + method public java.nio.CharBuffer append(char); + method public java.nio.CharBuffer append(java.lang.CharSequence); + method public java.nio.CharBuffer append(java.lang.CharSequence, int, int); + method public final char[] array(); + method public final int arrayOffset(); + method public abstract java.nio.CharBuffer asReadOnlyBuffer(); + method public final char charAt(int); + method public abstract java.nio.CharBuffer compact(); + method public int compareTo(java.nio.CharBuffer); + method public abstract java.nio.CharBuffer duplicate(); + method public abstract char get(); + method public java.nio.CharBuffer get(char[]); + method public java.nio.CharBuffer get(char[], int, int); + method public abstract char get(int); + method public final boolean hasArray(); + method public abstract boolean isDirect(); + method public final int length(); + method public abstract java.nio.ByteOrder order(); + method public abstract java.nio.CharBuffer put(char); + method public final java.nio.CharBuffer put(char[]); + method public java.nio.CharBuffer put(char[], int, int); + method public java.nio.CharBuffer put(java.nio.CharBuffer); + method public abstract java.nio.CharBuffer put(int, char); + method public final java.nio.CharBuffer put(java.lang.String); + method public java.nio.CharBuffer put(java.lang.String, int, int); + method public int read(java.nio.CharBuffer) throws java.io.IOException; + method public abstract java.nio.CharBuffer slice(); + method public abstract java.nio.CharBuffer subSequence(int, int); + method public static java.nio.CharBuffer wrap(char[]); + method public static java.nio.CharBuffer wrap(char[], int, int); + method public static java.nio.CharBuffer wrap(java.lang.CharSequence); + method public static java.nio.CharBuffer wrap(java.lang.CharSequence, int, int); + } + + public abstract class DoubleBuffer extends java.nio.Buffer implements java.lang.Comparable { + method public static java.nio.DoubleBuffer allocate(int); + method public final double[] array(); + method public final int arrayOffset(); + method public abstract java.nio.DoubleBuffer asReadOnlyBuffer(); + method public abstract java.nio.DoubleBuffer compact(); + method public int compareTo(java.nio.DoubleBuffer); + method public abstract java.nio.DoubleBuffer duplicate(); + method public abstract double get(); + method public java.nio.DoubleBuffer get(double[]); + method public java.nio.DoubleBuffer get(double[], int, int); + method public abstract double get(int); + method public final boolean hasArray(); + method public abstract boolean isDirect(); + method public abstract java.nio.ByteOrder order(); + method public abstract java.nio.DoubleBuffer put(double); + method public final java.nio.DoubleBuffer put(double[]); + method public java.nio.DoubleBuffer put(double[], int, int); + method public java.nio.DoubleBuffer put(java.nio.DoubleBuffer); + method public abstract java.nio.DoubleBuffer put(int, double); + method public abstract java.nio.DoubleBuffer slice(); + method public static java.nio.DoubleBuffer wrap(double[]); + method public static java.nio.DoubleBuffer wrap(double[], int, int); + } + + public abstract class FloatBuffer extends java.nio.Buffer implements java.lang.Comparable { + method public static java.nio.FloatBuffer allocate(int); + method public final float[] array(); + method public final int arrayOffset(); + method public abstract java.nio.FloatBuffer asReadOnlyBuffer(); + method public abstract java.nio.FloatBuffer compact(); + method public int compareTo(java.nio.FloatBuffer); + method public abstract java.nio.FloatBuffer duplicate(); + method public abstract float get(); + method public java.nio.FloatBuffer get(float[]); + method public java.nio.FloatBuffer get(float[], int, int); + method public abstract float get(int); + method public final boolean hasArray(); + method public abstract boolean isDirect(); + method public abstract java.nio.ByteOrder order(); + method public abstract java.nio.FloatBuffer put(float); + method public final java.nio.FloatBuffer put(float[]); + method public java.nio.FloatBuffer put(float[], int, int); + method public java.nio.FloatBuffer put(java.nio.FloatBuffer); + method public abstract java.nio.FloatBuffer put(int, float); + method public abstract java.nio.FloatBuffer slice(); + method public static java.nio.FloatBuffer wrap(float[]); + method public static java.nio.FloatBuffer wrap(float[], int, int); + } + + public abstract class IntBuffer extends java.nio.Buffer implements java.lang.Comparable { + method public static java.nio.IntBuffer allocate(int); + method public final int[] array(); + method public final int arrayOffset(); + method public abstract java.nio.IntBuffer asReadOnlyBuffer(); + method public abstract java.nio.IntBuffer compact(); + method public int compareTo(java.nio.IntBuffer); + method public abstract java.nio.IntBuffer duplicate(); + method public abstract int get(); + method public java.nio.IntBuffer get(int[]); + method public java.nio.IntBuffer get(int[], int, int); + method public abstract int get(int); + method public final boolean hasArray(); + method public abstract boolean isDirect(); + method public abstract java.nio.ByteOrder order(); + method public abstract java.nio.IntBuffer put(int); + method public final java.nio.IntBuffer put(int[]); + method public java.nio.IntBuffer put(int[], int, int); + method public java.nio.IntBuffer put(java.nio.IntBuffer); + method public abstract java.nio.IntBuffer put(int, int); + method public abstract java.nio.IntBuffer slice(); + method public static java.nio.IntBuffer wrap(int[]); + method public static java.nio.IntBuffer wrap(int[], int, int); + } + + public class InvalidMarkException extends java.lang.IllegalStateException { + ctor public InvalidMarkException(); + } + + public abstract class LongBuffer extends java.nio.Buffer implements java.lang.Comparable { + method public static java.nio.LongBuffer allocate(int); + method public final long[] array(); + method public final int arrayOffset(); + method public abstract java.nio.LongBuffer asReadOnlyBuffer(); + method public abstract java.nio.LongBuffer compact(); + method public int compareTo(java.nio.LongBuffer); + method public abstract java.nio.LongBuffer duplicate(); + method public abstract long get(); + method public java.nio.LongBuffer get(long[]); + method public java.nio.LongBuffer get(long[], int, int); + method public abstract long get(int); + method public final boolean hasArray(); + method public abstract boolean isDirect(); + method public abstract java.nio.ByteOrder order(); + method public abstract java.nio.LongBuffer put(long); + method public final java.nio.LongBuffer put(long[]); + method public java.nio.LongBuffer put(long[], int, int); + method public java.nio.LongBuffer put(java.nio.LongBuffer); + method public abstract java.nio.LongBuffer put(int, long); + method public abstract java.nio.LongBuffer slice(); + method public static java.nio.LongBuffer wrap(long[]); + method public static java.nio.LongBuffer wrap(long[], int, int); + } + + public abstract class MappedByteBuffer extends java.nio.ByteBuffer { + method public final java.nio.MappedByteBuffer force(); + method public final boolean isLoaded(); + method public final java.nio.MappedByteBuffer load(); + } + + public class ReadOnlyBufferException extends java.lang.UnsupportedOperationException { + ctor public ReadOnlyBufferException(); + } + + public abstract class ShortBuffer extends java.nio.Buffer implements java.lang.Comparable { + method public static java.nio.ShortBuffer allocate(int); + method public final short[] array(); + method public final int arrayOffset(); + method public abstract java.nio.ShortBuffer asReadOnlyBuffer(); + method public abstract java.nio.ShortBuffer compact(); + method public int compareTo(java.nio.ShortBuffer); + method public abstract java.nio.ShortBuffer duplicate(); + method public abstract short get(); + method public java.nio.ShortBuffer get(short[]); + method public java.nio.ShortBuffer get(short[], int, int); + method public abstract short get(int); + method public final boolean hasArray(); + method public abstract boolean isDirect(); + method public abstract java.nio.ByteOrder order(); + method public abstract java.nio.ShortBuffer put(short); + method public final java.nio.ShortBuffer put(short[]); + method public java.nio.ShortBuffer put(short[], int, int); + method public java.nio.ShortBuffer put(java.nio.ShortBuffer); + method public abstract java.nio.ShortBuffer put(int, short); + method public abstract java.nio.ShortBuffer slice(); + method public static java.nio.ShortBuffer wrap(short[]); + method public static java.nio.ShortBuffer wrap(short[], int, int); + } + +} + +package java.nio.channels { + + public class AlreadyConnectedException extends java.lang.IllegalStateException { + ctor public AlreadyConnectedException(); + } + + public class AsynchronousCloseException extends java.nio.channels.ClosedChannelException { + ctor public AsynchronousCloseException(); + } + + public abstract interface ByteChannel implements java.nio.channels.ReadableByteChannel java.nio.channels.WritableByteChannel { + } + + public class CancelledKeyException extends java.lang.IllegalStateException { + ctor public CancelledKeyException(); + } + + public abstract interface Channel implements java.io.Closeable { + method public abstract void close() throws java.io.IOException; + method public abstract boolean isOpen(); + } + + public final class Channels { + method public static java.nio.channels.ReadableByteChannel newChannel(java.io.InputStream); + method public static java.nio.channels.WritableByteChannel newChannel(java.io.OutputStream); + method public static java.io.InputStream newInputStream(java.nio.channels.ReadableByteChannel); + method public static java.io.OutputStream newOutputStream(java.nio.channels.WritableByteChannel); + method public static java.io.Reader newReader(java.nio.channels.ReadableByteChannel, java.nio.charset.CharsetDecoder, int); + method public static java.io.Reader newReader(java.nio.channels.ReadableByteChannel, java.lang.String); + method public static java.io.Writer newWriter(java.nio.channels.WritableByteChannel, java.nio.charset.CharsetEncoder, int); + method public static java.io.Writer newWriter(java.nio.channels.WritableByteChannel, java.lang.String); + } + + public class ClosedByInterruptException extends java.nio.channels.AsynchronousCloseException { + ctor public ClosedByInterruptException(); + } + + public class ClosedChannelException extends java.io.IOException { + ctor public ClosedChannelException(); + } + + public class ClosedSelectorException extends java.lang.IllegalStateException { + ctor public ClosedSelectorException(); + } + + public class ConnectionPendingException extends java.lang.IllegalStateException { + ctor public ConnectionPendingException(); + } + + public abstract class DatagramChannel extends java.nio.channels.spi.AbstractSelectableChannel implements java.nio.channels.ByteChannel java.nio.channels.GatheringByteChannel java.nio.channels.ScatteringByteChannel { + ctor protected DatagramChannel(java.nio.channels.spi.SelectorProvider); + method public abstract java.nio.channels.DatagramChannel connect(java.net.SocketAddress) throws java.io.IOException; + method public abstract java.nio.channels.DatagramChannel disconnect() throws java.io.IOException; + method public abstract boolean isConnected(); + method public static java.nio.channels.DatagramChannel open() throws java.io.IOException; + method public abstract int read(java.nio.ByteBuffer) throws java.io.IOException; + method public abstract long read(java.nio.ByteBuffer[], int, int) throws java.io.IOException; + method public final synchronized long read(java.nio.ByteBuffer[]) throws java.io.IOException; + method public abstract java.net.SocketAddress receive(java.nio.ByteBuffer) throws java.io.IOException; + method public abstract int send(java.nio.ByteBuffer, java.net.SocketAddress) throws java.io.IOException; + method public abstract java.net.DatagramSocket socket(); + method public final int validOps(); + method public abstract int write(java.nio.ByteBuffer) throws java.io.IOException; + method public abstract long write(java.nio.ByteBuffer[], int, int) throws java.io.IOException; + method public final synchronized long write(java.nio.ByteBuffer[]) throws java.io.IOException; + } + + public abstract class FileChannel extends java.nio.channels.spi.AbstractInterruptibleChannel implements java.nio.channels.ByteChannel java.nio.channels.GatheringByteChannel java.nio.channels.ScatteringByteChannel { + ctor protected FileChannel(); + method public abstract void force(boolean) throws java.io.IOException; + method public final java.nio.channels.FileLock lock() throws java.io.IOException; + method public abstract java.nio.channels.FileLock lock(long, long, boolean) throws java.io.IOException; + method public abstract java.nio.MappedByteBuffer map(java.nio.channels.FileChannel.MapMode, long, long) throws java.io.IOException; + method public abstract long position() throws java.io.IOException; + method public abstract java.nio.channels.FileChannel position(long) throws java.io.IOException; + method public abstract int read(java.nio.ByteBuffer) throws java.io.IOException; + method public abstract int read(java.nio.ByteBuffer, long) throws java.io.IOException; + method public final long read(java.nio.ByteBuffer[]) throws java.io.IOException; + method public abstract long read(java.nio.ByteBuffer[], int, int) throws java.io.IOException; + method public abstract long size() throws java.io.IOException; + method public abstract long transferFrom(java.nio.channels.ReadableByteChannel, long, long) throws java.io.IOException; + method public abstract long transferTo(long, long, java.nio.channels.WritableByteChannel) throws java.io.IOException; + method public abstract java.nio.channels.FileChannel truncate(long) throws java.io.IOException; + method public final java.nio.channels.FileLock tryLock() throws java.io.IOException; + method public abstract java.nio.channels.FileLock tryLock(long, long, boolean) throws java.io.IOException; + method public abstract int write(java.nio.ByteBuffer) throws java.io.IOException; + method public abstract int write(java.nio.ByteBuffer, long) throws java.io.IOException; + method public final long write(java.nio.ByteBuffer[]) throws java.io.IOException; + method public abstract long write(java.nio.ByteBuffer[], int, int) throws java.io.IOException; + } + + public static class FileChannel.MapMode { + field public static final java.nio.channels.FileChannel.MapMode PRIVATE; + field public static final java.nio.channels.FileChannel.MapMode READ_ONLY; + field public static final java.nio.channels.FileChannel.MapMode READ_WRITE; + } + + public abstract class FileLock implements java.lang.AutoCloseable { + ctor protected FileLock(java.nio.channels.FileChannel, long, long, boolean); + method public final java.nio.channels.FileChannel channel(); + method public final void close() throws java.io.IOException; + method public final boolean isShared(); + method public abstract boolean isValid(); + method public final boolean overlaps(long, long); + method public final long position(); + method public abstract void release() throws java.io.IOException; + method public final long size(); + method public final java.lang.String toString(); + } + + public class FileLockInterruptionException extends java.io.IOException { + ctor public FileLockInterruptionException(); + } + + public abstract interface GatheringByteChannel implements java.nio.channels.WritableByteChannel { + method public abstract long write(java.nio.ByteBuffer[]) throws java.io.IOException; + method public abstract long write(java.nio.ByteBuffer[], int, int) throws java.io.IOException; + } + + public class IllegalBlockingModeException extends java.lang.IllegalStateException { + ctor public IllegalBlockingModeException(); + } + + public class IllegalSelectorException extends java.lang.IllegalArgumentException { + ctor public IllegalSelectorException(); + } + + public abstract interface InterruptibleChannel implements java.nio.channels.Channel { + method public abstract void close() throws java.io.IOException; + } + + public class NoConnectionPendingException extends java.lang.IllegalStateException { + ctor public NoConnectionPendingException(); + } + + public class NonReadableChannelException extends java.lang.IllegalStateException { + ctor public NonReadableChannelException(); + } + + public class NonWritableChannelException extends java.lang.IllegalStateException { + ctor public NonWritableChannelException(); + } + + public class NotYetBoundException extends java.lang.IllegalStateException { + ctor public NotYetBoundException(); + } + + public class NotYetConnectedException extends java.lang.IllegalStateException { + ctor public NotYetConnectedException(); + } + + public class OverlappingFileLockException extends java.lang.IllegalStateException { + ctor public OverlappingFileLockException(); + } + + public abstract class Pipe { + ctor protected Pipe(); + method public static java.nio.channels.Pipe open() throws java.io.IOException; + method public abstract java.nio.channels.Pipe.SinkChannel sink(); + method public abstract java.nio.channels.Pipe.SourceChannel source(); + } + + public static abstract class Pipe.SinkChannel extends java.nio.channels.spi.AbstractSelectableChannel implements java.nio.channels.GatheringByteChannel java.nio.channels.WritableByteChannel { + ctor protected Pipe.SinkChannel(java.nio.channels.spi.SelectorProvider); + method public final int validOps(); + } + + public static abstract class Pipe.SourceChannel extends java.nio.channels.spi.AbstractSelectableChannel implements java.nio.channels.ReadableByteChannel java.nio.channels.ScatteringByteChannel { + ctor protected Pipe.SourceChannel(java.nio.channels.spi.SelectorProvider); + method public final int validOps(); + } + + public abstract interface ReadableByteChannel implements java.nio.channels.Channel { + method public abstract int read(java.nio.ByteBuffer) throws java.io.IOException; + } + + public abstract interface ScatteringByteChannel implements java.nio.channels.ReadableByteChannel { + method public abstract long read(java.nio.ByteBuffer[]) throws java.io.IOException; + method public abstract long read(java.nio.ByteBuffer[], int, int) throws java.io.IOException; + } + + public abstract class SelectableChannel extends java.nio.channels.spi.AbstractInterruptibleChannel implements java.nio.channels.Channel { + ctor protected SelectableChannel(); + method public abstract java.lang.Object blockingLock(); + method public abstract java.nio.channels.SelectableChannel configureBlocking(boolean) throws java.io.IOException; + method public abstract boolean isBlocking(); + method public abstract boolean isRegistered(); + method public abstract java.nio.channels.SelectionKey keyFor(java.nio.channels.Selector); + method public abstract java.nio.channels.spi.SelectorProvider provider(); + method public final java.nio.channels.SelectionKey register(java.nio.channels.Selector, int) throws java.nio.channels.ClosedChannelException; + method public abstract java.nio.channels.SelectionKey register(java.nio.channels.Selector, int, java.lang.Object) throws java.nio.channels.ClosedChannelException; + method public abstract int validOps(); + } + + public abstract class SelectionKey { + ctor protected SelectionKey(); + method public final java.lang.Object attach(java.lang.Object); + method public final java.lang.Object attachment(); + method public abstract void cancel(); + method public abstract java.nio.channels.SelectableChannel channel(); + method public abstract int interestOps(); + method public abstract java.nio.channels.SelectionKey interestOps(int); + method public final boolean isAcceptable(); + method public final boolean isConnectable(); + method public final boolean isReadable(); + method public abstract boolean isValid(); + method public final boolean isWritable(); + method public abstract int readyOps(); + method public abstract java.nio.channels.Selector selector(); + field public static final int OP_ACCEPT = 16; // 0x10 + field public static final int OP_CONNECT = 8; // 0x8 + field public static final int OP_READ = 1; // 0x1 + field public static final int OP_WRITE = 4; // 0x4 + } + + public abstract class Selector implements java.io.Closeable { + ctor protected Selector(); + method public abstract void close() throws java.io.IOException; + method public abstract boolean isOpen(); + method public abstract java.util.Set keys(); + method public static java.nio.channels.Selector open() throws java.io.IOException; + method public abstract java.nio.channels.spi.SelectorProvider provider(); + method public abstract int select() throws java.io.IOException; + method public abstract int select(long) throws java.io.IOException; + method public abstract int selectNow() throws java.io.IOException; + method public abstract java.util.Set selectedKeys(); + method public abstract java.nio.channels.Selector wakeup(); + } + + public abstract class ServerSocketChannel extends java.nio.channels.spi.AbstractSelectableChannel { + ctor protected ServerSocketChannel(java.nio.channels.spi.SelectorProvider); + method public abstract java.nio.channels.SocketChannel accept() throws java.io.IOException; + method public static java.nio.channels.ServerSocketChannel open() throws java.io.IOException; + method public abstract java.net.ServerSocket socket(); + method public final int validOps(); + } + + public abstract class SocketChannel extends java.nio.channels.spi.AbstractSelectableChannel implements java.nio.channels.ByteChannel java.nio.channels.GatheringByteChannel java.nio.channels.ScatteringByteChannel { + ctor protected SocketChannel(java.nio.channels.spi.SelectorProvider); + method public abstract boolean connect(java.net.SocketAddress) throws java.io.IOException; + method public abstract boolean finishConnect() throws java.io.IOException; + method public abstract boolean isConnected(); + method public abstract boolean isConnectionPending(); + method public static java.nio.channels.SocketChannel open() throws java.io.IOException; + method public static java.nio.channels.SocketChannel open(java.net.SocketAddress) throws java.io.IOException; + method public abstract int read(java.nio.ByteBuffer) throws java.io.IOException; + method public abstract long read(java.nio.ByteBuffer[], int, int) throws java.io.IOException; + method public final synchronized long read(java.nio.ByteBuffer[]) throws java.io.IOException; + method public abstract java.net.Socket socket(); + method public final int validOps(); + method public abstract int write(java.nio.ByteBuffer) throws java.io.IOException; + method public abstract long write(java.nio.ByteBuffer[], int, int) throws java.io.IOException; + method public final synchronized long write(java.nio.ByteBuffer[]) throws java.io.IOException; + } + + public class UnresolvedAddressException extends java.lang.IllegalArgumentException { + ctor public UnresolvedAddressException(); + } + + public class UnsupportedAddressTypeException extends java.lang.IllegalArgumentException { + ctor public UnsupportedAddressTypeException(); + } + + public abstract interface WritableByteChannel implements java.nio.channels.Channel { + method public abstract int write(java.nio.ByteBuffer) throws java.io.IOException; + } + +} + +package java.nio.channels.spi { + + public abstract class AbstractInterruptibleChannel implements java.nio.channels.Channel java.nio.channels.InterruptibleChannel { + ctor protected AbstractInterruptibleChannel(); + method protected final void begin(); + method public final void close() throws java.io.IOException; + method protected final void end(boolean) throws java.nio.channels.AsynchronousCloseException; + method protected abstract void implCloseChannel() throws java.io.IOException; + method public final synchronized boolean isOpen(); + } + + public abstract class AbstractSelectableChannel extends java.nio.channels.SelectableChannel { + ctor protected AbstractSelectableChannel(java.nio.channels.spi.SelectorProvider); + method public final java.lang.Object blockingLock(); + method public final java.nio.channels.SelectableChannel configureBlocking(boolean) throws java.io.IOException; + method protected final synchronized void implCloseChannel() throws java.io.IOException; + method protected abstract void implCloseSelectableChannel() throws java.io.IOException; + method protected abstract void implConfigureBlocking(boolean) throws java.io.IOException; + method public final boolean isBlocking(); + method public final synchronized boolean isRegistered(); + method public final synchronized java.nio.channels.SelectionKey keyFor(java.nio.channels.Selector); + method public final java.nio.channels.spi.SelectorProvider provider(); + method public final java.nio.channels.SelectionKey register(java.nio.channels.Selector, int, java.lang.Object) throws java.nio.channels.ClosedChannelException; + } + + public abstract class AbstractSelectionKey extends java.nio.channels.SelectionKey { + ctor protected AbstractSelectionKey(); + method public final void cancel(); + method public final boolean isValid(); + } + + public abstract class AbstractSelector extends java.nio.channels.Selector { + ctor protected AbstractSelector(java.nio.channels.spi.SelectorProvider); + method protected final void begin(); + method protected final java.util.Set cancelledKeys(); + method public final void close() throws java.io.IOException; + method protected final void deregister(java.nio.channels.spi.AbstractSelectionKey); + method protected final void end(); + method protected abstract void implCloseSelector() throws java.io.IOException; + method public final boolean isOpen(); + method public final java.nio.channels.spi.SelectorProvider provider(); + method protected abstract java.nio.channels.SelectionKey register(java.nio.channels.spi.AbstractSelectableChannel, int, java.lang.Object); + } + + public abstract class SelectorProvider { + ctor protected SelectorProvider(); + method public java.nio.channels.Channel inheritedChannel() throws java.io.IOException; + method public abstract java.nio.channels.DatagramChannel openDatagramChannel() throws java.io.IOException; + method public abstract java.nio.channels.Pipe openPipe() throws java.io.IOException; + method public abstract java.nio.channels.spi.AbstractSelector openSelector() throws java.io.IOException; + method public abstract java.nio.channels.ServerSocketChannel openServerSocketChannel() throws java.io.IOException; + method public abstract java.nio.channels.SocketChannel openSocketChannel() throws java.io.IOException; + method public static synchronized java.nio.channels.spi.SelectorProvider provider(); + } + +} + +package java.nio.charset { + + public class CharacterCodingException extends java.io.IOException { + ctor public CharacterCodingException(); + } + + public abstract class Charset implements java.lang.Comparable { + ctor protected Charset(java.lang.String, java.lang.String[]); + method public final java.util.Set aliases(); + method public static java.util.SortedMap availableCharsets(); + method public boolean canEncode(); + method public final int compareTo(java.nio.charset.Charset); + method public abstract boolean contains(java.nio.charset.Charset); + method public final java.nio.CharBuffer decode(java.nio.ByteBuffer); + method public static java.nio.charset.Charset defaultCharset(); + method public java.lang.String displayName(); + method public java.lang.String displayName(java.util.Locale); + method public final java.nio.ByteBuffer encode(java.nio.CharBuffer); + method public final java.nio.ByteBuffer encode(java.lang.String); + method public final boolean equals(java.lang.Object); + method public static java.nio.charset.Charset forName(java.lang.String); + method public final int hashCode(); + method public final boolean isRegistered(); + method public static boolean isSupported(java.lang.String); + method public final java.lang.String name(); + method public abstract java.nio.charset.CharsetDecoder newDecoder(); + method public abstract java.nio.charset.CharsetEncoder newEncoder(); + method public final java.lang.String toString(); + } + + public abstract class CharsetDecoder { + ctor protected CharsetDecoder(java.nio.charset.Charset, float, float); + method public final float averageCharsPerByte(); + method public final java.nio.charset.Charset charset(); + method public final java.nio.CharBuffer decode(java.nio.ByteBuffer) throws java.nio.charset.CharacterCodingException; + method public final java.nio.charset.CoderResult decode(java.nio.ByteBuffer, java.nio.CharBuffer, boolean); + method protected abstract java.nio.charset.CoderResult decodeLoop(java.nio.ByteBuffer, java.nio.CharBuffer); + method public java.nio.charset.Charset detectedCharset(); + method public final java.nio.charset.CoderResult flush(java.nio.CharBuffer); + method protected java.nio.charset.CoderResult implFlush(java.nio.CharBuffer); + method protected void implOnMalformedInput(java.nio.charset.CodingErrorAction); + method protected void implOnUnmappableCharacter(java.nio.charset.CodingErrorAction); + method protected void implReplaceWith(java.lang.String); + method protected void implReset(); + method public boolean isAutoDetecting(); + method public boolean isCharsetDetected(); + method public java.nio.charset.CodingErrorAction malformedInputAction(); + method public final float maxCharsPerByte(); + method public final java.nio.charset.CharsetDecoder onMalformedInput(java.nio.charset.CodingErrorAction); + method public final java.nio.charset.CharsetDecoder onUnmappableCharacter(java.nio.charset.CodingErrorAction); + method public final java.nio.charset.CharsetDecoder replaceWith(java.lang.String); + method public final java.lang.String replacement(); + method public final java.nio.charset.CharsetDecoder reset(); + method public java.nio.charset.CodingErrorAction unmappableCharacterAction(); + } + + public abstract class CharsetEncoder { + ctor protected CharsetEncoder(java.nio.charset.Charset, float, float); + ctor protected CharsetEncoder(java.nio.charset.Charset, float, float, byte[]); + method public final float averageBytesPerChar(); + method public boolean canEncode(char); + method public boolean canEncode(java.lang.CharSequence); + method public final java.nio.charset.Charset charset(); + method public final java.nio.ByteBuffer encode(java.nio.CharBuffer) throws java.nio.charset.CharacterCodingException; + method public final java.nio.charset.CoderResult encode(java.nio.CharBuffer, java.nio.ByteBuffer, boolean); + method protected abstract java.nio.charset.CoderResult encodeLoop(java.nio.CharBuffer, java.nio.ByteBuffer); + method public final java.nio.charset.CoderResult flush(java.nio.ByteBuffer); + method protected java.nio.charset.CoderResult implFlush(java.nio.ByteBuffer); + method protected void implOnMalformedInput(java.nio.charset.CodingErrorAction); + method protected void implOnUnmappableCharacter(java.nio.charset.CodingErrorAction); + method protected void implReplaceWith(byte[]); + method protected void implReset(); + method public boolean isLegalReplacement(byte[]); + method public java.nio.charset.CodingErrorAction malformedInputAction(); + method public final float maxBytesPerChar(); + method public final java.nio.charset.CharsetEncoder onMalformedInput(java.nio.charset.CodingErrorAction); + method public final java.nio.charset.CharsetEncoder onUnmappableCharacter(java.nio.charset.CodingErrorAction); + method public final java.nio.charset.CharsetEncoder replaceWith(byte[]); + method public final byte[] replacement(); + method public final java.nio.charset.CharsetEncoder reset(); + method public java.nio.charset.CodingErrorAction unmappableCharacterAction(); + } + + public class CoderMalfunctionError extends java.lang.Error { + ctor public CoderMalfunctionError(java.lang.Exception); + } + + public class CoderResult { + method public boolean isError(); + method public boolean isMalformed(); + method public boolean isOverflow(); + method public boolean isUnderflow(); + method public boolean isUnmappable(); + method public int length() throws java.lang.UnsupportedOperationException; + method public static synchronized java.nio.charset.CoderResult malformedForLength(int) throws java.lang.IllegalArgumentException; + method public void throwException() throws java.nio.BufferOverflowException, java.nio.BufferUnderflowException, java.nio.charset.CharacterCodingException, java.nio.charset.MalformedInputException, java.nio.charset.UnmappableCharacterException; + method public static synchronized java.nio.charset.CoderResult unmappableForLength(int) throws java.lang.IllegalArgumentException; + field public static final java.nio.charset.CoderResult OVERFLOW; + field public static final java.nio.charset.CoderResult UNDERFLOW; + } + + public class CodingErrorAction { + field public static final java.nio.charset.CodingErrorAction IGNORE; + field public static final java.nio.charset.CodingErrorAction REPLACE; + field public static final java.nio.charset.CodingErrorAction REPORT; + } + + public class IllegalCharsetNameException extends java.lang.IllegalArgumentException { + ctor public IllegalCharsetNameException(java.lang.String); + method public java.lang.String getCharsetName(); + } + + public class MalformedInputException extends java.nio.charset.CharacterCodingException { + ctor public MalformedInputException(int); + method public int getInputLength(); + } + + public final class StandardCharsets { + field public static final java.nio.charset.Charset ISO_8859_1; + field public static final java.nio.charset.Charset US_ASCII; + field public static final java.nio.charset.Charset UTF_16; + field public static final java.nio.charset.Charset UTF_16BE; + field public static final java.nio.charset.Charset UTF_16LE; + field public static final java.nio.charset.Charset UTF_8; + } + + public class UnmappableCharacterException extends java.nio.charset.CharacterCodingException { + ctor public UnmappableCharacterException(int); + method public int getInputLength(); + } + + public class UnsupportedCharsetException extends java.lang.IllegalArgumentException { + ctor public UnsupportedCharsetException(java.lang.String); + method public java.lang.String getCharsetName(); + } + +} + +package java.nio.charset.spi { + + public abstract class CharsetProvider { + ctor protected CharsetProvider(); + method public abstract java.nio.charset.Charset charsetForName(java.lang.String); + method public abstract java.util.Iterator charsets(); + } + +} + +package java.security { + + public final class AccessControlContext { + ctor public AccessControlContext(java.security.AccessControlContext, java.security.DomainCombiner); + ctor public AccessControlContext(java.security.ProtectionDomain[]); + method public void checkPermission(java.security.Permission) throws java.security.AccessControlException; + method public java.security.DomainCombiner getDomainCombiner(); + } + + public class AccessControlException extends java.lang.SecurityException { + ctor public AccessControlException(java.lang.String); + ctor public AccessControlException(java.lang.String, java.security.Permission); + method public java.security.Permission getPermission(); + } + + public final class AccessController { + method public static void checkPermission(java.security.Permission) throws java.security.AccessControlException; + method public static T doPrivileged(java.security.PrivilegedAction); + method public static T doPrivileged(java.security.PrivilegedAction, java.security.AccessControlContext); + method public static T doPrivileged(java.security.PrivilegedExceptionAction) throws java.security.PrivilegedActionException; + method public static T doPrivileged(java.security.PrivilegedExceptionAction, java.security.AccessControlContext) throws java.security.PrivilegedActionException; + method public static T doPrivilegedWithCombiner(java.security.PrivilegedAction); + method public static T doPrivilegedWithCombiner(java.security.PrivilegedExceptionAction) throws java.security.PrivilegedActionException; + method public static java.security.AccessControlContext getContext(); + } + + public class AlgorithmParameterGenerator { + ctor protected AlgorithmParameterGenerator(java.security.AlgorithmParameterGeneratorSpi, java.security.Provider, java.lang.String); + method public final java.security.AlgorithmParameters generateParameters(); + method public final java.lang.String getAlgorithm(); + method public static java.security.AlgorithmParameterGenerator getInstance(java.lang.String) throws java.security.NoSuchAlgorithmException; + method public static java.security.AlgorithmParameterGenerator getInstance(java.lang.String, java.lang.String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException; + method public static java.security.AlgorithmParameterGenerator getInstance(java.lang.String, java.security.Provider) throws java.security.NoSuchAlgorithmException; + method public final java.security.Provider getProvider(); + method public final void init(int); + method public final void init(int, java.security.SecureRandom); + method public final void init(java.security.spec.AlgorithmParameterSpec) throws java.security.InvalidAlgorithmParameterException; + method public final void init(java.security.spec.AlgorithmParameterSpec, java.security.SecureRandom) throws java.security.InvalidAlgorithmParameterException; + } + + public abstract class AlgorithmParameterGeneratorSpi { + ctor public AlgorithmParameterGeneratorSpi(); + method protected abstract java.security.AlgorithmParameters engineGenerateParameters(); + method protected abstract void engineInit(int, java.security.SecureRandom); + method protected abstract void engineInit(java.security.spec.AlgorithmParameterSpec, java.security.SecureRandom) throws java.security.InvalidAlgorithmParameterException; + } + + public class AlgorithmParameters { + ctor protected AlgorithmParameters(java.security.AlgorithmParametersSpi, java.security.Provider, java.lang.String); + method public final java.lang.String getAlgorithm(); + method public final byte[] getEncoded() throws java.io.IOException; + method public final byte[] getEncoded(java.lang.String) throws java.io.IOException; + method public static java.security.AlgorithmParameters getInstance(java.lang.String) throws java.security.NoSuchAlgorithmException; + method public static java.security.AlgorithmParameters getInstance(java.lang.String, java.lang.String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException; + method public static java.security.AlgorithmParameters getInstance(java.lang.String, java.security.Provider) throws java.security.NoSuchAlgorithmException; + method public final T getParameterSpec(java.lang.Class) throws java.security.spec.InvalidParameterSpecException; + method public final java.security.Provider getProvider(); + method public final void init(java.security.spec.AlgorithmParameterSpec) throws java.security.spec.InvalidParameterSpecException; + method public final void init(byte[]) throws java.io.IOException; + method public final void init(byte[], java.lang.String) throws java.io.IOException; + method public final java.lang.String toString(); + } + + public abstract class AlgorithmParametersSpi { + ctor public AlgorithmParametersSpi(); + method protected abstract byte[] engineGetEncoded() throws java.io.IOException; + method protected abstract byte[] engineGetEncoded(java.lang.String) throws java.io.IOException; + method protected abstract T engineGetParameterSpec(java.lang.Class) throws java.security.spec.InvalidParameterSpecException; + method protected abstract void engineInit(java.security.spec.AlgorithmParameterSpec) throws java.security.spec.InvalidParameterSpecException; + method protected abstract void engineInit(byte[]) throws java.io.IOException; + method protected abstract void engineInit(byte[], java.lang.String) throws java.io.IOException; + method protected abstract java.lang.String engineToString(); + } + + public final class AllPermission extends java.security.Permission { + ctor public AllPermission(java.lang.String, java.lang.String); + ctor public AllPermission(); + method public java.lang.String getActions(); + method public boolean implies(java.security.Permission); + } + + public abstract class AuthProvider extends java.security.Provider { + ctor protected AuthProvider(java.lang.String, double, java.lang.String); + method public abstract void login(javax.security.auth.Subject, javax.security.auth.callback.CallbackHandler) throws javax.security.auth.login.LoginException; + method public abstract void logout() throws javax.security.auth.login.LoginException; + method public abstract void setCallbackHandler(javax.security.auth.callback.CallbackHandler); + } + + public abstract class BasicPermission extends java.security.Permission implements java.io.Serializable { + ctor public BasicPermission(java.lang.String); + ctor public BasicPermission(java.lang.String, java.lang.String); + method public java.lang.String getActions(); + method public boolean implies(java.security.Permission); + } + + public abstract deprecated interface Certificate { + method public abstract void decode(java.io.InputStream) throws java.io.IOException, java.security.KeyException; + method public abstract void encode(java.io.OutputStream) throws java.io.IOException, java.security.KeyException; + method public abstract java.lang.String getFormat(); + method public abstract java.security.Principal getGuarantor(); + method public abstract java.security.Principal getPrincipal(); + method public abstract java.security.PublicKey getPublicKey(); + method public abstract java.lang.String toString(boolean); + } + + public final class CodeSigner implements java.io.Serializable { + ctor public CodeSigner(java.security.cert.CertPath, java.security.Timestamp); + method public java.security.cert.CertPath getSignerCertPath(); + method public java.security.Timestamp getTimestamp(); + } + + public class CodeSource implements java.io.Serializable { + ctor public CodeSource(java.net.URL, java.security.cert.Certificate[]); + ctor public CodeSource(java.net.URL, java.security.CodeSigner[]); + method public final java.security.cert.Certificate[] getCertificates(); + method public final java.security.CodeSigner[] getCodeSigners(); + method public final java.net.URL getLocation(); + method public boolean implies(java.security.CodeSource); + } + + public class DigestException extends java.security.GeneralSecurityException { + ctor public DigestException(java.lang.String); + ctor public DigestException(); + ctor public DigestException(java.lang.String, java.lang.Throwable); + ctor public DigestException(java.lang.Throwable); + } + + public class DigestInputStream extends java.io.FilterInputStream { + ctor public DigestInputStream(java.io.InputStream, java.security.MessageDigest); + method public java.security.MessageDigest getMessageDigest(); + method public void on(boolean); + method public void setMessageDigest(java.security.MessageDigest); + field protected java.security.MessageDigest digest; + } + + public class DigestOutputStream extends java.io.FilterOutputStream { + ctor public DigestOutputStream(java.io.OutputStream, java.security.MessageDigest); + method public java.security.MessageDigest getMessageDigest(); + method public void on(boolean); + method public void setMessageDigest(java.security.MessageDigest); + field protected java.security.MessageDigest digest; + } + + public abstract interface DomainCombiner { + method public abstract java.security.ProtectionDomain[] combine(java.security.ProtectionDomain[], java.security.ProtectionDomain[]); + } + + public class GeneralSecurityException extends java.lang.Exception { + ctor public GeneralSecurityException(java.lang.String); + ctor public GeneralSecurityException(); + ctor public GeneralSecurityException(java.lang.String, java.lang.Throwable); + ctor public GeneralSecurityException(java.lang.Throwable); + } + + public abstract interface Guard { + method public abstract void checkGuard(java.lang.Object) throws java.lang.SecurityException; + } + + public class GuardedObject implements java.io.Serializable { + ctor public GuardedObject(java.lang.Object, java.security.Guard); + method public java.lang.Object getObject() throws java.lang.SecurityException; + } + + public abstract deprecated class Identity implements java.security.Principal java.io.Serializable { + ctor protected Identity(); + ctor public Identity(java.lang.String); + ctor public Identity(java.lang.String, java.security.IdentityScope) throws java.security.KeyManagementException; + method public void addCertificate(java.security.Certificate) throws java.security.KeyManagementException; + method public java.security.Certificate[] certificates(); + method public final boolean equals(java.lang.Object); + method public java.lang.String getInfo(); + method public final java.lang.String getName(); + method public java.security.PublicKey getPublicKey(); + method public final java.security.IdentityScope getScope(); + method protected boolean identityEquals(java.security.Identity); + method public void removeCertificate(java.security.Certificate) throws java.security.KeyManagementException; + method public void setInfo(java.lang.String); + method public void setPublicKey(java.security.PublicKey) throws java.security.KeyManagementException; + method public java.lang.String toString(boolean); + } + + public abstract deprecated class IdentityScope extends java.security.Identity { + ctor protected IdentityScope(); + ctor public IdentityScope(java.lang.String); + ctor public IdentityScope(java.lang.String, java.security.IdentityScope) throws java.security.KeyManagementException; + method public abstract void addIdentity(java.security.Identity) throws java.security.KeyManagementException; + method public abstract java.security.Identity getIdentity(java.lang.String); + method public java.security.Identity getIdentity(java.security.Principal); + method public abstract java.security.Identity getIdentity(java.security.PublicKey); + method public static java.security.IdentityScope getSystemScope(); + method public abstract java.util.Enumeration identities(); + method public abstract void removeIdentity(java.security.Identity) throws java.security.KeyManagementException; + method protected static void setSystemScope(java.security.IdentityScope); + method public abstract int size(); + } + + public class InvalidAlgorithmParameterException extends java.security.GeneralSecurityException { + ctor public InvalidAlgorithmParameterException(java.lang.String); + ctor public InvalidAlgorithmParameterException(); + ctor public InvalidAlgorithmParameterException(java.lang.String, java.lang.Throwable); + ctor public InvalidAlgorithmParameterException(java.lang.Throwable); + } + + public class InvalidKeyException extends java.security.KeyException { + ctor public InvalidKeyException(java.lang.String); + ctor public InvalidKeyException(); + ctor public InvalidKeyException(java.lang.String, java.lang.Throwable); + ctor public InvalidKeyException(java.lang.Throwable); + } + + public class InvalidParameterException extends java.lang.IllegalArgumentException { + ctor public InvalidParameterException(java.lang.String); + ctor public InvalidParameterException(); + } + + public abstract interface Key implements java.io.Serializable { + method public abstract java.lang.String getAlgorithm(); + method public abstract byte[] getEncoded(); + method public abstract java.lang.String getFormat(); + field public static final long serialVersionUID = 6603384152749567654L; // 0x5ba3eee69414eea6L + } + + public class KeyException extends java.security.GeneralSecurityException { + ctor public KeyException(java.lang.String); + ctor public KeyException(); + ctor public KeyException(java.lang.String, java.lang.Throwable); + ctor public KeyException(java.lang.Throwable); + } + + public class KeyFactory { + ctor protected KeyFactory(java.security.KeyFactorySpi, java.security.Provider, java.lang.String); + method public final java.security.PrivateKey generatePrivate(java.security.spec.KeySpec) throws java.security.spec.InvalidKeySpecException; + method public final java.security.PublicKey generatePublic(java.security.spec.KeySpec) throws java.security.spec.InvalidKeySpecException; + method public final java.lang.String getAlgorithm(); + method public static java.security.KeyFactory getInstance(java.lang.String) throws java.security.NoSuchAlgorithmException; + method public static java.security.KeyFactory getInstance(java.lang.String, java.lang.String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException; + method public static java.security.KeyFactory getInstance(java.lang.String, java.security.Provider) throws java.security.NoSuchAlgorithmException; + method public final T getKeySpec(java.security.Key, java.lang.Class) throws java.security.spec.InvalidKeySpecException; + method public final java.security.Provider getProvider(); + method public final java.security.Key translateKey(java.security.Key) throws java.security.InvalidKeyException; + } + + public abstract class KeyFactorySpi { + ctor public KeyFactorySpi(); + method protected abstract java.security.PrivateKey engineGeneratePrivate(java.security.spec.KeySpec) throws java.security.spec.InvalidKeySpecException; + method protected abstract java.security.PublicKey engineGeneratePublic(java.security.spec.KeySpec) throws java.security.spec.InvalidKeySpecException; + method protected abstract T engineGetKeySpec(java.security.Key, java.lang.Class) throws java.security.spec.InvalidKeySpecException; + method protected abstract java.security.Key engineTranslateKey(java.security.Key) throws java.security.InvalidKeyException; + } + + public class KeyManagementException extends java.security.KeyException { + ctor public KeyManagementException(java.lang.String); + ctor public KeyManagementException(); + ctor public KeyManagementException(java.lang.String, java.lang.Throwable); + ctor public KeyManagementException(java.lang.Throwable); + } + + public final class KeyPair implements java.io.Serializable { + ctor public KeyPair(java.security.PublicKey, java.security.PrivateKey); + method public java.security.PrivateKey getPrivate(); + method public java.security.PublicKey getPublic(); + } + + public abstract class KeyPairGenerator extends java.security.KeyPairGeneratorSpi { + ctor protected KeyPairGenerator(java.lang.String); + method public final java.security.KeyPair genKeyPair(); + method public java.security.KeyPair generateKeyPair(); + method public java.lang.String getAlgorithm(); + method public static java.security.KeyPairGenerator getInstance(java.lang.String) throws java.security.NoSuchAlgorithmException; + method public static java.security.KeyPairGenerator getInstance(java.lang.String, java.lang.String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException; + method public static java.security.KeyPairGenerator getInstance(java.lang.String, java.security.Provider) throws java.security.NoSuchAlgorithmException; + method public final java.security.Provider getProvider(); + method public void initialize(int); + method public void initialize(java.security.spec.AlgorithmParameterSpec) throws java.security.InvalidAlgorithmParameterException; + method public void initialize(int, java.security.SecureRandom); + } + + public abstract class KeyPairGeneratorSpi { + ctor public KeyPairGeneratorSpi(); + method public abstract java.security.KeyPair generateKeyPair(); + method public abstract void initialize(int, java.security.SecureRandom); + method public void initialize(java.security.spec.AlgorithmParameterSpec, java.security.SecureRandom) throws java.security.InvalidAlgorithmParameterException; + } + + public class KeyRep implements java.io.Serializable { + ctor public KeyRep(java.security.KeyRep.Type, java.lang.String, java.lang.String, byte[]); + method protected java.lang.Object readResolve() throws java.io.ObjectStreamException; + } + + public static final class KeyRep.Type extends java.lang.Enum { + method public static java.security.KeyRep.Type valueOf(java.lang.String); + method public static final java.security.KeyRep.Type[] values(); + enum_constant public static final java.security.KeyRep.Type PRIVATE; + enum_constant public static final java.security.KeyRep.Type PUBLIC; + enum_constant public static final java.security.KeyRep.Type SECRET; + } + + public class KeyStore { + ctor protected KeyStore(java.security.KeyStoreSpi, java.security.Provider, java.lang.String); + method public final java.util.Enumeration aliases() throws java.security.KeyStoreException; + method public final boolean containsAlias(java.lang.String) throws java.security.KeyStoreException; + method public final void deleteEntry(java.lang.String) throws java.security.KeyStoreException; + method public final boolean entryInstanceOf(java.lang.String, java.lang.Class) throws java.security.KeyStoreException; + method public final java.security.cert.Certificate getCertificate(java.lang.String) throws java.security.KeyStoreException; + method public final java.lang.String getCertificateAlias(java.security.cert.Certificate) throws java.security.KeyStoreException; + method public final java.security.cert.Certificate[] getCertificateChain(java.lang.String) throws java.security.KeyStoreException; + method public final java.util.Date getCreationDate(java.lang.String) throws java.security.KeyStoreException; + method public static final java.lang.String getDefaultType(); + method public final java.security.KeyStore.Entry getEntry(java.lang.String, java.security.KeyStore.ProtectionParameter) throws java.security.KeyStoreException, java.security.NoSuchAlgorithmException, java.security.UnrecoverableEntryException; + method public static java.security.KeyStore getInstance(java.lang.String) throws java.security.KeyStoreException; + method public static java.security.KeyStore getInstance(java.lang.String, java.lang.String) throws java.security.KeyStoreException, java.security.NoSuchProviderException; + method public static java.security.KeyStore getInstance(java.lang.String, java.security.Provider) throws java.security.KeyStoreException; + method public final java.security.Key getKey(java.lang.String, char[]) throws java.security.KeyStoreException, java.security.NoSuchAlgorithmException, java.security.UnrecoverableKeyException; + method public final java.security.Provider getProvider(); + method public final java.lang.String getType(); + method public final boolean isCertificateEntry(java.lang.String) throws java.security.KeyStoreException; + method public final boolean isKeyEntry(java.lang.String) throws java.security.KeyStoreException; + method public final void load(java.io.InputStream, char[]) throws java.security.cert.CertificateException, java.io.IOException, java.security.NoSuchAlgorithmException; + method public final void load(java.security.KeyStore.LoadStoreParameter) throws java.security.cert.CertificateException, java.io.IOException, java.security.NoSuchAlgorithmException; + method public final void setCertificateEntry(java.lang.String, java.security.cert.Certificate) throws java.security.KeyStoreException; + method public final void setEntry(java.lang.String, java.security.KeyStore.Entry, java.security.KeyStore.ProtectionParameter) throws java.security.KeyStoreException; + method public final void setKeyEntry(java.lang.String, java.security.Key, char[], java.security.cert.Certificate[]) throws java.security.KeyStoreException; + method public final void setKeyEntry(java.lang.String, byte[], java.security.cert.Certificate[]) throws java.security.KeyStoreException; + method public final int size() throws java.security.KeyStoreException; + method public final void store(java.io.OutputStream, char[]) throws java.security.cert.CertificateException, java.io.IOException, java.security.KeyStoreException, java.security.NoSuchAlgorithmException; + method public final void store(java.security.KeyStore.LoadStoreParameter) throws java.security.cert.CertificateException, java.io.IOException, java.security.KeyStoreException, java.security.NoSuchAlgorithmException; + } + + public static abstract class KeyStore.Builder { + ctor protected KeyStore.Builder(); + method public abstract java.security.KeyStore getKeyStore() throws java.security.KeyStoreException; + method public abstract java.security.KeyStore.ProtectionParameter getProtectionParameter(java.lang.String) throws java.security.KeyStoreException; + method public static java.security.KeyStore.Builder newInstance(java.security.KeyStore, java.security.KeyStore.ProtectionParameter); + method public static java.security.KeyStore.Builder newInstance(java.lang.String, java.security.Provider, java.io.File, java.security.KeyStore.ProtectionParameter); + method public static java.security.KeyStore.Builder newInstance(java.lang.String, java.security.Provider, java.security.KeyStore.ProtectionParameter); + } + + public static class KeyStore.CallbackHandlerProtection implements java.security.KeyStore.ProtectionParameter { + ctor public KeyStore.CallbackHandlerProtection(javax.security.auth.callback.CallbackHandler); + method public javax.security.auth.callback.CallbackHandler getCallbackHandler(); + } + + public static abstract interface KeyStore.Entry { + } + + public static abstract interface KeyStore.LoadStoreParameter { + method public abstract java.security.KeyStore.ProtectionParameter getProtectionParameter(); + } + + public static class KeyStore.PasswordProtection implements javax.security.auth.Destroyable java.security.KeyStore.ProtectionParameter { + ctor public KeyStore.PasswordProtection(char[]); + method public synchronized void destroy() throws javax.security.auth.DestroyFailedException; + method public synchronized char[] getPassword(); + method public synchronized boolean isDestroyed(); + } + + public static final class KeyStore.PrivateKeyEntry implements java.security.KeyStore.Entry { + ctor public KeyStore.PrivateKeyEntry(java.security.PrivateKey, java.security.cert.Certificate[]); + method public java.security.cert.Certificate getCertificate(); + method public java.security.cert.Certificate[] getCertificateChain(); + method public java.security.PrivateKey getPrivateKey(); + } + + public static abstract interface KeyStore.ProtectionParameter { + } + + public static final class KeyStore.SecretKeyEntry implements java.security.KeyStore.Entry { + ctor public KeyStore.SecretKeyEntry(javax.crypto.SecretKey); + method public javax.crypto.SecretKey getSecretKey(); + } + + public static final class KeyStore.TrustedCertificateEntry implements java.security.KeyStore.Entry { + ctor public KeyStore.TrustedCertificateEntry(java.security.cert.Certificate); + method public java.security.cert.Certificate getTrustedCertificate(); + } + + public class KeyStoreException extends java.security.GeneralSecurityException { + ctor public KeyStoreException(java.lang.String); + ctor public KeyStoreException(); + ctor public KeyStoreException(java.lang.String, java.lang.Throwable); + ctor public KeyStoreException(java.lang.Throwable); + } + + public abstract class KeyStoreSpi { + ctor public KeyStoreSpi(); + method public abstract java.util.Enumeration engineAliases(); + method public abstract boolean engineContainsAlias(java.lang.String); + method public abstract void engineDeleteEntry(java.lang.String) throws java.security.KeyStoreException; + method public boolean engineEntryInstanceOf(java.lang.String, java.lang.Class); + method public abstract java.security.cert.Certificate engineGetCertificate(java.lang.String); + method public abstract java.lang.String engineGetCertificateAlias(java.security.cert.Certificate); + method public abstract java.security.cert.Certificate[] engineGetCertificateChain(java.lang.String); + method public abstract java.util.Date engineGetCreationDate(java.lang.String); + method public java.security.KeyStore.Entry engineGetEntry(java.lang.String, java.security.KeyStore.ProtectionParameter) throws java.security.KeyStoreException, java.security.NoSuchAlgorithmException, java.security.UnrecoverableEntryException; + method public abstract java.security.Key engineGetKey(java.lang.String, char[]) throws java.security.NoSuchAlgorithmException, java.security.UnrecoverableKeyException; + method public abstract boolean engineIsCertificateEntry(java.lang.String); + method public abstract boolean engineIsKeyEntry(java.lang.String); + method public abstract void engineLoad(java.io.InputStream, char[]) throws java.security.cert.CertificateException, java.io.IOException, java.security.NoSuchAlgorithmException; + method public void engineLoad(java.security.KeyStore.LoadStoreParameter) throws java.security.cert.CertificateException, java.io.IOException, java.security.NoSuchAlgorithmException; + method public abstract void engineSetCertificateEntry(java.lang.String, java.security.cert.Certificate) throws java.security.KeyStoreException; + method public void engineSetEntry(java.lang.String, java.security.KeyStore.Entry, java.security.KeyStore.ProtectionParameter) throws java.security.KeyStoreException; + method public abstract void engineSetKeyEntry(java.lang.String, java.security.Key, char[], java.security.cert.Certificate[]) throws java.security.KeyStoreException; + method public abstract void engineSetKeyEntry(java.lang.String, byte[], java.security.cert.Certificate[]) throws java.security.KeyStoreException; + method public abstract int engineSize(); + method public abstract void engineStore(java.io.OutputStream, char[]) throws java.security.cert.CertificateException, java.io.IOException, java.security.NoSuchAlgorithmException; + method public void engineStore(java.security.KeyStore.LoadStoreParameter) throws java.security.cert.CertificateException, java.io.IOException, java.security.NoSuchAlgorithmException; + } + + public abstract class MessageDigest extends java.security.MessageDigestSpi { + ctor protected MessageDigest(java.lang.String); + method public byte[] digest(); + method public int digest(byte[], int, int) throws java.security.DigestException; + method public byte[] digest(byte[]); + method public final java.lang.String getAlgorithm(); + method public final int getDigestLength(); + method public static java.security.MessageDigest getInstance(java.lang.String) throws java.security.NoSuchAlgorithmException; + method public static java.security.MessageDigest getInstance(java.lang.String, java.lang.String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException; + method public static java.security.MessageDigest getInstance(java.lang.String, java.security.Provider) throws java.security.NoSuchAlgorithmException; + method public final java.security.Provider getProvider(); + method public static boolean isEqual(byte[], byte[]); + method public void reset(); + method public void update(byte); + method public void update(byte[], int, int); + method public void update(byte[]); + method public final void update(java.nio.ByteBuffer); + } + + public abstract class MessageDigestSpi { + ctor public MessageDigestSpi(); + method public java.lang.Object clone() throws java.lang.CloneNotSupportedException; + method protected abstract byte[] engineDigest(); + method protected int engineDigest(byte[], int, int) throws java.security.DigestException; + method protected int engineGetDigestLength(); + method protected abstract void engineReset(); + method protected abstract void engineUpdate(byte); + method protected abstract void engineUpdate(byte[], int, int); + method protected void engineUpdate(java.nio.ByteBuffer); + } + + public class NoSuchAlgorithmException extends java.security.GeneralSecurityException { + ctor public NoSuchAlgorithmException(java.lang.String); + ctor public NoSuchAlgorithmException(); + ctor public NoSuchAlgorithmException(java.lang.String, java.lang.Throwable); + ctor public NoSuchAlgorithmException(java.lang.Throwable); + } + + public class NoSuchProviderException extends java.security.GeneralSecurityException { + ctor public NoSuchProviderException(java.lang.String); + ctor public NoSuchProviderException(); + } + + public abstract class Permission implements java.security.Guard java.io.Serializable { + ctor public Permission(java.lang.String); + method public void checkGuard(java.lang.Object) throws java.lang.SecurityException; + method public abstract java.lang.String getActions(); + method public final java.lang.String getName(); + method public abstract boolean implies(java.security.Permission); + method public java.security.PermissionCollection newPermissionCollection(); + } + + public abstract class PermissionCollection implements java.io.Serializable { + ctor public PermissionCollection(); + method public abstract void add(java.security.Permission); + method public abstract java.util.Enumeration elements(); + method public abstract boolean implies(java.security.Permission); + method public boolean isReadOnly(); + method public void setReadOnly(); + } + + public final class Permissions extends java.security.PermissionCollection implements java.io.Serializable { + ctor public Permissions(); + method public void add(java.security.Permission); + method public java.util.Enumeration elements(); + method public boolean implies(java.security.Permission); + } + + public abstract class Policy { + ctor public Policy(); + method public static java.security.Policy getInstance(java.lang.String, java.security.Policy.Parameters) throws java.security.NoSuchAlgorithmException; + method public static java.security.Policy getInstance(java.lang.String, java.security.Policy.Parameters, java.lang.String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException; + method public static java.security.Policy getInstance(java.lang.String, java.security.Policy.Parameters, java.security.Provider) throws java.security.NoSuchAlgorithmException; + method public java.security.Policy.Parameters getParameters(); + method public java.security.PermissionCollection getPermissions(java.security.CodeSource); + method public java.security.PermissionCollection getPermissions(java.security.ProtectionDomain); + method public static java.security.Policy getPolicy(); + method public java.security.Provider getProvider(); + method public java.lang.String getType(); + method public boolean implies(java.security.ProtectionDomain, java.security.Permission); + method public void refresh(); + method public static void setPolicy(java.security.Policy); + field public static final java.security.PermissionCollection UNSUPPORTED_EMPTY_COLLECTION; + } + + public static abstract interface Policy.Parameters { + } + + public abstract class PolicySpi { + ctor public PolicySpi(); + method protected java.security.PermissionCollection engineGetPermissions(java.security.CodeSource); + method protected java.security.PermissionCollection engineGetPermissions(java.security.ProtectionDomain); + method protected abstract boolean engineImplies(java.security.ProtectionDomain, java.security.Permission); + method protected void engineRefresh(); + } + + public abstract interface Principal { + method public abstract boolean equals(java.lang.Object); + method public abstract java.lang.String getName(); + method public abstract int hashCode(); + method public abstract java.lang.String toString(); + } + + public abstract interface PrivateKey implements java.security.Key { + field public static final long serialVersionUID = 6034044314589513430L; // 0x53bd3b559a12c6d6L + } + + public abstract interface PrivilegedAction { + method public abstract T run(); + } + + public class PrivilegedActionException extends java.lang.Exception { + ctor public PrivilegedActionException(java.lang.Exception); + method public java.lang.Exception getException(); + } + + public abstract interface PrivilegedExceptionAction { + method public abstract T run() throws java.lang.Exception; + } + + public class ProtectionDomain { + ctor public ProtectionDomain(java.security.CodeSource, java.security.PermissionCollection); + ctor public ProtectionDomain(java.security.CodeSource, java.security.PermissionCollection, java.lang.ClassLoader, java.security.Principal[]); + method public final java.lang.ClassLoader getClassLoader(); + method public final java.security.CodeSource getCodeSource(); + method public final java.security.PermissionCollection getPermissions(); + method public final java.security.Principal[] getPrincipals(); + method public boolean implies(java.security.Permission); + } + + public abstract class Provider extends java.util.Properties { + ctor protected Provider(java.lang.String, double, java.lang.String); + method public java.lang.String getInfo(); + method public java.lang.String getName(); + method public synchronized java.security.Provider.Service getService(java.lang.String, java.lang.String); + method public synchronized java.util.Set getServices(); + method public double getVersion(); + method public synchronized java.lang.Object put(java.lang.Object, java.lang.Object); + method public synchronized void putAll(java.util.Map); + method protected synchronized void putService(java.security.Provider.Service); + method protected synchronized void removeService(java.security.Provider.Service); + } + + public static class Provider.Service { + ctor public Provider.Service(java.security.Provider, java.lang.String, java.lang.String, java.lang.String, java.util.List, java.util.Map); + method public final java.lang.String getAlgorithm(); + method public final java.lang.String getAttribute(java.lang.String); + method public final java.lang.String getClassName(); + method public final java.security.Provider getProvider(); + method public final java.lang.String getType(); + method public java.lang.Object newInstance(java.lang.Object) throws java.security.NoSuchAlgorithmException; + method public boolean supportsParameter(java.lang.Object); + } + + public class ProviderException extends java.lang.RuntimeException { + ctor public ProviderException(java.lang.String); + ctor public ProviderException(); + ctor public ProviderException(java.lang.String, java.lang.Throwable); + ctor public ProviderException(java.lang.Throwable); + } + + public abstract interface PublicKey implements java.security.Key { + field public static final long serialVersionUID = 7187392471159151072L; // 0x63bebf5f40c219e0L + } + + public class SecureClassLoader extends java.lang.ClassLoader { + ctor protected SecureClassLoader(); + ctor protected SecureClassLoader(java.lang.ClassLoader); + method protected final java.lang.Class defineClass(java.lang.String, byte[], int, int, java.security.CodeSource); + method protected final java.lang.Class defineClass(java.lang.String, java.nio.ByteBuffer, java.security.CodeSource); + method protected java.security.PermissionCollection getPermissions(java.security.CodeSource); + } + + public class SecureRandom extends java.util.Random { + ctor public SecureRandom(); + ctor public SecureRandom(byte[]); + ctor protected SecureRandom(java.security.SecureRandomSpi, java.security.Provider); + method public byte[] generateSeed(int); + method public java.lang.String getAlgorithm(); + method public static java.security.SecureRandom getInstance(java.lang.String) throws java.security.NoSuchAlgorithmException; + method public static java.security.SecureRandom getInstance(java.lang.String, java.lang.String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException; + method public static java.security.SecureRandom getInstance(java.lang.String, java.security.Provider) throws java.security.NoSuchAlgorithmException; + method public final java.security.Provider getProvider(); + method public static byte[] getSeed(int); + method protected final int next(int); + method public synchronized void setSeed(byte[]); + } + + public abstract class SecureRandomSpi implements java.io.Serializable { + ctor public SecureRandomSpi(); + method protected abstract byte[] engineGenerateSeed(int); + method protected abstract void engineNextBytes(byte[]); + method protected abstract void engineSetSeed(byte[]); + } + + public final class Security { + method public static int addProvider(java.security.Provider); + method public static deprecated java.lang.String getAlgorithmProperty(java.lang.String, java.lang.String); + method public static java.util.Set getAlgorithms(java.lang.String); + method public static java.lang.String getProperty(java.lang.String); + method public static synchronized java.security.Provider getProvider(java.lang.String); + method public static synchronized java.security.Provider[] getProviders(); + method public static java.security.Provider[] getProviders(java.lang.String); + method public static synchronized java.security.Provider[] getProviders(java.util.Map); + method public static synchronized int insertProviderAt(java.security.Provider, int); + method public static synchronized void removeProvider(java.lang.String); + method public static void setProperty(java.lang.String, java.lang.String); + } + + public final class SecurityPermission extends java.security.BasicPermission { + ctor public SecurityPermission(java.lang.String); + ctor public SecurityPermission(java.lang.String, java.lang.String); + } + + public abstract class Signature extends java.security.SignatureSpi { + ctor protected Signature(java.lang.String); + method public final java.lang.String getAlgorithm(); + method public static java.security.Signature getInstance(java.lang.String) throws java.security.NoSuchAlgorithmException; + method public static java.security.Signature getInstance(java.lang.String, java.lang.String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException; + method public static java.security.Signature getInstance(java.lang.String, java.security.Provider) throws java.security.NoSuchAlgorithmException; + method public final deprecated java.lang.Object getParameter(java.lang.String) throws java.security.InvalidParameterException; + method public final java.security.AlgorithmParameters getParameters(); + method public final java.security.Provider getProvider(); + method public final void initSign(java.security.PrivateKey) throws java.security.InvalidKeyException; + method public final void initSign(java.security.PrivateKey, java.security.SecureRandom) throws java.security.InvalidKeyException; + method public final void initVerify(java.security.PublicKey) throws java.security.InvalidKeyException; + method public final void initVerify(java.security.cert.Certificate) throws java.security.InvalidKeyException; + method public final deprecated void setParameter(java.lang.String, java.lang.Object) throws java.security.InvalidParameterException; + method public final void setParameter(java.security.spec.AlgorithmParameterSpec) throws java.security.InvalidAlgorithmParameterException; + method public final byte[] sign() throws java.security.SignatureException; + method public final int sign(byte[], int, int) throws java.security.SignatureException; + method public final void update(byte) throws java.security.SignatureException; + method public final void update(byte[]) throws java.security.SignatureException; + method public final void update(byte[], int, int) throws java.security.SignatureException; + method public final void update(java.nio.ByteBuffer) throws java.security.SignatureException; + method public final boolean verify(byte[]) throws java.security.SignatureException; + method public final boolean verify(byte[], int, int) throws java.security.SignatureException; + field protected static final int SIGN = 2; // 0x2 + field protected static final int UNINITIALIZED = 0; // 0x0 + field protected static final int VERIFY = 3; // 0x3 + field protected int state; + } + + public class SignatureException extends java.security.GeneralSecurityException { + ctor public SignatureException(java.lang.String); + ctor public SignatureException(); + ctor public SignatureException(java.lang.String, java.lang.Throwable); + ctor public SignatureException(java.lang.Throwable); + } + + public abstract class SignatureSpi { + ctor public SignatureSpi(); + method public java.lang.Object clone() throws java.lang.CloneNotSupportedException; + method protected abstract deprecated java.lang.Object engineGetParameter(java.lang.String) throws java.security.InvalidParameterException; + method protected java.security.AlgorithmParameters engineGetParameters(); + method protected abstract void engineInitSign(java.security.PrivateKey) throws java.security.InvalidKeyException; + method protected void engineInitSign(java.security.PrivateKey, java.security.SecureRandom) throws java.security.InvalidKeyException; + method protected abstract void engineInitVerify(java.security.PublicKey) throws java.security.InvalidKeyException; + method protected abstract deprecated void engineSetParameter(java.lang.String, java.lang.Object) throws java.security.InvalidParameterException; + method protected void engineSetParameter(java.security.spec.AlgorithmParameterSpec) throws java.security.InvalidAlgorithmParameterException; + method protected abstract byte[] engineSign() throws java.security.SignatureException; + method protected int engineSign(byte[], int, int) throws java.security.SignatureException; + method protected abstract void engineUpdate(byte) throws java.security.SignatureException; + method protected abstract void engineUpdate(byte[], int, int) throws java.security.SignatureException; + method protected void engineUpdate(java.nio.ByteBuffer); + method protected abstract boolean engineVerify(byte[]) throws java.security.SignatureException; + method protected boolean engineVerify(byte[], int, int) throws java.security.SignatureException; + field protected java.security.SecureRandom appRandom; + } + + public final class SignedObject implements java.io.Serializable { + ctor public SignedObject(java.io.Serializable, java.security.PrivateKey, java.security.Signature) throws java.io.IOException, java.security.InvalidKeyException, java.security.SignatureException; + method public java.lang.String getAlgorithm(); + method public java.lang.Object getObject() throws java.lang.ClassNotFoundException, java.io.IOException; + method public byte[] getSignature(); + method public boolean verify(java.security.PublicKey, java.security.Signature) throws java.security.InvalidKeyException, java.security.SignatureException; + } + + public abstract deprecated class Signer extends java.security.Identity { + ctor protected Signer(); + ctor public Signer(java.lang.String); + ctor public Signer(java.lang.String, java.security.IdentityScope) throws java.security.KeyManagementException; + method public java.security.PrivateKey getPrivateKey(); + method public final void setKeyPair(java.security.KeyPair) throws java.security.InvalidParameterException, java.security.KeyException; + } + + public final class Timestamp implements java.io.Serializable { + ctor public Timestamp(java.util.Date, java.security.cert.CertPath); + method public java.security.cert.CertPath getSignerCertPath(); + method public java.util.Date getTimestamp(); + } + + public class UnrecoverableEntryException extends java.security.GeneralSecurityException { + ctor public UnrecoverableEntryException(); + ctor public UnrecoverableEntryException(java.lang.String); + } + + public class UnrecoverableKeyException extends java.security.UnrecoverableEntryException { + ctor public UnrecoverableKeyException(java.lang.String); + ctor public UnrecoverableKeyException(); + } + + public final class UnresolvedPermission extends java.security.Permission implements java.io.Serializable { + ctor public UnresolvedPermission(java.lang.String, java.lang.String, java.lang.String, java.security.cert.Certificate[]); + method public java.lang.String getActions(); + method public java.lang.String getUnresolvedActions(); + method public java.security.cert.Certificate[] getUnresolvedCerts(); + method public java.lang.String getUnresolvedName(); + method public java.lang.String getUnresolvedType(); + method public boolean implies(java.security.Permission); + } + +} + +package java.security.acl { + + public abstract interface Acl implements java.security.acl.Owner { + method public abstract boolean addEntry(java.security.Principal, java.security.acl.AclEntry) throws java.security.acl.NotOwnerException; + method public abstract boolean checkPermission(java.security.Principal, java.security.acl.Permission); + method public abstract java.util.Enumeration entries(); + method public abstract java.lang.String getName(); + method public abstract java.util.Enumeration getPermissions(java.security.Principal); + method public abstract boolean removeEntry(java.security.Principal, java.security.acl.AclEntry) throws java.security.acl.NotOwnerException; + method public abstract void setName(java.security.Principal, java.lang.String) throws java.security.acl.NotOwnerException; + method public abstract java.lang.String toString(); + } + + public abstract interface AclEntry implements java.lang.Cloneable { + method public abstract boolean addPermission(java.security.acl.Permission); + method public abstract boolean checkPermission(java.security.acl.Permission); + method public abstract java.lang.Object clone(); + method public abstract java.security.Principal getPrincipal(); + method public abstract boolean isNegative(); + method public abstract java.util.Enumeration permissions(); + method public abstract boolean removePermission(java.security.acl.Permission); + method public abstract void setNegativePermissions(); + method public abstract boolean setPrincipal(java.security.Principal); + method public abstract java.lang.String toString(); + } + + public class AclNotFoundException extends java.lang.Exception { + ctor public AclNotFoundException(); + } + + public abstract interface Group implements java.security.Principal { + method public abstract boolean addMember(java.security.Principal); + method public abstract boolean isMember(java.security.Principal); + method public abstract java.util.Enumeration members(); + method public abstract boolean removeMember(java.security.Principal); + } + + public class LastOwnerException extends java.lang.Exception { + ctor public LastOwnerException(); + } + + public class NotOwnerException extends java.lang.Exception { + ctor public NotOwnerException(); + } + + public abstract interface Owner { + method public abstract boolean addOwner(java.security.Principal, java.security.Principal) throws java.security.acl.NotOwnerException; + method public abstract boolean deleteOwner(java.security.Principal, java.security.Principal) throws java.security.acl.LastOwnerException, java.security.acl.NotOwnerException; + method public abstract boolean isOwner(java.security.Principal); + } + + public abstract interface Permission { + method public abstract boolean equals(java.lang.Object); + method public abstract java.lang.String toString(); + } + +} + +package java.security.cert { + + public abstract class CRL { + ctor protected CRL(java.lang.String); + method public final java.lang.String getType(); + method public abstract boolean isRevoked(java.security.cert.Certificate); + method public abstract java.lang.String toString(); + } + + public class CRLException extends java.security.GeneralSecurityException { + ctor public CRLException(java.lang.String); + ctor public CRLException(); + ctor public CRLException(java.lang.String, java.lang.Throwable); + ctor public CRLException(java.lang.Throwable); + } + + public abstract interface CRLSelector implements java.lang.Cloneable { + method public abstract java.lang.Object clone(); + method public abstract boolean match(java.security.cert.CRL); + } + + public abstract class CertPath implements java.io.Serializable { + ctor protected CertPath(java.lang.String); + method public abstract java.util.List getCertificates(); + method public abstract byte[] getEncoded() throws java.security.cert.CertificateEncodingException; + method public abstract byte[] getEncoded(java.lang.String) throws java.security.cert.CertificateEncodingException; + method public abstract java.util.Iterator getEncodings(); + method public java.lang.String getType(); + method protected java.lang.Object writeReplace() throws java.io.ObjectStreamException; + } + + protected static class CertPath.CertPathRep implements java.io.Serializable { + ctor protected CertPath.CertPathRep(java.lang.String, byte[]); + method protected java.lang.Object readResolve() throws java.io.ObjectStreamException; + } + + public class CertPathBuilder { + ctor protected CertPathBuilder(java.security.cert.CertPathBuilderSpi, java.security.Provider, java.lang.String); + method public final java.security.cert.CertPathBuilderResult build(java.security.cert.CertPathParameters) throws java.security.cert.CertPathBuilderException, java.security.InvalidAlgorithmParameterException; + method public final java.lang.String getAlgorithm(); + method public static final java.lang.String getDefaultType(); + method public static java.security.cert.CertPathBuilder getInstance(java.lang.String) throws java.security.NoSuchAlgorithmException; + method public static java.security.cert.CertPathBuilder getInstance(java.lang.String, java.lang.String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException; + method public static java.security.cert.CertPathBuilder getInstance(java.lang.String, java.security.Provider) throws java.security.NoSuchAlgorithmException; + method public final java.security.Provider getProvider(); + } + + public class CertPathBuilderException extends java.security.GeneralSecurityException { + ctor public CertPathBuilderException(java.lang.String, java.lang.Throwable); + ctor public CertPathBuilderException(java.lang.Throwable); + ctor public CertPathBuilderException(java.lang.String); + ctor public CertPathBuilderException(); + } + + public abstract interface CertPathBuilderResult implements java.lang.Cloneable { + method public abstract java.lang.Object clone(); + method public abstract java.security.cert.CertPath getCertPath(); + } + + public abstract class CertPathBuilderSpi { + ctor public CertPathBuilderSpi(); + method public abstract java.security.cert.CertPathBuilderResult engineBuild(java.security.cert.CertPathParameters) throws java.security.cert.CertPathBuilderException, java.security.InvalidAlgorithmParameterException; + } + + public abstract interface CertPathParameters implements java.lang.Cloneable { + method public abstract java.lang.Object clone(); + } + + public class CertPathValidator { + ctor protected CertPathValidator(java.security.cert.CertPathValidatorSpi, java.security.Provider, java.lang.String); + method public final java.lang.String getAlgorithm(); + method public static final java.lang.String getDefaultType(); + method public static java.security.cert.CertPathValidator getInstance(java.lang.String) throws java.security.NoSuchAlgorithmException; + method public static java.security.cert.CertPathValidator getInstance(java.lang.String, java.lang.String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException; + method public static java.security.cert.CertPathValidator getInstance(java.lang.String, java.security.Provider) throws java.security.NoSuchAlgorithmException; + method public final java.security.Provider getProvider(); + method public final java.security.cert.CertPathValidatorResult validate(java.security.cert.CertPath, java.security.cert.CertPathParameters) throws java.security.cert.CertPathValidatorException, java.security.InvalidAlgorithmParameterException; + } + + public class CertPathValidatorException extends java.security.GeneralSecurityException { + ctor public CertPathValidatorException(java.lang.String, java.lang.Throwable, java.security.cert.CertPath, int); + ctor public CertPathValidatorException(java.lang.String, java.lang.Throwable); + ctor public CertPathValidatorException(java.lang.Throwable); + ctor public CertPathValidatorException(java.lang.String); + ctor public CertPathValidatorException(); + method public java.security.cert.CertPath getCertPath(); + method public int getIndex(); + } + + public abstract interface CertPathValidatorResult implements java.lang.Cloneable { + method public abstract java.lang.Object clone(); + } + + public abstract class CertPathValidatorSpi { + ctor public CertPathValidatorSpi(); + method public abstract java.security.cert.CertPathValidatorResult engineValidate(java.security.cert.CertPath, java.security.cert.CertPathParameters) throws java.security.cert.CertPathValidatorException, java.security.InvalidAlgorithmParameterException; + } + + public abstract interface CertSelector implements java.lang.Cloneable { + method public abstract java.lang.Object clone(); + method public abstract boolean match(java.security.cert.Certificate); + } + + public class CertStore { + ctor protected CertStore(java.security.cert.CertStoreSpi, java.security.Provider, java.lang.String, java.security.cert.CertStoreParameters); + method public final java.util.Collection getCRLs(java.security.cert.CRLSelector) throws java.security.cert.CertStoreException; + method public final java.security.cert.CertStoreParameters getCertStoreParameters(); + method public final java.util.Collection getCertificates(java.security.cert.CertSelector) throws java.security.cert.CertStoreException; + method public static final java.lang.String getDefaultType(); + method public static java.security.cert.CertStore getInstance(java.lang.String, java.security.cert.CertStoreParameters) throws java.security.InvalidAlgorithmParameterException, java.security.NoSuchAlgorithmException; + method public static java.security.cert.CertStore getInstance(java.lang.String, java.security.cert.CertStoreParameters, java.lang.String) throws java.security.InvalidAlgorithmParameterException, java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException; + method public static java.security.cert.CertStore getInstance(java.lang.String, java.security.cert.CertStoreParameters, java.security.Provider) throws java.security.InvalidAlgorithmParameterException, java.security.NoSuchAlgorithmException; + method public final java.security.Provider getProvider(); + method public final java.lang.String getType(); + } + + public class CertStoreException extends java.security.GeneralSecurityException { + ctor public CertStoreException(java.lang.String, java.lang.Throwable); + ctor public CertStoreException(java.lang.Throwable); + ctor public CertStoreException(java.lang.String); + ctor public CertStoreException(); + } + + public abstract interface CertStoreParameters implements java.lang.Cloneable { + method public abstract java.lang.Object clone(); + } + + public abstract class CertStoreSpi { + ctor public CertStoreSpi(java.security.cert.CertStoreParameters) throws java.security.InvalidAlgorithmParameterException; + method public abstract java.util.Collection engineGetCRLs(java.security.cert.CRLSelector) throws java.security.cert.CertStoreException; + method public abstract java.util.Collection engineGetCertificates(java.security.cert.CertSelector) throws java.security.cert.CertStoreException; + } + + public abstract class Certificate implements java.io.Serializable { + ctor protected Certificate(java.lang.String); + method public abstract byte[] getEncoded() throws java.security.cert.CertificateEncodingException; + method public abstract java.security.PublicKey getPublicKey(); + method public final java.lang.String getType(); + method public abstract java.lang.String toString(); + method public abstract void verify(java.security.PublicKey) throws java.security.cert.CertificateException, java.security.InvalidKeyException, java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException, java.security.SignatureException; + method public abstract void verify(java.security.PublicKey, java.lang.String) throws java.security.cert.CertificateException, java.security.InvalidKeyException, java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException, java.security.SignatureException; + method protected java.lang.Object writeReplace() throws java.io.ObjectStreamException; + } + + protected static class Certificate.CertificateRep implements java.io.Serializable { + ctor protected Certificate.CertificateRep(java.lang.String, byte[]); + method protected java.lang.Object readResolve() throws java.io.ObjectStreamException; + } + + public class CertificateEncodingException extends java.security.cert.CertificateException { + ctor public CertificateEncodingException(java.lang.String); + ctor public CertificateEncodingException(); + ctor public CertificateEncodingException(java.lang.String, java.lang.Throwable); + ctor public CertificateEncodingException(java.lang.Throwable); + } + + public class CertificateException extends java.security.GeneralSecurityException { + ctor public CertificateException(java.lang.String); + ctor public CertificateException(); + ctor public CertificateException(java.lang.String, java.lang.Throwable); + ctor public CertificateException(java.lang.Throwable); + } + + public class CertificateExpiredException extends java.security.cert.CertificateException { + ctor public CertificateExpiredException(java.lang.String); + ctor public CertificateExpiredException(); + } + + public class CertificateFactory { + ctor protected CertificateFactory(java.security.cert.CertificateFactorySpi, java.security.Provider, java.lang.String); + method public final java.security.cert.CRL generateCRL(java.io.InputStream) throws java.security.cert.CRLException; + method public final java.util.Collection generateCRLs(java.io.InputStream) throws java.security.cert.CRLException; + method public final java.security.cert.CertPath generateCertPath(java.io.InputStream) throws java.security.cert.CertificateException; + method public final java.security.cert.CertPath generateCertPath(java.io.InputStream, java.lang.String) throws java.security.cert.CertificateException; + method public final java.security.cert.CertPath generateCertPath(java.util.List) throws java.security.cert.CertificateException; + method public final java.security.cert.Certificate generateCertificate(java.io.InputStream) throws java.security.cert.CertificateException; + method public final java.util.Collection generateCertificates(java.io.InputStream) throws java.security.cert.CertificateException; + method public final java.util.Iterator getCertPathEncodings(); + method public static final java.security.cert.CertificateFactory getInstance(java.lang.String) throws java.security.cert.CertificateException; + method public static final java.security.cert.CertificateFactory getInstance(java.lang.String, java.lang.String) throws java.security.cert.CertificateException, java.security.NoSuchProviderException; + method public static final java.security.cert.CertificateFactory getInstance(java.lang.String, java.security.Provider) throws java.security.cert.CertificateException; + method public final java.security.Provider getProvider(); + method public final java.lang.String getType(); + } + + public abstract class CertificateFactorySpi { + ctor public CertificateFactorySpi(); + method public abstract java.security.cert.CRL engineGenerateCRL(java.io.InputStream) throws java.security.cert.CRLException; + method public abstract java.util.Collection engineGenerateCRLs(java.io.InputStream) throws java.security.cert.CRLException; + method public java.security.cert.CertPath engineGenerateCertPath(java.io.InputStream) throws java.security.cert.CertificateException; + method public java.security.cert.CertPath engineGenerateCertPath(java.io.InputStream, java.lang.String) throws java.security.cert.CertificateException; + method public java.security.cert.CertPath engineGenerateCertPath(java.util.List) throws java.security.cert.CertificateException; + method public abstract java.security.cert.Certificate engineGenerateCertificate(java.io.InputStream) throws java.security.cert.CertificateException; + method public abstract java.util.Collection engineGenerateCertificates(java.io.InputStream) throws java.security.cert.CertificateException; + method public java.util.Iterator engineGetCertPathEncodings(); + } + + public class CertificateNotYetValidException extends java.security.cert.CertificateException { + ctor public CertificateNotYetValidException(java.lang.String); + ctor public CertificateNotYetValidException(); + } + + public class CertificateParsingException extends java.security.cert.CertificateException { + ctor public CertificateParsingException(java.lang.String); + ctor public CertificateParsingException(); + ctor public CertificateParsingException(java.lang.String, java.lang.Throwable); + ctor public CertificateParsingException(java.lang.Throwable); + } + + public class CollectionCertStoreParameters implements java.security.cert.CertStoreParameters { + ctor public CollectionCertStoreParameters(); + ctor public CollectionCertStoreParameters(java.util.Collection); + method public java.lang.Object clone(); + method public java.util.Collection getCollection(); + } + + public class LDAPCertStoreParameters implements java.security.cert.CertStoreParameters { + ctor public LDAPCertStoreParameters(java.lang.String, int); + ctor public LDAPCertStoreParameters(); + ctor public LDAPCertStoreParameters(java.lang.String); + method public java.lang.Object clone(); + method public int getPort(); + method public java.lang.String getServerName(); + } + + public class PKIXBuilderParameters extends java.security.cert.PKIXParameters { + ctor public PKIXBuilderParameters(java.util.Set, java.security.cert.CertSelector) throws java.security.InvalidAlgorithmParameterException; + ctor public PKIXBuilderParameters(java.security.KeyStore, java.security.cert.CertSelector) throws java.security.InvalidAlgorithmParameterException, java.security.KeyStoreException; + method public int getMaxPathLength(); + method public void setMaxPathLength(int); + } + + public class PKIXCertPathBuilderResult extends java.security.cert.PKIXCertPathValidatorResult implements java.security.cert.CertPathBuilderResult { + ctor public PKIXCertPathBuilderResult(java.security.cert.CertPath, java.security.cert.TrustAnchor, java.security.cert.PolicyNode, java.security.PublicKey); + method public java.security.cert.CertPath getCertPath(); + } + + public abstract class PKIXCertPathChecker implements java.lang.Cloneable { + ctor protected PKIXCertPathChecker(); + method public abstract void check(java.security.cert.Certificate, java.util.Collection) throws java.security.cert.CertPathValidatorException; + method public java.lang.Object clone(); + method public abstract java.util.Set getSupportedExtensions(); + method public abstract void init(boolean) throws java.security.cert.CertPathValidatorException; + method public abstract boolean isForwardCheckingSupported(); + } + + public class PKIXCertPathValidatorResult implements java.security.cert.CertPathValidatorResult { + ctor public PKIXCertPathValidatorResult(java.security.cert.TrustAnchor, java.security.cert.PolicyNode, java.security.PublicKey); + method public java.lang.Object clone(); + method public java.security.cert.PolicyNode getPolicyTree(); + method public java.security.PublicKey getPublicKey(); + method public java.security.cert.TrustAnchor getTrustAnchor(); + } + + public class PKIXParameters implements java.security.cert.CertPathParameters { + ctor public PKIXParameters(java.util.Set) throws java.security.InvalidAlgorithmParameterException; + ctor public PKIXParameters(java.security.KeyStore) throws java.security.InvalidAlgorithmParameterException, java.security.KeyStoreException; + method public void addCertPathChecker(java.security.cert.PKIXCertPathChecker); + method public void addCertStore(java.security.cert.CertStore); + method public java.lang.Object clone(); + method public java.util.List getCertPathCheckers(); + method public java.util.List getCertStores(); + method public java.util.Date getDate(); + method public java.util.Set getInitialPolicies(); + method public boolean getPolicyQualifiersRejected(); + method public java.lang.String getSigProvider(); + method public java.security.cert.CertSelector getTargetCertConstraints(); + method public java.util.Set getTrustAnchors(); + method public boolean isAnyPolicyInhibited(); + method public boolean isExplicitPolicyRequired(); + method public boolean isPolicyMappingInhibited(); + method public boolean isRevocationEnabled(); + method public void setAnyPolicyInhibited(boolean); + method public void setCertPathCheckers(java.util.List); + method public void setCertStores(java.util.List); + method public void setDate(java.util.Date); + method public void setExplicitPolicyRequired(boolean); + method public void setInitialPolicies(java.util.Set); + method public void setPolicyMappingInhibited(boolean); + method public void setPolicyQualifiersRejected(boolean); + method public void setRevocationEnabled(boolean); + method public void setSigProvider(java.lang.String); + method public void setTargetCertConstraints(java.security.cert.CertSelector); + method public void setTrustAnchors(java.util.Set) throws java.security.InvalidAlgorithmParameterException; + } + + public abstract interface PolicyNode { + method public abstract java.util.Iterator getChildren(); + method public abstract int getDepth(); + method public abstract java.util.Set getExpectedPolicies(); + method public abstract java.security.cert.PolicyNode getParent(); + method public abstract java.util.Set getPolicyQualifiers(); + method public abstract java.lang.String getValidPolicy(); + method public abstract boolean isCritical(); + } + + public class PolicyQualifierInfo { + ctor public PolicyQualifierInfo(byte[]) throws java.io.IOException; + method public final byte[] getEncoded(); + method public final byte[] getPolicyQualifier(); + method public final java.lang.String getPolicyQualifierId(); + } + + public class TrustAnchor { + ctor public TrustAnchor(java.security.cert.X509Certificate, byte[]); + ctor public TrustAnchor(java.lang.String, java.security.PublicKey, byte[]); + ctor public TrustAnchor(javax.security.auth.x500.X500Principal, java.security.PublicKey, byte[]); + method public final javax.security.auth.x500.X500Principal getCA(); + method public final java.lang.String getCAName(); + method public final java.security.PublicKey getCAPublicKey(); + method public final byte[] getNameConstraints(); + method public final java.security.cert.X509Certificate getTrustedCert(); + } + + public abstract class X509CRL extends java.security.cert.CRL implements java.security.cert.X509Extension { + ctor protected X509CRL(); + method public abstract byte[] getEncoded() throws java.security.cert.CRLException; + method public abstract java.security.Principal getIssuerDN(); + method public javax.security.auth.x500.X500Principal getIssuerX500Principal(); + method public abstract java.util.Date getNextUpdate(); + method public abstract java.security.cert.X509CRLEntry getRevokedCertificate(java.math.BigInteger); + method public java.security.cert.X509CRLEntry getRevokedCertificate(java.security.cert.X509Certificate); + method public abstract java.util.Set getRevokedCertificates(); + method public abstract java.lang.String getSigAlgName(); + method public abstract java.lang.String getSigAlgOID(); + method public abstract byte[] getSigAlgParams(); + method public abstract byte[] getSignature(); + method public abstract byte[] getTBSCertList() throws java.security.cert.CRLException; + method public abstract java.util.Date getThisUpdate(); + method public abstract int getVersion(); + method public abstract void verify(java.security.PublicKey) throws java.security.cert.CRLException, java.security.InvalidKeyException, java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException, java.security.SignatureException; + method public abstract void verify(java.security.PublicKey, java.lang.String) throws java.security.cert.CRLException, java.security.InvalidKeyException, java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException, java.security.SignatureException; + } + + public abstract class X509CRLEntry implements java.security.cert.X509Extension { + ctor public X509CRLEntry(); + method public javax.security.auth.x500.X500Principal getCertificateIssuer(); + method public abstract byte[] getEncoded() throws java.security.cert.CRLException; + method public abstract java.util.Date getRevocationDate(); + method public abstract java.math.BigInteger getSerialNumber(); + method public abstract boolean hasExtensions(); + method public abstract java.lang.String toString(); + } + + public class X509CRLSelector implements java.security.cert.CRLSelector { + ctor public X509CRLSelector(); + method public void addIssuer(javax.security.auth.x500.X500Principal); + method public void addIssuerName(java.lang.String) throws java.io.IOException; + method public void addIssuerName(byte[]) throws java.io.IOException; + method public java.lang.Object clone(); + method public java.security.cert.X509Certificate getCertificateChecking(); + method public java.util.Date getDateAndTime(); + method public java.util.Collection getIssuerNames(); + method public java.util.Collection getIssuers(); + method public java.math.BigInteger getMaxCRL(); + method public java.math.BigInteger getMinCRL(); + method public boolean match(java.security.cert.CRL); + method public void setCertificateChecking(java.security.cert.X509Certificate); + method public void setDateAndTime(java.util.Date); + method public void setIssuerNames(java.util.Collection) throws java.io.IOException; + method public void setIssuers(java.util.Collection); + method public void setMaxCRLNumber(java.math.BigInteger); + method public void setMinCRLNumber(java.math.BigInteger); + } + + public class X509CertSelector implements java.security.cert.CertSelector { + ctor public X509CertSelector(); + method public void addPathToName(int, java.lang.String) throws java.io.IOException; + method public void addPathToName(int, byte[]) throws java.io.IOException; + method public void addSubjectAlternativeName(int, java.lang.String) throws java.io.IOException; + method public void addSubjectAlternativeName(int, byte[]) throws java.io.IOException; + method public java.lang.Object clone(); + method public byte[] getAuthorityKeyIdentifier(); + method public int getBasicConstraints(); + method public java.security.cert.X509Certificate getCertificate(); + method public java.util.Date getCertificateValid(); + method public java.util.Set getExtendedKeyUsage(); + method public javax.security.auth.x500.X500Principal getIssuer(); + method public byte[] getIssuerAsBytes() throws java.io.IOException; + method public java.lang.String getIssuerAsString(); + method public boolean[] getKeyUsage(); + method public boolean getMatchAllSubjectAltNames(); + method public byte[] getNameConstraints(); + method public java.util.Collection> getPathToNames(); + method public java.util.Set getPolicy(); + method public java.util.Date getPrivateKeyValid(); + method public java.math.BigInteger getSerialNumber(); + method public javax.security.auth.x500.X500Principal getSubject(); + method public java.util.Collection> getSubjectAlternativeNames(); + method public byte[] getSubjectAsBytes() throws java.io.IOException; + method public java.lang.String getSubjectAsString(); + method public byte[] getSubjectKeyIdentifier(); + method public java.security.PublicKey getSubjectPublicKey(); + method public java.lang.String getSubjectPublicKeyAlgID(); + method public boolean match(java.security.cert.Certificate); + method public void setAuthorityKeyIdentifier(byte[]); + method public void setBasicConstraints(int); + method public void setCertificate(java.security.cert.X509Certificate); + method public void setCertificateValid(java.util.Date); + method public void setExtendedKeyUsage(java.util.Set) throws java.io.IOException; + method public void setIssuer(javax.security.auth.x500.X500Principal); + method public void setIssuer(java.lang.String) throws java.io.IOException; + method public void setIssuer(byte[]) throws java.io.IOException; + method public void setKeyUsage(boolean[]); + method public void setMatchAllSubjectAltNames(boolean); + method public void setNameConstraints(byte[]) throws java.io.IOException; + method public void setPathToNames(java.util.Collection>) throws java.io.IOException; + method public void setPolicy(java.util.Set) throws java.io.IOException; + method public void setPrivateKeyValid(java.util.Date); + method public void setSerialNumber(java.math.BigInteger); + method public void setSubject(javax.security.auth.x500.X500Principal); + method public void setSubject(java.lang.String) throws java.io.IOException; + method public void setSubject(byte[]) throws java.io.IOException; + method public void setSubjectAlternativeNames(java.util.Collection>) throws java.io.IOException; + method public void setSubjectKeyIdentifier(byte[]); + method public void setSubjectPublicKey(java.security.PublicKey); + method public void setSubjectPublicKey(byte[]) throws java.io.IOException; + method public void setSubjectPublicKeyAlgID(java.lang.String) throws java.io.IOException; + } + + public abstract class X509Certificate extends java.security.cert.Certificate implements java.security.cert.X509Extension { + ctor protected X509Certificate(); + method public abstract void checkValidity() throws java.security.cert.CertificateExpiredException, java.security.cert.CertificateNotYetValidException; + method public abstract void checkValidity(java.util.Date) throws java.security.cert.CertificateExpiredException, java.security.cert.CertificateNotYetValidException; + method public abstract int getBasicConstraints(); + method public java.util.List getExtendedKeyUsage() throws java.security.cert.CertificateParsingException; + method public java.util.Collection> getIssuerAlternativeNames() throws java.security.cert.CertificateParsingException; + method public abstract java.security.Principal getIssuerDN(); + method public abstract boolean[] getIssuerUniqueID(); + method public javax.security.auth.x500.X500Principal getIssuerX500Principal(); + method public abstract boolean[] getKeyUsage(); + method public abstract java.util.Date getNotAfter(); + method public abstract java.util.Date getNotBefore(); + method public abstract java.math.BigInteger getSerialNumber(); + method public abstract java.lang.String getSigAlgName(); + method public abstract java.lang.String getSigAlgOID(); + method public abstract byte[] getSigAlgParams(); + method public abstract byte[] getSignature(); + method public java.util.Collection> getSubjectAlternativeNames() throws java.security.cert.CertificateParsingException; + method public abstract java.security.Principal getSubjectDN(); + method public abstract boolean[] getSubjectUniqueID(); + method public javax.security.auth.x500.X500Principal getSubjectX500Principal(); + method public abstract byte[] getTBSCertificate() throws java.security.cert.CertificateEncodingException; + method public abstract int getVersion(); + } + + public abstract interface X509Extension { + method public abstract java.util.Set getCriticalExtensionOIDs(); + method public abstract byte[] getExtensionValue(java.lang.String); + method public abstract java.util.Set getNonCriticalExtensionOIDs(); + method public abstract boolean hasUnsupportedCriticalExtension(); + } + +} + +package java.security.interfaces { + + public abstract interface DSAKey { + method public abstract java.security.interfaces.DSAParams getParams(); + } + + public abstract interface DSAKeyPairGenerator { + method public abstract void initialize(java.security.interfaces.DSAParams, java.security.SecureRandom) throws java.security.InvalidParameterException; + method public abstract void initialize(int, boolean, java.security.SecureRandom) throws java.security.InvalidParameterException; + } + + public abstract interface DSAParams { + method public abstract java.math.BigInteger getG(); + method public abstract java.math.BigInteger getP(); + method public abstract java.math.BigInteger getQ(); + } + + public abstract interface DSAPrivateKey implements java.security.interfaces.DSAKey java.security.PrivateKey { + method public abstract java.math.BigInteger getX(); + field public static final long serialVersionUID = 7776497482533790279L; // 0x6bebab423b256247L + } + + public abstract interface DSAPublicKey implements java.security.interfaces.DSAKey java.security.PublicKey { + method public abstract java.math.BigInteger getY(); + field public static final long serialVersionUID = 1234526332779022332L; // 0x1121eb28ab28c7fcL + } + + public abstract interface ECKey { + method public abstract java.security.spec.ECParameterSpec getParams(); + } + + public abstract interface ECPrivateKey implements java.security.interfaces.ECKey java.security.PrivateKey { + method public abstract java.math.BigInteger getS(); + field public static final long serialVersionUID = -7896394956925609184L; // 0x926a5e9fa2435b20L + } + + public abstract interface ECPublicKey implements java.security.interfaces.ECKey java.security.PublicKey { + method public abstract java.security.spec.ECPoint getW(); + field public static final long serialVersionUID = -3314988629879632826L; // 0xd1fecb679990cc46L + } + + public abstract interface RSAKey { + method public abstract java.math.BigInteger getModulus(); + } + + public abstract interface RSAMultiPrimePrivateCrtKey implements java.security.interfaces.RSAPrivateKey { + method public abstract java.math.BigInteger getCrtCoefficient(); + method public abstract java.security.spec.RSAOtherPrimeInfo[] getOtherPrimeInfo(); + method public abstract java.math.BigInteger getPrimeExponentP(); + method public abstract java.math.BigInteger getPrimeExponentQ(); + method public abstract java.math.BigInteger getPrimeP(); + method public abstract java.math.BigInteger getPrimeQ(); + method public abstract java.math.BigInteger getPublicExponent(); + field public static final long serialVersionUID = 618058533534628008L; // 0x893c8f62dbaf8a8L + } + + public abstract interface RSAPrivateCrtKey implements java.security.interfaces.RSAPrivateKey { + method public abstract java.math.BigInteger getCrtCoefficient(); + method public abstract java.math.BigInteger getPrimeExponentP(); + method public abstract java.math.BigInteger getPrimeExponentQ(); + method public abstract java.math.BigInteger getPrimeP(); + method public abstract java.math.BigInteger getPrimeQ(); + method public abstract java.math.BigInteger getPublicExponent(); + field public static final long serialVersionUID = -5682214253527700368L; // 0xb124b83df8d1ec70L + } + + public abstract interface RSAPrivateKey implements java.security.PrivateKey java.security.interfaces.RSAKey { + method public abstract java.math.BigInteger getPrivateExponent(); + field public static final long serialVersionUID = 5187144804936595022L; // 0x47fc70b7a8c2364eL + } + + public abstract interface RSAPublicKey implements java.security.PublicKey java.security.interfaces.RSAKey { + method public abstract java.math.BigInteger getPublicExponent(); + field public static final long serialVersionUID = -8727434096241101194L; // 0x86e1ecedeceab676L + } + +} + +package java.security.spec { + + public abstract interface AlgorithmParameterSpec { + } + + public class DSAParameterSpec implements java.security.spec.AlgorithmParameterSpec java.security.interfaces.DSAParams { + ctor public DSAParameterSpec(java.math.BigInteger, java.math.BigInteger, java.math.BigInteger); + method public java.math.BigInteger getG(); + method public java.math.BigInteger getP(); + method public java.math.BigInteger getQ(); + } + + public class DSAPrivateKeySpec implements java.security.spec.KeySpec { + ctor public DSAPrivateKeySpec(java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger); + method public java.math.BigInteger getG(); + method public java.math.BigInteger getP(); + method public java.math.BigInteger getQ(); + method public java.math.BigInteger getX(); + } + + public class DSAPublicKeySpec implements java.security.spec.KeySpec { + ctor public DSAPublicKeySpec(java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger); + method public java.math.BigInteger getG(); + method public java.math.BigInteger getP(); + method public java.math.BigInteger getQ(); + method public java.math.BigInteger getY(); + } + + public abstract interface ECField { + method public abstract int getFieldSize(); + } + + public class ECFieldF2m implements java.security.spec.ECField { + ctor public ECFieldF2m(int); + ctor public ECFieldF2m(int, java.math.BigInteger); + ctor public ECFieldF2m(int, int[]); + method public int getFieldSize(); + method public int getM(); + method public int[] getMidTermsOfReductionPolynomial(); + method public java.math.BigInteger getReductionPolynomial(); + } + + public class ECFieldFp implements java.security.spec.ECField { + ctor public ECFieldFp(java.math.BigInteger); + method public int getFieldSize(); + method public java.math.BigInteger getP(); + } + + public class ECGenParameterSpec implements java.security.spec.AlgorithmParameterSpec { + ctor public ECGenParameterSpec(java.lang.String); + method public java.lang.String getName(); + } + + public class ECParameterSpec implements java.security.spec.AlgorithmParameterSpec { + ctor public ECParameterSpec(java.security.spec.EllipticCurve, java.security.spec.ECPoint, java.math.BigInteger, int); + method public int getCofactor(); + method public java.security.spec.EllipticCurve getCurve(); + method public java.security.spec.ECPoint getGenerator(); + method public java.math.BigInteger getOrder(); + } + + public class ECPoint { + ctor public ECPoint(java.math.BigInteger, java.math.BigInteger); + method public java.math.BigInteger getAffineX(); + method public java.math.BigInteger getAffineY(); + field public static final java.security.spec.ECPoint POINT_INFINITY; + } + + public class ECPrivateKeySpec implements java.security.spec.KeySpec { + ctor public ECPrivateKeySpec(java.math.BigInteger, java.security.spec.ECParameterSpec); + method public java.security.spec.ECParameterSpec getParams(); + method public java.math.BigInteger getS(); + } + + public class ECPublicKeySpec implements java.security.spec.KeySpec { + ctor public ECPublicKeySpec(java.security.spec.ECPoint, java.security.spec.ECParameterSpec); + method public java.security.spec.ECParameterSpec getParams(); + method public java.security.spec.ECPoint getW(); + } + + public class EllipticCurve { + ctor public EllipticCurve(java.security.spec.ECField, java.math.BigInteger, java.math.BigInteger, byte[]); + ctor public EllipticCurve(java.security.spec.ECField, java.math.BigInteger, java.math.BigInteger); + method public java.math.BigInteger getA(); + method public java.math.BigInteger getB(); + method public java.security.spec.ECField getField(); + method public byte[] getSeed(); + } + + public abstract class EncodedKeySpec implements java.security.spec.KeySpec { + ctor public EncodedKeySpec(byte[]); + method public byte[] getEncoded(); + method public abstract java.lang.String getFormat(); + } + + public class InvalidKeySpecException extends java.security.GeneralSecurityException { + ctor public InvalidKeySpecException(java.lang.String); + ctor public InvalidKeySpecException(); + ctor public InvalidKeySpecException(java.lang.String, java.lang.Throwable); + ctor public InvalidKeySpecException(java.lang.Throwable); + } + + public class InvalidParameterSpecException extends java.security.GeneralSecurityException { + ctor public InvalidParameterSpecException(java.lang.String); + ctor public InvalidParameterSpecException(); + } + + public abstract interface KeySpec { + } + + public class MGF1ParameterSpec implements java.security.spec.AlgorithmParameterSpec { + ctor public MGF1ParameterSpec(java.lang.String); + method public java.lang.String getDigestAlgorithm(); + field public static final java.security.spec.MGF1ParameterSpec SHA1; + field public static final java.security.spec.MGF1ParameterSpec SHA256; + field public static final java.security.spec.MGF1ParameterSpec SHA384; + field public static final java.security.spec.MGF1ParameterSpec SHA512; + } + + public class PKCS8EncodedKeySpec extends java.security.spec.EncodedKeySpec { + ctor public PKCS8EncodedKeySpec(byte[]); + method public final java.lang.String getFormat(); + } + + public class PSSParameterSpec implements java.security.spec.AlgorithmParameterSpec { + ctor public PSSParameterSpec(int); + ctor public PSSParameterSpec(java.lang.String, java.lang.String, java.security.spec.AlgorithmParameterSpec, int, int); + method public java.lang.String getDigestAlgorithm(); + method public java.lang.String getMGFAlgorithm(); + method public java.security.spec.AlgorithmParameterSpec getMGFParameters(); + method public int getSaltLength(); + method public int getTrailerField(); + field public static final java.security.spec.PSSParameterSpec DEFAULT; + } + + public class RSAKeyGenParameterSpec implements java.security.spec.AlgorithmParameterSpec { + ctor public RSAKeyGenParameterSpec(int, java.math.BigInteger); + method public int getKeysize(); + method public java.math.BigInteger getPublicExponent(); + field public static final java.math.BigInteger F0; + field public static final java.math.BigInteger F4; + } + + public class RSAMultiPrimePrivateCrtKeySpec extends java.security.spec.RSAPrivateKeySpec { + ctor public RSAMultiPrimePrivateCrtKeySpec(java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.security.spec.RSAOtherPrimeInfo[]); + method public java.math.BigInteger getCrtCoefficient(); + method public java.security.spec.RSAOtherPrimeInfo[] getOtherPrimeInfo(); + method public java.math.BigInteger getPrimeExponentP(); + method public java.math.BigInteger getPrimeExponentQ(); + method public java.math.BigInteger getPrimeP(); + method public java.math.BigInteger getPrimeQ(); + method public java.math.BigInteger getPublicExponent(); + } + + public class RSAOtherPrimeInfo { + ctor public RSAOtherPrimeInfo(java.math.BigInteger, java.math.BigInteger, java.math.BigInteger); + method public final java.math.BigInteger getCrtCoefficient(); + method public final java.math.BigInteger getExponent(); + method public final java.math.BigInteger getPrime(); + } + + public class RSAPrivateCrtKeySpec extends java.security.spec.RSAPrivateKeySpec { + ctor public RSAPrivateCrtKeySpec(java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger); + method public java.math.BigInteger getCrtCoefficient(); + method public java.math.BigInteger getPrimeExponentP(); + method public java.math.BigInteger getPrimeExponentQ(); + method public java.math.BigInteger getPrimeP(); + method public java.math.BigInteger getPrimeQ(); + method public java.math.BigInteger getPublicExponent(); + } + + public class RSAPrivateKeySpec implements java.security.spec.KeySpec { + ctor public RSAPrivateKeySpec(java.math.BigInteger, java.math.BigInteger); + method public java.math.BigInteger getModulus(); + method public java.math.BigInteger getPrivateExponent(); + } + + public class RSAPublicKeySpec implements java.security.spec.KeySpec { + ctor public RSAPublicKeySpec(java.math.BigInteger, java.math.BigInteger); + method public java.math.BigInteger getModulus(); + method public java.math.BigInteger getPublicExponent(); + } + + public class X509EncodedKeySpec extends java.security.spec.EncodedKeySpec { + ctor public X509EncodedKeySpec(byte[]); + method public final java.lang.String getFormat(); + } + +} + +package java.sql { + + public abstract interface Array { + method public abstract void free() throws java.sql.SQLException; + method public abstract java.lang.Object getArray() throws java.sql.SQLException; + method public abstract java.lang.Object getArray(long, int) throws java.sql.SQLException; + method public abstract java.lang.Object getArray(long, int, java.util.Map>) throws java.sql.SQLException; + method public abstract java.lang.Object getArray(java.util.Map>) throws java.sql.SQLException; + method public abstract int getBaseType() throws java.sql.SQLException; + method public abstract java.lang.String getBaseTypeName() throws java.sql.SQLException; + method public abstract java.sql.ResultSet getResultSet() throws java.sql.SQLException; + method public abstract java.sql.ResultSet getResultSet(long, int) throws java.sql.SQLException; + method public abstract java.sql.ResultSet getResultSet(long, int, java.util.Map>) throws java.sql.SQLException; + method public abstract java.sql.ResultSet getResultSet(java.util.Map>) throws java.sql.SQLException; + } + + public class BatchUpdateException extends java.sql.SQLException implements java.io.Serializable { + ctor public BatchUpdateException(); + ctor public BatchUpdateException(java.lang.Throwable); + ctor public BatchUpdateException(int[], java.lang.Throwable); + ctor public BatchUpdateException(java.lang.String, int[], java.lang.Throwable); + ctor public BatchUpdateException(java.lang.String, java.lang.String, int[], java.lang.Throwable); + ctor public BatchUpdateException(java.lang.String, java.lang.String, int, int[], java.lang.Throwable); + ctor public BatchUpdateException(int[]); + ctor public BatchUpdateException(java.lang.String, int[]); + ctor public BatchUpdateException(java.lang.String, java.lang.String, int[]); + ctor public BatchUpdateException(java.lang.String, java.lang.String, int, int[]); + method public int[] getUpdateCounts(); + } + + public abstract interface Blob { + method public abstract void free() throws java.sql.SQLException; + method public abstract java.io.InputStream getBinaryStream() throws java.sql.SQLException; + method public abstract java.io.InputStream getBinaryStream(long, long) throws java.sql.SQLException; + method public abstract byte[] getBytes(long, int) throws java.sql.SQLException; + method public abstract long length() throws java.sql.SQLException; + method public abstract long position(java.sql.Blob, long) throws java.sql.SQLException; + method public abstract long position(byte[], long) throws java.sql.SQLException; + method public abstract java.io.OutputStream setBinaryStream(long) throws java.sql.SQLException; + method public abstract int setBytes(long, byte[]) throws java.sql.SQLException; + method public abstract int setBytes(long, byte[], int, int) throws java.sql.SQLException; + method public abstract void truncate(long) throws java.sql.SQLException; + } + + public abstract interface CallableStatement implements java.sql.PreparedStatement { + method public abstract java.sql.Array getArray(int) throws java.sql.SQLException; + method public abstract java.sql.Array getArray(java.lang.String) throws java.sql.SQLException; + method public abstract java.math.BigDecimal getBigDecimal(int) throws java.sql.SQLException; + method public abstract deprecated java.math.BigDecimal getBigDecimal(int, int) throws java.sql.SQLException; + method public abstract java.math.BigDecimal getBigDecimal(java.lang.String) throws java.sql.SQLException; + method public abstract java.sql.Blob getBlob(int) throws java.sql.SQLException; + method public abstract java.sql.Blob getBlob(java.lang.String) throws java.sql.SQLException; + method public abstract boolean getBoolean(int) throws java.sql.SQLException; + method public abstract boolean getBoolean(java.lang.String) throws java.sql.SQLException; + method public abstract byte getByte(int) throws java.sql.SQLException; + method public abstract byte getByte(java.lang.String) throws java.sql.SQLException; + method public abstract byte[] getBytes(int) throws java.sql.SQLException; + method public abstract byte[] getBytes(java.lang.String) throws java.sql.SQLException; + method public abstract java.io.Reader getCharacterStream(int) throws java.sql.SQLException; + method public abstract java.io.Reader getCharacterStream(java.lang.String) throws java.sql.SQLException; + method public abstract java.sql.Clob getClob(int) throws java.sql.SQLException; + method public abstract java.sql.Clob getClob(java.lang.String) throws java.sql.SQLException; + method public abstract java.sql.Date getDate(int) throws java.sql.SQLException; + method public abstract java.sql.Date getDate(int, java.util.Calendar) throws java.sql.SQLException; + method public abstract java.sql.Date getDate(java.lang.String) throws java.sql.SQLException; + method public abstract java.sql.Date getDate(java.lang.String, java.util.Calendar) throws java.sql.SQLException; + method public abstract double getDouble(int) throws java.sql.SQLException; + method public abstract double getDouble(java.lang.String) throws java.sql.SQLException; + method public abstract float getFloat(int) throws java.sql.SQLException; + method public abstract float getFloat(java.lang.String) throws java.sql.SQLException; + method public abstract int getInt(int) throws java.sql.SQLException; + method public abstract int getInt(java.lang.String) throws java.sql.SQLException; + method public abstract long getLong(int) throws java.sql.SQLException; + method public abstract long getLong(java.lang.String) throws java.sql.SQLException; + method public abstract java.io.Reader getNCharacterStream(int) throws java.sql.SQLException; + method public abstract java.io.Reader getNCharacterStream(java.lang.String) throws java.sql.SQLException; + method public abstract java.sql.NClob getNClob(int) throws java.sql.SQLException; + method public abstract java.sql.NClob getNClob(java.lang.String) throws java.sql.SQLException; + method public abstract java.lang.String getNString(int) throws java.sql.SQLException; + method public abstract java.lang.String getNString(java.lang.String) throws java.sql.SQLException; + method public abstract java.lang.Object getObject(int) throws java.sql.SQLException; + method public abstract java.lang.Object getObject(int, java.util.Map>) throws java.sql.SQLException; + method public abstract java.lang.Object getObject(java.lang.String) throws java.sql.SQLException; + method public abstract java.lang.Object getObject(java.lang.String, java.util.Map>) throws java.sql.SQLException; + method public abstract java.sql.Ref getRef(int) throws java.sql.SQLException; + method public abstract java.sql.Ref getRef(java.lang.String) throws java.sql.SQLException; + method public abstract java.sql.RowId getRowId(int) throws java.sql.SQLException; + method public abstract java.sql.RowId getRowId(java.lang.String) throws java.sql.SQLException; + method public abstract java.sql.SQLXML getSQLXML(int) throws java.sql.SQLException; + method public abstract java.sql.SQLXML getSQLXML(java.lang.String) throws java.sql.SQLException; + method public abstract short getShort(int) throws java.sql.SQLException; + method public abstract short getShort(java.lang.String) throws java.sql.SQLException; + method public abstract java.lang.String getString(int) throws java.sql.SQLException; + method public abstract java.lang.String getString(java.lang.String) throws java.sql.SQLException; + method public abstract java.sql.Time getTime(int) throws java.sql.SQLException; + method public abstract java.sql.Time getTime(int, java.util.Calendar) throws java.sql.SQLException; + method public abstract java.sql.Time getTime(java.lang.String) throws java.sql.SQLException; + method public abstract java.sql.Time getTime(java.lang.String, java.util.Calendar) throws java.sql.SQLException; + method public abstract java.sql.Timestamp getTimestamp(int) throws java.sql.SQLException; + method public abstract java.sql.Timestamp getTimestamp(int, java.util.Calendar) throws java.sql.SQLException; + method public abstract java.sql.Timestamp getTimestamp(java.lang.String) throws java.sql.SQLException; + method public abstract java.sql.Timestamp getTimestamp(java.lang.String, java.util.Calendar) throws java.sql.SQLException; + method public abstract java.net.URL getURL(int) throws java.sql.SQLException; + method public abstract java.net.URL getURL(java.lang.String) throws java.sql.SQLException; + method public abstract void registerOutParameter(int, int) throws java.sql.SQLException; + method public abstract void registerOutParameter(int, int, int) throws java.sql.SQLException; + method public abstract void registerOutParameter(int, int, java.lang.String) throws java.sql.SQLException; + method public abstract void registerOutParameter(java.lang.String, int) throws java.sql.SQLException; + method public abstract void registerOutParameter(java.lang.String, int, int) throws java.sql.SQLException; + method public abstract void registerOutParameter(java.lang.String, int, java.lang.String) throws java.sql.SQLException; + method public abstract void setAsciiStream(java.lang.String, java.io.InputStream, int) throws java.sql.SQLException; + method public abstract void setAsciiStream(java.lang.String, java.io.InputStream, long) throws java.sql.SQLException; + method public abstract void setAsciiStream(java.lang.String, java.io.InputStream) throws java.sql.SQLException; + method public abstract void setBigDecimal(java.lang.String, java.math.BigDecimal) throws java.sql.SQLException; + method public abstract void setBinaryStream(java.lang.String, java.io.InputStream, int) throws java.sql.SQLException; + method public abstract void setBinaryStream(java.lang.String, java.io.InputStream, long) throws java.sql.SQLException; + method public abstract void setBinaryStream(java.lang.String, java.io.InputStream) throws java.sql.SQLException; + method public abstract void setBlob(java.lang.String, java.io.InputStream, long) throws java.sql.SQLException; + method public abstract void setBlob(java.lang.String, java.sql.Blob) throws java.sql.SQLException; + method public abstract void setBlob(java.lang.String, java.io.InputStream) throws java.sql.SQLException; + method public abstract void setBoolean(java.lang.String, boolean) throws java.sql.SQLException; + method public abstract void setByte(java.lang.String, byte) throws java.sql.SQLException; + method public abstract void setBytes(java.lang.String, byte[]) throws java.sql.SQLException; + method public abstract void setCharacterStream(java.lang.String, java.io.Reader, int) throws java.sql.SQLException; + method public abstract void setCharacterStream(java.lang.String, java.io.Reader, long) throws java.sql.SQLException; + method public abstract void setCharacterStream(java.lang.String, java.io.Reader) throws java.sql.SQLException; + method public abstract void setClob(java.lang.String, java.io.Reader, long) throws java.sql.SQLException; + method public abstract void setClob(java.lang.String, java.sql.Clob) throws java.sql.SQLException; + method public abstract void setClob(java.lang.String, java.io.Reader) throws java.sql.SQLException; + method public abstract void setDate(java.lang.String, java.sql.Date) throws java.sql.SQLException; + method public abstract void setDate(java.lang.String, java.sql.Date, java.util.Calendar) throws java.sql.SQLException; + method public abstract void setDouble(java.lang.String, double) throws java.sql.SQLException; + method public abstract void setFloat(java.lang.String, float) throws java.sql.SQLException; + method public abstract void setInt(java.lang.String, int) throws java.sql.SQLException; + method public abstract void setLong(java.lang.String, long) throws java.sql.SQLException; + method public abstract void setNCharacterStream(java.lang.String, java.io.Reader, long) throws java.sql.SQLException; + method public abstract void setNCharacterStream(java.lang.String, java.io.Reader) throws java.sql.SQLException; + method public abstract void setNClob(java.lang.String, java.sql.NClob) throws java.sql.SQLException; + method public abstract void setNClob(java.lang.String, java.io.Reader, long) throws java.sql.SQLException; + method public abstract void setNClob(java.lang.String, java.io.Reader) throws java.sql.SQLException; + method public abstract void setNString(java.lang.String, java.lang.String) throws java.sql.SQLException; + method public abstract void setNull(java.lang.String, int) throws java.sql.SQLException; + method public abstract void setNull(java.lang.String, int, java.lang.String) throws java.sql.SQLException; + method public abstract void setObject(java.lang.String, java.lang.Object) throws java.sql.SQLException; + method public abstract void setObject(java.lang.String, java.lang.Object, int) throws java.sql.SQLException; + method public abstract void setObject(java.lang.String, java.lang.Object, int, int) throws java.sql.SQLException; + method public abstract void setRowId(java.lang.String, java.sql.RowId) throws java.sql.SQLException; + method public abstract void setSQLXML(java.lang.String, java.sql.SQLXML) throws java.sql.SQLException; + method public abstract void setShort(java.lang.String, short) throws java.sql.SQLException; + method public abstract void setString(java.lang.String, java.lang.String) throws java.sql.SQLException; + method public abstract void setTime(java.lang.String, java.sql.Time) throws java.sql.SQLException; + method public abstract void setTime(java.lang.String, java.sql.Time, java.util.Calendar) throws java.sql.SQLException; + method public abstract void setTimestamp(java.lang.String, java.sql.Timestamp) throws java.sql.SQLException; + method public abstract void setTimestamp(java.lang.String, java.sql.Timestamp, java.util.Calendar) throws java.sql.SQLException; + method public abstract void setURL(java.lang.String, java.net.URL) throws java.sql.SQLException; + method public abstract boolean wasNull() throws java.sql.SQLException; + } + + public final class ClientInfoStatus extends java.lang.Enum { + method public static java.sql.ClientInfoStatus valueOf(java.lang.String); + method public static final java.sql.ClientInfoStatus[] values(); + enum_constant public static final java.sql.ClientInfoStatus REASON_UNKNOWN; + enum_constant public static final java.sql.ClientInfoStatus REASON_UNKNOWN_PROPERTY; + enum_constant public static final java.sql.ClientInfoStatus REASON_VALUE_INVALID; + enum_constant public static final java.sql.ClientInfoStatus REASON_VALUE_TRUNCATED; + } + + public abstract interface Clob { + method public abstract void free() throws java.sql.SQLException; + method public abstract java.io.InputStream getAsciiStream() throws java.sql.SQLException; + method public abstract java.io.Reader getCharacterStream() throws java.sql.SQLException; + method public abstract java.io.Reader getCharacterStream(long, long) throws java.sql.SQLException; + method public abstract java.lang.String getSubString(long, int) throws java.sql.SQLException; + method public abstract long length() throws java.sql.SQLException; + method public abstract long position(java.sql.Clob, long) throws java.sql.SQLException; + method public abstract long position(java.lang.String, long) throws java.sql.SQLException; + method public abstract java.io.OutputStream setAsciiStream(long) throws java.sql.SQLException; + method public abstract java.io.Writer setCharacterStream(long) throws java.sql.SQLException; + method public abstract int setString(long, java.lang.String) throws java.sql.SQLException; + method public abstract int setString(long, java.lang.String, int, int) throws java.sql.SQLException; + method public abstract void truncate(long) throws java.sql.SQLException; + } + + public abstract interface Connection implements java.lang.AutoCloseable java.sql.Wrapper { + method public abstract void clearWarnings() throws java.sql.SQLException; + method public abstract void close() throws java.sql.SQLException; + method public abstract void commit() throws java.sql.SQLException; + method public abstract java.sql.Array createArrayOf(java.lang.String, java.lang.Object[]) throws java.sql.SQLException; + method public abstract java.sql.Blob createBlob() throws java.sql.SQLException; + method public abstract java.sql.Clob createClob() throws java.sql.SQLException; + method public abstract java.sql.NClob createNClob() throws java.sql.SQLException; + method public abstract java.sql.SQLXML createSQLXML() throws java.sql.SQLException; + method public abstract java.sql.Statement createStatement() throws java.sql.SQLException; + method public abstract java.sql.Statement createStatement(int, int) throws java.sql.SQLException; + method public abstract java.sql.Statement createStatement(int, int, int) throws java.sql.SQLException; + method public abstract java.sql.Struct createStruct(java.lang.String, java.lang.Object[]) throws java.sql.SQLException; + method public abstract boolean getAutoCommit() throws java.sql.SQLException; + method public abstract java.lang.String getCatalog() throws java.sql.SQLException; + method public abstract java.lang.String getClientInfo(java.lang.String) throws java.sql.SQLException; + method public abstract java.util.Properties getClientInfo() throws java.sql.SQLException; + method public abstract int getHoldability() throws java.sql.SQLException; + method public abstract java.sql.DatabaseMetaData getMetaData() throws java.sql.SQLException; + method public abstract int getTransactionIsolation() throws java.sql.SQLException; + method public abstract java.util.Map> getTypeMap() throws java.sql.SQLException; + method public abstract java.sql.SQLWarning getWarnings() throws java.sql.SQLException; + method public abstract boolean isClosed() throws java.sql.SQLException; + method public abstract boolean isReadOnly() throws java.sql.SQLException; + method public abstract boolean isValid(int) throws java.sql.SQLException; + method public abstract java.lang.String nativeSQL(java.lang.String) throws java.sql.SQLException; + method public abstract java.sql.CallableStatement prepareCall(java.lang.String) throws java.sql.SQLException; + method public abstract java.sql.CallableStatement prepareCall(java.lang.String, int, int) throws java.sql.SQLException; + method public abstract java.sql.CallableStatement prepareCall(java.lang.String, int, int, int) throws java.sql.SQLException; + method public abstract java.sql.PreparedStatement prepareStatement(java.lang.String) throws java.sql.SQLException; + method public abstract java.sql.PreparedStatement prepareStatement(java.lang.String, int) throws java.sql.SQLException; + method public abstract java.sql.PreparedStatement prepareStatement(java.lang.String, int[]) throws java.sql.SQLException; + method public abstract java.sql.PreparedStatement prepareStatement(java.lang.String, int, int) throws java.sql.SQLException; + method public abstract java.sql.PreparedStatement prepareStatement(java.lang.String, int, int, int) throws java.sql.SQLException; + method public abstract java.sql.PreparedStatement prepareStatement(java.lang.String, java.lang.String[]) throws java.sql.SQLException; + method public abstract void releaseSavepoint(java.sql.Savepoint) throws java.sql.SQLException; + method public abstract void rollback() throws java.sql.SQLException; + method public abstract void rollback(java.sql.Savepoint) throws java.sql.SQLException; + method public abstract void setAutoCommit(boolean) throws java.sql.SQLException; + method public abstract void setCatalog(java.lang.String) throws java.sql.SQLException; + method public abstract void setClientInfo(java.lang.String, java.lang.String) throws java.sql.SQLClientInfoException; + method public abstract void setClientInfo(java.util.Properties) throws java.sql.SQLClientInfoException; + method public abstract void setHoldability(int) throws java.sql.SQLException; + method public abstract void setReadOnly(boolean) throws java.sql.SQLException; + method public abstract java.sql.Savepoint setSavepoint() throws java.sql.SQLException; + method public abstract java.sql.Savepoint setSavepoint(java.lang.String) throws java.sql.SQLException; + method public abstract void setTransactionIsolation(int) throws java.sql.SQLException; + method public abstract void setTypeMap(java.util.Map>) throws java.sql.SQLException; + field public static final int TRANSACTION_NONE = 0; // 0x0 + field public static final int TRANSACTION_READ_COMMITTED = 2; // 0x2 + field public static final int TRANSACTION_READ_UNCOMMITTED = 1; // 0x1 + field public static final int TRANSACTION_REPEATABLE_READ = 4; // 0x4 + field public static final int TRANSACTION_SERIALIZABLE = 8; // 0x8 + } + + public class DataTruncation extends java.sql.SQLWarning implements java.io.Serializable { + ctor public DataTruncation(int, boolean, boolean, int, int); + ctor public DataTruncation(int, boolean, boolean, int, int, java.lang.Throwable); + method public int getDataSize(); + method public int getIndex(); + method public boolean getParameter(); + method public boolean getRead(); + method public int getTransferSize(); + } + + public abstract interface DatabaseMetaData implements java.sql.Wrapper { + method public abstract boolean allProceduresAreCallable() throws java.sql.SQLException; + method public abstract boolean allTablesAreSelectable() throws java.sql.SQLException; + method public abstract boolean autoCommitFailureClosesAllResultSets() throws java.sql.SQLException; + method public abstract boolean dataDefinitionCausesTransactionCommit() throws java.sql.SQLException; + method public abstract boolean dataDefinitionIgnoredInTransactions() throws java.sql.SQLException; + method public abstract boolean deletesAreDetected(int) throws java.sql.SQLException; + method public abstract boolean doesMaxRowSizeIncludeBlobs() throws java.sql.SQLException; + method public abstract java.sql.ResultSet getAttributes(java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.sql.SQLException; + method public abstract java.sql.ResultSet getBestRowIdentifier(java.lang.String, java.lang.String, java.lang.String, int, boolean) throws java.sql.SQLException; + method public abstract java.lang.String getCatalogSeparator() throws java.sql.SQLException; + method public abstract java.lang.String getCatalogTerm() throws java.sql.SQLException; + method public abstract java.sql.ResultSet getCatalogs() throws java.sql.SQLException; + method public abstract java.sql.ResultSet getClientInfoProperties() throws java.sql.SQLException; + method public abstract java.sql.ResultSet getColumnPrivileges(java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.sql.SQLException; + method public abstract java.sql.ResultSet getColumns(java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.sql.SQLException; + method public abstract java.sql.Connection getConnection() throws java.sql.SQLException; + method public abstract java.sql.ResultSet getCrossReference(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.sql.SQLException; + method public abstract int getDatabaseMajorVersion() throws java.sql.SQLException; + method public abstract int getDatabaseMinorVersion() throws java.sql.SQLException; + method public abstract java.lang.String getDatabaseProductName() throws java.sql.SQLException; + method public abstract java.lang.String getDatabaseProductVersion() throws java.sql.SQLException; + method public abstract int getDefaultTransactionIsolation() throws java.sql.SQLException; + method public abstract int getDriverMajorVersion(); + method public abstract int getDriverMinorVersion(); + method public abstract java.lang.String getDriverName() throws java.sql.SQLException; + method public abstract java.lang.String getDriverVersion() throws java.sql.SQLException; + method public abstract java.sql.ResultSet getExportedKeys(java.lang.String, java.lang.String, java.lang.String) throws java.sql.SQLException; + method public abstract java.lang.String getExtraNameCharacters() throws java.sql.SQLException; + method public abstract java.sql.ResultSet getFunctionColumns(java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.sql.SQLException; + method public abstract java.sql.ResultSet getFunctions(java.lang.String, java.lang.String, java.lang.String) throws java.sql.SQLException; + method public abstract java.lang.String getIdentifierQuoteString() throws java.sql.SQLException; + method public abstract java.sql.ResultSet getImportedKeys(java.lang.String, java.lang.String, java.lang.String) throws java.sql.SQLException; + method public abstract java.sql.ResultSet getIndexInfo(java.lang.String, java.lang.String, java.lang.String, boolean, boolean) throws java.sql.SQLException; + method public abstract int getJDBCMajorVersion() throws java.sql.SQLException; + method public abstract int getJDBCMinorVersion() throws java.sql.SQLException; + method public abstract int getMaxBinaryLiteralLength() throws java.sql.SQLException; + method public abstract int getMaxCatalogNameLength() throws java.sql.SQLException; + method public abstract int getMaxCharLiteralLength() throws java.sql.SQLException; + method public abstract int getMaxColumnNameLength() throws java.sql.SQLException; + method public abstract int getMaxColumnsInGroupBy() throws java.sql.SQLException; + method public abstract int getMaxColumnsInIndex() throws java.sql.SQLException; + method public abstract int getMaxColumnsInOrderBy() throws java.sql.SQLException; + method public abstract int getMaxColumnsInSelect() throws java.sql.SQLException; + method public abstract int getMaxColumnsInTable() throws java.sql.SQLException; + method public abstract int getMaxConnections() throws java.sql.SQLException; + method public abstract int getMaxCursorNameLength() throws java.sql.SQLException; + method public abstract int getMaxIndexLength() throws java.sql.SQLException; + method public abstract int getMaxProcedureNameLength() throws java.sql.SQLException; + method public abstract int getMaxRowSize() throws java.sql.SQLException; + method public abstract int getMaxSchemaNameLength() throws java.sql.SQLException; + method public abstract int getMaxStatementLength() throws java.sql.SQLException; + method public abstract int getMaxStatements() throws java.sql.SQLException; + method public abstract int getMaxTableNameLength() throws java.sql.SQLException; + method public abstract int getMaxTablesInSelect() throws java.sql.SQLException; + method public abstract int getMaxUserNameLength() throws java.sql.SQLException; + method public abstract java.lang.String getNumericFunctions() throws java.sql.SQLException; + method public abstract java.sql.ResultSet getPrimaryKeys(java.lang.String, java.lang.String, java.lang.String) throws java.sql.SQLException; + method public abstract java.sql.ResultSet getProcedureColumns(java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.sql.SQLException; + method public abstract java.lang.String getProcedureTerm() throws java.sql.SQLException; + method public abstract java.sql.ResultSet getProcedures(java.lang.String, java.lang.String, java.lang.String) throws java.sql.SQLException; + method public abstract int getResultSetHoldability() throws java.sql.SQLException; + method public abstract java.sql.RowIdLifetime getRowIdLifetime() throws java.sql.SQLException; + method public abstract java.lang.String getSQLKeywords() throws java.sql.SQLException; + method public abstract int getSQLStateType() throws java.sql.SQLException; + method public abstract java.lang.String getSchemaTerm() throws java.sql.SQLException; + method public abstract java.sql.ResultSet getSchemas() throws java.sql.SQLException; + method public abstract java.sql.ResultSet getSchemas(java.lang.String, java.lang.String) throws java.sql.SQLException; + method public abstract java.lang.String getSearchStringEscape() throws java.sql.SQLException; + method public abstract java.lang.String getStringFunctions() throws java.sql.SQLException; + method public abstract java.sql.ResultSet getSuperTables(java.lang.String, java.lang.String, java.lang.String) throws java.sql.SQLException; + method public abstract java.sql.ResultSet getSuperTypes(java.lang.String, java.lang.String, java.lang.String) throws java.sql.SQLException; + method public abstract java.lang.String getSystemFunctions() throws java.sql.SQLException; + method public abstract java.sql.ResultSet getTablePrivileges(java.lang.String, java.lang.String, java.lang.String) throws java.sql.SQLException; + method public abstract java.sql.ResultSet getTableTypes() throws java.sql.SQLException; + method public abstract java.sql.ResultSet getTables(java.lang.String, java.lang.String, java.lang.String, java.lang.String[]) throws java.sql.SQLException; + method public abstract java.lang.String getTimeDateFunctions() throws java.sql.SQLException; + method public abstract java.sql.ResultSet getTypeInfo() throws java.sql.SQLException; + method public abstract java.sql.ResultSet getUDTs(java.lang.String, java.lang.String, java.lang.String, int[]) throws java.sql.SQLException; + method public abstract java.lang.String getURL() throws java.sql.SQLException; + method public abstract java.lang.String getUserName() throws java.sql.SQLException; + method public abstract java.sql.ResultSet getVersionColumns(java.lang.String, java.lang.String, java.lang.String) throws java.sql.SQLException; + method public abstract boolean insertsAreDetected(int) throws java.sql.SQLException; + method public abstract boolean isCatalogAtStart() throws java.sql.SQLException; + method public abstract boolean isReadOnly() throws java.sql.SQLException; + method public abstract boolean locatorsUpdateCopy() throws java.sql.SQLException; + method public abstract boolean nullPlusNonNullIsNull() throws java.sql.SQLException; + method public abstract boolean nullsAreSortedAtEnd() throws java.sql.SQLException; + method public abstract boolean nullsAreSortedAtStart() throws java.sql.SQLException; + method public abstract boolean nullsAreSortedHigh() throws java.sql.SQLException; + method public abstract boolean nullsAreSortedLow() throws java.sql.SQLException; + method public abstract boolean othersDeletesAreVisible(int) throws java.sql.SQLException; + method public abstract boolean othersInsertsAreVisible(int) throws java.sql.SQLException; + method public abstract boolean othersUpdatesAreVisible(int) throws java.sql.SQLException; + method public abstract boolean ownDeletesAreVisible(int) throws java.sql.SQLException; + method public abstract boolean ownInsertsAreVisible(int) throws java.sql.SQLException; + method public abstract boolean ownUpdatesAreVisible(int) throws java.sql.SQLException; + method public abstract boolean storesLowerCaseIdentifiers() throws java.sql.SQLException; + method public abstract boolean storesLowerCaseQuotedIdentifiers() throws java.sql.SQLException; + method public abstract boolean storesMixedCaseIdentifiers() throws java.sql.SQLException; + method public abstract boolean storesMixedCaseQuotedIdentifiers() throws java.sql.SQLException; + method public abstract boolean storesUpperCaseIdentifiers() throws java.sql.SQLException; + method public abstract boolean storesUpperCaseQuotedIdentifiers() throws java.sql.SQLException; + method public abstract boolean supportsANSI92EntryLevelSQL() throws java.sql.SQLException; + method public abstract boolean supportsANSI92FullSQL() throws java.sql.SQLException; + method public abstract boolean supportsANSI92IntermediateSQL() throws java.sql.SQLException; + method public abstract boolean supportsAlterTableWithAddColumn() throws java.sql.SQLException; + method public abstract boolean supportsAlterTableWithDropColumn() throws java.sql.SQLException; + method public abstract boolean supportsBatchUpdates() throws java.sql.SQLException; + method public abstract boolean supportsCatalogsInDataManipulation() throws java.sql.SQLException; + method public abstract boolean supportsCatalogsInIndexDefinitions() throws java.sql.SQLException; + method public abstract boolean supportsCatalogsInPrivilegeDefinitions() throws java.sql.SQLException; + method public abstract boolean supportsCatalogsInProcedureCalls() throws java.sql.SQLException; + method public abstract boolean supportsCatalogsInTableDefinitions() throws java.sql.SQLException; + method public abstract boolean supportsColumnAliasing() throws java.sql.SQLException; + method public abstract boolean supportsConvert() throws java.sql.SQLException; + method public abstract boolean supportsConvert(int, int) throws java.sql.SQLException; + method public abstract boolean supportsCoreSQLGrammar() throws java.sql.SQLException; + method public abstract boolean supportsCorrelatedSubqueries() throws java.sql.SQLException; + method public abstract boolean supportsDataDefinitionAndDataManipulationTransactions() throws java.sql.SQLException; + method public abstract boolean supportsDataManipulationTransactionsOnly() throws java.sql.SQLException; + method public abstract boolean supportsDifferentTableCorrelationNames() throws java.sql.SQLException; + method public abstract boolean supportsExpressionsInOrderBy() throws java.sql.SQLException; + method public abstract boolean supportsExtendedSQLGrammar() throws java.sql.SQLException; + method public abstract boolean supportsFullOuterJoins() throws java.sql.SQLException; + method public abstract boolean supportsGetGeneratedKeys() throws java.sql.SQLException; + method public abstract boolean supportsGroupBy() throws java.sql.SQLException; + method public abstract boolean supportsGroupByBeyondSelect() throws java.sql.SQLException; + method public abstract boolean supportsGroupByUnrelated() throws java.sql.SQLException; + method public abstract boolean supportsIntegrityEnhancementFacility() throws java.sql.SQLException; + method public abstract boolean supportsLikeEscapeClause() throws java.sql.SQLException; + method public abstract boolean supportsLimitedOuterJoins() throws java.sql.SQLException; + method public abstract boolean supportsMinimumSQLGrammar() throws java.sql.SQLException; + method public abstract boolean supportsMixedCaseIdentifiers() throws java.sql.SQLException; + method public abstract boolean supportsMixedCaseQuotedIdentifiers() throws java.sql.SQLException; + method public abstract boolean supportsMultipleOpenResults() throws java.sql.SQLException; + method public abstract boolean supportsMultipleResultSets() throws java.sql.SQLException; + method public abstract boolean supportsMultipleTransactions() throws java.sql.SQLException; + method public abstract boolean supportsNamedParameters() throws java.sql.SQLException; + method public abstract boolean supportsNonNullableColumns() throws java.sql.SQLException; + method public abstract boolean supportsOpenCursorsAcrossCommit() throws java.sql.SQLException; + method public abstract boolean supportsOpenCursorsAcrossRollback() throws java.sql.SQLException; + method public abstract boolean supportsOpenStatementsAcrossCommit() throws java.sql.SQLException; + method public abstract boolean supportsOpenStatementsAcrossRollback() throws java.sql.SQLException; + method public abstract boolean supportsOrderByUnrelated() throws java.sql.SQLException; + method public abstract boolean supportsOuterJoins() throws java.sql.SQLException; + method public abstract boolean supportsPositionedDelete() throws java.sql.SQLException; + method public abstract boolean supportsPositionedUpdate() throws java.sql.SQLException; + method public abstract boolean supportsResultSetConcurrency(int, int) throws java.sql.SQLException; + method public abstract boolean supportsResultSetHoldability(int) throws java.sql.SQLException; + method public abstract boolean supportsResultSetType(int) throws java.sql.SQLException; + method public abstract boolean supportsSavepoints() throws java.sql.SQLException; + method public abstract boolean supportsSchemasInDataManipulation() throws java.sql.SQLException; + method public abstract boolean supportsSchemasInIndexDefinitions() throws java.sql.SQLException; + method public abstract boolean supportsSchemasInPrivilegeDefinitions() throws java.sql.SQLException; + method public abstract boolean supportsSchemasInProcedureCalls() throws java.sql.SQLException; + method public abstract boolean supportsSchemasInTableDefinitions() throws java.sql.SQLException; + method public abstract boolean supportsSelectForUpdate() throws java.sql.SQLException; + method public abstract boolean supportsStatementPooling() throws java.sql.SQLException; + method public abstract boolean supportsStoredFunctionsUsingCallSyntax() throws java.sql.SQLException; + method public abstract boolean supportsStoredProcedures() throws java.sql.SQLException; + method public abstract boolean supportsSubqueriesInComparisons() throws java.sql.SQLException; + method public abstract boolean supportsSubqueriesInExists() throws java.sql.SQLException; + method public abstract boolean supportsSubqueriesInIns() throws java.sql.SQLException; + method public abstract boolean supportsSubqueriesInQuantifieds() throws java.sql.SQLException; + method public abstract boolean supportsTableCorrelationNames() throws java.sql.SQLException; + method public abstract boolean supportsTransactionIsolationLevel(int) throws java.sql.SQLException; + method public abstract boolean supportsTransactions() throws java.sql.SQLException; + method public abstract boolean supportsUnion() throws java.sql.SQLException; + method public abstract boolean supportsUnionAll() throws java.sql.SQLException; + method public abstract boolean updatesAreDetected(int) throws java.sql.SQLException; + method public abstract boolean usesLocalFilePerTable() throws java.sql.SQLException; + method public abstract boolean usesLocalFiles() throws java.sql.SQLException; + field public static final short attributeNoNulls = 0; // 0x0 + field public static final short attributeNullable = 1; // 0x1 + field public static final short attributeNullableUnknown = 2; // 0x2 + field public static final int bestRowNotPseudo = 1; // 0x1 + field public static final int bestRowPseudo = 2; // 0x2 + field public static final int bestRowSession = 2; // 0x2 + field public static final int bestRowTemporary = 0; // 0x0 + field public static final int bestRowTransaction = 1; // 0x1 + field public static final int bestRowUnknown = 0; // 0x0 + field public static final int columnNoNulls = 0; // 0x0 + field public static final int columnNullable = 1; // 0x1 + field public static final int columnNullableUnknown = 2; // 0x2 + field public static final int functionColumnIn = 1; // 0x1 + field public static final int functionColumnInOut = 2; // 0x2 + field public static final int functionColumnOut = 3; // 0x3 + field public static final int functionColumnResult = 5; // 0x5 + field public static final int functionColumnUnknown = 0; // 0x0 + field public static final int functionNoNulls = 0; // 0x0 + field public static final int functionNoTable = 1; // 0x1 + field public static final int functionNullable = 1; // 0x1 + field public static final int functionNullableUnknown = 2; // 0x2 + field public static final int functionResultUnknown = 0; // 0x0 + field public static final int functionReturn = 4; // 0x4 + field public static final int functionReturnsTable = 2; // 0x2 + field public static final int importedKeyCascade = 0; // 0x0 + field public static final int importedKeyInitiallyDeferred = 5; // 0x5 + field public static final int importedKeyInitiallyImmediate = 6; // 0x6 + field public static final int importedKeyNoAction = 3; // 0x3 + field public static final int importedKeyNotDeferrable = 7; // 0x7 + field public static final int importedKeyRestrict = 1; // 0x1 + field public static final int importedKeySetDefault = 4; // 0x4 + field public static final int importedKeySetNull = 2; // 0x2 + field public static final int procedureColumnIn = 1; // 0x1 + field public static final int procedureColumnInOut = 2; // 0x2 + field public static final int procedureColumnOut = 4; // 0x4 + field public static final int procedureColumnResult = 3; // 0x3 + field public static final int procedureColumnReturn = 5; // 0x5 + field public static final int procedureColumnUnknown = 0; // 0x0 + field public static final int procedureNoNulls = 0; // 0x0 + field public static final int procedureNoResult = 1; // 0x1 + field public static final int procedureNullable = 1; // 0x1 + field public static final int procedureNullableUnknown = 2; // 0x2 + field public static final int procedureResultUnknown = 0; // 0x0 + field public static final int procedureReturnsResult = 2; // 0x2 + field public static final int sqlStateSQL = 2; // 0x2 + field public static final int sqlStateSQL99 = 2; // 0x2 + field public static final int sqlStateXOpen = 1; // 0x1 + field public static final short tableIndexClustered = 1; // 0x1 + field public static final short tableIndexHashed = 2; // 0x2 + field public static final short tableIndexOther = 3; // 0x3 + field public static final short tableIndexStatistic = 0; // 0x0 + field public static final int typeNoNulls = 0; // 0x0 + field public static final int typeNullable = 1; // 0x1 + field public static final int typeNullableUnknown = 2; // 0x2 + field public static final int typePredBasic = 2; // 0x2 + field public static final int typePredChar = 1; // 0x1 + field public static final int typePredNone = 0; // 0x0 + field public static final int typeSearchable = 3; // 0x3 + field public static final int versionColumnNotPseudo = 1; // 0x1 + field public static final int versionColumnPseudo = 2; // 0x2 + field public static final int versionColumnUnknown = 0; // 0x0 + } + + public class Date extends java.util.Date { + ctor public deprecated Date(int, int, int); + ctor public Date(long); + method public static java.sql.Date valueOf(java.lang.String); + } + + public abstract interface Driver { + method public abstract boolean acceptsURL(java.lang.String) throws java.sql.SQLException; + method public abstract java.sql.Connection connect(java.lang.String, java.util.Properties) throws java.sql.SQLException; + method public abstract int getMajorVersion(); + method public abstract int getMinorVersion(); + method public abstract java.sql.DriverPropertyInfo[] getPropertyInfo(java.lang.String, java.util.Properties) throws java.sql.SQLException; + method public abstract boolean jdbcCompliant(); + } + + public class DriverManager { + method public static void deregisterDriver(java.sql.Driver) throws java.sql.SQLException; + method public static java.sql.Connection getConnection(java.lang.String) throws java.sql.SQLException; + method public static java.sql.Connection getConnection(java.lang.String, java.util.Properties) throws java.sql.SQLException; + method public static java.sql.Connection getConnection(java.lang.String, java.lang.String, java.lang.String) throws java.sql.SQLException; + method public static java.sql.Driver getDriver(java.lang.String) throws java.sql.SQLException; + method public static java.util.Enumeration getDrivers(); + method public static deprecated java.io.PrintStream getLogStream(); + method public static java.io.PrintWriter getLogWriter(); + method public static int getLoginTimeout(); + method public static void println(java.lang.String); + method public static void registerDriver(java.sql.Driver) throws java.sql.SQLException; + method public static deprecated void setLogStream(java.io.PrintStream); + method public static void setLogWriter(java.io.PrintWriter); + method public static void setLoginTimeout(int); + } + + public class DriverPropertyInfo { + ctor public DriverPropertyInfo(java.lang.String, java.lang.String); + field public java.lang.String[] choices; + field public java.lang.String description; + field public java.lang.String name; + field public boolean required; + field public java.lang.String value; + } + + public abstract interface NClob implements java.sql.Clob { + } + + public abstract interface ParameterMetaData implements java.sql.Wrapper { + method public abstract java.lang.String getParameterClassName(int) throws java.sql.SQLException; + method public abstract int getParameterCount() throws java.sql.SQLException; + method public abstract int getParameterMode(int) throws java.sql.SQLException; + method public abstract int getParameterType(int) throws java.sql.SQLException; + method public abstract java.lang.String getParameterTypeName(int) throws java.sql.SQLException; + method public abstract int getPrecision(int) throws java.sql.SQLException; + method public abstract int getScale(int) throws java.sql.SQLException; + method public abstract int isNullable(int) throws java.sql.SQLException; + method public abstract boolean isSigned(int) throws java.sql.SQLException; + field public static final int parameterModeIn = 1; // 0x1 + field public static final int parameterModeInOut = 2; // 0x2 + field public static final int parameterModeOut = 4; // 0x4 + field public static final int parameterModeUnknown = 0; // 0x0 + field public static final int parameterNoNulls = 0; // 0x0 + field public static final int parameterNullable = 1; // 0x1 + field public static final int parameterNullableUnknown = 2; // 0x2 + } + + public abstract interface PreparedStatement implements java.sql.Statement { + method public abstract void addBatch() throws java.sql.SQLException; + method public abstract void clearParameters() throws java.sql.SQLException; + method public abstract boolean execute() throws java.sql.SQLException; + method public abstract java.sql.ResultSet executeQuery() throws java.sql.SQLException; + method public abstract int executeUpdate() throws java.sql.SQLException; + method public abstract java.sql.ResultSetMetaData getMetaData() throws java.sql.SQLException; + method public abstract java.sql.ParameterMetaData getParameterMetaData() throws java.sql.SQLException; + method public abstract void setArray(int, java.sql.Array) throws java.sql.SQLException; + method public abstract void setAsciiStream(int, java.io.InputStream, int) throws java.sql.SQLException; + method public abstract void setAsciiStream(int, java.io.InputStream, long) throws java.sql.SQLException; + method public abstract void setAsciiStream(int, java.io.InputStream) throws java.sql.SQLException; + method public abstract void setBigDecimal(int, java.math.BigDecimal) throws java.sql.SQLException; + method public abstract void setBinaryStream(int, java.io.InputStream, int) throws java.sql.SQLException; + method public abstract void setBinaryStream(int, java.io.InputStream, long) throws java.sql.SQLException; + method public abstract void setBinaryStream(int, java.io.InputStream) throws java.sql.SQLException; + method public abstract void setBlob(int, java.sql.Blob) throws java.sql.SQLException; + method public abstract void setBlob(int, java.io.InputStream, long) throws java.sql.SQLException; + method public abstract void setBlob(int, java.io.InputStream) throws java.sql.SQLException; + method public abstract void setBoolean(int, boolean) throws java.sql.SQLException; + method public abstract void setByte(int, byte) throws java.sql.SQLException; + method public abstract void setBytes(int, byte[]) throws java.sql.SQLException; + method public abstract void setCharacterStream(int, java.io.Reader, int) throws java.sql.SQLException; + method public abstract void setCharacterStream(int, java.io.Reader, long) throws java.sql.SQLException; + method public abstract void setCharacterStream(int, java.io.Reader) throws java.sql.SQLException; + method public abstract void setClob(int, java.sql.Clob) throws java.sql.SQLException; + method public abstract void setClob(int, java.io.Reader, long) throws java.sql.SQLException; + method public abstract void setClob(int, java.io.Reader) throws java.sql.SQLException; + method public abstract void setDate(int, java.sql.Date) throws java.sql.SQLException; + method public abstract void setDate(int, java.sql.Date, java.util.Calendar) throws java.sql.SQLException; + method public abstract void setDouble(int, double) throws java.sql.SQLException; + method public abstract void setFloat(int, float) throws java.sql.SQLException; + method public abstract void setInt(int, int) throws java.sql.SQLException; + method public abstract void setLong(int, long) throws java.sql.SQLException; + method public abstract void setNCharacterStream(int, java.io.Reader, long) throws java.sql.SQLException; + method public abstract void setNCharacterStream(int, java.io.Reader) throws java.sql.SQLException; + method public abstract void setNClob(int, java.sql.NClob) throws java.sql.SQLException; + method public abstract void setNClob(int, java.io.Reader, long) throws java.sql.SQLException; + method public abstract void setNClob(int, java.io.Reader) throws java.sql.SQLException; + method public abstract void setNString(int, java.lang.String) throws java.sql.SQLException; + method public abstract void setNull(int, int) throws java.sql.SQLException; + method public abstract void setNull(int, int, java.lang.String) throws java.sql.SQLException; + method public abstract void setObject(int, java.lang.Object) throws java.sql.SQLException; + method public abstract void setObject(int, java.lang.Object, int) throws java.sql.SQLException; + method public abstract void setObject(int, java.lang.Object, int, int) throws java.sql.SQLException; + method public abstract void setRef(int, java.sql.Ref) throws java.sql.SQLException; + method public abstract void setRowId(int, java.sql.RowId) throws java.sql.SQLException; + method public abstract void setSQLXML(int, java.sql.SQLXML) throws java.sql.SQLException; + method public abstract void setShort(int, short) throws java.sql.SQLException; + method public abstract void setString(int, java.lang.String) throws java.sql.SQLException; + method public abstract void setTime(int, java.sql.Time) throws java.sql.SQLException; + method public abstract void setTime(int, java.sql.Time, java.util.Calendar) throws java.sql.SQLException; + method public abstract void setTimestamp(int, java.sql.Timestamp) throws java.sql.SQLException; + method public abstract void setTimestamp(int, java.sql.Timestamp, java.util.Calendar) throws java.sql.SQLException; + method public abstract void setURL(int, java.net.URL) throws java.sql.SQLException; + method public abstract deprecated void setUnicodeStream(int, java.io.InputStream, int) throws java.sql.SQLException; + } + + public abstract interface Ref { + method public abstract java.lang.String getBaseTypeName() throws java.sql.SQLException; + method public abstract java.lang.Object getObject() throws java.sql.SQLException; + method public abstract java.lang.Object getObject(java.util.Map>) throws java.sql.SQLException; + method public abstract void setObject(java.lang.Object) throws java.sql.SQLException; + } + + public abstract interface ResultSet implements java.lang.AutoCloseable java.sql.Wrapper { + method public abstract boolean absolute(int) throws java.sql.SQLException; + method public abstract void afterLast() throws java.sql.SQLException; + method public abstract void beforeFirst() throws java.sql.SQLException; + method public abstract void cancelRowUpdates() throws java.sql.SQLException; + method public abstract void clearWarnings() throws java.sql.SQLException; + method public abstract void close() throws java.sql.SQLException; + method public abstract void deleteRow() throws java.sql.SQLException; + method public abstract int findColumn(java.lang.String) throws java.sql.SQLException; + method public abstract boolean first() throws java.sql.SQLException; + method public abstract java.sql.Array getArray(int) throws java.sql.SQLException; + method public abstract java.sql.Array getArray(java.lang.String) throws java.sql.SQLException; + method public abstract java.io.InputStream getAsciiStream(int) throws java.sql.SQLException; + method public abstract java.io.InputStream getAsciiStream(java.lang.String) throws java.sql.SQLException; + method public abstract java.math.BigDecimal getBigDecimal(int) throws java.sql.SQLException; + method public abstract deprecated java.math.BigDecimal getBigDecimal(int, int) throws java.sql.SQLException; + method public abstract java.math.BigDecimal getBigDecimal(java.lang.String) throws java.sql.SQLException; + method public abstract deprecated java.math.BigDecimal getBigDecimal(java.lang.String, int) throws java.sql.SQLException; + method public abstract java.io.InputStream getBinaryStream(int) throws java.sql.SQLException; + method public abstract java.io.InputStream getBinaryStream(java.lang.String) throws java.sql.SQLException; + method public abstract java.sql.Blob getBlob(int) throws java.sql.SQLException; + method public abstract java.sql.Blob getBlob(java.lang.String) throws java.sql.SQLException; + method public abstract boolean getBoolean(int) throws java.sql.SQLException; + method public abstract boolean getBoolean(java.lang.String) throws java.sql.SQLException; + method public abstract byte getByte(int) throws java.sql.SQLException; + method public abstract byte getByte(java.lang.String) throws java.sql.SQLException; + method public abstract byte[] getBytes(int) throws java.sql.SQLException; + method public abstract byte[] getBytes(java.lang.String) throws java.sql.SQLException; + method public abstract java.io.Reader getCharacterStream(int) throws java.sql.SQLException; + method public abstract java.io.Reader getCharacterStream(java.lang.String) throws java.sql.SQLException; + method public abstract java.sql.Clob getClob(int) throws java.sql.SQLException; + method public abstract java.sql.Clob getClob(java.lang.String) throws java.sql.SQLException; + method public abstract int getConcurrency() throws java.sql.SQLException; + method public abstract java.lang.String getCursorName() throws java.sql.SQLException; + method public abstract java.sql.Date getDate(int) throws java.sql.SQLException; + method public abstract java.sql.Date getDate(int, java.util.Calendar) throws java.sql.SQLException; + method public abstract java.sql.Date getDate(java.lang.String) throws java.sql.SQLException; + method public abstract java.sql.Date getDate(java.lang.String, java.util.Calendar) throws java.sql.SQLException; + method public abstract double getDouble(int) throws java.sql.SQLException; + method public abstract double getDouble(java.lang.String) throws java.sql.SQLException; + method public abstract int getFetchDirection() throws java.sql.SQLException; + method public abstract int getFetchSize() throws java.sql.SQLException; + method public abstract float getFloat(int) throws java.sql.SQLException; + method public abstract float getFloat(java.lang.String) throws java.sql.SQLException; + method public abstract int getHoldability() throws java.sql.SQLException; + method public abstract int getInt(int) throws java.sql.SQLException; + method public abstract int getInt(java.lang.String) throws java.sql.SQLException; + method public abstract long getLong(int) throws java.sql.SQLException; + method public abstract long getLong(java.lang.String) throws java.sql.SQLException; + method public abstract java.sql.ResultSetMetaData getMetaData() throws java.sql.SQLException; + method public abstract java.io.Reader getNCharacterStream(int) throws java.sql.SQLException; + method public abstract java.io.Reader getNCharacterStream(java.lang.String) throws java.sql.SQLException; + method public abstract java.sql.NClob getNClob(int) throws java.sql.SQLException; + method public abstract java.sql.NClob getNClob(java.lang.String) throws java.sql.SQLException; + method public abstract java.lang.String getNString(int) throws java.sql.SQLException; + method public abstract java.lang.String getNString(java.lang.String) throws java.sql.SQLException; + method public abstract java.lang.Object getObject(int) throws java.sql.SQLException; + method public abstract java.lang.Object getObject(int, java.util.Map>) throws java.sql.SQLException; + method public abstract java.lang.Object getObject(java.lang.String) throws java.sql.SQLException; + method public abstract java.lang.Object getObject(java.lang.String, java.util.Map>) throws java.sql.SQLException; + method public abstract java.sql.Ref getRef(int) throws java.sql.SQLException; + method public abstract java.sql.Ref getRef(java.lang.String) throws java.sql.SQLException; + method public abstract int getRow() throws java.sql.SQLException; + method public abstract java.sql.RowId getRowId(int) throws java.sql.SQLException; + method public abstract java.sql.RowId getRowId(java.lang.String) throws java.sql.SQLException; + method public abstract java.sql.SQLXML getSQLXML(int) throws java.sql.SQLException; + method public abstract java.sql.SQLXML getSQLXML(java.lang.String) throws java.sql.SQLException; + method public abstract short getShort(int) throws java.sql.SQLException; + method public abstract short getShort(java.lang.String) throws java.sql.SQLException; + method public abstract java.sql.Statement getStatement() throws java.sql.SQLException; + method public abstract java.lang.String getString(int) throws java.sql.SQLException; + method public abstract java.lang.String getString(java.lang.String) throws java.sql.SQLException; + method public abstract java.sql.Time getTime(int) throws java.sql.SQLException; + method public abstract java.sql.Time getTime(int, java.util.Calendar) throws java.sql.SQLException; + method public abstract java.sql.Time getTime(java.lang.String) throws java.sql.SQLException; + method public abstract java.sql.Time getTime(java.lang.String, java.util.Calendar) throws java.sql.SQLException; + method public abstract java.sql.Timestamp getTimestamp(int) throws java.sql.SQLException; + method public abstract java.sql.Timestamp getTimestamp(int, java.util.Calendar) throws java.sql.SQLException; + method public abstract java.sql.Timestamp getTimestamp(java.lang.String) throws java.sql.SQLException; + method public abstract java.sql.Timestamp getTimestamp(java.lang.String, java.util.Calendar) throws java.sql.SQLException; + method public abstract int getType() throws java.sql.SQLException; + method public abstract java.net.URL getURL(int) throws java.sql.SQLException; + method public abstract java.net.URL getURL(java.lang.String) throws java.sql.SQLException; + method public abstract deprecated java.io.InputStream getUnicodeStream(int) throws java.sql.SQLException; + method public abstract deprecated java.io.InputStream getUnicodeStream(java.lang.String) throws java.sql.SQLException; + method public abstract java.sql.SQLWarning getWarnings() throws java.sql.SQLException; + method public abstract void insertRow() throws java.sql.SQLException; + method public abstract boolean isAfterLast() throws java.sql.SQLException; + method public abstract boolean isBeforeFirst() throws java.sql.SQLException; + method public abstract boolean isClosed() throws java.sql.SQLException; + method public abstract boolean isFirst() throws java.sql.SQLException; + method public abstract boolean isLast() throws java.sql.SQLException; + method public abstract boolean last() throws java.sql.SQLException; + method public abstract void moveToCurrentRow() throws java.sql.SQLException; + method public abstract void moveToInsertRow() throws java.sql.SQLException; + method public abstract boolean next() throws java.sql.SQLException; + method public abstract boolean previous() throws java.sql.SQLException; + method public abstract void refreshRow() throws java.sql.SQLException; + method public abstract boolean relative(int) throws java.sql.SQLException; + method public abstract boolean rowDeleted() throws java.sql.SQLException; + method public abstract boolean rowInserted() throws java.sql.SQLException; + method public abstract boolean rowUpdated() throws java.sql.SQLException; + method public abstract void setFetchDirection(int) throws java.sql.SQLException; + method public abstract void setFetchSize(int) throws java.sql.SQLException; + method public abstract void updateArray(int, java.sql.Array) throws java.sql.SQLException; + method public abstract void updateArray(java.lang.String, java.sql.Array) throws java.sql.SQLException; + method public abstract void updateAsciiStream(int, java.io.InputStream, int) throws java.sql.SQLException; + method public abstract void updateAsciiStream(java.lang.String, java.io.InputStream, int) throws java.sql.SQLException; + method public abstract void updateAsciiStream(int, java.io.InputStream, long) throws java.sql.SQLException; + method public abstract void updateAsciiStream(java.lang.String, java.io.InputStream, long) throws java.sql.SQLException; + method public abstract void updateAsciiStream(int, java.io.InputStream) throws java.sql.SQLException; + method public abstract void updateAsciiStream(java.lang.String, java.io.InputStream) throws java.sql.SQLException; + method public abstract void updateBigDecimal(int, java.math.BigDecimal) throws java.sql.SQLException; + method public abstract void updateBigDecimal(java.lang.String, java.math.BigDecimal) throws java.sql.SQLException; + method public abstract void updateBinaryStream(int, java.io.InputStream, int) throws java.sql.SQLException; + method public abstract void updateBinaryStream(java.lang.String, java.io.InputStream, int) throws java.sql.SQLException; + method public abstract void updateBinaryStream(int, java.io.InputStream, long) throws java.sql.SQLException; + method public abstract void updateBinaryStream(java.lang.String, java.io.InputStream, long) throws java.sql.SQLException; + method public abstract void updateBinaryStream(int, java.io.InputStream) throws java.sql.SQLException; + method public abstract void updateBinaryStream(java.lang.String, java.io.InputStream) throws java.sql.SQLException; + method public abstract void updateBlob(int, java.sql.Blob) throws java.sql.SQLException; + method public abstract void updateBlob(java.lang.String, java.sql.Blob) throws java.sql.SQLException; + method public abstract void updateBlob(int, java.io.InputStream, long) throws java.sql.SQLException; + method public abstract void updateBlob(java.lang.String, java.io.InputStream, long) throws java.sql.SQLException; + method public abstract void updateBlob(int, java.io.InputStream) throws java.sql.SQLException; + method public abstract void updateBlob(java.lang.String, java.io.InputStream) throws java.sql.SQLException; + method public abstract void updateBoolean(int, boolean) throws java.sql.SQLException; + method public abstract void updateBoolean(java.lang.String, boolean) throws java.sql.SQLException; + method public abstract void updateByte(int, byte) throws java.sql.SQLException; + method public abstract void updateByte(java.lang.String, byte) throws java.sql.SQLException; + method public abstract void updateBytes(int, byte[]) throws java.sql.SQLException; + method public abstract void updateBytes(java.lang.String, byte[]) throws java.sql.SQLException; + method public abstract void updateCharacterStream(int, java.io.Reader, int) throws java.sql.SQLException; + method public abstract void updateCharacterStream(java.lang.String, java.io.Reader, int) throws java.sql.SQLException; + method public abstract void updateCharacterStream(int, java.io.Reader, long) throws java.sql.SQLException; + method public abstract void updateCharacterStream(java.lang.String, java.io.Reader, long) throws java.sql.SQLException; + method public abstract void updateCharacterStream(int, java.io.Reader) throws java.sql.SQLException; + method public abstract void updateCharacterStream(java.lang.String, java.io.Reader) throws java.sql.SQLException; + method public abstract void updateClob(int, java.sql.Clob) throws java.sql.SQLException; + method public abstract void updateClob(java.lang.String, java.sql.Clob) throws java.sql.SQLException; + method public abstract void updateClob(int, java.io.Reader, long) throws java.sql.SQLException; + method public abstract void updateClob(java.lang.String, java.io.Reader, long) throws java.sql.SQLException; + method public abstract void updateClob(int, java.io.Reader) throws java.sql.SQLException; + method public abstract void updateClob(java.lang.String, java.io.Reader) throws java.sql.SQLException; + method public abstract void updateDate(int, java.sql.Date) throws java.sql.SQLException; + method public abstract void updateDate(java.lang.String, java.sql.Date) throws java.sql.SQLException; + method public abstract void updateDouble(int, double) throws java.sql.SQLException; + method public abstract void updateDouble(java.lang.String, double) throws java.sql.SQLException; + method public abstract void updateFloat(int, float) throws java.sql.SQLException; + method public abstract void updateFloat(java.lang.String, float) throws java.sql.SQLException; + method public abstract void updateInt(int, int) throws java.sql.SQLException; + method public abstract void updateInt(java.lang.String, int) throws java.sql.SQLException; + method public abstract void updateLong(int, long) throws java.sql.SQLException; + method public abstract void updateLong(java.lang.String, long) throws java.sql.SQLException; + method public abstract void updateNCharacterStream(int, java.io.Reader, long) throws java.sql.SQLException; + method public abstract void updateNCharacterStream(java.lang.String, java.io.Reader, long) throws java.sql.SQLException; + method public abstract void updateNCharacterStream(int, java.io.Reader) throws java.sql.SQLException; + method public abstract void updateNCharacterStream(java.lang.String, java.io.Reader) throws java.sql.SQLException; + method public abstract void updateNClob(int, java.sql.NClob) throws java.sql.SQLException; + method public abstract void updateNClob(java.lang.String, java.sql.NClob) throws java.sql.SQLException; + method public abstract void updateNClob(int, java.io.Reader, long) throws java.sql.SQLException; + method public abstract void updateNClob(java.lang.String, java.io.Reader, long) throws java.sql.SQLException; + method public abstract void updateNClob(int, java.io.Reader) throws java.sql.SQLException; + method public abstract void updateNClob(java.lang.String, java.io.Reader) throws java.sql.SQLException; + method public abstract void updateNString(int, java.lang.String) throws java.sql.SQLException; + method public abstract void updateNString(java.lang.String, java.lang.String) throws java.sql.SQLException; + method public abstract void updateNull(int) throws java.sql.SQLException; + method public abstract void updateNull(java.lang.String) throws java.sql.SQLException; + method public abstract void updateObject(int, java.lang.Object) throws java.sql.SQLException; + method public abstract void updateObject(int, java.lang.Object, int) throws java.sql.SQLException; + method public abstract void updateObject(java.lang.String, java.lang.Object) throws java.sql.SQLException; + method public abstract void updateObject(java.lang.String, java.lang.Object, int) throws java.sql.SQLException; + method public abstract void updateRef(int, java.sql.Ref) throws java.sql.SQLException; + method public abstract void updateRef(java.lang.String, java.sql.Ref) throws java.sql.SQLException; + method public abstract void updateRow() throws java.sql.SQLException; + method public abstract void updateRowId(int, java.sql.RowId) throws java.sql.SQLException; + method public abstract void updateRowId(java.lang.String, java.sql.RowId) throws java.sql.SQLException; + method public abstract void updateSQLXML(int, java.sql.SQLXML) throws java.sql.SQLException; + method public abstract void updateSQLXML(java.lang.String, java.sql.SQLXML) throws java.sql.SQLException; + method public abstract void updateShort(int, short) throws java.sql.SQLException; + method public abstract void updateShort(java.lang.String, short) throws java.sql.SQLException; + method public abstract void updateString(int, java.lang.String) throws java.sql.SQLException; + method public abstract void updateString(java.lang.String, java.lang.String) throws java.sql.SQLException; + method public abstract void updateTime(int, java.sql.Time) throws java.sql.SQLException; + method public abstract void updateTime(java.lang.String, java.sql.Time) throws java.sql.SQLException; + method public abstract void updateTimestamp(int, java.sql.Timestamp) throws java.sql.SQLException; + method public abstract void updateTimestamp(java.lang.String, java.sql.Timestamp) throws java.sql.SQLException; + method public abstract boolean wasNull() throws java.sql.SQLException; + field public static final int CLOSE_CURSORS_AT_COMMIT = 2; // 0x2 + field public static final int CONCUR_READ_ONLY = 1007; // 0x3ef + field public static final int CONCUR_UPDATABLE = 1008; // 0x3f0 + field public static final int FETCH_FORWARD = 1000; // 0x3e8 + field public static final int FETCH_REVERSE = 1001; // 0x3e9 + field public static final int FETCH_UNKNOWN = 1002; // 0x3ea + field public static final int HOLD_CURSORS_OVER_COMMIT = 1; // 0x1 + field public static final int TYPE_FORWARD_ONLY = 1003; // 0x3eb + field public static final int TYPE_SCROLL_INSENSITIVE = 1004; // 0x3ec + field public static final int TYPE_SCROLL_SENSITIVE = 1005; // 0x3ed + } + + public abstract interface ResultSetMetaData implements java.sql.Wrapper { + method public abstract java.lang.String getCatalogName(int) throws java.sql.SQLException; + method public abstract java.lang.String getColumnClassName(int) throws java.sql.SQLException; + method public abstract int getColumnCount() throws java.sql.SQLException; + method public abstract int getColumnDisplaySize(int) throws java.sql.SQLException; + method public abstract java.lang.String getColumnLabel(int) throws java.sql.SQLException; + method public abstract java.lang.String getColumnName(int) throws java.sql.SQLException; + method public abstract int getColumnType(int) throws java.sql.SQLException; + method public abstract java.lang.String getColumnTypeName(int) throws java.sql.SQLException; + method public abstract int getPrecision(int) throws java.sql.SQLException; + method public abstract int getScale(int) throws java.sql.SQLException; + method public abstract java.lang.String getSchemaName(int) throws java.sql.SQLException; + method public abstract java.lang.String getTableName(int) throws java.sql.SQLException; + method public abstract boolean isAutoIncrement(int) throws java.sql.SQLException; + method public abstract boolean isCaseSensitive(int) throws java.sql.SQLException; + method public abstract boolean isCurrency(int) throws java.sql.SQLException; + method public abstract boolean isDefinitelyWritable(int) throws java.sql.SQLException; + method public abstract int isNullable(int) throws java.sql.SQLException; + method public abstract boolean isReadOnly(int) throws java.sql.SQLException; + method public abstract boolean isSearchable(int) throws java.sql.SQLException; + method public abstract boolean isSigned(int) throws java.sql.SQLException; + method public abstract boolean isWritable(int) throws java.sql.SQLException; + field public static final int columnNoNulls = 0; // 0x0 + field public static final int columnNullable = 1; // 0x1 + field public static final int columnNullableUnknown = 2; // 0x2 + } + + public abstract interface RowId { + method public abstract boolean equals(java.lang.Object); + method public abstract byte[] getBytes(); + method public abstract int hashCode(); + method public abstract java.lang.String toString(); + } + + public final class RowIdLifetime extends java.lang.Enum { + method public static java.sql.RowIdLifetime valueOf(java.lang.String); + method public static final java.sql.RowIdLifetime[] values(); + enum_constant public static final java.sql.RowIdLifetime ROWID_UNSUPPORTED; + enum_constant public static final java.sql.RowIdLifetime ROWID_VALID_FOREVER; + enum_constant public static final java.sql.RowIdLifetime ROWID_VALID_OTHER; + enum_constant public static final java.sql.RowIdLifetime ROWID_VALID_SESSION; + enum_constant public static final java.sql.RowIdLifetime ROWID_VALID_TRANSACTION; + } + + public class SQLClientInfoException extends java.sql.SQLException { + ctor public SQLClientInfoException(); + ctor public SQLClientInfoException(java.util.Map); + ctor public SQLClientInfoException(java.util.Map, java.lang.Throwable); + ctor public SQLClientInfoException(java.lang.String, java.util.Map); + ctor public SQLClientInfoException(java.lang.String, java.util.Map, java.lang.Throwable); + ctor public SQLClientInfoException(java.lang.String, java.lang.String, int, java.util.Map); + ctor public SQLClientInfoException(java.lang.String, java.lang.String, int, java.util.Map, java.lang.Throwable); + ctor public SQLClientInfoException(java.lang.String, java.lang.String, java.util.Map); + ctor public SQLClientInfoException(java.lang.String, java.lang.String, java.util.Map, java.lang.Throwable); + method public java.util.Map getFailedProperties(); + } + + public abstract interface SQLData { + method public abstract java.lang.String getSQLTypeName() throws java.sql.SQLException; + method public abstract void readSQL(java.sql.SQLInput, java.lang.String) throws java.sql.SQLException; + method public abstract void writeSQL(java.sql.SQLOutput) throws java.sql.SQLException; + } + + public class SQLDataException extends java.sql.SQLNonTransientException { + ctor public SQLDataException(); + ctor public SQLDataException(java.lang.String); + ctor public SQLDataException(java.lang.String, java.lang.String); + ctor public SQLDataException(java.lang.String, java.lang.String, int); + ctor public SQLDataException(java.lang.Throwable); + ctor public SQLDataException(java.lang.String, java.lang.Throwable); + ctor public SQLDataException(java.lang.String, java.lang.String, java.lang.Throwable); + ctor public SQLDataException(java.lang.String, java.lang.String, int, java.lang.Throwable); + } + + public class SQLException extends java.lang.Exception implements java.lang.Iterable java.io.Serializable { + ctor public SQLException(); + ctor public SQLException(java.lang.String); + ctor public SQLException(java.lang.String, java.lang.String); + ctor public SQLException(java.lang.String, java.lang.String, int); + ctor public SQLException(java.lang.Throwable); + ctor public SQLException(java.lang.String, java.lang.Throwable); + ctor public SQLException(java.lang.String, java.lang.String, java.lang.Throwable); + ctor public SQLException(java.lang.String, java.lang.String, int, java.lang.Throwable); + method public int getErrorCode(); + method public java.sql.SQLException getNextException(); + method public java.lang.String getSQLState(); + method public java.util.Iterator iterator(); + method public void setNextException(java.sql.SQLException); + } + + public class SQLFeatureNotSupportedException extends java.sql.SQLNonTransientException { + ctor public SQLFeatureNotSupportedException(); + ctor public SQLFeatureNotSupportedException(java.lang.String); + ctor public SQLFeatureNotSupportedException(java.lang.String, java.lang.String); + ctor public SQLFeatureNotSupportedException(java.lang.String, java.lang.String, int); + ctor public SQLFeatureNotSupportedException(java.lang.Throwable); + ctor public SQLFeatureNotSupportedException(java.lang.String, java.lang.Throwable); + ctor public SQLFeatureNotSupportedException(java.lang.String, java.lang.String, java.lang.Throwable); + ctor public SQLFeatureNotSupportedException(java.lang.String, java.lang.String, int, java.lang.Throwable); + } + + public abstract interface SQLInput { + method public abstract java.sql.Array readArray() throws java.sql.SQLException; + method public abstract java.io.InputStream readAsciiStream() throws java.sql.SQLException; + method public abstract java.math.BigDecimal readBigDecimal() throws java.sql.SQLException; + method public abstract java.io.InputStream readBinaryStream() throws java.sql.SQLException; + method public abstract java.sql.Blob readBlob() throws java.sql.SQLException; + method public abstract boolean readBoolean() throws java.sql.SQLException; + method public abstract byte readByte() throws java.sql.SQLException; + method public abstract byte[] readBytes() throws java.sql.SQLException; + method public abstract java.io.Reader readCharacterStream() throws java.sql.SQLException; + method public abstract java.sql.Clob readClob() throws java.sql.SQLException; + method public abstract java.sql.Date readDate() throws java.sql.SQLException; + method public abstract double readDouble() throws java.sql.SQLException; + method public abstract float readFloat() throws java.sql.SQLException; + method public abstract int readInt() throws java.sql.SQLException; + method public abstract long readLong() throws java.sql.SQLException; + method public abstract java.sql.NClob readNClob() throws java.sql.SQLException; + method public abstract java.lang.String readNString() throws java.sql.SQLException; + method public abstract java.lang.Object readObject() throws java.sql.SQLException; + method public abstract java.sql.Ref readRef() throws java.sql.SQLException; + method public abstract java.sql.RowId readRowId() throws java.sql.SQLException; + method public abstract java.sql.SQLXML readSQLXML() throws java.sql.SQLException; + method public abstract short readShort() throws java.sql.SQLException; + method public abstract java.lang.String readString() throws java.sql.SQLException; + method public abstract java.sql.Time readTime() throws java.sql.SQLException; + method public abstract java.sql.Timestamp readTimestamp() throws java.sql.SQLException; + method public abstract java.net.URL readURL() throws java.sql.SQLException; + method public abstract boolean wasNull() throws java.sql.SQLException; + } + + public class SQLIntegrityConstraintViolationException extends java.sql.SQLNonTransientException { + ctor public SQLIntegrityConstraintViolationException(); + ctor public SQLIntegrityConstraintViolationException(java.lang.String); + ctor public SQLIntegrityConstraintViolationException(java.lang.String, java.lang.String); + ctor public SQLIntegrityConstraintViolationException(java.lang.String, java.lang.String, int); + ctor public SQLIntegrityConstraintViolationException(java.lang.Throwable); + ctor public SQLIntegrityConstraintViolationException(java.lang.String, java.lang.Throwable); + ctor public SQLIntegrityConstraintViolationException(java.lang.String, java.lang.String, java.lang.Throwable); + ctor public SQLIntegrityConstraintViolationException(java.lang.String, java.lang.String, int, java.lang.Throwable); + } + + public class SQLInvalidAuthorizationSpecException extends java.sql.SQLNonTransientException { + ctor public SQLInvalidAuthorizationSpecException(); + ctor public SQLInvalidAuthorizationSpecException(java.lang.String); + ctor public SQLInvalidAuthorizationSpecException(java.lang.String, java.lang.String); + ctor public SQLInvalidAuthorizationSpecException(java.lang.String, java.lang.String, int); + ctor public SQLInvalidAuthorizationSpecException(java.lang.Throwable); + ctor public SQLInvalidAuthorizationSpecException(java.lang.String, java.lang.Throwable); + ctor public SQLInvalidAuthorizationSpecException(java.lang.String, java.lang.String, java.lang.Throwable); + ctor public SQLInvalidAuthorizationSpecException(java.lang.String, java.lang.String, int, java.lang.Throwable); + } + + public class SQLNonTransientConnectionException extends java.sql.SQLNonTransientException { + ctor public SQLNonTransientConnectionException(); + ctor public SQLNonTransientConnectionException(java.lang.String); + ctor public SQLNonTransientConnectionException(java.lang.String, java.lang.String); + ctor public SQLNonTransientConnectionException(java.lang.String, java.lang.String, int); + ctor public SQLNonTransientConnectionException(java.lang.Throwable); + ctor public SQLNonTransientConnectionException(java.lang.String, java.lang.Throwable); + ctor public SQLNonTransientConnectionException(java.lang.String, java.lang.String, java.lang.Throwable); + ctor public SQLNonTransientConnectionException(java.lang.String, java.lang.String, int, java.lang.Throwable); + } + + public class SQLNonTransientException extends java.sql.SQLException { + ctor public SQLNonTransientException(); + ctor public SQLNonTransientException(java.lang.String); + ctor public SQLNonTransientException(java.lang.String, java.lang.String); + ctor public SQLNonTransientException(java.lang.String, java.lang.String, int); + ctor public SQLNonTransientException(java.lang.Throwable); + ctor public SQLNonTransientException(java.lang.String, java.lang.Throwable); + ctor public SQLNonTransientException(java.lang.String, java.lang.String, java.lang.Throwable); + ctor public SQLNonTransientException(java.lang.String, java.lang.String, int, java.lang.Throwable); + } + + public abstract interface SQLOutput { + method public abstract void writeArray(java.sql.Array) throws java.sql.SQLException; + method public abstract void writeAsciiStream(java.io.InputStream) throws java.sql.SQLException; + method public abstract void writeBigDecimal(java.math.BigDecimal) throws java.sql.SQLException; + method public abstract void writeBinaryStream(java.io.InputStream) throws java.sql.SQLException; + method public abstract void writeBlob(java.sql.Blob) throws java.sql.SQLException; + method public abstract void writeBoolean(boolean) throws java.sql.SQLException; + method public abstract void writeByte(byte) throws java.sql.SQLException; + method public abstract void writeBytes(byte[]) throws java.sql.SQLException; + method public abstract void writeCharacterStream(java.io.Reader) throws java.sql.SQLException; + method public abstract void writeClob(java.sql.Clob) throws java.sql.SQLException; + method public abstract void writeDate(java.sql.Date) throws java.sql.SQLException; + method public abstract void writeDouble(double) throws java.sql.SQLException; + method public abstract void writeFloat(float) throws java.sql.SQLException; + method public abstract void writeInt(int) throws java.sql.SQLException; + method public abstract void writeLong(long) throws java.sql.SQLException; + method public abstract void writeNClob(java.sql.NClob) throws java.sql.SQLException; + method public abstract void writeNString(java.lang.String) throws java.sql.SQLException; + method public abstract void writeObject(java.sql.SQLData) throws java.sql.SQLException; + method public abstract void writeRef(java.sql.Ref) throws java.sql.SQLException; + method public abstract void writeRowId(java.sql.RowId) throws java.sql.SQLException; + method public abstract void writeSQLXML(java.sql.SQLXML) throws java.sql.SQLException; + method public abstract void writeShort(short) throws java.sql.SQLException; + method public abstract void writeString(java.lang.String) throws java.sql.SQLException; + method public abstract void writeStruct(java.sql.Struct) throws java.sql.SQLException; + method public abstract void writeTime(java.sql.Time) throws java.sql.SQLException; + method public abstract void writeTimestamp(java.sql.Timestamp) throws java.sql.SQLException; + method public abstract void writeURL(java.net.URL) throws java.sql.SQLException; + } + + public final class SQLPermission extends java.security.BasicPermission implements java.security.Guard java.io.Serializable { + ctor public SQLPermission(java.lang.String); + ctor public SQLPermission(java.lang.String, java.lang.String); + } + + public class SQLRecoverableException extends java.sql.SQLException { + ctor public SQLRecoverableException(); + ctor public SQLRecoverableException(java.lang.String); + ctor public SQLRecoverableException(java.lang.String, java.lang.String); + ctor public SQLRecoverableException(java.lang.String, java.lang.String, int); + ctor public SQLRecoverableException(java.lang.Throwable); + ctor public SQLRecoverableException(java.lang.String, java.lang.Throwable); + ctor public SQLRecoverableException(java.lang.String, java.lang.String, java.lang.Throwable); + ctor public SQLRecoverableException(java.lang.String, java.lang.String, int, java.lang.Throwable); + } + + public class SQLSyntaxErrorException extends java.sql.SQLNonTransientException { + ctor public SQLSyntaxErrorException(); + ctor public SQLSyntaxErrorException(java.lang.String); + ctor public SQLSyntaxErrorException(java.lang.String, java.lang.String); + ctor public SQLSyntaxErrorException(java.lang.String, java.lang.String, int); + ctor public SQLSyntaxErrorException(java.lang.Throwable); + ctor public SQLSyntaxErrorException(java.lang.String, java.lang.Throwable); + ctor public SQLSyntaxErrorException(java.lang.String, java.lang.String, java.lang.Throwable); + ctor public SQLSyntaxErrorException(java.lang.String, java.lang.String, int, java.lang.Throwable); + } + + public class SQLTimeoutException extends java.sql.SQLTransientException { + ctor public SQLTimeoutException(); + ctor public SQLTimeoutException(java.lang.String); + ctor public SQLTimeoutException(java.lang.String, java.lang.String); + ctor public SQLTimeoutException(java.lang.String, java.lang.String, int); + ctor public SQLTimeoutException(java.lang.Throwable); + ctor public SQLTimeoutException(java.lang.String, java.lang.Throwable); + ctor public SQLTimeoutException(java.lang.String, java.lang.String, java.lang.Throwable); + ctor public SQLTimeoutException(java.lang.String, java.lang.String, int, java.lang.Throwable); + } + + public class SQLTransactionRollbackException extends java.sql.SQLTransientException { + ctor public SQLTransactionRollbackException(); + ctor public SQLTransactionRollbackException(java.lang.String); + ctor public SQLTransactionRollbackException(java.lang.String, java.lang.String); + ctor public SQLTransactionRollbackException(java.lang.String, java.lang.String, int); + ctor public SQLTransactionRollbackException(java.lang.Throwable); + ctor public SQLTransactionRollbackException(java.lang.String, java.lang.Throwable); + ctor public SQLTransactionRollbackException(java.lang.String, java.lang.String, java.lang.Throwable); + ctor public SQLTransactionRollbackException(java.lang.String, java.lang.String, int, java.lang.Throwable); + } + + public class SQLTransientConnectionException extends java.sql.SQLTransientException { + ctor public SQLTransientConnectionException(); + ctor public SQLTransientConnectionException(java.lang.String); + ctor public SQLTransientConnectionException(java.lang.String, java.lang.String); + ctor public SQLTransientConnectionException(java.lang.String, java.lang.String, int); + ctor public SQLTransientConnectionException(java.lang.Throwable); + ctor public SQLTransientConnectionException(java.lang.String, java.lang.Throwable); + ctor public SQLTransientConnectionException(java.lang.String, java.lang.String, java.lang.Throwable); + ctor public SQLTransientConnectionException(java.lang.String, java.lang.String, int, java.lang.Throwable); + } + + public class SQLTransientException extends java.sql.SQLException { + ctor public SQLTransientException(); + ctor public SQLTransientException(java.lang.String); + ctor public SQLTransientException(java.lang.String, java.lang.String); + ctor public SQLTransientException(java.lang.String, java.lang.String, int); + ctor public SQLTransientException(java.lang.Throwable); + ctor public SQLTransientException(java.lang.String, java.lang.Throwable); + ctor public SQLTransientException(java.lang.String, java.lang.String, java.lang.Throwable); + ctor public SQLTransientException(java.lang.String, java.lang.String, int, java.lang.Throwable); + } + + public class SQLWarning extends java.sql.SQLException implements java.io.Serializable { + ctor public SQLWarning(); + ctor public SQLWarning(java.lang.String); + ctor public SQLWarning(java.lang.String, java.lang.String); + ctor public SQLWarning(java.lang.String, java.lang.String, int); + ctor public SQLWarning(java.lang.Throwable); + ctor public SQLWarning(java.lang.String, java.lang.Throwable); + ctor public SQLWarning(java.lang.String, java.lang.String, java.lang.Throwable); + ctor public SQLWarning(java.lang.String, java.lang.String, int, java.lang.Throwable); + method public java.sql.SQLWarning getNextWarning(); + method public void setNextWarning(java.sql.SQLWarning); + } + + public abstract interface SQLXML { + method public abstract void free() throws java.sql.SQLException; + method public abstract java.io.InputStream getBinaryStream() throws java.sql.SQLException; + method public abstract java.io.Reader getCharacterStream() throws java.sql.SQLException; + method public abstract T getSource(java.lang.Class) throws java.sql.SQLException; + method public abstract java.lang.String getString() throws java.sql.SQLException; + method public abstract java.io.OutputStream setBinaryStream() throws java.sql.SQLException; + method public abstract java.io.Writer setCharacterStream() throws java.sql.SQLException; + method public abstract T setResult(java.lang.Class) throws java.sql.SQLException; + method public abstract void setString(java.lang.String) throws java.sql.SQLException; + } + + public abstract interface Savepoint { + method public abstract int getSavepointId() throws java.sql.SQLException; + method public abstract java.lang.String getSavepointName() throws java.sql.SQLException; + } + + public abstract interface Statement implements java.lang.AutoCloseable java.sql.Wrapper { + method public abstract void addBatch(java.lang.String) throws java.sql.SQLException; + method public abstract void cancel() throws java.sql.SQLException; + method public abstract void clearBatch() throws java.sql.SQLException; + method public abstract void clearWarnings() throws java.sql.SQLException; + method public abstract void close() throws java.sql.SQLException; + method public abstract boolean execute(java.lang.String) throws java.sql.SQLException; + method public abstract boolean execute(java.lang.String, int) throws java.sql.SQLException; + method public abstract boolean execute(java.lang.String, int[]) throws java.sql.SQLException; + method public abstract boolean execute(java.lang.String, java.lang.String[]) throws java.sql.SQLException; + method public abstract int[] executeBatch() throws java.sql.SQLException; + method public abstract java.sql.ResultSet executeQuery(java.lang.String) throws java.sql.SQLException; + method public abstract int executeUpdate(java.lang.String) throws java.sql.SQLException; + method public abstract int executeUpdate(java.lang.String, int) throws java.sql.SQLException; + method public abstract int executeUpdate(java.lang.String, int[]) throws java.sql.SQLException; + method public abstract int executeUpdate(java.lang.String, java.lang.String[]) throws java.sql.SQLException; + method public abstract java.sql.Connection getConnection() throws java.sql.SQLException; + method public abstract int getFetchDirection() throws java.sql.SQLException; + method public abstract int getFetchSize() throws java.sql.SQLException; + method public abstract java.sql.ResultSet getGeneratedKeys() throws java.sql.SQLException; + method public abstract int getMaxFieldSize() throws java.sql.SQLException; + method public abstract int getMaxRows() throws java.sql.SQLException; + method public abstract boolean getMoreResults() throws java.sql.SQLException; + method public abstract boolean getMoreResults(int) throws java.sql.SQLException; + method public abstract int getQueryTimeout() throws java.sql.SQLException; + method public abstract java.sql.ResultSet getResultSet() throws java.sql.SQLException; + method public abstract int getResultSetConcurrency() throws java.sql.SQLException; + method public abstract int getResultSetHoldability() throws java.sql.SQLException; + method public abstract int getResultSetType() throws java.sql.SQLException; + method public abstract int getUpdateCount() throws java.sql.SQLException; + method public abstract java.sql.SQLWarning getWarnings() throws java.sql.SQLException; + method public abstract boolean isClosed() throws java.sql.SQLException; + method public abstract boolean isPoolable() throws java.sql.SQLException; + method public abstract void setCursorName(java.lang.String) throws java.sql.SQLException; + method public abstract void setEscapeProcessing(boolean) throws java.sql.SQLException; + method public abstract void setFetchDirection(int) throws java.sql.SQLException; + method public abstract void setFetchSize(int) throws java.sql.SQLException; + method public abstract void setMaxFieldSize(int) throws java.sql.SQLException; + method public abstract void setMaxRows(int) throws java.sql.SQLException; + method public abstract void setPoolable(boolean) throws java.sql.SQLException; + method public abstract void setQueryTimeout(int) throws java.sql.SQLException; + field public static final int CLOSE_ALL_RESULTS = 3; // 0x3 + field public static final int CLOSE_CURRENT_RESULT = 1; // 0x1 + field public static final int EXECUTE_FAILED = -3; // 0xfffffffd + field public static final int KEEP_CURRENT_RESULT = 2; // 0x2 + field public static final int NO_GENERATED_KEYS = 2; // 0x2 + field public static final int RETURN_GENERATED_KEYS = 1; // 0x1 + field public static final int SUCCESS_NO_INFO = -2; // 0xfffffffe + } + + public abstract interface Struct { + method public abstract java.lang.Object[] getAttributes() throws java.sql.SQLException; + method public abstract java.lang.Object[] getAttributes(java.util.Map>) throws java.sql.SQLException; + method public abstract java.lang.String getSQLTypeName() throws java.sql.SQLException; + } + + public class Time extends java.util.Date { + ctor public deprecated Time(int, int, int); + ctor public Time(long); + method public static java.sql.Time valueOf(java.lang.String); + } + + public class Timestamp extends java.util.Date { + ctor public deprecated Timestamp(int, int, int, int, int, int, int) throws java.lang.IllegalArgumentException; + ctor public Timestamp(long); + method public boolean after(java.sql.Timestamp); + method public boolean before(java.sql.Timestamp); + method public int compareTo(java.sql.Timestamp); + method public boolean equals(java.sql.Timestamp); + method public int getNanos(); + method public void setNanos(int) throws java.lang.IllegalArgumentException; + method public static java.sql.Timestamp valueOf(java.lang.String) throws java.lang.IllegalArgumentException; + } + + public class Types { + field public static final int ARRAY = 2003; // 0x7d3 + field public static final int BIGINT = -5; // 0xfffffffb + field public static final int BINARY = -2; // 0xfffffffe + field public static final int BIT = -7; // 0xfffffff9 + field public static final int BLOB = 2004; // 0x7d4 + field public static final int BOOLEAN = 16; // 0x10 + field public static final int CHAR = 1; // 0x1 + field public static final int CLOB = 2005; // 0x7d5 + field public static final int DATALINK = 70; // 0x46 + field public static final int DATE = 91; // 0x5b + field public static final int DECIMAL = 3; // 0x3 + field public static final int DISTINCT = 2001; // 0x7d1 + field public static final int DOUBLE = 8; // 0x8 + field public static final int FLOAT = 6; // 0x6 + field public static final int INTEGER = 4; // 0x4 + field public static final int JAVA_OBJECT = 2000; // 0x7d0 + field public static final int LONGNVARCHAR = -16; // 0xfffffff0 + field public static final int LONGVARBINARY = -4; // 0xfffffffc + field public static final int LONGVARCHAR = -1; // 0xffffffff + field public static final int NCHAR = -15; // 0xfffffff1 + field public static final int NCLOB = 2011; // 0x7db + field public static final int NULL = 0; // 0x0 + field public static final int NUMERIC = 2; // 0x2 + field public static final int NVARCHAR = -9; // 0xfffffff7 + field public static final int OTHER = 1111; // 0x457 + field public static final int REAL = 7; // 0x7 + field public static final int REF = 2006; // 0x7d6 + field public static final int ROWID = -8; // 0xfffffff8 + field public static final int SMALLINT = 5; // 0x5 + field public static final int SQLXML = 2009; // 0x7d9 + field public static final int STRUCT = 2002; // 0x7d2 + field public static final int TIME = 92; // 0x5c + field public static final int TIMESTAMP = 93; // 0x5d + field public static final int TINYINT = -6; // 0xfffffffa + field public static final int VARBINARY = -3; // 0xfffffffd + field public static final int VARCHAR = 12; // 0xc + } + + public abstract interface Wrapper { + method public abstract boolean isWrapperFor(java.lang.Class) throws java.sql.SQLException; + method public abstract T unwrap(java.lang.Class) throws java.sql.SQLException; + } + +} + +package java.text { + + public class Annotation { + ctor public Annotation(java.lang.Object); + method public java.lang.Object getValue(); + } + + public abstract interface AttributedCharacterIterator implements java.text.CharacterIterator { + method public abstract java.util.Set getAllAttributeKeys(); + method public abstract java.lang.Object getAttribute(java.text.AttributedCharacterIterator.Attribute); + method public abstract java.util.Map getAttributes(); + method public abstract int getRunLimit(); + method public abstract int getRunLimit(java.text.AttributedCharacterIterator.Attribute); + method public abstract int getRunLimit(java.util.Set); + method public abstract int getRunStart(); + method public abstract int getRunStart(java.text.AttributedCharacterIterator.Attribute); + method public abstract int getRunStart(java.util.Set); + } + + public static class AttributedCharacterIterator.Attribute implements java.io.Serializable { + ctor protected AttributedCharacterIterator.Attribute(java.lang.String); + method public final boolean equals(java.lang.Object); + method protected java.lang.String getName(); + method public final int hashCode(); + method protected java.lang.Object readResolve() throws java.io.InvalidObjectException; + field public static final java.text.AttributedCharacterIterator.Attribute INPUT_METHOD_SEGMENT; + field public static final java.text.AttributedCharacterIterator.Attribute LANGUAGE; + field public static final java.text.AttributedCharacterIterator.Attribute READING; + } + + public class AttributedString { + ctor public AttributedString(java.text.AttributedCharacterIterator); + ctor public AttributedString(java.text.AttributedCharacterIterator, int, int); + ctor public AttributedString(java.text.AttributedCharacterIterator, int, int, java.text.AttributedCharacterIterator.Attribute[]); + ctor public AttributedString(java.lang.String); + ctor public AttributedString(java.lang.String, java.util.Map); + method public void addAttribute(java.text.AttributedCharacterIterator.Attribute, java.lang.Object); + method public void addAttribute(java.text.AttributedCharacterIterator.Attribute, java.lang.Object, int, int); + method public void addAttributes(java.util.Map, int, int); + method public java.text.AttributedCharacterIterator getIterator(); + method public java.text.AttributedCharacterIterator getIterator(java.text.AttributedCharacterIterator.Attribute[]); + method public java.text.AttributedCharacterIterator getIterator(java.text.AttributedCharacterIterator.Attribute[], int, int); + } + + public final class Bidi { + ctor public Bidi(java.text.AttributedCharacterIterator); + ctor public Bidi(char[], int, byte[], int, int, int); + ctor public Bidi(java.lang.String, int); + method public boolean baseIsLeftToRight(); + method public java.text.Bidi createLineBidi(int, int); + method public int getBaseLevel(); + method public int getLength(); + method public int getLevelAt(int); + method public int getRunCount(); + method public int getRunLevel(int); + method public int getRunLimit(int); + method public int getRunStart(int); + method public boolean isLeftToRight(); + method public boolean isMixed(); + method public boolean isRightToLeft(); + method public static void reorderVisually(byte[], int, java.lang.Object[], int, int); + method public static boolean requiresBidi(char[], int, int); + field public static final int DIRECTION_DEFAULT_LEFT_TO_RIGHT = -2; // 0xfffffffe + field public static final int DIRECTION_DEFAULT_RIGHT_TO_LEFT = -1; // 0xffffffff + field public static final int DIRECTION_LEFT_TO_RIGHT = 0; // 0x0 + field public static final int DIRECTION_RIGHT_TO_LEFT = 1; // 0x1 + } + + public abstract class BreakIterator implements java.lang.Cloneable { + ctor protected BreakIterator(); + method public java.lang.Object clone(); + method public abstract int current(); + method public abstract int first(); + method public abstract int following(int); + method public static java.util.Locale[] getAvailableLocales(); + method public static java.text.BreakIterator getCharacterInstance(); + method public static java.text.BreakIterator getCharacterInstance(java.util.Locale); + method public static java.text.BreakIterator getLineInstance(); + method public static java.text.BreakIterator getLineInstance(java.util.Locale); + method public static java.text.BreakIterator getSentenceInstance(); + method public static java.text.BreakIterator getSentenceInstance(java.util.Locale); + method public abstract java.text.CharacterIterator getText(); + method public static java.text.BreakIterator getWordInstance(); + method public static java.text.BreakIterator getWordInstance(java.util.Locale); + method public boolean isBoundary(int); + method public abstract int last(); + method public abstract int next(); + method public abstract int next(int); + method public int preceding(int); + method public abstract int previous(); + method public void setText(java.lang.String); + method public abstract void setText(java.text.CharacterIterator); + field public static final int DONE = -1; // 0xffffffff + } + + public abstract interface CharacterIterator implements java.lang.Cloneable { + method public abstract java.lang.Object clone(); + method public abstract char current(); + method public abstract char first(); + method public abstract int getBeginIndex(); + method public abstract int getEndIndex(); + method public abstract int getIndex(); + method public abstract char last(); + method public abstract char next(); + method public abstract char previous(); + method public abstract char setIndex(int); + field public static final char DONE = 65535; // 0xffff '\uffff' + } + + public class ChoiceFormat extends java.text.NumberFormat { + ctor public ChoiceFormat(double[], java.lang.String[]); + ctor public ChoiceFormat(java.lang.String); + method public void applyPattern(java.lang.String); + method public java.lang.StringBuffer format(double, java.lang.StringBuffer, java.text.FieldPosition); + method public java.lang.StringBuffer format(long, java.lang.StringBuffer, java.text.FieldPosition); + method public java.lang.Object[] getFormats(); + method public double[] getLimits(); + method public static final double nextDouble(double); + method public static double nextDouble(double, boolean); + method public java.lang.Number parse(java.lang.String, java.text.ParsePosition); + method public static final double previousDouble(double); + method public void setChoices(double[], java.lang.String[]); + method public java.lang.String toPattern(); + } + + public final class CollationElementIterator { + method public int getMaxExpansion(int); + method public int getOffset(); + method public int next(); + method public int previous(); + method public static final int primaryOrder(int); + method public void reset(); + method public static final short secondaryOrder(int); + method public void setOffset(int); + method public void setText(java.text.CharacterIterator); + method public void setText(java.lang.String); + method public static final short tertiaryOrder(int); + field public static final int NULLORDER = -1; // 0xffffffff + } + + public abstract class CollationKey implements java.lang.Comparable { + ctor protected CollationKey(java.lang.String); + method public abstract int compareTo(java.text.CollationKey); + method public java.lang.String getSourceString(); + method public abstract byte[] toByteArray(); + } + + public abstract class Collator implements java.lang.Cloneable java.util.Comparator { + ctor protected Collator(); + method public java.lang.Object clone(); + method public int compare(java.lang.Object, java.lang.Object); + method public abstract int compare(java.lang.String, java.lang.String); + method public boolean equals(java.lang.String, java.lang.String); + method public static java.util.Locale[] getAvailableLocales(); + method public abstract java.text.CollationKey getCollationKey(java.lang.String); + method public int getDecomposition(); + method public static java.text.Collator getInstance(); + method public static java.text.Collator getInstance(java.util.Locale); + method public int getStrength(); + method public abstract int hashCode(); + method public void setDecomposition(int); + method public void setStrength(int); + field public static final int CANONICAL_DECOMPOSITION = 1; // 0x1 + field public static final int FULL_DECOMPOSITION = 2; // 0x2 + field public static final int IDENTICAL = 3; // 0x3 + field public static final int NO_DECOMPOSITION = 0; // 0x0 + field public static final int PRIMARY = 0; // 0x0 + field public static final int SECONDARY = 1; // 0x1 + field public static final int TERTIARY = 2; // 0x2 + } + + public abstract class DateFormat extends java.text.Format { + ctor protected DateFormat(); + method public final java.lang.StringBuffer format(java.lang.Object, java.lang.StringBuffer, java.text.FieldPosition); + method public final java.lang.String format(java.util.Date); + method public abstract java.lang.StringBuffer format(java.util.Date, java.lang.StringBuffer, java.text.FieldPosition); + method public static java.util.Locale[] getAvailableLocales(); + method public java.util.Calendar getCalendar(); + method public static final java.text.DateFormat getDateInstance(); + method public static final java.text.DateFormat getDateInstance(int); + method public static final java.text.DateFormat getDateInstance(int, java.util.Locale); + method public static final java.text.DateFormat getDateTimeInstance(); + method public static final java.text.DateFormat getDateTimeInstance(int, int); + method public static final java.text.DateFormat getDateTimeInstance(int, int, java.util.Locale); + method public static final java.text.DateFormat getInstance(); + method public java.text.NumberFormat getNumberFormat(); + method public static final java.text.DateFormat getTimeInstance(); + method public static final java.text.DateFormat getTimeInstance(int); + method public static final java.text.DateFormat getTimeInstance(int, java.util.Locale); + method public java.util.TimeZone getTimeZone(); + method public boolean isLenient(); + method public java.util.Date parse(java.lang.String) throws java.text.ParseException; + method public abstract java.util.Date parse(java.lang.String, java.text.ParsePosition); + method public java.lang.Object parseObject(java.lang.String, java.text.ParsePosition); + method public void setCalendar(java.util.Calendar); + method public void setLenient(boolean); + method public void setNumberFormat(java.text.NumberFormat); + method public void setTimeZone(java.util.TimeZone); + field public static final int AM_PM_FIELD = 14; // 0xe + field public static final int DATE_FIELD = 3; // 0x3 + field public static final int DAY_OF_WEEK_FIELD = 9; // 0x9 + field public static final int DAY_OF_WEEK_IN_MONTH_FIELD = 11; // 0xb + field public static final int DAY_OF_YEAR_FIELD = 10; // 0xa + field public static final int DEFAULT = 2; // 0x2 + field public static final int ERA_FIELD = 0; // 0x0 + field public static final int FULL = 0; // 0x0 + field public static final int HOUR0_FIELD = 16; // 0x10 + field public static final int HOUR1_FIELD = 15; // 0xf + field public static final int HOUR_OF_DAY0_FIELD = 5; // 0x5 + field public static final int HOUR_OF_DAY1_FIELD = 4; // 0x4 + field public static final int LONG = 1; // 0x1 + field public static final int MEDIUM = 2; // 0x2 + field public static final int MILLISECOND_FIELD = 8; // 0x8 + field public static final int MINUTE_FIELD = 6; // 0x6 + field public static final int MONTH_FIELD = 2; // 0x2 + field public static final int SECOND_FIELD = 7; // 0x7 + field public static final int SHORT = 3; // 0x3 + field public static final int TIMEZONE_FIELD = 17; // 0x11 + field public static final int WEEK_OF_MONTH_FIELD = 13; // 0xd + field public static final int WEEK_OF_YEAR_FIELD = 12; // 0xc + field public static final int YEAR_FIELD = 1; // 0x1 + field protected java.util.Calendar calendar; + field protected java.text.NumberFormat numberFormat; + } + + public static class DateFormat.Field extends java.text.Format.Field { + ctor protected DateFormat.Field(java.lang.String, int); + method public int getCalendarField(); + method public static java.text.DateFormat.Field ofCalendarField(int); + field public static final java.text.DateFormat.Field AM_PM; + field public static final java.text.DateFormat.Field DAY_OF_MONTH; + field public static final java.text.DateFormat.Field DAY_OF_WEEK; + field public static final java.text.DateFormat.Field DAY_OF_WEEK_IN_MONTH; + field public static final java.text.DateFormat.Field DAY_OF_YEAR; + field public static final java.text.DateFormat.Field ERA; + field public static final java.text.DateFormat.Field HOUR0; + field public static final java.text.DateFormat.Field HOUR1; + field public static final java.text.DateFormat.Field HOUR_OF_DAY0; + field public static final java.text.DateFormat.Field HOUR_OF_DAY1; + field public static final java.text.DateFormat.Field MILLISECOND; + field public static final java.text.DateFormat.Field MINUTE; + field public static final java.text.DateFormat.Field MONTH; + field public static final java.text.DateFormat.Field SECOND; + field public static final java.text.DateFormat.Field TIME_ZONE; + field public static final java.text.DateFormat.Field WEEK_OF_MONTH; + field public static final java.text.DateFormat.Field WEEK_OF_YEAR; + field public static final java.text.DateFormat.Field YEAR; + } + + public class DateFormatSymbols implements java.lang.Cloneable java.io.Serializable { + ctor public DateFormatSymbols(); + ctor public DateFormatSymbols(java.util.Locale); + method public java.lang.Object clone(); + method public java.lang.String[] getAmPmStrings(); + method public static java.util.Locale[] getAvailableLocales(); + method public java.lang.String[] getEras(); + method public static final java.text.DateFormatSymbols getInstance(); + method public static final java.text.DateFormatSymbols getInstance(java.util.Locale); + method public java.lang.String getLocalPatternChars(); + method public java.lang.String[] getMonths(); + method public java.lang.String[] getShortMonths(); + method public java.lang.String[] getShortWeekdays(); + method public java.lang.String[] getWeekdays(); + method public java.lang.String[][] getZoneStrings(); + method public void setAmPmStrings(java.lang.String[]); + method public void setEras(java.lang.String[]); + method public void setLocalPatternChars(java.lang.String); + method public void setMonths(java.lang.String[]); + method public void setShortMonths(java.lang.String[]); + method public void setShortWeekdays(java.lang.String[]); + method public void setWeekdays(java.lang.String[]); + method public void setZoneStrings(java.lang.String[][]); + } + + public class DecimalFormat extends java.text.NumberFormat { + ctor public DecimalFormat(); + ctor public DecimalFormat(java.lang.String); + ctor public DecimalFormat(java.lang.String, java.text.DecimalFormatSymbols); + method public void applyLocalizedPattern(java.lang.String); + method public void applyPattern(java.lang.String); + method public java.lang.StringBuffer format(double, java.lang.StringBuffer, java.text.FieldPosition); + method public java.lang.StringBuffer format(long, java.lang.StringBuffer, java.text.FieldPosition); + method public final java.lang.StringBuffer format(java.lang.Object, java.lang.StringBuffer, java.text.FieldPosition); + method public java.text.DecimalFormatSymbols getDecimalFormatSymbols(); + method public int getGroupingSize(); + method public int getMultiplier(); + method public java.lang.String getNegativePrefix(); + method public java.lang.String getNegativeSuffix(); + method public java.lang.String getPositivePrefix(); + method public java.lang.String getPositiveSuffix(); + method public boolean isDecimalSeparatorAlwaysShown(); + method public boolean isParseBigDecimal(); + method public java.lang.Number parse(java.lang.String, java.text.ParsePosition); + method public void setDecimalFormatSymbols(java.text.DecimalFormatSymbols); + method public void setDecimalSeparatorAlwaysShown(boolean); + method public void setGroupingSize(int); + method public void setMultiplier(int); + method public void setNegativePrefix(java.lang.String); + method public void setNegativeSuffix(java.lang.String); + method public void setParseBigDecimal(boolean); + method public void setPositivePrefix(java.lang.String); + method public void setPositiveSuffix(java.lang.String); + method public java.lang.String toLocalizedPattern(); + method public java.lang.String toPattern(); + } + + public class DecimalFormatSymbols implements java.lang.Cloneable java.io.Serializable { + ctor public DecimalFormatSymbols(); + ctor public DecimalFormatSymbols(java.util.Locale); + method public java.lang.Object clone(); + method public static java.util.Locale[] getAvailableLocales(); + method public java.util.Currency getCurrency(); + method public java.lang.String getCurrencySymbol(); + method public char getDecimalSeparator(); + method public char getDigit(); + method public java.lang.String getExponentSeparator(); + method public char getGroupingSeparator(); + method public java.lang.String getInfinity(); + method public static java.text.DecimalFormatSymbols getInstance(); + method public static java.text.DecimalFormatSymbols getInstance(java.util.Locale); + method public java.lang.String getInternationalCurrencySymbol(); + method public char getMinusSign(); + method public char getMonetaryDecimalSeparator(); + method public java.lang.String getNaN(); + method public char getPatternSeparator(); + method public char getPerMill(); + method public char getPercent(); + method public char getZeroDigit(); + method public void setCurrency(java.util.Currency); + method public void setCurrencySymbol(java.lang.String); + method public void setDecimalSeparator(char); + method public void setDigit(char); + method public void setExponentSeparator(java.lang.String); + method public void setGroupingSeparator(char); + method public void setInfinity(java.lang.String); + method public void setInternationalCurrencySymbol(java.lang.String); + method public void setMinusSign(char); + method public void setMonetaryDecimalSeparator(char); + method public void setNaN(java.lang.String); + method public void setPatternSeparator(char); + method public void setPerMill(char); + method public void setPercent(char); + method public void setZeroDigit(char); + } + + public class FieldPosition { + ctor public FieldPosition(int); + ctor public FieldPosition(java.text.Format.Field); + ctor public FieldPosition(java.text.Format.Field, int); + method public int getBeginIndex(); + method public int getEndIndex(); + method public int getField(); + method public java.text.Format.Field getFieldAttribute(); + method public void setBeginIndex(int); + method public void setEndIndex(int); + } + + public abstract class Format implements java.lang.Cloneable java.io.Serializable { + ctor protected Format(); + method public java.lang.Object clone(); + method public final java.lang.String format(java.lang.Object); + method public abstract java.lang.StringBuffer format(java.lang.Object, java.lang.StringBuffer, java.text.FieldPosition); + method public java.text.AttributedCharacterIterator formatToCharacterIterator(java.lang.Object); + method public java.lang.Object parseObject(java.lang.String) throws java.text.ParseException; + method public abstract java.lang.Object parseObject(java.lang.String, java.text.ParsePosition); + } + + public static class Format.Field extends java.text.AttributedCharacterIterator.Attribute { + ctor protected Format.Field(java.lang.String); + } + + public class MessageFormat extends java.text.Format { + ctor public MessageFormat(java.lang.String, java.util.Locale); + ctor public MessageFormat(java.lang.String); + method public void applyPattern(java.lang.String); + method public final java.lang.StringBuffer format(java.lang.Object[], java.lang.StringBuffer, java.text.FieldPosition); + method public final java.lang.StringBuffer format(java.lang.Object, java.lang.StringBuffer, java.text.FieldPosition); + method public static java.lang.String format(java.lang.String, java.lang.Object...); + method public java.text.Format[] getFormats(); + method public java.text.Format[] getFormatsByArgumentIndex(); + method public java.util.Locale getLocale(); + method public java.lang.Object[] parse(java.lang.String) throws java.text.ParseException; + method public java.lang.Object[] parse(java.lang.String, java.text.ParsePosition); + method public java.lang.Object parseObject(java.lang.String, java.text.ParsePosition); + method public void setFormat(int, java.text.Format); + method public void setFormatByArgumentIndex(int, java.text.Format); + method public void setFormats(java.text.Format[]); + method public void setFormatsByArgumentIndex(java.text.Format[]); + method public void setLocale(java.util.Locale); + method public java.lang.String toPattern(); + } + + public static class MessageFormat.Field extends java.text.Format.Field { + ctor protected MessageFormat.Field(java.lang.String); + field public static final java.text.MessageFormat.Field ARGUMENT; + } + + public final class Normalizer { + method public static boolean isNormalized(java.lang.CharSequence, java.text.Normalizer.Form); + method public static java.lang.String normalize(java.lang.CharSequence, java.text.Normalizer.Form); + } + + public static final class Normalizer.Form extends java.lang.Enum { + method public static java.text.Normalizer.Form valueOf(java.lang.String); + method public static final java.text.Normalizer.Form[] values(); + enum_constant public static final java.text.Normalizer.Form NFC; + enum_constant public static final java.text.Normalizer.Form NFD; + enum_constant public static final java.text.Normalizer.Form NFKC; + enum_constant public static final java.text.Normalizer.Form NFKD; + } + + public abstract class NumberFormat extends java.text.Format { + ctor protected NumberFormat(); + method public final java.lang.String format(double); + method public abstract java.lang.StringBuffer format(double, java.lang.StringBuffer, java.text.FieldPosition); + method public final java.lang.String format(long); + method public abstract java.lang.StringBuffer format(long, java.lang.StringBuffer, java.text.FieldPosition); + method public java.lang.StringBuffer format(java.lang.Object, java.lang.StringBuffer, java.text.FieldPosition); + method public static java.util.Locale[] getAvailableLocales(); + method public java.util.Currency getCurrency(); + method public static final java.text.NumberFormat getCurrencyInstance(); + method public static java.text.NumberFormat getCurrencyInstance(java.util.Locale); + method public static final java.text.NumberFormat getInstance(); + method public static java.text.NumberFormat getInstance(java.util.Locale); + method public static final java.text.NumberFormat getIntegerInstance(); + method public static java.text.NumberFormat getIntegerInstance(java.util.Locale); + method public int getMaximumFractionDigits(); + method public int getMaximumIntegerDigits(); + method public int getMinimumFractionDigits(); + method public int getMinimumIntegerDigits(); + method public static final java.text.NumberFormat getNumberInstance(); + method public static java.text.NumberFormat getNumberInstance(java.util.Locale); + method public static final java.text.NumberFormat getPercentInstance(); + method public static java.text.NumberFormat getPercentInstance(java.util.Locale); + method public java.math.RoundingMode getRoundingMode(); + method public boolean isGroupingUsed(); + method public boolean isParseIntegerOnly(); + method public java.lang.Number parse(java.lang.String) throws java.text.ParseException; + method public abstract java.lang.Number parse(java.lang.String, java.text.ParsePosition); + method public final java.lang.Object parseObject(java.lang.String, java.text.ParsePosition); + method public void setCurrency(java.util.Currency); + method public void setGroupingUsed(boolean); + method public void setMaximumFractionDigits(int); + method public void setMaximumIntegerDigits(int); + method public void setMinimumFractionDigits(int); + method public void setMinimumIntegerDigits(int); + method public void setParseIntegerOnly(boolean); + method public void setRoundingMode(java.math.RoundingMode); + field public static final int FRACTION_FIELD = 1; // 0x1 + field public static final int INTEGER_FIELD = 0; // 0x0 + } + + public static class NumberFormat.Field extends java.text.Format.Field { + ctor protected NumberFormat.Field(java.lang.String); + field public static final java.text.NumberFormat.Field CURRENCY; + field public static final java.text.NumberFormat.Field DECIMAL_SEPARATOR; + field public static final java.text.NumberFormat.Field EXPONENT; + field public static final java.text.NumberFormat.Field EXPONENT_SIGN; + field public static final java.text.NumberFormat.Field EXPONENT_SYMBOL; + field public static final java.text.NumberFormat.Field FRACTION; + field public static final java.text.NumberFormat.Field GROUPING_SEPARATOR; + field public static final java.text.NumberFormat.Field INTEGER; + field public static final java.text.NumberFormat.Field PERCENT; + field public static final java.text.NumberFormat.Field PERMILLE; + field public static final java.text.NumberFormat.Field SIGN; + } + + public class ParseException extends java.lang.Exception { + ctor public ParseException(java.lang.String, int); + method public int getErrorOffset(); + } + + public class ParsePosition { + ctor public ParsePosition(int); + method public int getErrorIndex(); + method public int getIndex(); + method public void setErrorIndex(int); + method public void setIndex(int); + } + + public class RuleBasedCollator extends java.text.Collator { + ctor public RuleBasedCollator(java.lang.String) throws java.text.ParseException; + method public int compare(java.lang.String, java.lang.String); + method public java.text.CollationElementIterator getCollationElementIterator(java.text.CharacterIterator); + method public java.text.CollationElementIterator getCollationElementIterator(java.lang.String); + method public java.text.CollationKey getCollationKey(java.lang.String); + method public java.lang.String getRules(); + method public int hashCode(); + } + + public class SimpleDateFormat extends java.text.DateFormat { + ctor public SimpleDateFormat(); + ctor public SimpleDateFormat(java.lang.String); + ctor public SimpleDateFormat(java.lang.String, java.text.DateFormatSymbols); + ctor public SimpleDateFormat(java.lang.String, java.util.Locale); + method public void applyLocalizedPattern(java.lang.String); + method public void applyPattern(java.lang.String); + method public java.lang.StringBuffer format(java.util.Date, java.lang.StringBuffer, java.text.FieldPosition); + method public java.util.Date get2DigitYearStart(); + method public java.text.DateFormatSymbols getDateFormatSymbols(); + method public java.util.Date parse(java.lang.String, java.text.ParsePosition); + method public void set2DigitYearStart(java.util.Date); + method public void setDateFormatSymbols(java.text.DateFormatSymbols); + method public java.lang.String toLocalizedPattern(); + method public java.lang.String toPattern(); + } + + public final class StringCharacterIterator implements java.text.CharacterIterator { + ctor public StringCharacterIterator(java.lang.String); + ctor public StringCharacterIterator(java.lang.String, int); + ctor public StringCharacterIterator(java.lang.String, int, int, int); + method public java.lang.Object clone(); + method public char current(); + method public char first(); + method public int getBeginIndex(); + method public int getEndIndex(); + method public int getIndex(); + method public char last(); + method public char next(); + method public char previous(); + method public char setIndex(int); + method public void setText(java.lang.String); + } + +} + +package java.util { + + public abstract class AbstractCollection implements java.util.Collection { + ctor protected AbstractCollection(); + method public boolean add(E); + method public boolean addAll(java.util.Collection); + method public void clear(); + method public boolean contains(java.lang.Object); + method public boolean containsAll(java.util.Collection); + method public boolean isEmpty(); + method public abstract java.util.Iterator iterator(); + method public boolean remove(java.lang.Object); + method public boolean removeAll(java.util.Collection); + method public boolean retainAll(java.util.Collection); + method public abstract int size(); + method public java.lang.Object[] toArray(); + method public T[] toArray(T[]); + } + + public abstract class AbstractList extends java.util.AbstractCollection implements java.util.List { + ctor protected AbstractList(); + method public void add(int, E); + method public boolean addAll(int, java.util.Collection); + method public abstract E get(int); + method public int indexOf(java.lang.Object); + method public java.util.Iterator iterator(); + method public int lastIndexOf(java.lang.Object); + method public java.util.ListIterator listIterator(); + method public java.util.ListIterator listIterator(int); + method public E remove(int); + method protected void removeRange(int, int); + method public E set(int, E); + method public java.util.List subList(int, int); + field protected transient int modCount; + } + + public abstract class AbstractMap implements java.util.Map { + ctor protected AbstractMap(); + method public void clear(); + method public boolean containsKey(java.lang.Object); + method public boolean containsValue(java.lang.Object); + method public abstract java.util.Set> entrySet(); + method public V get(java.lang.Object); + method public boolean isEmpty(); + method public java.util.Set keySet(); + method public V put(K, V); + method public void putAll(java.util.Map); + method public V remove(java.lang.Object); + method public int size(); + method public java.util.Collection values(); + } + + public static class AbstractMap.SimpleEntry implements java.util.Map.Entry java.io.Serializable { + ctor public AbstractMap.SimpleEntry(K, V); + ctor public AbstractMap.SimpleEntry(java.util.Map.Entry); + method public K getKey(); + method public V getValue(); + method public V setValue(V); + } + + public static class AbstractMap.SimpleImmutableEntry implements java.util.Map.Entry java.io.Serializable { + ctor public AbstractMap.SimpleImmutableEntry(K, V); + ctor public AbstractMap.SimpleImmutableEntry(java.util.Map.Entry); + method public K getKey(); + method public V getValue(); + method public V setValue(V); + } + + public abstract class AbstractQueue extends java.util.AbstractCollection implements java.util.Queue { + ctor protected AbstractQueue(); + method public E element(); + method public E remove(); + } + + public abstract class AbstractSequentialList extends java.util.AbstractList { + ctor protected AbstractSequentialList(); + method public E get(int); + method public abstract java.util.ListIterator listIterator(int); + } + + public abstract class AbstractSet extends java.util.AbstractCollection implements java.util.Set { + ctor protected AbstractSet(); + } + + public class ArrayDeque extends java.util.AbstractCollection implements java.lang.Cloneable java.util.Deque java.io.Serializable { + ctor public ArrayDeque(); + ctor public ArrayDeque(int); + ctor public ArrayDeque(java.util.Collection); + method public void addFirst(E); + method public void addLast(E); + method public java.util.ArrayDeque clone(); + method public java.util.Iterator descendingIterator(); + method public E element(); + method public E getFirst(); + method public E getLast(); + method public java.util.Iterator iterator(); + method public boolean offer(E); + method public boolean offerFirst(E); + method public boolean offerLast(E); + method public E peek(); + method public E peekFirst(); + method public E peekLast(); + method public E poll(); + method public E pollFirst(); + method public E pollLast(); + method public E pop(); + method public void push(E); + method public E remove(); + method public E removeFirst(); + method public boolean removeFirstOccurrence(java.lang.Object); + method public E removeLast(); + method public boolean removeLastOccurrence(java.lang.Object); + method public int size(); + } + + public class ArrayList extends java.util.AbstractList implements java.lang.Cloneable java.util.RandomAccess java.io.Serializable { + ctor public ArrayList(int); + ctor public ArrayList(); + ctor public ArrayList(java.util.Collection); + method public java.lang.Object clone(); + method public void ensureCapacity(int); + method public E get(int); + method public int size(); + method public void trimToSize(); + } + + public class Arrays { + method public static java.util.List asList(T...); + method public static int binarySearch(byte[], byte); + method public static int binarySearch(byte[], int, int, byte); + method public static int binarySearch(char[], char); + method public static int binarySearch(char[], int, int, char); + method public static int binarySearch(double[], double); + method public static int binarySearch(double[], int, int, double); + method public static int binarySearch(float[], float); + method public static int binarySearch(float[], int, int, float); + method public static int binarySearch(int[], int); + method public static int binarySearch(int[], int, int, int); + method public static int binarySearch(long[], long); + method public static int binarySearch(long[], int, int, long); + method public static int binarySearch(java.lang.Object[], java.lang.Object); + method public static int binarySearch(java.lang.Object[], int, int, java.lang.Object); + method public static int binarySearch(T[], T, java.util.Comparator); + method public static int binarySearch(T[], int, int, T, java.util.Comparator); + method public static int binarySearch(short[], short); + method public static int binarySearch(short[], int, int, short); + method public static boolean[] copyOf(boolean[], int); + method public static byte[] copyOf(byte[], int); + method public static char[] copyOf(char[], int); + method public static double[] copyOf(double[], int); + method public static float[] copyOf(float[], int); + method public static int[] copyOf(int[], int); + method public static long[] copyOf(long[], int); + method public static short[] copyOf(short[], int); + method public static T[] copyOf(T[], int); + method public static T[] copyOf(U[], int, java.lang.Class); + method public static boolean[] copyOfRange(boolean[], int, int); + method public static byte[] copyOfRange(byte[], int, int); + method public static char[] copyOfRange(char[], int, int); + method public static double[] copyOfRange(double[], int, int); + method public static float[] copyOfRange(float[], int, int); + method public static int[] copyOfRange(int[], int, int); + method public static long[] copyOfRange(long[], int, int); + method public static short[] copyOfRange(short[], int, int); + method public static T[] copyOfRange(T[], int, int); + method public static T[] copyOfRange(U[], int, int, java.lang.Class); + method public static boolean deepEquals(java.lang.Object[], java.lang.Object[]); + method public static int deepHashCode(java.lang.Object[]); + method public static java.lang.String deepToString(java.lang.Object[]); + method public static boolean equals(byte[], byte[]); + method public static boolean equals(short[], short[]); + method public static boolean equals(char[], char[]); + method public static boolean equals(int[], int[]); + method public static boolean equals(long[], long[]); + method public static boolean equals(float[], float[]); + method public static boolean equals(double[], double[]); + method public static boolean equals(boolean[], boolean[]); + method public static boolean equals(java.lang.Object[], java.lang.Object[]); + method public static void fill(byte[], byte); + method public static void fill(byte[], int, int, byte); + method public static void fill(short[], short); + method public static void fill(short[], int, int, short); + method public static void fill(char[], char); + method public static void fill(char[], int, int, char); + method public static void fill(int[], int); + method public static void fill(int[], int, int, int); + method public static void fill(long[], long); + method public static void fill(long[], int, int, long); + method public static void fill(float[], float); + method public static void fill(float[], int, int, float); + method public static void fill(double[], double); + method public static void fill(double[], int, int, double); + method public static void fill(boolean[], boolean); + method public static void fill(boolean[], int, int, boolean); + method public static void fill(java.lang.Object[], java.lang.Object); + method public static void fill(java.lang.Object[], int, int, java.lang.Object); + method public static int hashCode(boolean[]); + method public static int hashCode(int[]); + method public static int hashCode(short[]); + method public static int hashCode(char[]); + method public static int hashCode(byte[]); + method public static int hashCode(long[]); + method public static int hashCode(float[]); + method public static int hashCode(double[]); + method public static int hashCode(java.lang.Object[]); + method public static void sort(byte[]); + method public static void sort(byte[], int, int); + method public static void sort(char[]); + method public static void sort(char[], int, int); + method public static void sort(double[]); + method public static void sort(double[], int, int); + method public static void sort(float[]); + method public static void sort(float[], int, int); + method public static void sort(int[]); + method public static void sort(int[], int, int); + method public static void sort(long[]); + method public static void sort(long[], int, int); + method public static void sort(short[]); + method public static void sort(short[], int, int); + method public static void sort(java.lang.Object[]); + method public static void sort(java.lang.Object[], int, int); + method public static void sort(T[], int, int, java.util.Comparator); + method public static void sort(T[], java.util.Comparator); + method public static java.lang.String toString(boolean[]); + method public static java.lang.String toString(byte[]); + method public static java.lang.String toString(char[]); + method public static java.lang.String toString(double[]); + method public static java.lang.String toString(float[]); + method public static java.lang.String toString(int[]); + method public static java.lang.String toString(long[]); + method public static java.lang.String toString(short[]); + method public static java.lang.String toString(java.lang.Object[]); + } + + public class BitSet implements java.lang.Cloneable java.io.Serializable { + ctor public BitSet(); + ctor public BitSet(int); + method public void and(java.util.BitSet); + method public void andNot(java.util.BitSet); + method public int cardinality(); + method public void clear(int); + method public void clear(); + method public void clear(int, int); + method public java.lang.Object clone(); + method public void flip(int); + method public void flip(int, int); + method public boolean get(int); + method public java.util.BitSet get(int, int); + method public boolean intersects(java.util.BitSet); + method public boolean isEmpty(); + method public int length(); + method public int nextClearBit(int); + method public int nextSetBit(int); + method public void or(java.util.BitSet); + method public int previousClearBit(int); + method public int previousSetBit(int); + method public void set(int); + method public void set(int, boolean); + method public void set(int, int, boolean); + method public void set(int, int); + method public int size(); + method public byte[] toByteArray(); + method public long[] toLongArray(); + method public static java.util.BitSet valueOf(long[]); + method public static java.util.BitSet valueOf(java.nio.LongBuffer); + method public static java.util.BitSet valueOf(byte[]); + method public static java.util.BitSet valueOf(java.nio.ByteBuffer); + method public void xor(java.util.BitSet); + } + + public abstract class Calendar implements java.lang.Cloneable java.lang.Comparable java.io.Serializable { + ctor protected Calendar(); + ctor protected Calendar(java.util.TimeZone, java.util.Locale); + method public abstract void add(int, int); + method public boolean after(java.lang.Object); + method public boolean before(java.lang.Object); + method public final void clear(); + method public final void clear(int); + method public java.lang.Object clone(); + method public int compareTo(java.util.Calendar); + method protected void complete(); + method protected abstract void computeFields(); + method protected abstract void computeTime(); + method public int get(int); + method public int getActualMaximum(int); + method public int getActualMinimum(int); + method public static synchronized java.util.Locale[] getAvailableLocales(); + method public java.lang.String getDisplayName(int, int, java.util.Locale); + method public java.util.Map getDisplayNames(int, int, java.util.Locale); + method public int getFirstDayOfWeek(); + method public abstract int getGreatestMinimum(int); + method public static synchronized java.util.Calendar getInstance(); + method public static synchronized java.util.Calendar getInstance(java.util.Locale); + method public static synchronized java.util.Calendar getInstance(java.util.TimeZone); + method public static synchronized java.util.Calendar getInstance(java.util.TimeZone, java.util.Locale); + method public abstract int getLeastMaximum(int); + method public abstract int getMaximum(int); + method public int getMinimalDaysInFirstWeek(); + method public abstract int getMinimum(int); + method public final java.util.Date getTime(); + method public long getTimeInMillis(); + method public java.util.TimeZone getTimeZone(); + method protected final int internalGet(int); + method public boolean isLenient(); + method public final boolean isSet(int); + method public void roll(int, int); + method public abstract void roll(int, boolean); + method public void set(int, int); + method public final void set(int, int, int); + method public final void set(int, int, int, int, int); + method public final void set(int, int, int, int, int, int); + method public void setFirstDayOfWeek(int); + method public void setLenient(boolean); + method public void setMinimalDaysInFirstWeek(int); + method public final void setTime(java.util.Date); + method public void setTimeInMillis(long); + method public void setTimeZone(java.util.TimeZone); + field public static final int ALL_STYLES = 0; // 0x0 + field public static final int AM = 0; // 0x0 + field public static final int AM_PM = 9; // 0x9 + field public static final int APRIL = 3; // 0x3 + field public static final int AUGUST = 7; // 0x7 + field public static final int DATE = 5; // 0x5 + field public static final int DAY_OF_MONTH = 5; // 0x5 + field public static final int DAY_OF_WEEK = 7; // 0x7 + field public static final int DAY_OF_WEEK_IN_MONTH = 8; // 0x8 + field public static final int DAY_OF_YEAR = 6; // 0x6 + field public static final int DECEMBER = 11; // 0xb + field public static final int DST_OFFSET = 16; // 0x10 + field public static final int ERA = 0; // 0x0 + field public static final int FEBRUARY = 1; // 0x1 + field public static final int FIELD_COUNT = 17; // 0x11 + field public static final int FRIDAY = 6; // 0x6 + field public static final int HOUR = 10; // 0xa + field public static final int HOUR_OF_DAY = 11; // 0xb + field public static final int JANUARY = 0; // 0x0 + field public static final int JULY = 6; // 0x6 + field public static final int JUNE = 5; // 0x5 + field public static final int LONG = 2; // 0x2 + field public static final int MARCH = 2; // 0x2 + field public static final int MAY = 4; // 0x4 + field public static final int MILLISECOND = 14; // 0xe + field public static final int MINUTE = 12; // 0xc + field public static final int MONDAY = 2; // 0x2 + field public static final int MONTH = 2; // 0x2 + field public static final int NOVEMBER = 10; // 0xa + field public static final int OCTOBER = 9; // 0x9 + field public static final int PM = 1; // 0x1 + field public static final int SATURDAY = 7; // 0x7 + field public static final int SECOND = 13; // 0xd + field public static final int SEPTEMBER = 8; // 0x8 + field public static final int SHORT = 1; // 0x1 + field public static final int SUNDAY = 1; // 0x1 + field public static final int THURSDAY = 5; // 0x5 + field public static final int TUESDAY = 3; // 0x3 + field public static final int UNDECIMBER = 12; // 0xc + field public static final int WEDNESDAY = 4; // 0x4 + field public static final int WEEK_OF_MONTH = 4; // 0x4 + field public static final int WEEK_OF_YEAR = 3; // 0x3 + field public static final int YEAR = 1; // 0x1 + field public static final int ZONE_OFFSET = 15; // 0xf + field protected boolean areFieldsSet; + field protected int[] fields; + field protected boolean[] isSet; + field protected boolean isTimeSet; + field protected long time; + } + + public abstract interface Collection implements java.lang.Iterable { + method public abstract boolean add(E); + method public abstract boolean addAll(java.util.Collection); + method public abstract void clear(); + method public abstract boolean contains(java.lang.Object); + method public abstract boolean containsAll(java.util.Collection); + method public abstract boolean equals(java.lang.Object); + method public abstract int hashCode(); + method public abstract boolean isEmpty(); + method public abstract java.util.Iterator iterator(); + method public abstract boolean remove(java.lang.Object); + method public abstract boolean removeAll(java.util.Collection); + method public abstract boolean retainAll(java.util.Collection); + method public abstract int size(); + method public abstract java.lang.Object[] toArray(); + method public abstract T[] toArray(T[]); + } + + public class Collections { + method public static boolean addAll(java.util.Collection, T...); + method public static java.util.Queue asLifoQueue(java.util.Deque); + method public static int binarySearch(java.util.List>, T); + method public static int binarySearch(java.util.List, T, java.util.Comparator); + method public static java.util.Collection checkedCollection(java.util.Collection, java.lang.Class); + method public static java.util.List checkedList(java.util.List, java.lang.Class); + method public static java.util.Map checkedMap(java.util.Map, java.lang.Class, java.lang.Class); + method public static java.util.Set checkedSet(java.util.Set, java.lang.Class); + method public static java.util.SortedMap checkedSortedMap(java.util.SortedMap, java.lang.Class, java.lang.Class); + method public static java.util.SortedSet checkedSortedSet(java.util.SortedSet, java.lang.Class); + method public static void copy(java.util.List, java.util.List); + method public static boolean disjoint(java.util.Collection, java.util.Collection); + method public static java.util.Enumeration emptyEnumeration(); + method public static java.util.Iterator emptyIterator(); + method public static final java.util.List emptyList(); + method public static java.util.ListIterator emptyListIterator(); + method public static final java.util.Map emptyMap(); + method public static final java.util.Set emptySet(); + method public static java.util.Enumeration enumeration(java.util.Collection); + method public static void fill(java.util.List, T); + method public static int frequency(java.util.Collection, java.lang.Object); + method public static int indexOfSubList(java.util.List, java.util.List); + method public static int lastIndexOfSubList(java.util.List, java.util.List); + method public static java.util.ArrayList list(java.util.Enumeration); + method public static T max(java.util.Collection); + method public static T max(java.util.Collection, java.util.Comparator); + method public static T min(java.util.Collection); + method public static T min(java.util.Collection, java.util.Comparator); + method public static java.util.List nCopies(int, T); + method public static java.util.Set newSetFromMap(java.util.Map); + method public static boolean replaceAll(java.util.List, T, T); + method public static void reverse(java.util.List); + method public static java.util.Comparator reverseOrder(); + method public static java.util.Comparator reverseOrder(java.util.Comparator); + method public static void rotate(java.util.List, int); + method public static void shuffle(java.util.List); + method public static void shuffle(java.util.List, java.util.Random); + method public static java.util.Set singleton(E); + method public static java.util.List singletonList(E); + method public static java.util.Map singletonMap(K, V); + method public static void sort(java.util.List); + method public static void sort(java.util.List, java.util.Comparator); + method public static void swap(java.util.List, int, int); + method public static java.util.Collection synchronizedCollection(java.util.Collection); + method public static java.util.List synchronizedList(java.util.List); + method public static java.util.Map synchronizedMap(java.util.Map); + method public static java.util.Set synchronizedSet(java.util.Set); + method public static java.util.SortedMap synchronizedSortedMap(java.util.SortedMap); + method public static java.util.SortedSet synchronizedSortedSet(java.util.SortedSet); + method public static java.util.Collection unmodifiableCollection(java.util.Collection); + method public static java.util.List unmodifiableList(java.util.List); + method public static java.util.Map unmodifiableMap(java.util.Map); + method public static java.util.Set unmodifiableSet(java.util.Set); + method public static java.util.SortedMap unmodifiableSortedMap(java.util.SortedMap); + method public static java.util.SortedSet unmodifiableSortedSet(java.util.SortedSet); + field public static final java.util.List EMPTY_LIST; + field public static final java.util.Map EMPTY_MAP; + field public static final java.util.Set EMPTY_SET; + } + + public abstract interface Comparator { + method public abstract int compare(T, T); + method public abstract boolean equals(java.lang.Object); + } + + public class ConcurrentModificationException extends java.lang.RuntimeException { + ctor public ConcurrentModificationException(); + ctor public ConcurrentModificationException(java.lang.String); + ctor public ConcurrentModificationException(java.lang.String, java.lang.Throwable); + ctor public ConcurrentModificationException(java.lang.Throwable); + } + + public final class Currency implements java.io.Serializable { + method public static java.util.Set getAvailableCurrencies(); + method public java.lang.String getCurrencyCode(); + method public int getDefaultFractionDigits(); + method public java.lang.String getDisplayName(); + method public java.lang.String getDisplayName(java.util.Locale); + method public static java.util.Currency getInstance(java.lang.String); + method public static java.util.Currency getInstance(java.util.Locale); + method public java.lang.String getSymbol(); + method public java.lang.String getSymbol(java.util.Locale); + } + + public class Date implements java.lang.Cloneable java.lang.Comparable java.io.Serializable { + ctor public Date(); + ctor public deprecated Date(int, int, int); + ctor public deprecated Date(int, int, int, int, int); + ctor public deprecated Date(int, int, int, int, int, int); + ctor public Date(long); + ctor public deprecated Date(java.lang.String); + method public static deprecated long UTC(int, int, int, int, int, int); + method public boolean after(java.util.Date); + method public boolean before(java.util.Date); + method public java.lang.Object clone(); + method public int compareTo(java.util.Date); + method public deprecated int getDate(); + method public deprecated int getDay(); + method public deprecated int getHours(); + method public deprecated int getMinutes(); + method public deprecated int getMonth(); + method public deprecated int getSeconds(); + method public long getTime(); + method public deprecated int getTimezoneOffset(); + method public deprecated int getYear(); + method public static deprecated long parse(java.lang.String); + method public deprecated void setDate(int); + method public deprecated void setHours(int); + method public deprecated void setMinutes(int); + method public deprecated void setMonth(int); + method public deprecated void setSeconds(int); + method public void setTime(long); + method public deprecated void setYear(int); + method public deprecated java.lang.String toGMTString(); + method public deprecated java.lang.String toLocaleString(); + } + + public abstract interface Deque implements java.util.Queue { + method public abstract boolean add(E); + method public abstract void addFirst(E); + method public abstract void addLast(E); + method public abstract boolean contains(java.lang.Object); + method public abstract java.util.Iterator descendingIterator(); + method public abstract E element(); + method public abstract E getFirst(); + method public abstract E getLast(); + method public abstract java.util.Iterator iterator(); + method public abstract boolean offer(E); + method public abstract boolean offerFirst(E); + method public abstract boolean offerLast(E); + method public abstract E peek(); + method public abstract E peekFirst(); + method public abstract E peekLast(); + method public abstract E poll(); + method public abstract E pollFirst(); + method public abstract E pollLast(); + method public abstract E pop(); + method public abstract void push(E); + method public abstract E remove(); + method public abstract boolean remove(java.lang.Object); + method public abstract E removeFirst(); + method public abstract boolean removeFirstOccurrence(java.lang.Object); + method public abstract E removeLast(); + method public abstract boolean removeLastOccurrence(java.lang.Object); + method public abstract int size(); + } + + public abstract class Dictionary { + ctor public Dictionary(); + method public abstract java.util.Enumeration elements(); + method public abstract V get(java.lang.Object); + method public abstract boolean isEmpty(); + method public abstract java.util.Enumeration keys(); + method public abstract V put(K, V); + method public abstract V remove(java.lang.Object); + method public abstract int size(); + } + + public class DuplicateFormatFlagsException extends java.util.IllegalFormatException { + ctor public DuplicateFormatFlagsException(java.lang.String); + method public java.lang.String getFlags(); + } + + public class EmptyStackException extends java.lang.RuntimeException { + ctor public EmptyStackException(); + } + + public class EnumMap extends java.util.AbstractMap implements java.lang.Cloneable java.util.Map java.io.Serializable { + ctor public EnumMap(java.lang.Class); + ctor public EnumMap(java.util.EnumMap); + ctor public EnumMap(java.util.Map); + method public java.util.EnumMap clone(); + method public java.util.Set> entrySet(); + } + + public abstract class EnumSet extends java.util.AbstractSet implements java.lang.Cloneable java.io.Serializable { + method public static java.util.EnumSet allOf(java.lang.Class); + method public java.util.EnumSet clone(); + method public static java.util.EnumSet complementOf(java.util.EnumSet); + method public static java.util.EnumSet copyOf(java.util.EnumSet); + method public static java.util.EnumSet copyOf(java.util.Collection); + method public static java.util.EnumSet noneOf(java.lang.Class); + method public static java.util.EnumSet of(E); + method public static java.util.EnumSet of(E, E); + method public static java.util.EnumSet of(E, E, E); + method public static java.util.EnumSet of(E, E, E, E); + method public static java.util.EnumSet of(E, E, E, E, E); + method public static java.util.EnumSet of(E, E...); + method public static java.util.EnumSet range(E, E); + } + + public abstract interface Enumeration { + method public abstract boolean hasMoreElements(); + method public abstract E nextElement(); + } + + public abstract interface EventListener { + } + + public abstract class EventListenerProxy implements java.util.EventListener { + ctor public EventListenerProxy(java.util.EventListener); + method public java.util.EventListener getListener(); + } + + public class EventObject implements java.io.Serializable { + ctor public EventObject(java.lang.Object); + method public java.lang.Object getSource(); + field protected transient java.lang.Object source; + } + + public class FormatFlagsConversionMismatchException extends java.util.IllegalFormatException implements java.io.Serializable { + ctor public FormatFlagsConversionMismatchException(java.lang.String, char); + method public char getConversion(); + method public java.lang.String getFlags(); + } + + public abstract interface Formattable { + method public abstract void formatTo(java.util.Formatter, int, int, int) throws java.util.IllegalFormatException; + } + + public class FormattableFlags { + field public static final int ALTERNATE = 4; // 0x4 + field public static final int LEFT_JUSTIFY = 1; // 0x1 + field public static final int UPPERCASE = 2; // 0x2 + } + + public final class Formatter implements java.io.Closeable java.io.Flushable { + ctor public Formatter(); + ctor public Formatter(java.lang.Appendable); + ctor public Formatter(java.util.Locale); + ctor public Formatter(java.lang.Appendable, java.util.Locale); + ctor public Formatter(java.lang.String) throws java.io.FileNotFoundException; + ctor public Formatter(java.lang.String, java.lang.String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException; + ctor public Formatter(java.lang.String, java.lang.String, java.util.Locale) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException; + ctor public Formatter(java.io.File) throws java.io.FileNotFoundException; + ctor public Formatter(java.io.File, java.lang.String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException; + ctor public Formatter(java.io.File, java.lang.String, java.util.Locale) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException; + ctor public Formatter(java.io.OutputStream); + ctor public Formatter(java.io.OutputStream, java.lang.String) throws java.io.UnsupportedEncodingException; + ctor public Formatter(java.io.OutputStream, java.lang.String, java.util.Locale) throws java.io.UnsupportedEncodingException; + ctor public Formatter(java.io.PrintStream); + method public void close(); + method public void flush(); + method public java.util.Formatter format(java.lang.String, java.lang.Object...); + method public java.util.Formatter format(java.util.Locale, java.lang.String, java.lang.Object...); + method public java.io.IOException ioException(); + method public java.util.Locale locale(); + method public java.lang.Appendable out(); + } + + public static final class Formatter.BigDecimalLayoutForm extends java.lang.Enum { + method public static java.util.Formatter.BigDecimalLayoutForm valueOf(java.lang.String); + method public static final java.util.Formatter.BigDecimalLayoutForm[] values(); + enum_constant public static final java.util.Formatter.BigDecimalLayoutForm DECIMAL_FLOAT; + enum_constant public static final java.util.Formatter.BigDecimalLayoutForm SCIENTIFIC; + } + + public class FormatterClosedException extends java.lang.IllegalStateException implements java.io.Serializable { + ctor public FormatterClosedException(); + } + + public class GregorianCalendar extends java.util.Calendar { + ctor public GregorianCalendar(); + ctor public GregorianCalendar(int, int, int); + ctor public GregorianCalendar(int, int, int, int, int); + ctor public GregorianCalendar(int, int, int, int, int, int); + ctor public GregorianCalendar(java.util.Locale); + ctor public GregorianCalendar(java.util.TimeZone); + ctor public GregorianCalendar(java.util.TimeZone, java.util.Locale); + method public void add(int, int); + method protected void computeFields(); + method protected void computeTime(); + method public int getGreatestMinimum(int); + method public final java.util.Date getGregorianChange(); + method public int getLeastMaximum(int); + method public int getMaximum(int); + method public int getMinimum(int); + method public boolean isLeapYear(int); + method public void roll(int, boolean); + method public void setGregorianChange(java.util.Date); + field public static final int AD = 1; // 0x1 + field public static final int BC = 0; // 0x0 + } + + public class HashMap extends java.util.AbstractMap implements java.lang.Cloneable java.io.Serializable { + ctor public HashMap(); + ctor public HashMap(int); + ctor public HashMap(int, float); + ctor public HashMap(java.util.Map); + method public java.lang.Object clone(); + method public java.util.Set> entrySet(); + } + + public class HashSet extends java.util.AbstractSet implements java.lang.Cloneable java.io.Serializable java.util.Set { + ctor public HashSet(); + ctor public HashSet(int); + ctor public HashSet(int, float); + ctor public HashSet(java.util.Collection); + method public java.lang.Object clone(); + method public java.util.Iterator iterator(); + method public int size(); + } + + public class Hashtable extends java.util.Dictionary implements java.lang.Cloneable java.util.Map java.io.Serializable { + ctor public Hashtable(); + ctor public Hashtable(int); + ctor public Hashtable(int, float); + ctor public Hashtable(java.util.Map); + method public synchronized void clear(); + method public synchronized java.lang.Object clone(); + method public boolean contains(java.lang.Object); + method public synchronized boolean containsKey(java.lang.Object); + method public synchronized boolean containsValue(java.lang.Object); + method public synchronized java.util.Enumeration elements(); + method public synchronized java.util.Set> entrySet(); + method public synchronized V get(java.lang.Object); + method public synchronized boolean isEmpty(); + method public synchronized java.util.Set keySet(); + method public synchronized java.util.Enumeration keys(); + method public synchronized V put(K, V); + method public synchronized void putAll(java.util.Map); + method protected void rehash(); + method public synchronized V remove(java.lang.Object); + method public synchronized int size(); + method public synchronized java.util.Collection values(); + } + + public class IdentityHashMap extends java.util.AbstractMap implements java.lang.Cloneable java.util.Map java.io.Serializable { + ctor public IdentityHashMap(); + ctor public IdentityHashMap(int); + ctor public IdentityHashMap(java.util.Map); + method public java.lang.Object clone(); + method public java.util.Set> entrySet(); + } + + public class IllegalFormatCodePointException extends java.util.IllegalFormatException implements java.io.Serializable { + ctor public IllegalFormatCodePointException(int); + method public int getCodePoint(); + } + + public class IllegalFormatConversionException extends java.util.IllegalFormatException implements java.io.Serializable { + ctor public IllegalFormatConversionException(char, java.lang.Class); + method public java.lang.Class getArgumentClass(); + method public char getConversion(); + } + + public class IllegalFormatException extends java.lang.IllegalArgumentException implements java.io.Serializable { + } + + public class IllegalFormatFlagsException extends java.util.IllegalFormatException implements java.io.Serializable { + ctor public IllegalFormatFlagsException(java.lang.String); + method public java.lang.String getFlags(); + } + + public class IllegalFormatPrecisionException extends java.util.IllegalFormatException { + ctor public IllegalFormatPrecisionException(int); + method public int getPrecision(); + } + + public class IllegalFormatWidthException extends java.util.IllegalFormatException { + ctor public IllegalFormatWidthException(int); + method public int getWidth(); + } + + public class IllformedLocaleException extends java.lang.RuntimeException { + ctor public IllformedLocaleException(); + ctor public IllformedLocaleException(java.lang.String); + ctor public IllformedLocaleException(java.lang.String, int); + method public int getErrorIndex(); + } + + public class InputMismatchException extends java.util.NoSuchElementException implements java.io.Serializable { + ctor public InputMismatchException(); + ctor public InputMismatchException(java.lang.String); + } + + public class InvalidPropertiesFormatException extends java.io.IOException { + ctor public InvalidPropertiesFormatException(java.lang.String); + ctor public InvalidPropertiesFormatException(java.lang.Throwable); + } + + public abstract interface Iterator { + method public abstract boolean hasNext(); + method public abstract E next(); + method public abstract void remove(); + } + + public class LinkedHashMap extends java.util.HashMap { + ctor public LinkedHashMap(); + ctor public LinkedHashMap(int); + ctor public LinkedHashMap(int, float); + ctor public LinkedHashMap(int, float, boolean); + ctor public LinkedHashMap(java.util.Map); + method protected boolean removeEldestEntry(java.util.Map.Entry); + } + + public class LinkedHashSet extends java.util.HashSet implements java.lang.Cloneable java.io.Serializable java.util.Set { + ctor public LinkedHashSet(); + ctor public LinkedHashSet(int); + ctor public LinkedHashSet(int, float); + ctor public LinkedHashSet(java.util.Collection); + } + + public class LinkedList extends java.util.AbstractSequentialList implements java.lang.Cloneable java.util.Deque java.util.List java.util.Queue java.io.Serializable { + ctor public LinkedList(); + ctor public LinkedList(java.util.Collection); + method public void addFirst(E); + method public void addLast(E); + method public java.lang.Object clone(); + method public java.util.Iterator descendingIterator(); + method public E element(); + method public E getFirst(); + method public E getLast(); + method public java.util.ListIterator listIterator(int); + method public boolean offer(E); + method public boolean offerFirst(E); + method public boolean offerLast(E); + method public E peek(); + method public E peekFirst(); + method public E peekLast(); + method public E poll(); + method public E pollFirst(); + method public E pollLast(); + method public E pop(); + method public void push(E); + method public E remove(); + method public E removeFirst(); + method public boolean removeFirstOccurrence(java.lang.Object); + method public E removeLast(); + method public boolean removeLastOccurrence(java.lang.Object); + method public int size(); + } + + public abstract interface List implements java.util.Collection { + method public abstract void add(int, E); + method public abstract boolean add(E); + method public abstract boolean addAll(int, java.util.Collection); + method public abstract boolean addAll(java.util.Collection); + method public abstract void clear(); + method public abstract boolean contains(java.lang.Object); + method public abstract boolean containsAll(java.util.Collection); + method public abstract boolean equals(java.lang.Object); + method public abstract E get(int); + method public abstract int hashCode(); + method public abstract int indexOf(java.lang.Object); + method public abstract boolean isEmpty(); + method public abstract java.util.Iterator iterator(); + method public abstract int lastIndexOf(java.lang.Object); + method public abstract java.util.ListIterator listIterator(); + method public abstract java.util.ListIterator listIterator(int); + method public abstract E remove(int); + method public abstract boolean remove(java.lang.Object); + method public abstract boolean removeAll(java.util.Collection); + method public abstract boolean retainAll(java.util.Collection); + method public abstract E set(int, E); + method public abstract int size(); + method public abstract java.util.List subList(int, int); + method public abstract java.lang.Object[] toArray(); + method public abstract T[] toArray(T[]); + } + + public abstract interface ListIterator implements java.util.Iterator { + method public abstract void add(E); + method public abstract boolean hasNext(); + method public abstract boolean hasPrevious(); + method public abstract E next(); + method public abstract int nextIndex(); + method public abstract E previous(); + method public abstract int previousIndex(); + method public abstract void remove(); + method public abstract void set(E); + } + + public abstract class ListResourceBundle extends java.util.ResourceBundle { + ctor public ListResourceBundle(); + method protected abstract java.lang.Object[][] getContents(); + method public java.util.Enumeration getKeys(); + method public final java.lang.Object handleGetObject(java.lang.String); + } + + public final class Locale implements java.lang.Cloneable java.io.Serializable { + ctor public Locale(java.lang.String); + ctor public Locale(java.lang.String, java.lang.String); + ctor public Locale(java.lang.String, java.lang.String, java.lang.String); + method public java.lang.Object clone(); + method public static java.util.Locale forLanguageTag(java.lang.String); + method public static java.util.Locale[] getAvailableLocales(); + method public java.lang.String getCountry(); + method public static java.util.Locale getDefault(); + method public final java.lang.String getDisplayCountry(); + method public java.lang.String getDisplayCountry(java.util.Locale); + method public final java.lang.String getDisplayLanguage(); + method public java.lang.String getDisplayLanguage(java.util.Locale); + method public final java.lang.String getDisplayName(); + method public java.lang.String getDisplayName(java.util.Locale); + method public java.lang.String getDisplayScript(); + method public java.lang.String getDisplayScript(java.util.Locale); + method public final java.lang.String getDisplayVariant(); + method public java.lang.String getDisplayVariant(java.util.Locale); + method public java.lang.String getExtension(char); + method public java.util.Set getExtensionKeys(); + method public java.lang.String getISO3Country(); + method public java.lang.String getISO3Language(); + method public static java.lang.String[] getISOCountries(); + method public static java.lang.String[] getISOLanguages(); + method public java.lang.String getLanguage(); + method public java.lang.String getScript(); + method public java.util.Set getUnicodeLocaleAttributes(); + method public java.util.Set getUnicodeLocaleKeys(); + method public java.lang.String getUnicodeLocaleType(java.lang.String); + method public java.lang.String getVariant(); + method public static synchronized void setDefault(java.util.Locale); + method public java.lang.String toLanguageTag(); + method public final java.lang.String toString(); + field public static final java.util.Locale CANADA; + field public static final java.util.Locale CANADA_FRENCH; + field public static final java.util.Locale CHINA; + field public static final java.util.Locale CHINESE; + field public static final java.util.Locale ENGLISH; + field public static final java.util.Locale FRANCE; + field public static final java.util.Locale FRENCH; + field public static final java.util.Locale GERMAN; + field public static final java.util.Locale GERMANY; + field public static final java.util.Locale ITALIAN; + field public static final java.util.Locale ITALY; + field public static final java.util.Locale JAPAN; + field public static final java.util.Locale JAPANESE; + field public static final java.util.Locale KOREA; + field public static final java.util.Locale KOREAN; + field public static final java.util.Locale PRC; + field public static final char PRIVATE_USE_EXTENSION = 120; // 0x0078 'x' + field public static final java.util.Locale ROOT; + field public static final java.util.Locale SIMPLIFIED_CHINESE; + field public static final java.util.Locale TAIWAN; + field public static final java.util.Locale TRADITIONAL_CHINESE; + field public static final java.util.Locale UK; + field public static final char UNICODE_LOCALE_EXTENSION = 117; // 0x0075 'u' + field public static final java.util.Locale US; + } + + public static final class Locale.Builder { + ctor public Locale.Builder(); + method public java.util.Locale.Builder addUnicodeLocaleAttribute(java.lang.String); + method public java.util.Locale build(); + method public java.util.Locale.Builder clear(); + method public java.util.Locale.Builder clearExtensions(); + method public java.util.Locale.Builder removeUnicodeLocaleAttribute(java.lang.String); + method public java.util.Locale.Builder setExtension(char, java.lang.String); + method public java.util.Locale.Builder setLanguage(java.lang.String); + method public java.util.Locale.Builder setLanguageTag(java.lang.String); + method public java.util.Locale.Builder setLocale(java.util.Locale); + method public java.util.Locale.Builder setRegion(java.lang.String); + method public java.util.Locale.Builder setScript(java.lang.String); + method public java.util.Locale.Builder setUnicodeLocaleKeyword(java.lang.String, java.lang.String); + method public java.util.Locale.Builder setVariant(java.lang.String); + } + + public abstract interface Map { + method public abstract void clear(); + method public abstract boolean containsKey(java.lang.Object); + method public abstract boolean containsValue(java.lang.Object); + method public abstract java.util.Set> entrySet(); + method public abstract boolean equals(java.lang.Object); + method public abstract V get(java.lang.Object); + method public abstract int hashCode(); + method public abstract boolean isEmpty(); + method public abstract java.util.Set keySet(); + method public abstract V put(K, V); + method public abstract void putAll(java.util.Map); + method public abstract V remove(java.lang.Object); + method public abstract int size(); + method public abstract java.util.Collection values(); + } + + public static abstract interface Map.Entry { + method public abstract boolean equals(java.lang.Object); + method public abstract K getKey(); + method public abstract V getValue(); + method public abstract int hashCode(); + method public abstract V setValue(V); + } + + public class MissingFormatArgumentException extends java.util.IllegalFormatException { + ctor public MissingFormatArgumentException(java.lang.String); + method public java.lang.String getFormatSpecifier(); + } + + public class MissingFormatWidthException extends java.util.IllegalFormatException { + ctor public MissingFormatWidthException(java.lang.String); + method public java.lang.String getFormatSpecifier(); + } + + public class MissingResourceException extends java.lang.RuntimeException { + ctor public MissingResourceException(java.lang.String, java.lang.String, java.lang.String); + method public java.lang.String getClassName(); + method public java.lang.String getKey(); + } + + public abstract interface NavigableMap implements java.util.SortedMap { + method public abstract java.util.Map.Entry ceilingEntry(K); + method public abstract K ceilingKey(K); + method public abstract java.util.NavigableSet descendingKeySet(); + method public abstract java.util.NavigableMap descendingMap(); + method public abstract java.util.Map.Entry firstEntry(); + method public abstract java.util.Map.Entry floorEntry(K); + method public abstract K floorKey(K); + method public abstract java.util.NavigableMap headMap(K, boolean); + method public abstract java.util.SortedMap headMap(K); + method public abstract java.util.Map.Entry higherEntry(K); + method public abstract K higherKey(K); + method public abstract java.util.Map.Entry lastEntry(); + method public abstract java.util.Map.Entry lowerEntry(K); + method public abstract K lowerKey(K); + method public abstract java.util.NavigableSet navigableKeySet(); + method public abstract java.util.Map.Entry pollFirstEntry(); + method public abstract java.util.Map.Entry pollLastEntry(); + method public abstract java.util.NavigableMap subMap(K, boolean, K, boolean); + method public abstract java.util.SortedMap subMap(K, K); + method public abstract java.util.NavigableMap tailMap(K, boolean); + method public abstract java.util.SortedMap tailMap(K); + } + + public abstract interface NavigableSet implements java.util.SortedSet { + method public abstract E ceiling(E); + method public abstract java.util.Iterator descendingIterator(); + method public abstract java.util.NavigableSet descendingSet(); + method public abstract E floor(E); + method public abstract java.util.NavigableSet headSet(E, boolean); + method public abstract java.util.SortedSet headSet(E); + method public abstract E higher(E); + method public abstract java.util.Iterator iterator(); + method public abstract E lower(E); + method public abstract E pollFirst(); + method public abstract E pollLast(); + method public abstract java.util.NavigableSet subSet(E, boolean, E, boolean); + method public abstract java.util.SortedSet subSet(E, E); + method public abstract java.util.NavigableSet tailSet(E, boolean); + method public abstract java.util.SortedSet tailSet(E); + } + + public class NoSuchElementException extends java.lang.RuntimeException { + ctor public NoSuchElementException(); + ctor public NoSuchElementException(java.lang.String); + } + + public final class Objects { + method public static int compare(T, T, java.util.Comparator); + method public static boolean deepEquals(java.lang.Object, java.lang.Object); + method public static boolean equals(java.lang.Object, java.lang.Object); + method public static int hash(java.lang.Object...); + method public static int hashCode(java.lang.Object); + method public static T requireNonNull(T); + method public static T requireNonNull(T, java.lang.String); + method public static java.lang.String toString(java.lang.Object); + method public static java.lang.String toString(java.lang.Object, java.lang.String); + } + + public class Observable { + ctor public Observable(); + method public void addObserver(java.util.Observer); + method protected void clearChanged(); + method public int countObservers(); + method public synchronized void deleteObserver(java.util.Observer); + method public synchronized void deleteObservers(); + method public boolean hasChanged(); + method public void notifyObservers(); + method public void notifyObservers(java.lang.Object); + method protected void setChanged(); + } + + public abstract interface Observer { + method public abstract void update(java.util.Observable, java.lang.Object); + } + + public class PriorityQueue extends java.util.AbstractQueue implements java.io.Serializable { + ctor public PriorityQueue(); + ctor public PriorityQueue(int); + ctor public PriorityQueue(int, java.util.Comparator); + ctor public PriorityQueue(java.util.Collection); + ctor public PriorityQueue(java.util.PriorityQueue); + ctor public PriorityQueue(java.util.SortedSet); + method public java.util.Comparator comparator(); + method public java.util.Iterator iterator(); + method public boolean offer(E); + method public E peek(); + method public E poll(); + method public int size(); + } + + public class Properties extends java.util.Hashtable { + ctor public Properties(); + ctor public Properties(java.util.Properties); + method public java.lang.String getProperty(java.lang.String); + method public java.lang.String getProperty(java.lang.String, java.lang.String); + method public void list(java.io.PrintStream); + method public void list(java.io.PrintWriter); + method public synchronized void load(java.io.InputStream) throws java.io.IOException; + method public synchronized void load(java.io.Reader) throws java.io.IOException; + method public synchronized void loadFromXML(java.io.InputStream) throws java.io.IOException, java.util.InvalidPropertiesFormatException; + method public java.util.Enumeration propertyNames(); + method public deprecated void save(java.io.OutputStream, java.lang.String); + method public java.lang.Object setProperty(java.lang.String, java.lang.String); + method public synchronized void store(java.io.OutputStream, java.lang.String) throws java.io.IOException; + method public synchronized void store(java.io.Writer, java.lang.String) throws java.io.IOException; + method public void storeToXML(java.io.OutputStream, java.lang.String) throws java.io.IOException; + method public synchronized void storeToXML(java.io.OutputStream, java.lang.String, java.lang.String) throws java.io.IOException; + method public java.util.Set stringPropertyNames(); + field protected java.util.Properties defaults; + } + + public final class PropertyPermission extends java.security.BasicPermission { + ctor public PropertyPermission(java.lang.String, java.lang.String); + } + + public class PropertyResourceBundle extends java.util.ResourceBundle { + ctor public PropertyResourceBundle(java.io.InputStream) throws java.io.IOException; + ctor public PropertyResourceBundle(java.io.Reader) throws java.io.IOException; + method public java.util.Enumeration getKeys(); + method public java.lang.Object handleGetObject(java.lang.String); + } + + public abstract interface Queue implements java.util.Collection { + method public abstract boolean add(E); + method public abstract E element(); + method public abstract boolean offer(E); + method public abstract E peek(); + method public abstract E poll(); + method public abstract E remove(); + } + + public class Random implements java.io.Serializable { + ctor public Random(); + ctor public Random(long); + method protected synchronized int next(int); + method public boolean nextBoolean(); + method public void nextBytes(byte[]); + method public double nextDouble(); + method public float nextFloat(); + method public synchronized double nextGaussian(); + method public int nextInt(); + method public int nextInt(int); + method public long nextLong(); + method public synchronized void setSeed(long); + } + + public abstract interface RandomAccess { + } + + public abstract class ResourceBundle { + ctor public ResourceBundle(); + method public static void clearCache(); + method public static void clearCache(java.lang.ClassLoader); + method public boolean containsKey(java.lang.String); + method public static java.util.ResourceBundle getBundle(java.lang.String) throws java.util.MissingResourceException; + method public static java.util.ResourceBundle getBundle(java.lang.String, java.util.Locale); + method public static java.util.ResourceBundle getBundle(java.lang.String, java.util.Locale, java.lang.ClassLoader) throws java.util.MissingResourceException; + method public static java.util.ResourceBundle getBundle(java.lang.String, java.util.ResourceBundle.Control); + method public static java.util.ResourceBundle getBundle(java.lang.String, java.util.Locale, java.util.ResourceBundle.Control); + method public static java.util.ResourceBundle getBundle(java.lang.String, java.util.Locale, java.lang.ClassLoader, java.util.ResourceBundle.Control); + method public abstract java.util.Enumeration getKeys(); + method public java.util.Locale getLocale(); + method public final java.lang.Object getObject(java.lang.String); + method public final java.lang.String getString(java.lang.String); + method public final java.lang.String[] getStringArray(java.lang.String); + method protected abstract java.lang.Object handleGetObject(java.lang.String); + method protected java.util.Set handleKeySet(); + method public java.util.Set keySet(); + method protected void setParent(java.util.ResourceBundle); + field protected java.util.ResourceBundle parent; + } + + public static class ResourceBundle.Control { + ctor protected ResourceBundle.Control(); + method public java.util.List getCandidateLocales(java.lang.String, java.util.Locale); + method public static java.util.ResourceBundle.Control getControl(java.util.List); + method public java.util.Locale getFallbackLocale(java.lang.String, java.util.Locale); + method public java.util.List getFormats(java.lang.String); + method public static java.util.ResourceBundle.Control getNoFallbackControl(java.util.List); + method public long getTimeToLive(java.lang.String, java.util.Locale); + method public boolean needsReload(java.lang.String, java.util.Locale, java.lang.String, java.lang.ClassLoader, java.util.ResourceBundle, long); + method public java.util.ResourceBundle newBundle(java.lang.String, java.util.Locale, java.lang.String, java.lang.ClassLoader, boolean) throws java.io.IOException, java.lang.IllegalAccessException, java.lang.InstantiationException; + method public java.lang.String toBundleName(java.lang.String, java.util.Locale); + method public final java.lang.String toResourceName(java.lang.String, java.lang.String); + field public static final java.util.List FORMAT_CLASS; + field public static final java.util.List FORMAT_DEFAULT; + field public static final java.util.List FORMAT_PROPERTIES; + field public static final long TTL_DONT_CACHE = -1L; // 0xffffffffffffffffL + field public static final long TTL_NO_EXPIRATION_CONTROL = -2L; // 0xfffffffffffffffeL + } + + public final class Scanner implements java.io.Closeable java.util.Iterator { + ctor public Scanner(java.io.File) throws java.io.FileNotFoundException; + ctor public Scanner(java.io.File, java.lang.String) throws java.io.FileNotFoundException; + ctor public Scanner(java.lang.String); + ctor public Scanner(java.io.InputStream); + ctor public Scanner(java.io.InputStream, java.lang.String); + ctor public Scanner(java.lang.Readable); + ctor public Scanner(java.nio.channels.ReadableByteChannel); + ctor public Scanner(java.nio.channels.ReadableByteChannel, java.lang.String); + method public void close(); + method public java.util.regex.Pattern delimiter(); + method public java.lang.String findInLine(java.util.regex.Pattern); + method public java.lang.String findInLine(java.lang.String); + method public java.lang.String findWithinHorizon(java.util.regex.Pattern, int); + method public java.lang.String findWithinHorizon(java.lang.String, int); + method public boolean hasNext(); + method public boolean hasNext(java.util.regex.Pattern); + method public boolean hasNext(java.lang.String); + method public boolean hasNextBigDecimal(); + method public boolean hasNextBigInteger(); + method public boolean hasNextBigInteger(int); + method public boolean hasNextBoolean(); + method public boolean hasNextByte(); + method public boolean hasNextByte(int); + method public boolean hasNextDouble(); + method public boolean hasNextFloat(); + method public boolean hasNextInt(); + method public boolean hasNextInt(int); + method public boolean hasNextLine(); + method public boolean hasNextLong(); + method public boolean hasNextLong(int); + method public boolean hasNextShort(); + method public boolean hasNextShort(int); + method public java.io.IOException ioException(); + method public java.util.Locale locale(); + method public java.util.regex.MatchResult match(); + method public java.lang.String next(); + method public java.lang.String next(java.util.regex.Pattern); + method public java.lang.String next(java.lang.String); + method public java.math.BigDecimal nextBigDecimal(); + method public java.math.BigInteger nextBigInteger(); + method public java.math.BigInteger nextBigInteger(int); + method public boolean nextBoolean(); + method public byte nextByte(); + method public byte nextByte(int); + method public double nextDouble(); + method public float nextFloat(); + method public int nextInt(); + method public int nextInt(int); + method public java.lang.String nextLine(); + method public long nextLong(); + method public long nextLong(int); + method public short nextShort(); + method public short nextShort(int); + method public int radix(); + method public void remove(); + method public java.util.Scanner reset(); + method public java.util.Scanner skip(java.util.regex.Pattern); + method public java.util.Scanner skip(java.lang.String); + method public java.util.Scanner useDelimiter(java.util.regex.Pattern); + method public java.util.Scanner useDelimiter(java.lang.String); + method public java.util.Scanner useLocale(java.util.Locale); + method public java.util.Scanner useRadix(int); + } + + public class ServiceConfigurationError extends java.lang.Error { + ctor public ServiceConfigurationError(java.lang.String); + ctor public ServiceConfigurationError(java.lang.String, java.lang.Throwable); + } + + public final class ServiceLoader implements java.lang.Iterable { + method public java.util.Iterator iterator(); + method public static java.util.ServiceLoader load(java.lang.Class, java.lang.ClassLoader); + method public static java.util.ServiceLoader load(java.lang.Class); + method public static java.util.ServiceLoader loadInstalled(java.lang.Class); + method public void reload(); + } + + public abstract interface Set implements java.util.Collection { + method public abstract boolean add(E); + method public abstract boolean addAll(java.util.Collection); + method public abstract void clear(); + method public abstract boolean contains(java.lang.Object); + method public abstract boolean containsAll(java.util.Collection); + method public abstract boolean equals(java.lang.Object); + method public abstract int hashCode(); + method public abstract boolean isEmpty(); + method public abstract java.util.Iterator iterator(); + method public abstract boolean remove(java.lang.Object); + method public abstract boolean removeAll(java.util.Collection); + method public abstract boolean retainAll(java.util.Collection); + method public abstract int size(); + method public abstract java.lang.Object[] toArray(); + method public abstract T[] toArray(T[]); + } + + public class SimpleTimeZone extends java.util.TimeZone { + ctor public SimpleTimeZone(int, java.lang.String); + ctor public SimpleTimeZone(int, java.lang.String, int, int, int, int, int, int, int, int); + ctor public SimpleTimeZone(int, java.lang.String, int, int, int, int, int, int, int, int, int); + ctor public SimpleTimeZone(int, java.lang.String, int, int, int, int, int, int, int, int, int, int, int); + method public int getOffset(int, int, int, int, int, int); + method public int getRawOffset(); + method public boolean inDaylightTime(java.util.Date); + method public void setDSTSavings(int); + method public void setEndRule(int, int, int); + method public void setEndRule(int, int, int, int); + method public void setEndRule(int, int, int, int, boolean); + method public void setRawOffset(int); + method public void setStartRule(int, int, int); + method public void setStartRule(int, int, int, int); + method public void setStartRule(int, int, int, int, boolean); + method public void setStartYear(int); + method public boolean useDaylightTime(); + field public static final int STANDARD_TIME = 1; // 0x1 + field public static final int UTC_TIME = 2; // 0x2 + field public static final int WALL_TIME = 0; // 0x0 + } + + public abstract interface SortedMap implements java.util.Map { + method public abstract java.util.Comparator comparator(); + method public abstract K firstKey(); + method public abstract java.util.SortedMap headMap(K); + method public abstract K lastKey(); + method public abstract java.util.SortedMap subMap(K, K); + method public abstract java.util.SortedMap tailMap(K); + } + + public abstract interface SortedSet implements java.util.Set { + method public abstract java.util.Comparator comparator(); + method public abstract E first(); + method public abstract java.util.SortedSet headSet(E); + method public abstract E last(); + method public abstract java.util.SortedSet subSet(E, E); + method public abstract java.util.SortedSet tailSet(E); + } + + public class Stack extends java.util.Vector { + ctor public Stack(); + method public boolean empty(); + method public synchronized E peek(); + method public synchronized E pop(); + method public E push(E); + method public synchronized int search(java.lang.Object); + } + + public class StringTokenizer implements java.util.Enumeration { + ctor public StringTokenizer(java.lang.String); + ctor public StringTokenizer(java.lang.String, java.lang.String); + ctor public StringTokenizer(java.lang.String, java.lang.String, boolean); + method public int countTokens(); + method public boolean hasMoreElements(); + method public boolean hasMoreTokens(); + method public java.lang.Object nextElement(); + method public java.lang.String nextToken(); + method public java.lang.String nextToken(java.lang.String); + } + + public abstract class TimeZone implements java.lang.Cloneable java.io.Serializable { + ctor public TimeZone(); + method public java.lang.Object clone(); + method public static synchronized java.lang.String[] getAvailableIDs(); + method public static synchronized java.lang.String[] getAvailableIDs(int); + method public int getDSTSavings(); + method public static synchronized java.util.TimeZone getDefault(); + method public final java.lang.String getDisplayName(); + method public final java.lang.String getDisplayName(java.util.Locale); + method public final java.lang.String getDisplayName(boolean, int); + method public java.lang.String getDisplayName(boolean, int, java.util.Locale); + method public java.lang.String getID(); + method public int getOffset(long); + method public abstract int getOffset(int, int, int, int, int, int); + method public abstract int getRawOffset(); + method public static synchronized java.util.TimeZone getTimeZone(java.lang.String); + method public boolean hasSameRules(java.util.TimeZone); + method public abstract boolean inDaylightTime(java.util.Date); + method public static synchronized void setDefault(java.util.TimeZone); + method public void setID(java.lang.String); + method public abstract void setRawOffset(int); + method public abstract boolean useDaylightTime(); + field public static final int LONG = 1; // 0x1 + field public static final int SHORT = 0; // 0x0 + } + + public class Timer { + ctor public Timer(java.lang.String, boolean); + ctor public Timer(java.lang.String); + ctor public Timer(boolean); + ctor public Timer(); + method public void cancel(); + method public int purge(); + method public void schedule(java.util.TimerTask, java.util.Date); + method public void schedule(java.util.TimerTask, long); + method public void schedule(java.util.TimerTask, long, long); + method public void schedule(java.util.TimerTask, java.util.Date, long); + method public void scheduleAtFixedRate(java.util.TimerTask, long, long); + method public void scheduleAtFixedRate(java.util.TimerTask, java.util.Date, long); + } + + public abstract class TimerTask implements java.lang.Runnable { + ctor protected TimerTask(); + method public boolean cancel(); + method public abstract void run(); + method public long scheduledExecutionTime(); + } + + public class TooManyListenersException extends java.lang.Exception { + ctor public TooManyListenersException(); + ctor public TooManyListenersException(java.lang.String); + } + + public class TreeMap extends java.util.AbstractMap implements java.lang.Cloneable java.util.NavigableMap java.io.Serializable java.util.SortedMap { + ctor public TreeMap(); + ctor public TreeMap(java.util.Map); + ctor public TreeMap(java.util.Comparator); + ctor public TreeMap(java.util.SortedMap); + method public java.util.Map.Entry ceilingEntry(K); + method public K ceilingKey(K); + method public java.lang.Object clone(); + method public java.util.Comparator comparator(); + method public java.util.NavigableSet descendingKeySet(); + method public java.util.NavigableMap descendingMap(); + method public java.util.Set> entrySet(); + method public java.util.Map.Entry firstEntry(); + method public K firstKey(); + method public java.util.Map.Entry floorEntry(K); + method public K floorKey(K); + method public java.util.NavigableMap headMap(K, boolean); + method public java.util.SortedMap headMap(K); + method public java.util.Map.Entry higherEntry(K); + method public K higherKey(K); + method public java.util.Map.Entry lastEntry(); + method public K lastKey(); + method public java.util.Map.Entry lowerEntry(K); + method public K lowerKey(K); + method public java.util.NavigableSet navigableKeySet(); + method public java.util.Map.Entry pollFirstEntry(); + method public java.util.Map.Entry pollLastEntry(); + method public java.util.NavigableMap subMap(K, boolean, K, boolean); + method public java.util.SortedMap subMap(K, K); + method public java.util.NavigableMap tailMap(K, boolean); + method public java.util.SortedMap tailMap(K); + } + + public class TreeSet extends java.util.AbstractSet implements java.lang.Cloneable java.util.NavigableSet java.io.Serializable { + ctor public TreeSet(); + ctor public TreeSet(java.util.Collection); + ctor public TreeSet(java.util.Comparator); + ctor public TreeSet(java.util.SortedSet); + method public E ceiling(E); + method public java.lang.Object clone(); + method public java.util.Comparator comparator(); + method public java.util.Iterator descendingIterator(); + method public java.util.NavigableSet descendingSet(); + method public E first(); + method public E floor(E); + method public java.util.NavigableSet headSet(E, boolean); + method public java.util.SortedSet headSet(E); + method public E higher(E); + method public java.util.Iterator iterator(); + method public E last(); + method public E lower(E); + method public E pollFirst(); + method public E pollLast(); + method public int size(); + method public java.util.NavigableSet subSet(E, boolean, E, boolean); + method public java.util.SortedSet subSet(E, E); + method public java.util.NavigableSet tailSet(E, boolean); + method public java.util.SortedSet tailSet(E); + } + + public final class UUID implements java.lang.Comparable java.io.Serializable { + ctor public UUID(long, long); + method public int clockSequence(); + method public int compareTo(java.util.UUID); + method public static java.util.UUID fromString(java.lang.String); + method public long getLeastSignificantBits(); + method public long getMostSignificantBits(); + method public static java.util.UUID nameUUIDFromBytes(byte[]); + method public long node(); + method public static java.util.UUID randomUUID(); + method public long timestamp(); + method public int variant(); + method public int version(); + } + + public class UnknownFormatConversionException extends java.util.IllegalFormatException { + ctor public UnknownFormatConversionException(java.lang.String); + method public java.lang.String getConversion(); + } + + public class UnknownFormatFlagsException extends java.util.IllegalFormatException { + ctor public UnknownFormatFlagsException(java.lang.String); + method public java.lang.String getFlags(); + } + + public class Vector extends java.util.AbstractList implements java.lang.Cloneable java.util.List java.util.RandomAccess java.io.Serializable { + ctor public Vector(); + ctor public Vector(int); + ctor public Vector(int, int); + ctor public Vector(java.util.Collection); + method public synchronized void addElement(E); + method public synchronized int capacity(); + method public synchronized java.lang.Object clone(); + method public synchronized void copyInto(java.lang.Object[]); + method public synchronized E elementAt(int); + method public java.util.Enumeration elements(); + method public synchronized void ensureCapacity(int); + method public synchronized E firstElement(); + method public E get(int); + method public synchronized int indexOf(java.lang.Object, int); + method public synchronized void insertElementAt(E, int); + method public synchronized E lastElement(); + method public synchronized int lastIndexOf(java.lang.Object, int); + method public synchronized void removeAllElements(); + method public synchronized boolean removeElement(java.lang.Object); + method public synchronized void removeElementAt(int); + method public synchronized void setElementAt(E, int); + method public synchronized void setSize(int); + method public synchronized int size(); + method public synchronized void trimToSize(); + field protected int capacityIncrement; + field protected int elementCount; + field protected java.lang.Object[] elementData; + } + + public class WeakHashMap extends java.util.AbstractMap implements java.util.Map { + ctor public WeakHashMap(); + ctor public WeakHashMap(int); + ctor public WeakHashMap(int, float); + ctor public WeakHashMap(java.util.Map); + method public java.util.Set> entrySet(); + } + +} + +package java.util.concurrent { + + public abstract class AbstractExecutorService implements java.util.concurrent.ExecutorService { + ctor public AbstractExecutorService(); + method public java.util.List> invokeAll(java.util.Collection>) throws java.lang.InterruptedException; + method public java.util.List> invokeAll(java.util.Collection>, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException; + method public T invokeAny(java.util.Collection>) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException; + method public T invokeAny(java.util.Collection>, long, java.util.concurrent.TimeUnit) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException, java.util.concurrent.TimeoutException; + method protected java.util.concurrent.RunnableFuture newTaskFor(java.lang.Runnable, T); + method protected java.util.concurrent.RunnableFuture newTaskFor(java.util.concurrent.Callable); + method public java.util.concurrent.Future submit(java.lang.Runnable); + method public java.util.concurrent.Future submit(java.lang.Runnable, T); + method public java.util.concurrent.Future submit(java.util.concurrent.Callable); + } + + public class ArrayBlockingQueue extends java.util.AbstractQueue implements java.util.concurrent.BlockingQueue java.io.Serializable { + ctor public ArrayBlockingQueue(int); + ctor public ArrayBlockingQueue(int, boolean); + ctor public ArrayBlockingQueue(int, boolean, java.util.Collection); + method public int drainTo(java.util.Collection); + method public int drainTo(java.util.Collection, int); + method public java.util.Iterator iterator(); + method public boolean offer(E); + method public boolean offer(E, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException; + method public E peek(); + method public E poll(); + method public E poll(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException; + method public void put(E) throws java.lang.InterruptedException; + method public int remainingCapacity(); + method public int size(); + method public E take() throws java.lang.InterruptedException; + } + + public abstract interface BlockingDeque implements java.util.concurrent.BlockingQueue java.util.Deque { + method public abstract boolean add(E); + method public abstract void addFirst(E); + method public abstract void addLast(E); + method public abstract boolean contains(java.lang.Object); + method public abstract E element(); + method public abstract java.util.Iterator iterator(); + method public abstract boolean offer(E); + method public abstract boolean offer(E, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException; + method public abstract boolean offerFirst(E); + method public abstract boolean offerFirst(E, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException; + method public abstract boolean offerLast(E); + method public abstract boolean offerLast(E, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException; + method public abstract E peek(); + method public abstract E poll(); + method public abstract E poll(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException; + method public abstract E pollFirst(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException; + method public abstract E pollLast(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException; + method public abstract void push(E); + method public abstract void put(E) throws java.lang.InterruptedException; + method public abstract void putFirst(E) throws java.lang.InterruptedException; + method public abstract void putLast(E) throws java.lang.InterruptedException; + method public abstract E remove(); + method public abstract boolean remove(java.lang.Object); + method public abstract boolean removeFirstOccurrence(java.lang.Object); + method public abstract boolean removeLastOccurrence(java.lang.Object); + method public abstract int size(); + method public abstract E take() throws java.lang.InterruptedException; + method public abstract E takeFirst() throws java.lang.InterruptedException; + method public abstract E takeLast() throws java.lang.InterruptedException; + } + + public abstract interface BlockingQueue implements java.util.Queue { + method public abstract boolean add(E); + method public abstract boolean contains(java.lang.Object); + method public abstract int drainTo(java.util.Collection); + method public abstract int drainTo(java.util.Collection, int); + method public abstract boolean offer(E); + method public abstract boolean offer(E, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException; + method public abstract E poll(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException; + method public abstract void put(E) throws java.lang.InterruptedException; + method public abstract int remainingCapacity(); + method public abstract boolean remove(java.lang.Object); + method public abstract E take() throws java.lang.InterruptedException; + } + + public class BrokenBarrierException extends java.lang.Exception { + ctor public BrokenBarrierException(); + ctor public BrokenBarrierException(java.lang.String); + } + + public abstract interface Callable { + method public abstract V call() throws java.lang.Exception; + } + + public class CancellationException extends java.lang.IllegalStateException { + ctor public CancellationException(); + ctor public CancellationException(java.lang.String); + } + + public abstract interface CompletionService { + method public abstract java.util.concurrent.Future poll(); + method public abstract java.util.concurrent.Future poll(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException; + method public abstract java.util.concurrent.Future submit(java.util.concurrent.Callable); + method public abstract java.util.concurrent.Future submit(java.lang.Runnable, V); + method public abstract java.util.concurrent.Future take() throws java.lang.InterruptedException; + } + + public class ConcurrentHashMap extends java.util.AbstractMap implements java.util.concurrent.ConcurrentMap java.io.Serializable { + ctor public ConcurrentHashMap(); + ctor public ConcurrentHashMap(int); + ctor public ConcurrentHashMap(java.util.Map); + ctor public ConcurrentHashMap(int, float); + ctor public ConcurrentHashMap(int, float, int); + method public boolean contains(java.lang.Object); + method public java.util.Enumeration elements(); + method public java.util.Set> entrySet(); + method public java.util.Enumeration keys(); + method public V putIfAbsent(K, V); + method public boolean remove(java.lang.Object, java.lang.Object); + method public boolean replace(K, V, V); + method public V replace(K, V); + } + + public class ConcurrentLinkedDeque extends java.util.AbstractCollection implements java.util.Deque java.io.Serializable { + ctor public ConcurrentLinkedDeque(); + ctor public ConcurrentLinkedDeque(java.util.Collection); + method public void addFirst(E); + method public void addLast(E); + method public java.util.Iterator descendingIterator(); + method public E element(); + method public E getFirst(); + method public E getLast(); + method public java.util.Iterator iterator(); + method public boolean offer(E); + method public boolean offerFirst(E); + method public boolean offerLast(E); + method public E peek(); + method public E peekFirst(); + method public E peekLast(); + method public E poll(); + method public E pollFirst(); + method public E pollLast(); + method public E pop(); + method public void push(E); + method public E remove(); + method public E removeFirst(); + method public boolean removeFirstOccurrence(java.lang.Object); + method public E removeLast(); + method public boolean removeLastOccurrence(java.lang.Object); + method public int size(); + } + + public class ConcurrentLinkedQueue extends java.util.AbstractQueue implements java.util.Queue java.io.Serializable { + ctor public ConcurrentLinkedQueue(); + ctor public ConcurrentLinkedQueue(java.util.Collection); + method public java.util.Iterator iterator(); + method public boolean offer(E); + method public E peek(); + method public E poll(); + method public int size(); + } + + public abstract interface ConcurrentMap implements java.util.Map { + method public abstract V putIfAbsent(K, V); + method public abstract boolean remove(java.lang.Object, java.lang.Object); + method public abstract boolean replace(K, V, V); + method public abstract V replace(K, V); + } + + public abstract interface ConcurrentNavigableMap implements java.util.concurrent.ConcurrentMap java.util.NavigableMap { + method public abstract java.util.NavigableSet descendingKeySet(); + method public abstract java.util.concurrent.ConcurrentNavigableMap descendingMap(); + method public abstract java.util.concurrent.ConcurrentNavigableMap headMap(K, boolean); + method public abstract java.util.concurrent.ConcurrentNavigableMap headMap(K); + method public abstract java.util.NavigableSet keySet(); + method public abstract java.util.NavigableSet navigableKeySet(); + method public abstract java.util.concurrent.ConcurrentNavigableMap subMap(K, boolean, K, boolean); + method public abstract java.util.concurrent.ConcurrentNavigableMap subMap(K, K); + method public abstract java.util.concurrent.ConcurrentNavigableMap tailMap(K, boolean); + method public abstract java.util.concurrent.ConcurrentNavigableMap tailMap(K); + } + + public class ConcurrentSkipListMap extends java.util.AbstractMap implements java.lang.Cloneable java.util.concurrent.ConcurrentNavigableMap java.io.Serializable { + ctor public ConcurrentSkipListMap(); + ctor public ConcurrentSkipListMap(java.util.Comparator); + ctor public ConcurrentSkipListMap(java.util.Map); + ctor public ConcurrentSkipListMap(java.util.SortedMap); + method public java.util.Map.Entry ceilingEntry(K); + method public K ceilingKey(K); + method public java.util.concurrent.ConcurrentSkipListMap clone(); + method public java.util.Comparator comparator(); + method public java.util.NavigableSet descendingKeySet(); + method public java.util.concurrent.ConcurrentNavigableMap descendingMap(); + method public java.util.Set> entrySet(); + method public java.util.Map.Entry firstEntry(); + method public K firstKey(); + method public java.util.Map.Entry floorEntry(K); + method public K floorKey(K); + method public java.util.concurrent.ConcurrentNavigableMap headMap(K, boolean); + method public java.util.concurrent.ConcurrentNavigableMap headMap(K); + method public java.util.Map.Entry higherEntry(K); + method public K higherKey(K); + method public java.util.Map.Entry lastEntry(); + method public K lastKey(); + method public java.util.Map.Entry lowerEntry(K); + method public K lowerKey(K); + method public java.util.NavigableSet navigableKeySet(); + method public java.util.Map.Entry pollFirstEntry(); + method public java.util.Map.Entry pollLastEntry(); + method public V putIfAbsent(K, V); + method public boolean remove(java.lang.Object, java.lang.Object); + method public boolean replace(K, V, V); + method public V replace(K, V); + method public java.util.concurrent.ConcurrentNavigableMap subMap(K, boolean, K, boolean); + method public java.util.concurrent.ConcurrentNavigableMap subMap(K, K); + method public java.util.concurrent.ConcurrentNavigableMap tailMap(K, boolean); + method public java.util.concurrent.ConcurrentNavigableMap tailMap(K); + } + + public class ConcurrentSkipListSet extends java.util.AbstractSet implements java.lang.Cloneable java.util.NavigableSet java.io.Serializable { + ctor public ConcurrentSkipListSet(); + ctor public ConcurrentSkipListSet(java.util.Comparator); + ctor public ConcurrentSkipListSet(java.util.Collection); + ctor public ConcurrentSkipListSet(java.util.SortedSet); + method public E ceiling(E); + method public java.util.concurrent.ConcurrentSkipListSet clone(); + method public java.util.Comparator comparator(); + method public java.util.Iterator descendingIterator(); + method public java.util.NavigableSet descendingSet(); + method public E first(); + method public E floor(E); + method public java.util.NavigableSet headSet(E, boolean); + method public java.util.NavigableSet headSet(E); + method public E higher(E); + method public java.util.Iterator iterator(); + method public E last(); + method public E lower(E); + method public E pollFirst(); + method public E pollLast(); + method public int size(); + method public java.util.NavigableSet subSet(E, boolean, E, boolean); + method public java.util.NavigableSet subSet(E, E); + method public java.util.NavigableSet tailSet(E, boolean); + method public java.util.NavigableSet tailSet(E); + } + + public class CopyOnWriteArrayList implements java.lang.Cloneable java.util.List java.util.RandomAccess java.io.Serializable { + ctor public CopyOnWriteArrayList(); + ctor public CopyOnWriteArrayList(java.util.Collection); + ctor public CopyOnWriteArrayList(E[]); + method public synchronized boolean add(E); + method public synchronized void add(int, E); + method public synchronized boolean addAll(java.util.Collection); + method public synchronized boolean addAll(int, java.util.Collection); + method public synchronized int addAllAbsent(java.util.Collection); + method public synchronized boolean addIfAbsent(E); + method public synchronized void clear(); + method public java.lang.Object clone(); + method public boolean contains(java.lang.Object); + method public boolean containsAll(java.util.Collection); + method public E get(int); + method public int indexOf(E, int); + method public int indexOf(java.lang.Object); + method public boolean isEmpty(); + method public java.util.Iterator iterator(); + method public int lastIndexOf(E, int); + method public int lastIndexOf(java.lang.Object); + method public java.util.ListIterator listIterator(int); + method public java.util.ListIterator listIterator(); + method public synchronized E remove(int); + method public synchronized boolean remove(java.lang.Object); + method public synchronized boolean removeAll(java.util.Collection); + method public synchronized boolean retainAll(java.util.Collection); + method public synchronized E set(int, E); + method public int size(); + method public java.util.List subList(int, int); + method public java.lang.Object[] toArray(); + method public T[] toArray(T[]); + } + + public class CopyOnWriteArraySet extends java.util.AbstractSet implements java.io.Serializable { + ctor public CopyOnWriteArraySet(); + ctor public CopyOnWriteArraySet(java.util.Collection); + method public java.util.Iterator iterator(); + method public int size(); + } + + public class CountDownLatch { + ctor public CountDownLatch(int); + method public void await() throws java.lang.InterruptedException; + method public boolean await(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException; + method public void countDown(); + method public long getCount(); + } + + public class CyclicBarrier { + ctor public CyclicBarrier(int, java.lang.Runnable); + ctor public CyclicBarrier(int); + method public int await() throws java.util.concurrent.BrokenBarrierException, java.lang.InterruptedException; + method public int await(long, java.util.concurrent.TimeUnit) throws java.util.concurrent.BrokenBarrierException, java.lang.InterruptedException, java.util.concurrent.TimeoutException; + method public int getNumberWaiting(); + method public int getParties(); + method public boolean isBroken(); + method public void reset(); + } + + public class DelayQueue extends java.util.AbstractQueue implements java.util.concurrent.BlockingQueue { + ctor public DelayQueue(); + ctor public DelayQueue(java.util.Collection); + method public int drainTo(java.util.Collection); + method public int drainTo(java.util.Collection, int); + method public java.util.Iterator iterator(); + method public boolean offer(E); + method public boolean offer(E, long, java.util.concurrent.TimeUnit); + method public E peek(); + method public E poll(); + method public E poll(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException; + method public void put(E); + method public int remainingCapacity(); + method public int size(); + method public E take() throws java.lang.InterruptedException; + } + + public abstract interface Delayed implements java.lang.Comparable { + method public abstract long getDelay(java.util.concurrent.TimeUnit); + } + + public class Exchanger { + ctor public Exchanger(); + method public V exchange(V) throws java.lang.InterruptedException; + method public V exchange(V, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException, java.util.concurrent.TimeoutException; + } + + public class ExecutionException extends java.lang.Exception { + ctor protected ExecutionException(); + ctor protected ExecutionException(java.lang.String); + ctor public ExecutionException(java.lang.String, java.lang.Throwable); + ctor public ExecutionException(java.lang.Throwable); + } + + public abstract interface Executor { + method public abstract void execute(java.lang.Runnable); + } + + public class ExecutorCompletionService implements java.util.concurrent.CompletionService { + ctor public ExecutorCompletionService(java.util.concurrent.Executor); + ctor public ExecutorCompletionService(java.util.concurrent.Executor, java.util.concurrent.BlockingQueue>); + method public java.util.concurrent.Future poll(); + method public java.util.concurrent.Future poll(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException; + method public java.util.concurrent.Future submit(java.util.concurrent.Callable); + method public java.util.concurrent.Future submit(java.lang.Runnable, V); + method public java.util.concurrent.Future take() throws java.lang.InterruptedException; + } + + public abstract interface ExecutorService implements java.util.concurrent.Executor { + method public abstract boolean awaitTermination(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException; + method public abstract java.util.List> invokeAll(java.util.Collection>) throws java.lang.InterruptedException; + method public abstract java.util.List> invokeAll(java.util.Collection>, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException; + method public abstract T invokeAny(java.util.Collection>) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException; + method public abstract T invokeAny(java.util.Collection>, long, java.util.concurrent.TimeUnit) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException, java.util.concurrent.TimeoutException; + method public abstract boolean isShutdown(); + method public abstract boolean isTerminated(); + method public abstract void shutdown(); + method public abstract java.util.List shutdownNow(); + method public abstract java.util.concurrent.Future submit(java.util.concurrent.Callable); + method public abstract java.util.concurrent.Future submit(java.lang.Runnable, T); + method public abstract java.util.concurrent.Future submit(java.lang.Runnable); + } + + public class Executors { + method public static java.util.concurrent.Callable callable(java.lang.Runnable, T); + method public static java.util.concurrent.Callable callable(java.lang.Runnable); + method public static java.util.concurrent.Callable callable(java.security.PrivilegedAction); + method public static java.util.concurrent.Callable callable(java.security.PrivilegedExceptionAction); + method public static java.util.concurrent.ThreadFactory defaultThreadFactory(); + method public static java.util.concurrent.ExecutorService newCachedThreadPool(); + method public static java.util.concurrent.ExecutorService newCachedThreadPool(java.util.concurrent.ThreadFactory); + method public static java.util.concurrent.ExecutorService newFixedThreadPool(int); + method public static java.util.concurrent.ExecutorService newFixedThreadPool(int, java.util.concurrent.ThreadFactory); + method public static java.util.concurrent.ScheduledExecutorService newScheduledThreadPool(int); + method public static java.util.concurrent.ScheduledExecutorService newScheduledThreadPool(int, java.util.concurrent.ThreadFactory); + method public static java.util.concurrent.ExecutorService newSingleThreadExecutor(); + method public static java.util.concurrent.ExecutorService newSingleThreadExecutor(java.util.concurrent.ThreadFactory); + method public static java.util.concurrent.ScheduledExecutorService newSingleThreadScheduledExecutor(); + method public static java.util.concurrent.ScheduledExecutorService newSingleThreadScheduledExecutor(java.util.concurrent.ThreadFactory); + method public static java.util.concurrent.Callable privilegedCallable(java.util.concurrent.Callable); + method public static java.util.concurrent.Callable privilegedCallableUsingCurrentClassLoader(java.util.concurrent.Callable); + method public static java.util.concurrent.ThreadFactory privilegedThreadFactory(); + method public static java.util.concurrent.ExecutorService unconfigurableExecutorService(java.util.concurrent.ExecutorService); + method public static java.util.concurrent.ScheduledExecutorService unconfigurableScheduledExecutorService(java.util.concurrent.ScheduledExecutorService); + } + + public class ForkJoinPool extends java.util.concurrent.AbstractExecutorService { + ctor public ForkJoinPool(); + ctor public ForkJoinPool(int); + ctor public ForkJoinPool(int, java.util.concurrent.ForkJoinPool.ForkJoinWorkerThreadFactory, java.lang.Thread.UncaughtExceptionHandler, boolean); + method public boolean awaitQuiescence(long, java.util.concurrent.TimeUnit); + method public boolean awaitTermination(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException; + method protected int drainTasksTo(java.util.Collection>); + method public void execute(java.util.concurrent.ForkJoinTask); + method public void execute(java.lang.Runnable); + method public int getActiveThreadCount(); + method public boolean getAsyncMode(); + method public java.util.concurrent.ForkJoinPool.ForkJoinWorkerThreadFactory getFactory(); + method public int getParallelism(); + method public int getPoolSize(); + method public int getQueuedSubmissionCount(); + method public long getQueuedTaskCount(); + method public int getRunningThreadCount(); + method public long getStealCount(); + method public java.lang.Thread.UncaughtExceptionHandler getUncaughtExceptionHandler(); + method public boolean hasQueuedSubmissions(); + method public T invoke(java.util.concurrent.ForkJoinTask); + method public boolean isQuiescent(); + method public boolean isShutdown(); + method public boolean isTerminated(); + method public boolean isTerminating(); + method public static void managedBlock(java.util.concurrent.ForkJoinPool.ManagedBlocker) throws java.lang.InterruptedException; + method protected java.util.concurrent.ForkJoinTask pollSubmission(); + method public void shutdown(); + method public java.util.List shutdownNow(); + method public java.util.concurrent.ForkJoinTask submit(java.util.concurrent.ForkJoinTask); + field public static final java.util.concurrent.ForkJoinPool.ForkJoinWorkerThreadFactory defaultForkJoinWorkerThreadFactory; + } + + public static abstract interface ForkJoinPool.ForkJoinWorkerThreadFactory { + method public abstract java.util.concurrent.ForkJoinWorkerThread newThread(java.util.concurrent.ForkJoinPool); + } + + public static abstract interface ForkJoinPool.ManagedBlocker { + method public abstract boolean block() throws java.lang.InterruptedException; + method public abstract boolean isReleasable(); + } + + public abstract class ForkJoinTask implements java.util.concurrent.Future java.io.Serializable { + ctor public ForkJoinTask(); + method public static java.util.concurrent.ForkJoinTask adapt(java.lang.Runnable); + method public static java.util.concurrent.ForkJoinTask adapt(java.lang.Runnable, T); + method public static java.util.concurrent.ForkJoinTask adapt(java.util.concurrent.Callable); + method public boolean cancel(boolean); + method public void complete(V); + method public void completeExceptionally(java.lang.Throwable); + method protected abstract boolean exec(); + method public final java.util.concurrent.ForkJoinTask fork(); + method public final V get() throws java.util.concurrent.ExecutionException, java.lang.InterruptedException; + method public final V get(long, java.util.concurrent.TimeUnit) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException, java.util.concurrent.TimeoutException; + method public final java.lang.Throwable getException(); + method public static java.util.concurrent.ForkJoinPool getPool(); + method public static int getQueuedTaskCount(); + method public abstract V getRawResult(); + method public static int getSurplusQueuedTaskCount(); + method public static void helpQuiesce(); + method public static boolean inForkJoinPool(); + method public final V invoke(); + method public static void invokeAll(java.util.concurrent.ForkJoinTask, java.util.concurrent.ForkJoinTask); + method public static void invokeAll(java.util.concurrent.ForkJoinTask...); + method public static java.util.Collection invokeAll(java.util.Collection); + method public final boolean isCancelled(); + method public final boolean isCompletedAbnormally(); + method public final boolean isCompletedNormally(); + method public final boolean isDone(); + method public final V join(); + method protected static java.util.concurrent.ForkJoinTask peekNextLocalTask(); + method protected static java.util.concurrent.ForkJoinTask pollNextLocalTask(); + method protected static java.util.concurrent.ForkJoinTask pollTask(); + method public final void quietlyInvoke(); + method public final void quietlyJoin(); + method public void reinitialize(); + method protected abstract void setRawResult(V); + method public boolean tryUnfork(); + } + + public class ForkJoinWorkerThread extends java.lang.Thread { + ctor protected ForkJoinWorkerThread(java.util.concurrent.ForkJoinPool); + method public java.util.concurrent.ForkJoinPool getPool(); + method public int getPoolIndex(); + method protected void onStart(); + method protected void onTermination(java.lang.Throwable); + } + + public abstract interface Future { + method public abstract boolean cancel(boolean); + method public abstract V get() throws java.util.concurrent.ExecutionException, java.lang.InterruptedException; + method public abstract V get(long, java.util.concurrent.TimeUnit) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException, java.util.concurrent.TimeoutException; + method public abstract boolean isCancelled(); + method public abstract boolean isDone(); + } + + public class FutureTask implements java.util.concurrent.RunnableFuture { + ctor public FutureTask(java.util.concurrent.Callable); + ctor public FutureTask(java.lang.Runnable, V); + method public boolean cancel(boolean); + method protected void done(); + method public V get() throws java.util.concurrent.ExecutionException, java.lang.InterruptedException; + method public V get(long, java.util.concurrent.TimeUnit) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException, java.util.concurrent.TimeoutException; + method public boolean isCancelled(); + method public boolean isDone(); + method public void run(); + method protected boolean runAndReset(); + method protected void set(V); + method protected void setException(java.lang.Throwable); + } + + public class LinkedBlockingDeque extends java.util.AbstractQueue implements java.util.concurrent.BlockingDeque java.io.Serializable { + ctor public LinkedBlockingDeque(); + ctor public LinkedBlockingDeque(int); + ctor public LinkedBlockingDeque(java.util.Collection); + method public void addFirst(E); + method public void addLast(E); + method public java.util.Iterator descendingIterator(); + method public int drainTo(java.util.Collection); + method public int drainTo(java.util.Collection, int); + method public E getFirst(); + method public E getLast(); + method public java.util.Iterator iterator(); + method public boolean offer(E); + method public boolean offer(E, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException; + method public boolean offerFirst(E); + method public boolean offerFirst(E, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException; + method public boolean offerLast(E); + method public boolean offerLast(E, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException; + method public E peek(); + method public E peekFirst(); + method public E peekLast(); + method public E poll(); + method public E poll(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException; + method public E pollFirst(); + method public E pollFirst(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException; + method public E pollLast(); + method public E pollLast(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException; + method public E pop(); + method public void push(E); + method public void put(E) throws java.lang.InterruptedException; + method public void putFirst(E) throws java.lang.InterruptedException; + method public void putLast(E) throws java.lang.InterruptedException; + method public int remainingCapacity(); + method public E removeFirst(); + method public boolean removeFirstOccurrence(java.lang.Object); + method public E removeLast(); + method public boolean removeLastOccurrence(java.lang.Object); + method public int size(); + method public E take() throws java.lang.InterruptedException; + method public E takeFirst() throws java.lang.InterruptedException; + method public E takeLast() throws java.lang.InterruptedException; + } + + public class LinkedBlockingQueue extends java.util.AbstractQueue implements java.util.concurrent.BlockingQueue java.io.Serializable { + ctor public LinkedBlockingQueue(); + ctor public LinkedBlockingQueue(int); + ctor public LinkedBlockingQueue(java.util.Collection); + method public int drainTo(java.util.Collection); + method public int drainTo(java.util.Collection, int); + method public java.util.Iterator iterator(); + method public boolean offer(E, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException; + method public boolean offer(E); + method public E peek(); + method public E poll(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException; + method public E poll(); + method public void put(E) throws java.lang.InterruptedException; + method public int remainingCapacity(); + method public int size(); + method public E take() throws java.lang.InterruptedException; + } + + public class LinkedTransferQueue extends java.util.AbstractQueue implements java.io.Serializable java.util.concurrent.TransferQueue { + ctor public LinkedTransferQueue(); + ctor public LinkedTransferQueue(java.util.Collection); + method public int drainTo(java.util.Collection); + method public int drainTo(java.util.Collection, int); + method public int getWaitingConsumerCount(); + method public boolean hasWaitingConsumer(); + method public java.util.Iterator iterator(); + method public boolean offer(E, long, java.util.concurrent.TimeUnit); + method public boolean offer(E); + method public E peek(); + method public E poll(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException; + method public E poll(); + method public void put(E); + method public int remainingCapacity(); + method public int size(); + method public E take() throws java.lang.InterruptedException; + method public void transfer(E) throws java.lang.InterruptedException; + method public boolean tryTransfer(E); + method public boolean tryTransfer(E, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException; + } + + public class Phaser { + ctor public Phaser(); + ctor public Phaser(int); + ctor public Phaser(java.util.concurrent.Phaser); + ctor public Phaser(java.util.concurrent.Phaser, int); + method public int arrive(); + method public int arriveAndAwaitAdvance(); + method public int arriveAndDeregister(); + method public int awaitAdvance(int); + method public int awaitAdvanceInterruptibly(int) throws java.lang.InterruptedException; + method public int awaitAdvanceInterruptibly(int, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException, java.util.concurrent.TimeoutException; + method public int bulkRegister(int); + method public void forceTermination(); + method public int getArrivedParties(); + method public java.util.concurrent.Phaser getParent(); + method public final int getPhase(); + method public int getRegisteredParties(); + method public java.util.concurrent.Phaser getRoot(); + method public int getUnarrivedParties(); + method public boolean isTerminated(); + method protected boolean onAdvance(int, int); + method public int register(); + } + + public class PriorityBlockingQueue extends java.util.AbstractQueue implements java.util.concurrent.BlockingQueue java.io.Serializable { + ctor public PriorityBlockingQueue(); + ctor public PriorityBlockingQueue(int); + ctor public PriorityBlockingQueue(int, java.util.Comparator); + ctor public PriorityBlockingQueue(java.util.Collection); + method public java.util.Comparator comparator(); + method public int drainTo(java.util.Collection); + method public int drainTo(java.util.Collection, int); + method public java.util.Iterator iterator(); + method public boolean offer(E); + method public boolean offer(E, long, java.util.concurrent.TimeUnit); + method public E peek(); + method public E poll(); + method public E poll(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException; + method public void put(E); + method public int remainingCapacity(); + method public int size(); + method public E take() throws java.lang.InterruptedException; + } + + public abstract class RecursiveAction extends java.util.concurrent.ForkJoinTask { + ctor public RecursiveAction(); + method protected abstract void compute(); + method protected final boolean exec(); + method public final java.lang.Void getRawResult(); + method protected final void setRawResult(java.lang.Void); + } + + public abstract class RecursiveTask extends java.util.concurrent.ForkJoinTask { + ctor public RecursiveTask(); + method protected abstract V compute(); + method protected final boolean exec(); + method public final V getRawResult(); + method protected final void setRawResult(V); + } + + public class RejectedExecutionException extends java.lang.RuntimeException { + ctor public RejectedExecutionException(); + ctor public RejectedExecutionException(java.lang.String); + ctor public RejectedExecutionException(java.lang.String, java.lang.Throwable); + ctor public RejectedExecutionException(java.lang.Throwable); + } + + public abstract interface RejectedExecutionHandler { + method public abstract void rejectedExecution(java.lang.Runnable, java.util.concurrent.ThreadPoolExecutor); + } + + public abstract interface RunnableFuture implements java.util.concurrent.Future java.lang.Runnable { + method public abstract void run(); + } + + public abstract interface RunnableScheduledFuture implements java.util.concurrent.RunnableFuture java.util.concurrent.ScheduledFuture { + method public abstract boolean isPeriodic(); + } + + public abstract interface ScheduledExecutorService implements java.util.concurrent.ExecutorService { + method public abstract java.util.concurrent.ScheduledFuture schedule(java.lang.Runnable, long, java.util.concurrent.TimeUnit); + method public abstract java.util.concurrent.ScheduledFuture schedule(java.util.concurrent.Callable, long, java.util.concurrent.TimeUnit); + method public abstract java.util.concurrent.ScheduledFuture scheduleAtFixedRate(java.lang.Runnable, long, long, java.util.concurrent.TimeUnit); + method public abstract java.util.concurrent.ScheduledFuture scheduleWithFixedDelay(java.lang.Runnable, long, long, java.util.concurrent.TimeUnit); + } + + public abstract interface ScheduledFuture implements java.util.concurrent.Delayed java.util.concurrent.Future { + } + + public class ScheduledThreadPoolExecutor extends java.util.concurrent.ThreadPoolExecutor implements java.util.concurrent.ScheduledExecutorService { + ctor public ScheduledThreadPoolExecutor(int); + ctor public ScheduledThreadPoolExecutor(int, java.util.concurrent.ThreadFactory); + ctor public ScheduledThreadPoolExecutor(int, java.util.concurrent.RejectedExecutionHandler); + ctor public ScheduledThreadPoolExecutor(int, java.util.concurrent.ThreadFactory, java.util.concurrent.RejectedExecutionHandler); + method protected java.util.concurrent.RunnableScheduledFuture decorateTask(java.lang.Runnable, java.util.concurrent.RunnableScheduledFuture); + method protected java.util.concurrent.RunnableScheduledFuture decorateTask(java.util.concurrent.Callable, java.util.concurrent.RunnableScheduledFuture); + method public boolean getContinueExistingPeriodicTasksAfterShutdownPolicy(); + method public boolean getExecuteExistingDelayedTasksAfterShutdownPolicy(); + method public boolean getRemoveOnCancelPolicy(); + method public java.util.concurrent.ScheduledFuture schedule(java.lang.Runnable, long, java.util.concurrent.TimeUnit); + method public java.util.concurrent.ScheduledFuture schedule(java.util.concurrent.Callable, long, java.util.concurrent.TimeUnit); + method public java.util.concurrent.ScheduledFuture scheduleAtFixedRate(java.lang.Runnable, long, long, java.util.concurrent.TimeUnit); + method public java.util.concurrent.ScheduledFuture scheduleWithFixedDelay(java.lang.Runnable, long, long, java.util.concurrent.TimeUnit); + method public void setContinueExistingPeriodicTasksAfterShutdownPolicy(boolean); + method public void setExecuteExistingDelayedTasksAfterShutdownPolicy(boolean); + method public void setRemoveOnCancelPolicy(boolean); + } + + public class Semaphore implements java.io.Serializable { + ctor public Semaphore(int); + ctor public Semaphore(int, boolean); + method public void acquire() throws java.lang.InterruptedException; + method public void acquire(int) throws java.lang.InterruptedException; + method public void acquireUninterruptibly(); + method public void acquireUninterruptibly(int); + method public int availablePermits(); + method public int drainPermits(); + method public final int getQueueLength(); + method protected java.util.Collection getQueuedThreads(); + method public final boolean hasQueuedThreads(); + method public boolean isFair(); + method protected void reducePermits(int); + method public void release(); + method public void release(int); + method public boolean tryAcquire(); + method public boolean tryAcquire(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException; + method public boolean tryAcquire(int); + method public boolean tryAcquire(int, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException; + } + + public class SynchronousQueue extends java.util.AbstractQueue implements java.util.concurrent.BlockingQueue java.io.Serializable { + ctor public SynchronousQueue(); + ctor public SynchronousQueue(boolean); + method public int drainTo(java.util.Collection); + method public int drainTo(java.util.Collection, int); + method public java.util.Iterator iterator(); + method public boolean offer(E, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException; + method public boolean offer(E); + method public E peek(); + method public E poll(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException; + method public E poll(); + method public void put(E) throws java.lang.InterruptedException; + method public int remainingCapacity(); + method public int size(); + method public E take() throws java.lang.InterruptedException; + } + + public abstract interface ThreadFactory { + method public abstract java.lang.Thread newThread(java.lang.Runnable); + } + + public class ThreadLocalRandom extends java.util.Random { + method public static java.util.concurrent.ThreadLocalRandom current(); + method public double nextDouble(double); + method public double nextDouble(double, double); + method public int nextInt(int, int); + method public long nextLong(long); + method public long nextLong(long, long); + } + + public class ThreadPoolExecutor extends java.util.concurrent.AbstractExecutorService { + ctor public ThreadPoolExecutor(int, int, long, java.util.concurrent.TimeUnit, java.util.concurrent.BlockingQueue); + ctor public ThreadPoolExecutor(int, int, long, java.util.concurrent.TimeUnit, java.util.concurrent.BlockingQueue, java.util.concurrent.ThreadFactory); + ctor public ThreadPoolExecutor(int, int, long, java.util.concurrent.TimeUnit, java.util.concurrent.BlockingQueue, java.util.concurrent.RejectedExecutionHandler); + ctor public ThreadPoolExecutor(int, int, long, java.util.concurrent.TimeUnit, java.util.concurrent.BlockingQueue, java.util.concurrent.ThreadFactory, java.util.concurrent.RejectedExecutionHandler); + method protected void afterExecute(java.lang.Runnable, java.lang.Throwable); + method public void allowCoreThreadTimeOut(boolean); + method public boolean allowsCoreThreadTimeOut(); + method public boolean awaitTermination(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException; + method protected void beforeExecute(java.lang.Thread, java.lang.Runnable); + method public void execute(java.lang.Runnable); + method public int getActiveCount(); + method public long getCompletedTaskCount(); + method public int getCorePoolSize(); + method public long getKeepAliveTime(java.util.concurrent.TimeUnit); + method public int getLargestPoolSize(); + method public int getMaximumPoolSize(); + method public int getPoolSize(); + method public java.util.concurrent.BlockingQueue getQueue(); + method public java.util.concurrent.RejectedExecutionHandler getRejectedExecutionHandler(); + method public long getTaskCount(); + method public java.util.concurrent.ThreadFactory getThreadFactory(); + method public boolean isShutdown(); + method public boolean isTerminated(); + method public boolean isTerminating(); + method public int prestartAllCoreThreads(); + method public boolean prestartCoreThread(); + method public void purge(); + method public boolean remove(java.lang.Runnable); + method public void setCorePoolSize(int); + method public void setKeepAliveTime(long, java.util.concurrent.TimeUnit); + method public void setMaximumPoolSize(int); + method public void setRejectedExecutionHandler(java.util.concurrent.RejectedExecutionHandler); + method public void setThreadFactory(java.util.concurrent.ThreadFactory); + method public void shutdown(); + method public java.util.List shutdownNow(); + method protected void terminated(); + } + + public static class ThreadPoolExecutor.AbortPolicy implements java.util.concurrent.RejectedExecutionHandler { + ctor public ThreadPoolExecutor.AbortPolicy(); + method public void rejectedExecution(java.lang.Runnable, java.util.concurrent.ThreadPoolExecutor); + } + + public static class ThreadPoolExecutor.CallerRunsPolicy implements java.util.concurrent.RejectedExecutionHandler { + ctor public ThreadPoolExecutor.CallerRunsPolicy(); + method public void rejectedExecution(java.lang.Runnable, java.util.concurrent.ThreadPoolExecutor); + } + + public static class ThreadPoolExecutor.DiscardOldestPolicy implements java.util.concurrent.RejectedExecutionHandler { + ctor public ThreadPoolExecutor.DiscardOldestPolicy(); + method public void rejectedExecution(java.lang.Runnable, java.util.concurrent.ThreadPoolExecutor); + } + + public static class ThreadPoolExecutor.DiscardPolicy implements java.util.concurrent.RejectedExecutionHandler { + ctor public ThreadPoolExecutor.DiscardPolicy(); + method public void rejectedExecution(java.lang.Runnable, java.util.concurrent.ThreadPoolExecutor); + } + + public class TimeUnit extends java.lang.Enum { + method public long convert(long, java.util.concurrent.TimeUnit); + method public void sleep(long) throws java.lang.InterruptedException; + method public void timedJoin(java.lang.Thread, long) throws java.lang.InterruptedException; + method public void timedWait(java.lang.Object, long) throws java.lang.InterruptedException; + method public long toDays(long); + method public long toHours(long); + method public long toMicros(long); + method public long toMillis(long); + method public long toMinutes(long); + method public long toNanos(long); + method public long toSeconds(long); + method public static java.util.concurrent.TimeUnit valueOf(java.lang.String); + method public static final java.util.concurrent.TimeUnit[] values(); + enum_constant public static final java.util.concurrent.TimeUnit DAYS; + enum_constant public static final java.util.concurrent.TimeUnit HOURS; + enum_constant public static final java.util.concurrent.TimeUnit MICROSECONDS; + enum_constant public static final java.util.concurrent.TimeUnit MILLISECONDS; + enum_constant public static final java.util.concurrent.TimeUnit MINUTES; + enum_constant public static final java.util.concurrent.TimeUnit NANOSECONDS; + enum_constant public static final java.util.concurrent.TimeUnit SECONDS; + } + + public class TimeoutException extends java.lang.Exception { + ctor public TimeoutException(); + ctor public TimeoutException(java.lang.String); + } + + public abstract interface TransferQueue implements java.util.concurrent.BlockingQueue { + method public abstract int getWaitingConsumerCount(); + method public abstract boolean hasWaitingConsumer(); + method public abstract void transfer(E) throws java.lang.InterruptedException; + method public abstract boolean tryTransfer(E); + method public abstract boolean tryTransfer(E, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException; + } + +} + +package java.util.concurrent.atomic { + + public class AtomicBoolean implements java.io.Serializable { + ctor public AtomicBoolean(boolean); + ctor public AtomicBoolean(); + method public final boolean compareAndSet(boolean, boolean); + method public final boolean get(); + method public final boolean getAndSet(boolean); + method public final void lazySet(boolean); + method public final void set(boolean); + method public boolean weakCompareAndSet(boolean, boolean); + } + + public class AtomicInteger extends java.lang.Number implements java.io.Serializable { + ctor public AtomicInteger(int); + ctor public AtomicInteger(); + method public final int addAndGet(int); + method public final boolean compareAndSet(int, int); + method public final int decrementAndGet(); + method public double doubleValue(); + method public float floatValue(); + method public final int get(); + method public final int getAndAdd(int); + method public final int getAndDecrement(); + method public final int getAndIncrement(); + method public final int getAndSet(int); + method public final int incrementAndGet(); + method public int intValue(); + method public final void lazySet(int); + method public long longValue(); + method public final void set(int); + method public final boolean weakCompareAndSet(int, int); + } + + public class AtomicIntegerArray implements java.io.Serializable { + ctor public AtomicIntegerArray(int); + ctor public AtomicIntegerArray(int[]); + method public final int addAndGet(int, int); + method public final boolean compareAndSet(int, int, int); + method public final int decrementAndGet(int); + method public final int get(int); + method public final int getAndAdd(int, int); + method public final int getAndDecrement(int); + method public final int getAndIncrement(int); + method public final int getAndSet(int, int); + method public final int incrementAndGet(int); + method public final void lazySet(int, int); + method public final int length(); + method public final void set(int, int); + method public final boolean weakCompareAndSet(int, int, int); + } + + public abstract class AtomicIntegerFieldUpdater { + ctor protected AtomicIntegerFieldUpdater(); + method public int addAndGet(T, int); + method public abstract boolean compareAndSet(T, int, int); + method public int decrementAndGet(T); + method public abstract int get(T); + method public int getAndAdd(T, int); + method public int getAndDecrement(T); + method public int getAndIncrement(T); + method public int getAndSet(T, int); + method public int incrementAndGet(T); + method public abstract void lazySet(T, int); + method public static java.util.concurrent.atomic.AtomicIntegerFieldUpdater newUpdater(java.lang.Class, java.lang.String); + method public abstract void set(T, int); + method public abstract boolean weakCompareAndSet(T, int, int); + } + + public class AtomicLong extends java.lang.Number implements java.io.Serializable { + ctor public AtomicLong(long); + ctor public AtomicLong(); + method public final long addAndGet(long); + method public final boolean compareAndSet(long, long); + method public final long decrementAndGet(); + method public double doubleValue(); + method public float floatValue(); + method public final long get(); + method public final long getAndAdd(long); + method public final long getAndDecrement(); + method public final long getAndIncrement(); + method public final long getAndSet(long); + method public final long incrementAndGet(); + method public int intValue(); + method public final void lazySet(long); + method public long longValue(); + method public final void set(long); + method public final boolean weakCompareAndSet(long, long); + } + + public class AtomicLongArray implements java.io.Serializable { + ctor public AtomicLongArray(int); + ctor public AtomicLongArray(long[]); + method public long addAndGet(int, long); + method public final boolean compareAndSet(int, long, long); + method public final long decrementAndGet(int); + method public final long get(int); + method public final long getAndAdd(int, long); + method public final long getAndDecrement(int); + method public final long getAndIncrement(int); + method public final long getAndSet(int, long); + method public final long incrementAndGet(int); + method public final void lazySet(int, long); + method public final int length(); + method public final void set(int, long); + method public final boolean weakCompareAndSet(int, long, long); + } + + public abstract class AtomicLongFieldUpdater { + ctor protected AtomicLongFieldUpdater(); + method public long addAndGet(T, long); + method public abstract boolean compareAndSet(T, long, long); + method public long decrementAndGet(T); + method public abstract long get(T); + method public long getAndAdd(T, long); + method public long getAndDecrement(T); + method public long getAndIncrement(T); + method public long getAndSet(T, long); + method public long incrementAndGet(T); + method public abstract void lazySet(T, long); + method public static java.util.concurrent.atomic.AtomicLongFieldUpdater newUpdater(java.lang.Class, java.lang.String); + method public abstract void set(T, long); + method public abstract boolean weakCompareAndSet(T, long, long); + } + + public class AtomicMarkableReference { + ctor public AtomicMarkableReference(V, boolean); + method public boolean attemptMark(V, boolean); + method public boolean compareAndSet(V, V, boolean, boolean); + method public V get(boolean[]); + method public V getReference(); + method public boolean isMarked(); + method public void set(V, boolean); + method public boolean weakCompareAndSet(V, V, boolean, boolean); + } + + public class AtomicReference implements java.io.Serializable { + ctor public AtomicReference(V); + ctor public AtomicReference(); + method public final boolean compareAndSet(V, V); + method public final V get(); + method public final V getAndSet(V); + method public final void lazySet(V); + method public final void set(V); + method public final boolean weakCompareAndSet(V, V); + } + + public class AtomicReferenceArray implements java.io.Serializable { + ctor public AtomicReferenceArray(int); + ctor public AtomicReferenceArray(E[]); + method public final boolean compareAndSet(int, E, E); + method public final E get(int); + method public final E getAndSet(int, E); + method public final void lazySet(int, E); + method public final int length(); + method public final void set(int, E); + method public final boolean weakCompareAndSet(int, E, E); + } + + public abstract class AtomicReferenceFieldUpdater { + ctor protected AtomicReferenceFieldUpdater(); + method public abstract boolean compareAndSet(T, V, V); + method public abstract V get(T); + method public V getAndSet(T, V); + method public abstract void lazySet(T, V); + method public static java.util.concurrent.atomic.AtomicReferenceFieldUpdater newUpdater(java.lang.Class, java.lang.Class, java.lang.String); + method public abstract void set(T, V); + method public abstract boolean weakCompareAndSet(T, V, V); + } + + public class AtomicStampedReference { + ctor public AtomicStampedReference(V, int); + method public boolean attemptStamp(V, int); + method public boolean compareAndSet(V, V, int, int); + method public V get(int[]); + method public V getReference(); + method public int getStamp(); + method public void set(V, int); + method public boolean weakCompareAndSet(V, V, int, int); + } + +} + +package java.util.concurrent.locks { + + public abstract class AbstractOwnableSynchronizer implements java.io.Serializable { + ctor protected AbstractOwnableSynchronizer(); + method protected final java.lang.Thread getExclusiveOwnerThread(); + method protected final void setExclusiveOwnerThread(java.lang.Thread); + } + + public abstract class AbstractQueuedLongSynchronizer extends java.util.concurrent.locks.AbstractOwnableSynchronizer implements java.io.Serializable { + ctor protected AbstractQueuedLongSynchronizer(); + method public final void acquire(long); + method public final void acquireInterruptibly(long) throws java.lang.InterruptedException; + method public final void acquireShared(long); + method public final void acquireSharedInterruptibly(long) throws java.lang.InterruptedException; + method protected final boolean compareAndSetState(long, long); + method public final java.util.Collection getExclusiveQueuedThreads(); + method public final java.lang.Thread getFirstQueuedThread(); + method public final int getQueueLength(); + method public final java.util.Collection getQueuedThreads(); + method public final java.util.Collection getSharedQueuedThreads(); + method protected final long getState(); + method public final int getWaitQueueLength(java.util.concurrent.locks.AbstractQueuedLongSynchronizer.ConditionObject); + method public final java.util.Collection getWaitingThreads(java.util.concurrent.locks.AbstractQueuedLongSynchronizer.ConditionObject); + method public final boolean hasContended(); + method public final boolean hasQueuedPredecessors(); + method public final boolean hasQueuedThreads(); + method public final boolean hasWaiters(java.util.concurrent.locks.AbstractQueuedLongSynchronizer.ConditionObject); + method protected boolean isHeldExclusively(); + method public final boolean isQueued(java.lang.Thread); + method public final boolean owns(java.util.concurrent.locks.AbstractQueuedLongSynchronizer.ConditionObject); + method public final boolean release(long); + method public final boolean releaseShared(long); + method protected final void setState(long); + method protected boolean tryAcquire(long); + method public final boolean tryAcquireNanos(long, long) throws java.lang.InterruptedException; + method protected long tryAcquireShared(long); + method public final boolean tryAcquireSharedNanos(long, long) throws java.lang.InterruptedException; + method protected boolean tryRelease(long); + method protected boolean tryReleaseShared(long); + } + + public class AbstractQueuedLongSynchronizer.ConditionObject implements java.util.concurrent.locks.Condition java.io.Serializable { + ctor public AbstractQueuedLongSynchronizer.ConditionObject(); + method public final void await() throws java.lang.InterruptedException; + method public final boolean await(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException; + method public final long awaitNanos(long) throws java.lang.InterruptedException; + method public final void awaitUninterruptibly(); + method public final boolean awaitUntil(java.util.Date) throws java.lang.InterruptedException; + method protected final int getWaitQueueLength(); + method protected final java.util.Collection getWaitingThreads(); + method protected final boolean hasWaiters(); + method public final void signal(); + method public final void signalAll(); + } + + public abstract class AbstractQueuedSynchronizer extends java.util.concurrent.locks.AbstractOwnableSynchronizer implements java.io.Serializable { + ctor protected AbstractQueuedSynchronizer(); + method public final void acquire(int); + method public final void acquireInterruptibly(int) throws java.lang.InterruptedException; + method public final void acquireShared(int); + method public final void acquireSharedInterruptibly(int) throws java.lang.InterruptedException; + method protected final boolean compareAndSetState(int, int); + method public final java.util.Collection getExclusiveQueuedThreads(); + method public final java.lang.Thread getFirstQueuedThread(); + method public final int getQueueLength(); + method public final java.util.Collection getQueuedThreads(); + method public final java.util.Collection getSharedQueuedThreads(); + method protected final int getState(); + method public final int getWaitQueueLength(java.util.concurrent.locks.AbstractQueuedSynchronizer.ConditionObject); + method public final java.util.Collection getWaitingThreads(java.util.concurrent.locks.AbstractQueuedSynchronizer.ConditionObject); + method public final boolean hasContended(); + method public final boolean hasQueuedPredecessors(); + method public final boolean hasQueuedThreads(); + method public final boolean hasWaiters(java.util.concurrent.locks.AbstractQueuedSynchronizer.ConditionObject); + method protected boolean isHeldExclusively(); + method public final boolean isQueued(java.lang.Thread); + method public final boolean owns(java.util.concurrent.locks.AbstractQueuedSynchronizer.ConditionObject); + method public final boolean release(int); + method public final boolean releaseShared(int); + method protected final void setState(int); + method protected boolean tryAcquire(int); + method public final boolean tryAcquireNanos(int, long) throws java.lang.InterruptedException; + method protected int tryAcquireShared(int); + method public final boolean tryAcquireSharedNanos(int, long) throws java.lang.InterruptedException; + method protected boolean tryRelease(int); + method protected boolean tryReleaseShared(int); + } + + public class AbstractQueuedSynchronizer.ConditionObject implements java.util.concurrent.locks.Condition java.io.Serializable { + ctor public AbstractQueuedSynchronizer.ConditionObject(); + method public final void await() throws java.lang.InterruptedException; + method public final boolean await(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException; + method public final long awaitNanos(long) throws java.lang.InterruptedException; + method public final void awaitUninterruptibly(); + method public final boolean awaitUntil(java.util.Date) throws java.lang.InterruptedException; + method protected final int getWaitQueueLength(); + method protected final java.util.Collection getWaitingThreads(); + method protected final boolean hasWaiters(); + method public final void signal(); + method public final void signalAll(); + } + + public abstract interface Condition { + method public abstract void await() throws java.lang.InterruptedException; + method public abstract boolean await(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException; + method public abstract long awaitNanos(long) throws java.lang.InterruptedException; + method public abstract void awaitUninterruptibly(); + method public abstract boolean awaitUntil(java.util.Date) throws java.lang.InterruptedException; + method public abstract void signal(); + method public abstract void signalAll(); + } + + public abstract interface Lock { + method public abstract void lock(); + method public abstract void lockInterruptibly() throws java.lang.InterruptedException; + method public abstract java.util.concurrent.locks.Condition newCondition(); + method public abstract boolean tryLock(); + method public abstract boolean tryLock(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException; + method public abstract void unlock(); + } + + public class LockSupport { + method public static java.lang.Object getBlocker(java.lang.Thread); + method public static void park(java.lang.Object); + method public static void park(); + method public static void parkNanos(java.lang.Object, long); + method public static void parkNanos(long); + method public static void parkUntil(java.lang.Object, long); + method public static void parkUntil(long); + method public static void unpark(java.lang.Thread); + } + + public abstract interface ReadWriteLock { + method public abstract java.util.concurrent.locks.Lock readLock(); + method public abstract java.util.concurrent.locks.Lock writeLock(); + } + + public class ReentrantLock implements java.util.concurrent.locks.Lock java.io.Serializable { + ctor public ReentrantLock(); + ctor public ReentrantLock(boolean); + method public int getHoldCount(); + method protected java.lang.Thread getOwner(); + method public final int getQueueLength(); + method protected java.util.Collection getQueuedThreads(); + method public int getWaitQueueLength(java.util.concurrent.locks.Condition); + method protected java.util.Collection getWaitingThreads(java.util.concurrent.locks.Condition); + method public final boolean hasQueuedThread(java.lang.Thread); + method public final boolean hasQueuedThreads(); + method public boolean hasWaiters(java.util.concurrent.locks.Condition); + method public final boolean isFair(); + method public boolean isHeldByCurrentThread(); + method public boolean isLocked(); + method public void lock(); + method public void lockInterruptibly() throws java.lang.InterruptedException; + method public java.util.concurrent.locks.Condition newCondition(); + method public boolean tryLock(); + method public boolean tryLock(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException; + method public void unlock(); + } + + public class ReentrantReadWriteLock implements java.util.concurrent.locks.ReadWriteLock java.io.Serializable { + ctor public ReentrantReadWriteLock(); + ctor public ReentrantReadWriteLock(boolean); + method protected java.lang.Thread getOwner(); + method public final int getQueueLength(); + method protected java.util.Collection getQueuedReaderThreads(); + method protected java.util.Collection getQueuedThreads(); + method protected java.util.Collection getQueuedWriterThreads(); + method public int getReadHoldCount(); + method public int getReadLockCount(); + method public int getWaitQueueLength(java.util.concurrent.locks.Condition); + method protected java.util.Collection getWaitingThreads(java.util.concurrent.locks.Condition); + method public int getWriteHoldCount(); + method public final boolean hasQueuedThread(java.lang.Thread); + method public final boolean hasQueuedThreads(); + method public boolean hasWaiters(java.util.concurrent.locks.Condition); + method public final boolean isFair(); + method public boolean isWriteLocked(); + method public boolean isWriteLockedByCurrentThread(); + method public java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock readLock(); + method public java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock writeLock(); + } + + public static class ReentrantReadWriteLock.ReadLock implements java.util.concurrent.locks.Lock java.io.Serializable { + ctor protected ReentrantReadWriteLock.ReadLock(java.util.concurrent.locks.ReentrantReadWriteLock); + method public void lock(); + method public void lockInterruptibly() throws java.lang.InterruptedException; + method public java.util.concurrent.locks.Condition newCondition(); + method public boolean tryLock(); + method public boolean tryLock(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException; + method public void unlock(); + } + + public static class ReentrantReadWriteLock.WriteLock implements java.util.concurrent.locks.Lock java.io.Serializable { + ctor protected ReentrantReadWriteLock.WriteLock(java.util.concurrent.locks.ReentrantReadWriteLock); + method public int getHoldCount(); + method public boolean isHeldByCurrentThread(); + method public void lock(); + method public void lockInterruptibly() throws java.lang.InterruptedException; + method public java.util.concurrent.locks.Condition newCondition(); + method public boolean tryLock(); + method public boolean tryLock(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException; + method public void unlock(); + } + +} + +package java.util.jar { + + public class Attributes implements java.lang.Cloneable java.util.Map { + ctor public Attributes(); + ctor public Attributes(java.util.jar.Attributes); + ctor public Attributes(int); + method public void clear(); + method public java.lang.Object clone(); + method public boolean containsKey(java.lang.Object); + method public boolean containsValue(java.lang.Object); + method public java.util.Set> entrySet(); + method public java.lang.Object get(java.lang.Object); + method public java.lang.String getValue(java.util.jar.Attributes.Name); + method public java.lang.String getValue(java.lang.String); + method public boolean isEmpty(); + method public java.util.Set keySet(); + method public java.lang.Object put(java.lang.Object, java.lang.Object); + method public void putAll(java.util.Map); + method public java.lang.String putValue(java.lang.String, java.lang.String); + method public java.lang.Object remove(java.lang.Object); + method public int size(); + method public java.util.Collection values(); + field protected java.util.Map map; + } + + public static class Attributes.Name { + ctor public Attributes.Name(java.lang.String); + field public static final java.util.jar.Attributes.Name CLASS_PATH; + field public static final java.util.jar.Attributes.Name CONTENT_TYPE; + field public static final java.util.jar.Attributes.Name EXTENSION_INSTALLATION; + field public static final java.util.jar.Attributes.Name EXTENSION_LIST; + field public static final java.util.jar.Attributes.Name EXTENSION_NAME; + field public static final java.util.jar.Attributes.Name IMPLEMENTATION_TITLE; + field public static final java.util.jar.Attributes.Name IMPLEMENTATION_URL; + field public static final java.util.jar.Attributes.Name IMPLEMENTATION_VENDOR; + field public static final java.util.jar.Attributes.Name IMPLEMENTATION_VENDOR_ID; + field public static final java.util.jar.Attributes.Name IMPLEMENTATION_VERSION; + field public static final java.util.jar.Attributes.Name MAIN_CLASS; + field public static final java.util.jar.Attributes.Name MANIFEST_VERSION; + field public static final java.util.jar.Attributes.Name SEALED; + field public static final java.util.jar.Attributes.Name SIGNATURE_VERSION; + field public static final java.util.jar.Attributes.Name SPECIFICATION_TITLE; + field public static final java.util.jar.Attributes.Name SPECIFICATION_VENDOR; + field public static final java.util.jar.Attributes.Name SPECIFICATION_VERSION; + } + + public class JarEntry extends java.util.zip.ZipEntry { + ctor public JarEntry(java.lang.String); + ctor public JarEntry(java.util.zip.ZipEntry); + ctor public JarEntry(java.util.jar.JarEntry); + method public java.util.jar.Attributes getAttributes() throws java.io.IOException; + method public java.security.cert.Certificate[] getCertificates(); + method public java.security.CodeSigner[] getCodeSigners(); + } + + public class JarException extends java.util.zip.ZipException { + ctor public JarException(); + ctor public JarException(java.lang.String); + } + + public class JarFile extends java.util.zip.ZipFile { + ctor public JarFile(java.io.File) throws java.io.IOException; + ctor public JarFile(java.io.File, boolean) throws java.io.IOException; + ctor public JarFile(java.io.File, boolean, int) throws java.io.IOException; + ctor public JarFile(java.lang.String) throws java.io.IOException; + ctor public JarFile(java.lang.String, boolean) throws java.io.IOException; + method public java.util.jar.JarEntry getJarEntry(java.lang.String); + method public java.util.jar.Manifest getManifest() throws java.io.IOException; + field public static final java.lang.String MANIFEST_NAME = "META-INF/MANIFEST.MF"; + } + + public class JarInputStream extends java.util.zip.ZipInputStream { + ctor public JarInputStream(java.io.InputStream, boolean) throws java.io.IOException; + ctor public JarInputStream(java.io.InputStream) throws java.io.IOException; + method public java.util.jar.Manifest getManifest(); + method public java.util.jar.JarEntry getNextJarEntry() throws java.io.IOException; + } + + public class JarOutputStream extends java.util.zip.ZipOutputStream { + ctor public JarOutputStream(java.io.OutputStream, java.util.jar.Manifest) throws java.io.IOException; + ctor public JarOutputStream(java.io.OutputStream) throws java.io.IOException; + } + + public class Manifest implements java.lang.Cloneable { + ctor public Manifest(); + ctor public Manifest(java.io.InputStream) throws java.io.IOException; + ctor public Manifest(java.util.jar.Manifest); + method public void clear(); + method public java.lang.Object clone(); + method public java.util.jar.Attributes getAttributes(java.lang.String); + method public java.util.Map getEntries(); + method public java.util.jar.Attributes getMainAttributes(); + method public void read(java.io.InputStream) throws java.io.IOException; + method public void write(java.io.OutputStream) throws java.io.IOException; + } + + public abstract class Pack200 { + method public static java.util.jar.Pack200.Packer newPacker(); + method public static java.util.jar.Pack200.Unpacker newUnpacker(); + } + + public static abstract interface Pack200.Packer { + method public abstract void addPropertyChangeListener(java.beans.PropertyChangeListener); + method public abstract void pack(java.util.jar.JarFile, java.io.OutputStream) throws java.io.IOException; + method public abstract void pack(java.util.jar.JarInputStream, java.io.OutputStream) throws java.io.IOException; + method public abstract java.util.SortedMap properties(); + method public abstract void removePropertyChangeListener(java.beans.PropertyChangeListener); + field public static final java.lang.String CLASS_ATTRIBUTE_PFX = "pack.class.attribute."; + field public static final java.lang.String CODE_ATTRIBUTE_PFX = "pack.code.attribute."; + field public static final java.lang.String DEFLATE_HINT = "pack.deflate.hint"; + field public static final java.lang.String EFFORT = "pack.effort"; + field public static final java.lang.String ERROR = "error"; + field public static final java.lang.String FALSE = "false"; + field public static final java.lang.String FIELD_ATTRIBUTE_PFX = "pack.field.attribute."; + field public static final java.lang.String KEEP = "keep"; + field public static final java.lang.String KEEP_FILE_ORDER = "pack.keep.file.order"; + field public static final java.lang.String LATEST = "latest"; + field public static final java.lang.String METHOD_ATTRIBUTE_PFX = "pack.method.attribute."; + field public static final java.lang.String MODIFICATION_TIME = "pack.modification.time"; + field public static final java.lang.String PASS = "pass"; + field public static final java.lang.String PASS_FILE_PFX = "pack.pass.file."; + field public static final java.lang.String PROGRESS = "pack.progress"; + field public static final java.lang.String SEGMENT_LIMIT = "pack.segment.limit"; + field public static final java.lang.String STRIP = "strip"; + field public static final java.lang.String TRUE = "true"; + field public static final java.lang.String UNKNOWN_ATTRIBUTE = "pack.unknown.attribute"; + } + + public static abstract interface Pack200.Unpacker { + method public abstract void addPropertyChangeListener(java.beans.PropertyChangeListener); + method public abstract java.util.SortedMap properties(); + method public abstract void removePropertyChangeListener(java.beans.PropertyChangeListener); + method public abstract void unpack(java.io.InputStream, java.util.jar.JarOutputStream) throws java.io.IOException; + method public abstract void unpack(java.io.File, java.util.jar.JarOutputStream) throws java.io.IOException; + field public static final java.lang.String DEFLATE_HINT = "unpack.deflate.hint"; + field public static final java.lang.String FALSE = "false"; + field public static final java.lang.String KEEP = "keep"; + field public static final java.lang.String PROGRESS = "unpack.progress"; + field public static final java.lang.String TRUE = "true"; + } + +} + +package java.util.logging { + + public class ConsoleHandler extends java.util.logging.StreamHandler { + ctor public ConsoleHandler(); + } + + public class ErrorManager { + ctor public ErrorManager(); + method public void error(java.lang.String, java.lang.Exception, int); + field public static final int CLOSE_FAILURE = 3; // 0x3 + field public static final int FLUSH_FAILURE = 2; // 0x2 + field public static final int FORMAT_FAILURE = 5; // 0x5 + field public static final int GENERIC_FAILURE = 0; // 0x0 + field public static final int OPEN_FAILURE = 4; // 0x4 + field public static final int WRITE_FAILURE = 1; // 0x1 + } + + public class FileHandler extends java.util.logging.StreamHandler { + ctor public FileHandler() throws java.io.IOException; + ctor public FileHandler(java.lang.String) throws java.io.IOException; + ctor public FileHandler(java.lang.String, boolean) throws java.io.IOException; + ctor public FileHandler(java.lang.String, int, int) throws java.io.IOException; + ctor public FileHandler(java.lang.String, int, int, boolean) throws java.io.IOException; + } + + public abstract interface Filter { + method public abstract boolean isLoggable(java.util.logging.LogRecord); + } + + public abstract class Formatter { + ctor protected Formatter(); + method public abstract java.lang.String format(java.util.logging.LogRecord); + method public java.lang.String formatMessage(java.util.logging.LogRecord); + method public java.lang.String getHead(java.util.logging.Handler); + method public java.lang.String getTail(java.util.logging.Handler); + } + + public abstract class Handler { + ctor protected Handler(); + method public abstract void close(); + method public abstract void flush(); + method public java.lang.String getEncoding(); + method public java.util.logging.ErrorManager getErrorManager(); + method public java.util.logging.Filter getFilter(); + method public java.util.logging.Formatter getFormatter(); + method public java.util.logging.Level getLevel(); + method public boolean isLoggable(java.util.logging.LogRecord); + method public abstract void publish(java.util.logging.LogRecord); + method protected void reportError(java.lang.String, java.lang.Exception, int); + method public void setEncoding(java.lang.String) throws java.io.UnsupportedEncodingException; + method public void setErrorManager(java.util.logging.ErrorManager); + method public void setFilter(java.util.logging.Filter); + method public void setFormatter(java.util.logging.Formatter); + method public void setLevel(java.util.logging.Level); + } + + public class Level implements java.io.Serializable { + ctor protected Level(java.lang.String, int); + ctor protected Level(java.lang.String, int, java.lang.String); + method public java.lang.String getLocalizedName(); + method public java.lang.String getName(); + method public java.lang.String getResourceBundleName(); + method public final int intValue(); + method public static java.util.logging.Level parse(java.lang.String) throws java.lang.IllegalArgumentException; + method public final java.lang.String toString(); + field public static final java.util.logging.Level ALL; + field public static final java.util.logging.Level CONFIG; + field public static final java.util.logging.Level FINE; + field public static final java.util.logging.Level FINER; + field public static final java.util.logging.Level FINEST; + field public static final java.util.logging.Level INFO; + field public static final java.util.logging.Level OFF; + field public static final java.util.logging.Level SEVERE; + field public static final java.util.logging.Level WARNING; + } + + public class LogManager { + ctor protected LogManager(); + method public synchronized boolean addLogger(java.util.logging.Logger); + method public void addPropertyChangeListener(java.beans.PropertyChangeListener); + method public void checkAccess(); + method public static java.util.logging.LogManager getLogManager(); + method public synchronized java.util.logging.Logger getLogger(java.lang.String); + method public synchronized java.util.Enumeration getLoggerNames(); + method public static java.util.logging.LoggingMXBean getLoggingMXBean(); + method public java.lang.String getProperty(java.lang.String); + method public void readConfiguration() throws java.io.IOException; + method public void readConfiguration(java.io.InputStream) throws java.io.IOException; + method public void removePropertyChangeListener(java.beans.PropertyChangeListener); + method public synchronized void reset(); + field public static final java.lang.String LOGGING_MXBEAN_NAME = "java.util.logging:type=Logging"; + } + + public class LogRecord implements java.io.Serializable { + ctor public LogRecord(java.util.logging.Level, java.lang.String); + method public java.util.logging.Level getLevel(); + method public java.lang.String getLoggerName(); + method public java.lang.String getMessage(); + method public long getMillis(); + method public java.lang.Object[] getParameters(); + method public java.util.ResourceBundle getResourceBundle(); + method public java.lang.String getResourceBundleName(); + method public long getSequenceNumber(); + method public java.lang.String getSourceClassName(); + method public java.lang.String getSourceMethodName(); + method public int getThreadID(); + method public java.lang.Throwable getThrown(); + method public void setLevel(java.util.logging.Level); + method public void setLoggerName(java.lang.String); + method public void setMessage(java.lang.String); + method public void setMillis(long); + method public void setParameters(java.lang.Object[]); + method public void setResourceBundle(java.util.ResourceBundle); + method public void setResourceBundleName(java.lang.String); + method public void setSequenceNumber(long); + method public void setSourceClassName(java.lang.String); + method public void setSourceMethodName(java.lang.String); + method public void setThreadID(int); + method public void setThrown(java.lang.Throwable); + } + + public class Logger { + ctor protected Logger(java.lang.String, java.lang.String); + method public void addHandler(java.util.logging.Handler); + method public void config(java.lang.String); + method public void entering(java.lang.String, java.lang.String); + method public void entering(java.lang.String, java.lang.String, java.lang.Object); + method public void entering(java.lang.String, java.lang.String, java.lang.Object[]); + method public void exiting(java.lang.String, java.lang.String); + method public void exiting(java.lang.String, java.lang.String, java.lang.Object); + method public void fine(java.lang.String); + method public void finer(java.lang.String); + method public void finest(java.lang.String); + method public static java.util.logging.Logger getAnonymousLogger(); + method public static java.util.logging.Logger getAnonymousLogger(java.lang.String); + method public java.util.logging.Filter getFilter(); + method public static java.util.logging.Logger getGlobal(); + method public java.util.logging.Handler[] getHandlers(); + method public java.util.logging.Level getLevel(); + method public static java.util.logging.Logger getLogger(java.lang.String); + method public static java.util.logging.Logger getLogger(java.lang.String, java.lang.String); + method public java.lang.String getName(); + method public java.util.logging.Logger getParent(); + method public java.util.ResourceBundle getResourceBundle(); + method public java.lang.String getResourceBundleName(); + method public boolean getUseParentHandlers(); + method public void info(java.lang.String); + method public boolean isLoggable(java.util.logging.Level); + method public void log(java.util.logging.Level, java.lang.String); + method public void log(java.util.logging.Level, java.lang.String, java.lang.Object); + method public void log(java.util.logging.Level, java.lang.String, java.lang.Object[]); + method public void log(java.util.logging.Level, java.lang.String, java.lang.Throwable); + method public void log(java.util.logging.LogRecord); + method public void logp(java.util.logging.Level, java.lang.String, java.lang.String, java.lang.String); + method public void logp(java.util.logging.Level, java.lang.String, java.lang.String, java.lang.String, java.lang.Object); + method public void logp(java.util.logging.Level, java.lang.String, java.lang.String, java.lang.String, java.lang.Object[]); + method public void logp(java.util.logging.Level, java.lang.String, java.lang.String, java.lang.String, java.lang.Throwable); + method public void logrb(java.util.logging.Level, java.lang.String, java.lang.String, java.lang.String, java.lang.String); + method public void logrb(java.util.logging.Level, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.Object); + method public void logrb(java.util.logging.Level, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.Object[]); + method public void logrb(java.util.logging.Level, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.Throwable); + method public void removeHandler(java.util.logging.Handler); + method public void setFilter(java.util.logging.Filter); + method public void setLevel(java.util.logging.Level); + method public void setParent(java.util.logging.Logger); + method public void setUseParentHandlers(boolean); + method public void severe(java.lang.String); + method public void throwing(java.lang.String, java.lang.String, java.lang.Throwable); + method public void warning(java.lang.String); + field public static final java.lang.String GLOBAL_LOGGER_NAME = "global"; + field public static final deprecated java.util.logging.Logger global; + } + + public abstract interface LoggingMXBean { + method public abstract java.lang.String getLoggerLevel(java.lang.String); + method public abstract java.util.List getLoggerNames(); + method public abstract java.lang.String getParentLoggerName(java.lang.String); + method public abstract void setLoggerLevel(java.lang.String, java.lang.String); + } + + public final class LoggingPermission extends java.security.BasicPermission implements java.security.Guard java.io.Serializable { + ctor public LoggingPermission(java.lang.String, java.lang.String); + } + + public class MemoryHandler extends java.util.logging.Handler { + ctor public MemoryHandler(); + ctor public MemoryHandler(java.util.logging.Handler, int, java.util.logging.Level); + method public void close(); + method public void flush(); + method public java.util.logging.Level getPushLevel(); + method public synchronized void publish(java.util.logging.LogRecord); + method public void push(); + method public void setPushLevel(java.util.logging.Level); + } + + public class SimpleFormatter extends java.util.logging.Formatter { + ctor public SimpleFormatter(); + method public java.lang.String format(java.util.logging.LogRecord); + } + + public class SocketHandler extends java.util.logging.StreamHandler { + ctor public SocketHandler() throws java.io.IOException; + ctor public SocketHandler(java.lang.String, int) throws java.io.IOException; + } + + public class StreamHandler extends java.util.logging.Handler { + ctor public StreamHandler(); + ctor public StreamHandler(java.io.OutputStream, java.util.logging.Formatter); + method public void close(); + method public void flush(); + method public synchronized void publish(java.util.logging.LogRecord); + method protected void setOutputStream(java.io.OutputStream); + } + + public class XMLFormatter extends java.util.logging.Formatter { + ctor public XMLFormatter(); + method public java.lang.String format(java.util.logging.LogRecord); + } + +} + +package java.util.prefs { + + public abstract class AbstractPreferences extends java.util.prefs.Preferences { + ctor protected AbstractPreferences(java.util.prefs.AbstractPreferences, java.lang.String); + method public java.lang.String absolutePath(); + method public void addNodeChangeListener(java.util.prefs.NodeChangeListener); + method public void addPreferenceChangeListener(java.util.prefs.PreferenceChangeListener); + method protected final java.util.prefs.AbstractPreferences[] cachedChildren(); + method protected abstract java.util.prefs.AbstractPreferences childSpi(java.lang.String); + method public java.lang.String[] childrenNames() throws java.util.prefs.BackingStoreException; + method protected abstract java.lang.String[] childrenNamesSpi() throws java.util.prefs.BackingStoreException; + method public void clear() throws java.util.prefs.BackingStoreException; + method public void exportNode(java.io.OutputStream) throws java.util.prefs.BackingStoreException, java.io.IOException; + method public void exportSubtree(java.io.OutputStream) throws java.util.prefs.BackingStoreException, java.io.IOException; + method public void flush() throws java.util.prefs.BackingStoreException; + method protected abstract void flushSpi() throws java.util.prefs.BackingStoreException; + method public java.lang.String get(java.lang.String, java.lang.String); + method public boolean getBoolean(java.lang.String, boolean); + method public byte[] getByteArray(java.lang.String, byte[]); + method protected java.util.prefs.AbstractPreferences getChild(java.lang.String) throws java.util.prefs.BackingStoreException; + method public double getDouble(java.lang.String, double); + method public float getFloat(java.lang.String, float); + method public int getInt(java.lang.String, int); + method public long getLong(java.lang.String, long); + method protected abstract java.lang.String getSpi(java.lang.String); + method protected boolean isRemoved(); + method public boolean isUserNode(); + method public java.lang.String[] keys() throws java.util.prefs.BackingStoreException; + method protected abstract java.lang.String[] keysSpi() throws java.util.prefs.BackingStoreException; + method public java.lang.String name(); + method public java.util.prefs.Preferences node(java.lang.String); + method public boolean nodeExists(java.lang.String) throws java.util.prefs.BackingStoreException; + method public java.util.prefs.Preferences parent(); + method public void put(java.lang.String, java.lang.String); + method public void putBoolean(java.lang.String, boolean); + method public void putByteArray(java.lang.String, byte[]); + method public void putDouble(java.lang.String, double); + method public void putFloat(java.lang.String, float); + method public void putInt(java.lang.String, int); + method public void putLong(java.lang.String, long); + method protected abstract void putSpi(java.lang.String, java.lang.String); + method public void remove(java.lang.String); + method public void removeNode() throws java.util.prefs.BackingStoreException; + method public void removeNodeChangeListener(java.util.prefs.NodeChangeListener); + method protected abstract void removeNodeSpi() throws java.util.prefs.BackingStoreException; + method public void removePreferenceChangeListener(java.util.prefs.PreferenceChangeListener); + method protected abstract void removeSpi(java.lang.String); + method public void sync() throws java.util.prefs.BackingStoreException; + method protected abstract void syncSpi() throws java.util.prefs.BackingStoreException; + method public java.lang.String toString(); + field protected final java.lang.Object lock; + field protected boolean newNode; + } + + public class BackingStoreException extends java.lang.Exception { + ctor public BackingStoreException(java.lang.String); + ctor public BackingStoreException(java.lang.Throwable); + } + + public class InvalidPreferencesFormatException extends java.lang.Exception { + ctor public InvalidPreferencesFormatException(java.lang.String); + ctor public InvalidPreferencesFormatException(java.lang.String, java.lang.Throwable); + ctor public InvalidPreferencesFormatException(java.lang.Throwable); + } + + public class NodeChangeEvent extends java.util.EventObject implements java.io.Serializable { + ctor public NodeChangeEvent(java.util.prefs.Preferences, java.util.prefs.Preferences); + method public java.util.prefs.Preferences getChild(); + method public java.util.prefs.Preferences getParent(); + } + + public abstract interface NodeChangeListener implements java.util.EventListener { + method public abstract void childAdded(java.util.prefs.NodeChangeEvent); + method public abstract void childRemoved(java.util.prefs.NodeChangeEvent); + } + + public class PreferenceChangeEvent extends java.util.EventObject implements java.io.Serializable { + ctor public PreferenceChangeEvent(java.util.prefs.Preferences, java.lang.String, java.lang.String); + method public java.lang.String getKey(); + method public java.lang.String getNewValue(); + method public java.util.prefs.Preferences getNode(); + } + + public abstract interface PreferenceChangeListener implements java.util.EventListener { + method public abstract void preferenceChange(java.util.prefs.PreferenceChangeEvent); + } + + public abstract class Preferences { + ctor protected Preferences(); + method public abstract java.lang.String absolutePath(); + method public abstract void addNodeChangeListener(java.util.prefs.NodeChangeListener); + method public abstract void addPreferenceChangeListener(java.util.prefs.PreferenceChangeListener); + method public abstract java.lang.String[] childrenNames() throws java.util.prefs.BackingStoreException; + method public abstract void clear() throws java.util.prefs.BackingStoreException; + method public abstract void exportNode(java.io.OutputStream) throws java.util.prefs.BackingStoreException, java.io.IOException; + method public abstract void exportSubtree(java.io.OutputStream) throws java.util.prefs.BackingStoreException, java.io.IOException; + method public abstract void flush() throws java.util.prefs.BackingStoreException; + method public abstract java.lang.String get(java.lang.String, java.lang.String); + method public abstract boolean getBoolean(java.lang.String, boolean); + method public abstract byte[] getByteArray(java.lang.String, byte[]); + method public abstract double getDouble(java.lang.String, double); + method public abstract float getFloat(java.lang.String, float); + method public abstract int getInt(java.lang.String, int); + method public abstract long getLong(java.lang.String, long); + method public static void importPreferences(java.io.InputStream) throws java.io.IOException, java.util.prefs.InvalidPreferencesFormatException; + method public abstract boolean isUserNode(); + method public abstract java.lang.String[] keys() throws java.util.prefs.BackingStoreException; + method public abstract java.lang.String name(); + method public abstract java.util.prefs.Preferences node(java.lang.String); + method public abstract boolean nodeExists(java.lang.String) throws java.util.prefs.BackingStoreException; + method public abstract java.util.prefs.Preferences parent(); + method public abstract void put(java.lang.String, java.lang.String); + method public abstract void putBoolean(java.lang.String, boolean); + method public abstract void putByteArray(java.lang.String, byte[]); + method public abstract void putDouble(java.lang.String, double); + method public abstract void putFloat(java.lang.String, float); + method public abstract void putInt(java.lang.String, int); + method public abstract void putLong(java.lang.String, long); + method public abstract void remove(java.lang.String); + method public abstract void removeNode() throws java.util.prefs.BackingStoreException; + method public abstract void removeNodeChangeListener(java.util.prefs.NodeChangeListener); + method public abstract void removePreferenceChangeListener(java.util.prefs.PreferenceChangeListener); + method public abstract void sync() throws java.util.prefs.BackingStoreException; + method public static java.util.prefs.Preferences systemNodeForPackage(java.lang.Class); + method public static java.util.prefs.Preferences systemRoot(); + method public abstract java.lang.String toString(); + method public static java.util.prefs.Preferences userNodeForPackage(java.lang.Class); + method public static java.util.prefs.Preferences userRoot(); + field public static final int MAX_KEY_LENGTH = 80; // 0x50 + field public static final int MAX_NAME_LENGTH = 80; // 0x50 + field public static final int MAX_VALUE_LENGTH = 8192; // 0x2000 + } + + public abstract interface PreferencesFactory { + method public abstract java.util.prefs.Preferences systemRoot(); + method public abstract java.util.prefs.Preferences userRoot(); + } + +} + +package java.util.regex { + + public abstract interface MatchResult { + method public abstract int end(); + method public abstract int end(int); + method public abstract java.lang.String group(); + method public abstract java.lang.String group(int); + method public abstract int groupCount(); + method public abstract int start(); + method public abstract int start(int); + } + + public final class Matcher implements java.util.regex.MatchResult { + method public java.util.regex.Matcher appendReplacement(java.lang.StringBuffer, java.lang.String); + method public java.lang.StringBuffer appendTail(java.lang.StringBuffer); + method public int end(); + method public int end(int); + method public boolean find(int); + method public boolean find(); + method public java.lang.String group(); + method public java.lang.String group(int); + method public int groupCount(); + method public boolean hasAnchoringBounds(); + method public boolean hasTransparentBounds(); + method public boolean hitEnd(); + method public boolean lookingAt(); + method public boolean matches(); + method public java.util.regex.Pattern pattern(); + method public static java.lang.String quoteReplacement(java.lang.String); + method public java.util.regex.Matcher region(int, int); + method public int regionEnd(); + method public int regionStart(); + method public java.lang.String replaceAll(java.lang.String); + method public java.lang.String replaceFirst(java.lang.String); + method public boolean requireEnd(); + method public java.util.regex.Matcher reset(); + method public java.util.regex.Matcher reset(java.lang.CharSequence); + method public int start(); + method public int start(int) throws java.lang.IllegalStateException; + method public java.util.regex.MatchResult toMatchResult(); + method public java.util.regex.Matcher useAnchoringBounds(boolean); + method public java.util.regex.Matcher usePattern(java.util.regex.Pattern); + method public java.util.regex.Matcher useTransparentBounds(boolean); + } + + public final class Pattern implements java.io.Serializable { + method public static java.util.regex.Pattern compile(java.lang.String, int) throws java.util.regex.PatternSyntaxException; + method public static java.util.regex.Pattern compile(java.lang.String); + method public int flags(); + method public java.util.regex.Matcher matcher(java.lang.CharSequence); + method public static boolean matches(java.lang.String, java.lang.CharSequence); + method public java.lang.String pattern(); + method public static java.lang.String quote(java.lang.String); + method public java.lang.String[] split(java.lang.CharSequence, int); + method public java.lang.String[] split(java.lang.CharSequence); + field public static final int CANON_EQ = 128; // 0x80 + field public static final int CASE_INSENSITIVE = 2; // 0x2 + field public static final int COMMENTS = 4; // 0x4 + field public static final int DOTALL = 32; // 0x20 + field public static final int LITERAL = 16; // 0x10 + field public static final int MULTILINE = 8; // 0x8 + field public static final int UNICODE_CASE = 64; // 0x40 + field public static final int UNIX_LINES = 1; // 0x1 + } + + public class PatternSyntaxException extends java.lang.IllegalArgumentException { + ctor public PatternSyntaxException(java.lang.String, java.lang.String, int); + method public java.lang.String getDescription(); + method public int getIndex(); + method public java.lang.String getPattern(); + } + +} + +package java.util.zip { + + public class Adler32 implements java.util.zip.Checksum { + ctor public Adler32(); + method public long getValue(); + method public void reset(); + method public void update(int); + method public void update(byte[]); + method public void update(byte[], int, int); + } + + public class CRC32 implements java.util.zip.Checksum { + ctor public CRC32(); + method public long getValue(); + method public void reset(); + method public void update(int); + method public void update(byte[]); + method public void update(byte[], int, int); + } + + public class CheckedInputStream extends java.io.FilterInputStream { + ctor public CheckedInputStream(java.io.InputStream, java.util.zip.Checksum); + method public java.util.zip.Checksum getChecksum(); + } + + public class CheckedOutputStream extends java.io.FilterOutputStream { + ctor public CheckedOutputStream(java.io.OutputStream, java.util.zip.Checksum); + method public java.util.zip.Checksum getChecksum(); + } + + public abstract interface Checksum { + method public abstract long getValue(); + method public abstract void reset(); + method public abstract void update(byte[], int, int); + method public abstract void update(int); + } + + public class DataFormatException extends java.lang.Exception { + ctor public DataFormatException(); + ctor public DataFormatException(java.lang.String); + } + + public class Deflater { + ctor public Deflater(); + ctor public Deflater(int); + ctor public Deflater(int, boolean); + method public int deflate(byte[]); + method public synchronized int deflate(byte[], int, int); + method public synchronized int deflate(byte[], int, int, int); + method public synchronized void end(); + method public synchronized void finish(); + method public synchronized boolean finished(); + method public synchronized int getAdler(); + method public synchronized long getBytesRead(); + method public synchronized long getBytesWritten(); + method public synchronized int getTotalIn(); + method public synchronized int getTotalOut(); + method public synchronized boolean needsInput(); + method public synchronized void reset(); + method public void setDictionary(byte[]); + method public synchronized void setDictionary(byte[], int, int); + method public void setInput(byte[]); + method public synchronized void setInput(byte[], int, int); + method public synchronized void setLevel(int); + method public synchronized void setStrategy(int); + field public static final int BEST_COMPRESSION = 9; // 0x9 + field public static final int BEST_SPEED = 1; // 0x1 + field public static final int DEFAULT_COMPRESSION = -1; // 0xffffffff + field public static final int DEFAULT_STRATEGY = 0; // 0x0 + field public static final int DEFLATED = 8; // 0x8 + field public static final int FILTERED = 1; // 0x1 + field public static final int FULL_FLUSH = 3; // 0x3 + field public static final int HUFFMAN_ONLY = 2; // 0x2 + field public static final int NO_COMPRESSION = 0; // 0x0 + field public static final int NO_FLUSH = 0; // 0x0 + field public static final int SYNC_FLUSH = 2; // 0x2 + } + + public class DeflaterInputStream extends java.io.FilterInputStream { + ctor public DeflaterInputStream(java.io.InputStream); + ctor public DeflaterInputStream(java.io.InputStream, java.util.zip.Deflater); + ctor public DeflaterInputStream(java.io.InputStream, java.util.zip.Deflater, int); + field protected final byte[] buf; + field protected final java.util.zip.Deflater def; + } + + public class DeflaterOutputStream extends java.io.FilterOutputStream { + ctor public DeflaterOutputStream(java.io.OutputStream); + ctor public DeflaterOutputStream(java.io.OutputStream, java.util.zip.Deflater); + ctor public DeflaterOutputStream(java.io.OutputStream, java.util.zip.Deflater, int); + ctor public DeflaterOutputStream(java.io.OutputStream, boolean); + ctor public DeflaterOutputStream(java.io.OutputStream, java.util.zip.Deflater, boolean); + ctor public DeflaterOutputStream(java.io.OutputStream, java.util.zip.Deflater, int, boolean); + method protected void deflate() throws java.io.IOException; + method public void finish() throws java.io.IOException; + field protected byte[] buf; + field protected java.util.zip.Deflater def; + } + + public class GZIPInputStream extends java.util.zip.InflaterInputStream { + ctor public GZIPInputStream(java.io.InputStream) throws java.io.IOException; + ctor public GZIPInputStream(java.io.InputStream, int) throws java.io.IOException; + field public static final int GZIP_MAGIC = 35615; // 0x8b1f + field protected java.util.zip.CRC32 crc; + field protected boolean eos; + } + + public class GZIPOutputStream extends java.util.zip.DeflaterOutputStream { + ctor public GZIPOutputStream(java.io.OutputStream) throws java.io.IOException; + ctor public GZIPOutputStream(java.io.OutputStream, boolean) throws java.io.IOException; + ctor public GZIPOutputStream(java.io.OutputStream, int) throws java.io.IOException; + ctor public GZIPOutputStream(java.io.OutputStream, int, boolean) throws java.io.IOException; + field protected java.util.zip.CRC32 crc; + } + + public class Inflater { + ctor public Inflater(); + ctor public Inflater(boolean); + method public synchronized void end(); + method public synchronized boolean finished(); + method public synchronized int getAdler(); + method public synchronized long getBytesRead(); + method public synchronized long getBytesWritten(); + method public synchronized int getRemaining(); + method public synchronized int getTotalIn(); + method public synchronized int getTotalOut(); + method public int inflate(byte[]) throws java.util.zip.DataFormatException; + method public synchronized int inflate(byte[], int, int) throws java.util.zip.DataFormatException; + method public synchronized boolean needsDictionary(); + method public synchronized boolean needsInput(); + method public synchronized void reset(); + method public synchronized void setDictionary(byte[]); + method public synchronized void setDictionary(byte[], int, int); + method public synchronized void setInput(byte[]); + method public synchronized void setInput(byte[], int, int); + } + + public class InflaterInputStream extends java.io.FilterInputStream { + ctor public InflaterInputStream(java.io.InputStream); + ctor public InflaterInputStream(java.io.InputStream, java.util.zip.Inflater); + ctor public InflaterInputStream(java.io.InputStream, java.util.zip.Inflater, int); + method protected void fill() throws java.io.IOException; + field protected byte[] buf; + field protected java.util.zip.Inflater inf; + field protected int len; + } + + public class InflaterOutputStream extends java.io.FilterOutputStream { + ctor public InflaterOutputStream(java.io.OutputStream); + ctor public InflaterOutputStream(java.io.OutputStream, java.util.zip.Inflater); + ctor public InflaterOutputStream(java.io.OutputStream, java.util.zip.Inflater, int); + method public void finish() throws java.io.IOException; + field protected final byte[] buf; + field protected final java.util.zip.Inflater inf; + } + + public class ZipEntry implements java.lang.Cloneable { + ctor public ZipEntry(java.lang.String); + ctor public ZipEntry(java.util.zip.ZipEntry); + method public java.lang.Object clone(); + method public java.lang.String getComment(); + method public long getCompressedSize(); + method public long getCrc(); + method public byte[] getExtra(); + method public int getMethod(); + method public java.lang.String getName(); + method public long getSize(); + method public long getTime(); + method public boolean isDirectory(); + method public void setComment(java.lang.String); + method public void setCompressedSize(long); + method public void setCrc(long); + method public void setExtra(byte[]); + method public void setMethod(int); + method public void setSize(long); + method public void setTime(long); + field public static final int CENATT = 36; // 0x24 + field public static final int CENATX = 38; // 0x26 + field public static final int CENCOM = 32; // 0x20 + field public static final int CENCRC = 16; // 0x10 + field public static final int CENDSK = 34; // 0x22 + field public static final int CENEXT = 30; // 0x1e + field public static final int CENFLG = 8; // 0x8 + field public static final int CENHDR = 46; // 0x2e + field public static final int CENHOW = 10; // 0xa + field public static final int CENLEN = 24; // 0x18 + field public static final int CENNAM = 28; // 0x1c + field public static final int CENOFF = 42; // 0x2a + field public static final long CENSIG = 33639248L; // 0x2014b50L + field public static final int CENSIZ = 20; // 0x14 + field public static final int CENTIM = 12; // 0xc + field public static final int CENVEM = 4; // 0x4 + field public static final int CENVER = 6; // 0x6 + field public static final int DEFLATED = 8; // 0x8 + field public static final int ENDCOM = 20; // 0x14 + field public static final int ENDHDR = 22; // 0x16 + field public static final int ENDOFF = 16; // 0x10 + field public static final long ENDSIG = 101010256L; // 0x6054b50L + field public static final int ENDSIZ = 12; // 0xc + field public static final int ENDSUB = 8; // 0x8 + field public static final int ENDTOT = 10; // 0xa + field public static final int EXTCRC = 4; // 0x4 + field public static final int EXTHDR = 16; // 0x10 + field public static final int EXTLEN = 12; // 0xc + field public static final long EXTSIG = 134695760L; // 0x8074b50L + field public static final int EXTSIZ = 8; // 0x8 + field public static final int LOCCRC = 14; // 0xe + field public static final int LOCEXT = 28; // 0x1c + field public static final int LOCFLG = 6; // 0x6 + field public static final int LOCHDR = 30; // 0x1e + field public static final int LOCHOW = 8; // 0x8 + field public static final int LOCLEN = 22; // 0x16 + field public static final int LOCNAM = 26; // 0x1a + field public static final long LOCSIG = 67324752L; // 0x4034b50L + field public static final int LOCSIZ = 18; // 0x12 + field public static final int LOCTIM = 10; // 0xa + field public static final int LOCVER = 4; // 0x4 + field public static final int STORED = 0; // 0x0 + } + + public class ZipError extends java.lang.InternalError { + ctor public ZipError(java.lang.String); + } + + public class ZipException extends java.io.IOException { + ctor public ZipException(); + ctor public ZipException(java.lang.String); + } + + public class ZipFile implements java.io.Closeable { + ctor public ZipFile(java.io.File) throws java.io.IOException, java.util.zip.ZipException; + ctor public ZipFile(java.lang.String) throws java.io.IOException; + ctor public ZipFile(java.io.File, int) throws java.io.IOException; + method public void close() throws java.io.IOException; + method public java.util.Enumeration entries(); + method public java.lang.String getComment(); + method public java.util.zip.ZipEntry getEntry(java.lang.String); + method public java.io.InputStream getInputStream(java.util.zip.ZipEntry) throws java.io.IOException; + method public java.lang.String getName(); + method public int size(); + field public static final int CENATT = 36; // 0x24 + field public static final int CENATX = 38; // 0x26 + field public static final int CENCOM = 32; // 0x20 + field public static final int CENCRC = 16; // 0x10 + field public static final int CENDSK = 34; // 0x22 + field public static final int CENEXT = 30; // 0x1e + field public static final int CENFLG = 8; // 0x8 + field public static final int CENHDR = 46; // 0x2e + field public static final int CENHOW = 10; // 0xa + field public static final int CENLEN = 24; // 0x18 + field public static final int CENNAM = 28; // 0x1c + field public static final int CENOFF = 42; // 0x2a + field public static final long CENSIG = 33639248L; // 0x2014b50L + field public static final int CENSIZ = 20; // 0x14 + field public static final int CENTIM = 12; // 0xc + field public static final int CENVEM = 4; // 0x4 + field public static final int CENVER = 6; // 0x6 + field public static final int ENDCOM = 20; // 0x14 + field public static final int ENDHDR = 22; // 0x16 + field public static final int ENDOFF = 16; // 0x10 + field public static final long ENDSIG = 101010256L; // 0x6054b50L + field public static final int ENDSIZ = 12; // 0xc + field public static final int ENDSUB = 8; // 0x8 + field public static final int ENDTOT = 10; // 0xa + field public static final int EXTCRC = 4; // 0x4 + field public static final int EXTHDR = 16; // 0x10 + field public static final int EXTLEN = 12; // 0xc + field public static final long EXTSIG = 134695760L; // 0x8074b50L + field public static final int EXTSIZ = 8; // 0x8 + field public static final int LOCCRC = 14; // 0xe + field public static final int LOCEXT = 28; // 0x1c + field public static final int LOCFLG = 6; // 0x6 + field public static final int LOCHDR = 30; // 0x1e + field public static final int LOCHOW = 8; // 0x8 + field public static final int LOCLEN = 22; // 0x16 + field public static final int LOCNAM = 26; // 0x1a + field public static final long LOCSIG = 67324752L; // 0x4034b50L + field public static final int LOCSIZ = 18; // 0x12 + field public static final int LOCTIM = 10; // 0xa + field public static final int LOCVER = 4; // 0x4 + field public static final int OPEN_DELETE = 4; // 0x4 + field public static final int OPEN_READ = 1; // 0x1 + } + + public class ZipInputStream extends java.util.zip.InflaterInputStream { + ctor public ZipInputStream(java.io.InputStream); + method public void closeEntry() throws java.io.IOException; + method protected java.util.zip.ZipEntry createZipEntry(java.lang.String); + method public java.util.zip.ZipEntry getNextEntry() throws java.io.IOException; + field public static final int CENATT = 36; // 0x24 + field public static final int CENATX = 38; // 0x26 + field public static final int CENCOM = 32; // 0x20 + field public static final int CENCRC = 16; // 0x10 + field public static final int CENDSK = 34; // 0x22 + field public static final int CENEXT = 30; // 0x1e + field public static final int CENFLG = 8; // 0x8 + field public static final int CENHDR = 46; // 0x2e + field public static final int CENHOW = 10; // 0xa + field public static final int CENLEN = 24; // 0x18 + field public static final int CENNAM = 28; // 0x1c + field public static final int CENOFF = 42; // 0x2a + field public static final long CENSIG = 33639248L; // 0x2014b50L + field public static final int CENSIZ = 20; // 0x14 + field public static final int CENTIM = 12; // 0xc + field public static final int CENVEM = 4; // 0x4 + field public static final int CENVER = 6; // 0x6 + field public static final int ENDCOM = 20; // 0x14 + field public static final int ENDHDR = 22; // 0x16 + field public static final int ENDOFF = 16; // 0x10 + field public static final long ENDSIG = 101010256L; // 0x6054b50L + field public static final int ENDSIZ = 12; // 0xc + field public static final int ENDSUB = 8; // 0x8 + field public static final int ENDTOT = 10; // 0xa + field public static final int EXTCRC = 4; // 0x4 + field public static final int EXTHDR = 16; // 0x10 + field public static final int EXTLEN = 12; // 0xc + field public static final long EXTSIG = 134695760L; // 0x8074b50L + field public static final int EXTSIZ = 8; // 0x8 + field public static final int LOCCRC = 14; // 0xe + field public static final int LOCEXT = 28; // 0x1c + field public static final int LOCFLG = 6; // 0x6 + field public static final int LOCHDR = 30; // 0x1e + field public static final int LOCHOW = 8; // 0x8 + field public static final int LOCLEN = 22; // 0x16 + field public static final int LOCNAM = 26; // 0x1a + field public static final long LOCSIG = 67324752L; // 0x4034b50L + field public static final int LOCSIZ = 18; // 0x12 + field public static final int LOCTIM = 10; // 0xa + field public static final int LOCVER = 4; // 0x4 + } + + public class ZipOutputStream extends java.util.zip.DeflaterOutputStream { + ctor public ZipOutputStream(java.io.OutputStream); + method public void closeEntry() throws java.io.IOException; + method public void putNextEntry(java.util.zip.ZipEntry) throws java.io.IOException; + method public void setComment(java.lang.String); + method public void setLevel(int); + method public void setMethod(int); + field public static final int CENATT = 36; // 0x24 + field public static final int CENATX = 38; // 0x26 + field public static final int CENCOM = 32; // 0x20 + field public static final int CENCRC = 16; // 0x10 + field public static final int CENDSK = 34; // 0x22 + field public static final int CENEXT = 30; // 0x1e + field public static final int CENFLG = 8; // 0x8 + field public static final int CENHDR = 46; // 0x2e + field public static final int CENHOW = 10; // 0xa + field public static final int CENLEN = 24; // 0x18 + field public static final int CENNAM = 28; // 0x1c + field public static final int CENOFF = 42; // 0x2a + field public static final long CENSIG = 33639248L; // 0x2014b50L + field public static final int CENSIZ = 20; // 0x14 + field public static final int CENTIM = 12; // 0xc + field public static final int CENVEM = 4; // 0x4 + field public static final int CENVER = 6; // 0x6 + field public static final int DEFLATED = 8; // 0x8 + field public static final int ENDCOM = 20; // 0x14 + field public static final int ENDHDR = 22; // 0x16 + field public static final int ENDOFF = 16; // 0x10 + field public static final long ENDSIG = 101010256L; // 0x6054b50L + field public static final int ENDSIZ = 12; // 0xc + field public static final int ENDSUB = 8; // 0x8 + field public static final int ENDTOT = 10; // 0xa + field public static final int EXTCRC = 4; // 0x4 + field public static final int EXTHDR = 16; // 0x10 + field public static final int EXTLEN = 12; // 0xc + field public static final long EXTSIG = 134695760L; // 0x8074b50L + field public static final int EXTSIZ = 8; // 0x8 + field public static final int LOCCRC = 14; // 0xe + field public static final int LOCEXT = 28; // 0x1c + field public static final int LOCFLG = 6; // 0x6 + field public static final int LOCHDR = 30; // 0x1e + field public static final int LOCHOW = 8; // 0x8 + field public static final int LOCLEN = 22; // 0x16 + field public static final int LOCNAM = 26; // 0x1a + field public static final long LOCSIG = 67324752L; // 0x4034b50L + field public static final int LOCSIZ = 18; // 0x12 + field public static final int LOCTIM = 10; // 0xa + field public static final int LOCVER = 4; // 0x4 + field public static final int STORED = 0; // 0x0 + } + +} + +package javax.crypto { + + public class AEADBadTagException extends javax.crypto.BadPaddingException { + ctor public AEADBadTagException(); + ctor public AEADBadTagException(java.lang.String); + } + + public class BadPaddingException extends java.security.GeneralSecurityException { + ctor public BadPaddingException(java.lang.String); + ctor public BadPaddingException(); + } + + public class Cipher { + ctor protected Cipher(javax.crypto.CipherSpi, java.security.Provider, java.lang.String); + method public final byte[] doFinal() throws javax.crypto.BadPaddingException, javax.crypto.IllegalBlockSizeException; + method public final int doFinal(byte[], int) throws javax.crypto.BadPaddingException, javax.crypto.IllegalBlockSizeException, javax.crypto.ShortBufferException; + method public final byte[] doFinal(byte[]) throws javax.crypto.BadPaddingException, javax.crypto.IllegalBlockSizeException; + method public final byte[] doFinal(byte[], int, int) throws javax.crypto.BadPaddingException, javax.crypto.IllegalBlockSizeException; + method public final int doFinal(byte[], int, int, byte[]) throws javax.crypto.BadPaddingException, javax.crypto.IllegalBlockSizeException, javax.crypto.ShortBufferException; + method public final int doFinal(byte[], int, int, byte[], int) throws javax.crypto.BadPaddingException, javax.crypto.IllegalBlockSizeException, javax.crypto.ShortBufferException; + method public final int doFinal(java.nio.ByteBuffer, java.nio.ByteBuffer) throws javax.crypto.BadPaddingException, javax.crypto.IllegalBlockSizeException, javax.crypto.ShortBufferException; + method public final java.lang.String getAlgorithm(); + method public final int getBlockSize(); + method public final javax.crypto.ExemptionMechanism getExemptionMechanism(); + method public final byte[] getIV(); + method public static final javax.crypto.Cipher getInstance(java.lang.String) throws java.security.NoSuchAlgorithmException, javax.crypto.NoSuchPaddingException; + method public static final javax.crypto.Cipher getInstance(java.lang.String, java.lang.String) throws java.security.NoSuchAlgorithmException, javax.crypto.NoSuchPaddingException, java.security.NoSuchProviderException; + method public static final javax.crypto.Cipher getInstance(java.lang.String, java.security.Provider) throws java.security.NoSuchAlgorithmException, javax.crypto.NoSuchPaddingException; + method public static final int getMaxAllowedKeyLength(java.lang.String) throws java.security.NoSuchAlgorithmException; + method public static final java.security.spec.AlgorithmParameterSpec getMaxAllowedParameterSpec(java.lang.String) throws java.security.NoSuchAlgorithmException; + method public final int getOutputSize(int); + method public final java.security.AlgorithmParameters getParameters(); + method public final java.security.Provider getProvider(); + method public final void init(int, java.security.Key) throws java.security.InvalidKeyException; + method public final void init(int, java.security.Key, java.security.SecureRandom) throws java.security.InvalidKeyException; + method public final void init(int, java.security.Key, java.security.spec.AlgorithmParameterSpec) throws java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException; + method public final void init(int, java.security.Key, java.security.spec.AlgorithmParameterSpec, java.security.SecureRandom) throws java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException; + method public final void init(int, java.security.Key, java.security.AlgorithmParameters) throws java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException; + method public final void init(int, java.security.Key, java.security.AlgorithmParameters, java.security.SecureRandom) throws java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException; + method public final void init(int, java.security.cert.Certificate) throws java.security.InvalidKeyException; + method public final void init(int, java.security.cert.Certificate, java.security.SecureRandom) throws java.security.InvalidKeyException; + method public final java.security.Key unwrap(byte[], java.lang.String, int) throws java.security.InvalidKeyException, java.security.NoSuchAlgorithmException; + method public final byte[] update(byte[]); + method public final byte[] update(byte[], int, int); + method public final int update(byte[], int, int, byte[]) throws javax.crypto.ShortBufferException; + method public final int update(byte[], int, int, byte[], int) throws javax.crypto.ShortBufferException; + method public final int update(java.nio.ByteBuffer, java.nio.ByteBuffer) throws javax.crypto.ShortBufferException; + method public final void updateAAD(byte[]); + method public final void updateAAD(byte[], int, int); + method public final void updateAAD(java.nio.ByteBuffer); + method public final byte[] wrap(java.security.Key) throws javax.crypto.IllegalBlockSizeException, java.security.InvalidKeyException; + field public static final int DECRYPT_MODE = 2; // 0x2 + field public static final int ENCRYPT_MODE = 1; // 0x1 + field public static final int PRIVATE_KEY = 2; // 0x2 + field public static final int PUBLIC_KEY = 1; // 0x1 + field public static final int SECRET_KEY = 3; // 0x3 + field public static final int UNWRAP_MODE = 4; // 0x4 + field public static final int WRAP_MODE = 3; // 0x3 + } + + public class CipherInputStream extends java.io.FilterInputStream { + ctor public CipherInputStream(java.io.InputStream, javax.crypto.Cipher); + ctor protected CipherInputStream(java.io.InputStream); + } + + public class CipherOutputStream extends java.io.FilterOutputStream { + ctor public CipherOutputStream(java.io.OutputStream, javax.crypto.Cipher); + ctor protected CipherOutputStream(java.io.OutputStream); + } + + public abstract class CipherSpi { + ctor public CipherSpi(); + method protected abstract byte[] engineDoFinal(byte[], int, int) throws javax.crypto.BadPaddingException, javax.crypto.IllegalBlockSizeException; + method protected abstract int engineDoFinal(byte[], int, int, byte[], int) throws javax.crypto.BadPaddingException, javax.crypto.IllegalBlockSizeException, javax.crypto.ShortBufferException; + method protected int engineDoFinal(java.nio.ByteBuffer, java.nio.ByteBuffer) throws javax.crypto.BadPaddingException, javax.crypto.IllegalBlockSizeException, javax.crypto.ShortBufferException; + method protected abstract int engineGetBlockSize(); + method protected abstract byte[] engineGetIV(); + method protected int engineGetKeySize(java.security.Key) throws java.security.InvalidKeyException; + method protected abstract int engineGetOutputSize(int); + method protected abstract java.security.AlgorithmParameters engineGetParameters(); + method protected abstract void engineInit(int, java.security.Key, java.security.SecureRandom) throws java.security.InvalidKeyException; + method protected abstract void engineInit(int, java.security.Key, java.security.spec.AlgorithmParameterSpec, java.security.SecureRandom) throws java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException; + method protected abstract void engineInit(int, java.security.Key, java.security.AlgorithmParameters, java.security.SecureRandom) throws java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException; + method protected abstract void engineSetMode(java.lang.String) throws java.security.NoSuchAlgorithmException; + method protected abstract void engineSetPadding(java.lang.String) throws javax.crypto.NoSuchPaddingException; + method protected java.security.Key engineUnwrap(byte[], java.lang.String, int) throws java.security.InvalidKeyException, java.security.NoSuchAlgorithmException; + method protected abstract byte[] engineUpdate(byte[], int, int); + method protected abstract int engineUpdate(byte[], int, int, byte[], int) throws javax.crypto.ShortBufferException; + method protected int engineUpdate(java.nio.ByteBuffer, java.nio.ByteBuffer) throws javax.crypto.ShortBufferException; + method protected void engineUpdateAAD(byte[], int, int); + method protected void engineUpdateAAD(java.nio.ByteBuffer); + method protected byte[] engineWrap(java.security.Key) throws javax.crypto.IllegalBlockSizeException, java.security.InvalidKeyException; + } + + public class EncryptedPrivateKeyInfo { + ctor public EncryptedPrivateKeyInfo(byte[]) throws java.io.IOException; + ctor public EncryptedPrivateKeyInfo(java.lang.String, byte[]) throws java.security.NoSuchAlgorithmException; + ctor public EncryptedPrivateKeyInfo(java.security.AlgorithmParameters, byte[]) throws java.security.NoSuchAlgorithmException; + method public java.lang.String getAlgName(); + method public java.security.AlgorithmParameters getAlgParameters(); + method public byte[] getEncoded() throws java.io.IOException; + method public byte[] getEncryptedData(); + method public java.security.spec.PKCS8EncodedKeySpec getKeySpec(javax.crypto.Cipher) throws java.security.spec.InvalidKeySpecException; + method public java.security.spec.PKCS8EncodedKeySpec getKeySpec(java.security.Key) throws java.security.InvalidKeyException, java.security.NoSuchAlgorithmException; + method public java.security.spec.PKCS8EncodedKeySpec getKeySpec(java.security.Key, java.lang.String) throws java.security.InvalidKeyException, java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException; + method public java.security.spec.PKCS8EncodedKeySpec getKeySpec(java.security.Key, java.security.Provider) throws java.security.InvalidKeyException, java.security.NoSuchAlgorithmException; + } + + public class ExemptionMechanism { + ctor protected ExemptionMechanism(javax.crypto.ExemptionMechanismSpi, java.security.Provider, java.lang.String); + method public final byte[] genExemptionBlob() throws javax.crypto.ExemptionMechanismException, java.lang.IllegalStateException; + method public final int genExemptionBlob(byte[]) throws javax.crypto.ExemptionMechanismException, java.lang.IllegalStateException, javax.crypto.ShortBufferException; + method public final int genExemptionBlob(byte[], int) throws javax.crypto.ExemptionMechanismException, java.lang.IllegalStateException, javax.crypto.ShortBufferException; + method public static final javax.crypto.ExemptionMechanism getInstance(java.lang.String) throws java.security.NoSuchAlgorithmException; + method public static final javax.crypto.ExemptionMechanism getInstance(java.lang.String, java.lang.String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException; + method public static final javax.crypto.ExemptionMechanism getInstance(java.lang.String, java.security.Provider) throws java.security.NoSuchAlgorithmException; + method public final java.lang.String getName(); + method public final int getOutputSize(int) throws java.lang.IllegalStateException; + method public final java.security.Provider getProvider(); + method public final void init(java.security.Key) throws javax.crypto.ExemptionMechanismException, java.security.InvalidKeyException; + method public final void init(java.security.Key, java.security.AlgorithmParameters) throws javax.crypto.ExemptionMechanismException, java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException; + method public final void init(java.security.Key, java.security.spec.AlgorithmParameterSpec) throws javax.crypto.ExemptionMechanismException, java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException; + method public final boolean isCryptoAllowed(java.security.Key) throws javax.crypto.ExemptionMechanismException; + } + + public class ExemptionMechanismException extends java.security.GeneralSecurityException { + ctor public ExemptionMechanismException(java.lang.String); + ctor public ExemptionMechanismException(); + } + + public abstract class ExemptionMechanismSpi { + ctor public ExemptionMechanismSpi(); + method protected abstract byte[] engineGenExemptionBlob() throws javax.crypto.ExemptionMechanismException; + method protected abstract int engineGenExemptionBlob(byte[], int) throws javax.crypto.ExemptionMechanismException, javax.crypto.ShortBufferException; + method protected abstract int engineGetOutputSize(int); + method protected abstract void engineInit(java.security.Key) throws javax.crypto.ExemptionMechanismException, java.security.InvalidKeyException; + method protected abstract void engineInit(java.security.Key, java.security.AlgorithmParameters) throws javax.crypto.ExemptionMechanismException, java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException; + method protected abstract void engineInit(java.security.Key, java.security.spec.AlgorithmParameterSpec) throws javax.crypto.ExemptionMechanismException, java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException; + } + + public class IllegalBlockSizeException extends java.security.GeneralSecurityException { + ctor public IllegalBlockSizeException(java.lang.String); + ctor public IllegalBlockSizeException(); + } + + public class KeyAgreement { + ctor protected KeyAgreement(javax.crypto.KeyAgreementSpi, java.security.Provider, java.lang.String); + method public final java.security.Key doPhase(java.security.Key, boolean) throws java.lang.IllegalStateException, java.security.InvalidKeyException; + method public final byte[] generateSecret() throws java.lang.IllegalStateException; + method public final int generateSecret(byte[], int) throws java.lang.IllegalStateException, javax.crypto.ShortBufferException; + method public final javax.crypto.SecretKey generateSecret(java.lang.String) throws java.lang.IllegalStateException, java.security.InvalidKeyException, java.security.NoSuchAlgorithmException; + method public final java.lang.String getAlgorithm(); + method public static final javax.crypto.KeyAgreement getInstance(java.lang.String) throws java.security.NoSuchAlgorithmException; + method public static final javax.crypto.KeyAgreement getInstance(java.lang.String, java.lang.String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException; + method public static final javax.crypto.KeyAgreement getInstance(java.lang.String, java.security.Provider) throws java.security.NoSuchAlgorithmException; + method public final java.security.Provider getProvider(); + method public final void init(java.security.Key) throws java.security.InvalidKeyException; + method public final void init(java.security.Key, java.security.SecureRandom) throws java.security.InvalidKeyException; + method public final void init(java.security.Key, java.security.spec.AlgorithmParameterSpec) throws java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException; + method public final void init(java.security.Key, java.security.spec.AlgorithmParameterSpec, java.security.SecureRandom) throws java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException; + } + + public abstract class KeyAgreementSpi { + ctor public KeyAgreementSpi(); + method protected abstract java.security.Key engineDoPhase(java.security.Key, boolean) throws java.lang.IllegalStateException, java.security.InvalidKeyException; + method protected abstract byte[] engineGenerateSecret() throws java.lang.IllegalStateException; + method protected abstract int engineGenerateSecret(byte[], int) throws java.lang.IllegalStateException, javax.crypto.ShortBufferException; + method protected abstract javax.crypto.SecretKey engineGenerateSecret(java.lang.String) throws java.lang.IllegalStateException, java.security.InvalidKeyException, java.security.NoSuchAlgorithmException; + method protected abstract void engineInit(java.security.Key, java.security.SecureRandom) throws java.security.InvalidKeyException; + method protected abstract void engineInit(java.security.Key, java.security.spec.AlgorithmParameterSpec, java.security.SecureRandom) throws java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException; + } + + public class KeyGenerator { + ctor protected KeyGenerator(javax.crypto.KeyGeneratorSpi, java.security.Provider, java.lang.String); + method public final javax.crypto.SecretKey generateKey(); + method public final java.lang.String getAlgorithm(); + method public static final javax.crypto.KeyGenerator getInstance(java.lang.String) throws java.security.NoSuchAlgorithmException; + method public static final javax.crypto.KeyGenerator getInstance(java.lang.String, java.lang.String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException; + method public static final javax.crypto.KeyGenerator getInstance(java.lang.String, java.security.Provider) throws java.security.NoSuchAlgorithmException; + method public final java.security.Provider getProvider(); + method public final void init(java.security.spec.AlgorithmParameterSpec) throws java.security.InvalidAlgorithmParameterException; + method public final void init(java.security.spec.AlgorithmParameterSpec, java.security.SecureRandom) throws java.security.InvalidAlgorithmParameterException; + method public final void init(int); + method public final void init(int, java.security.SecureRandom); + method public final void init(java.security.SecureRandom); + } + + public abstract class KeyGeneratorSpi { + ctor public KeyGeneratorSpi(); + method protected abstract javax.crypto.SecretKey engineGenerateKey(); + method protected abstract void engineInit(java.security.spec.AlgorithmParameterSpec, java.security.SecureRandom) throws java.security.InvalidAlgorithmParameterException; + method protected abstract void engineInit(int, java.security.SecureRandom); + method protected abstract void engineInit(java.security.SecureRandom); + } + + public class Mac implements java.lang.Cloneable { + ctor protected Mac(javax.crypto.MacSpi, java.security.Provider, java.lang.String); + method public final java.lang.Object clone() throws java.lang.CloneNotSupportedException; + method public final byte[] doFinal() throws java.lang.IllegalStateException; + method public final void doFinal(byte[], int) throws java.lang.IllegalStateException, javax.crypto.ShortBufferException; + method public final byte[] doFinal(byte[]) throws java.lang.IllegalStateException; + method public final java.lang.String getAlgorithm(); + method public static final javax.crypto.Mac getInstance(java.lang.String) throws java.security.NoSuchAlgorithmException; + method public static final javax.crypto.Mac getInstance(java.lang.String, java.lang.String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException; + method public static final javax.crypto.Mac getInstance(java.lang.String, java.security.Provider) throws java.security.NoSuchAlgorithmException; + method public final int getMacLength(); + method public final java.security.Provider getProvider(); + method public final void init(java.security.Key, java.security.spec.AlgorithmParameterSpec) throws java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException; + method public final void init(java.security.Key) throws java.security.InvalidKeyException; + method public final void reset(); + method public final void update(byte) throws java.lang.IllegalStateException; + method public final void update(byte[], int, int) throws java.lang.IllegalStateException; + method public final void update(byte[]) throws java.lang.IllegalStateException; + method public final void update(java.nio.ByteBuffer); + } + + public abstract class MacSpi { + ctor public MacSpi(); + method public java.lang.Object clone() throws java.lang.CloneNotSupportedException; + method protected abstract byte[] engineDoFinal(); + method protected abstract int engineGetMacLength(); + method protected abstract void engineInit(java.security.Key, java.security.spec.AlgorithmParameterSpec) throws java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException; + method protected abstract void engineReset(); + method protected abstract void engineUpdate(byte); + method protected abstract void engineUpdate(byte[], int, int); + method protected void engineUpdate(java.nio.ByteBuffer); + } + + public class NoSuchPaddingException extends java.security.GeneralSecurityException { + ctor public NoSuchPaddingException(java.lang.String); + ctor public NoSuchPaddingException(); + } + + public class NullCipher extends javax.crypto.Cipher { + ctor public NullCipher(); + } + + public class SealedObject implements java.io.Serializable { + ctor public SealedObject(java.io.Serializable, javax.crypto.Cipher) throws java.io.IOException, javax.crypto.IllegalBlockSizeException; + ctor protected SealedObject(javax.crypto.SealedObject); + method public final java.lang.String getAlgorithm(); + method public final java.lang.Object getObject(java.security.Key) throws java.lang.ClassNotFoundException, java.io.IOException, java.security.InvalidKeyException, java.security.NoSuchAlgorithmException; + method public final java.lang.Object getObject(javax.crypto.Cipher) throws javax.crypto.BadPaddingException, java.lang.ClassNotFoundException, java.io.IOException, javax.crypto.IllegalBlockSizeException; + method public final java.lang.Object getObject(java.security.Key, java.lang.String) throws java.lang.ClassNotFoundException, java.io.IOException, java.security.InvalidKeyException, java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException; + field protected byte[] encodedParams; + } + + public abstract interface SecretKey implements java.security.Key { + field public static final long serialVersionUID = -4795878709595146952L; // 0xbd719db928b8f538L + } + + public class SecretKeyFactory { + ctor protected SecretKeyFactory(javax.crypto.SecretKeyFactorySpi, java.security.Provider, java.lang.String); + method public final javax.crypto.SecretKey generateSecret(java.security.spec.KeySpec) throws java.security.spec.InvalidKeySpecException; + method public final java.lang.String getAlgorithm(); + method public static final javax.crypto.SecretKeyFactory getInstance(java.lang.String) throws java.security.NoSuchAlgorithmException; + method public static final javax.crypto.SecretKeyFactory getInstance(java.lang.String, java.lang.String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException; + method public static final javax.crypto.SecretKeyFactory getInstance(java.lang.String, java.security.Provider) throws java.security.NoSuchAlgorithmException; + method public final java.security.spec.KeySpec getKeySpec(javax.crypto.SecretKey, java.lang.Class) throws java.security.spec.InvalidKeySpecException; + method public final java.security.Provider getProvider(); + method public final javax.crypto.SecretKey translateKey(javax.crypto.SecretKey) throws java.security.InvalidKeyException; + } + + public abstract class SecretKeyFactorySpi { + ctor public SecretKeyFactorySpi(); + method protected abstract javax.crypto.SecretKey engineGenerateSecret(java.security.spec.KeySpec) throws java.security.spec.InvalidKeySpecException; + method protected abstract java.security.spec.KeySpec engineGetKeySpec(javax.crypto.SecretKey, java.lang.Class) throws java.security.spec.InvalidKeySpecException; + method protected abstract javax.crypto.SecretKey engineTranslateKey(javax.crypto.SecretKey) throws java.security.InvalidKeyException; + } + + public class ShortBufferException extends java.security.GeneralSecurityException { + ctor public ShortBufferException(java.lang.String); + ctor public ShortBufferException(); + } + +} + +package javax.crypto.interfaces { + + public abstract interface DHKey { + method public abstract javax.crypto.spec.DHParameterSpec getParams(); + } + + public abstract interface DHPrivateKey implements javax.crypto.interfaces.DHKey java.security.PrivateKey { + method public abstract java.math.BigInteger getX(); + field public static final long serialVersionUID = 2211791113380396553L; // 0x1eb1dc4c8e677e09L + } + + public abstract interface DHPublicKey implements javax.crypto.interfaces.DHKey java.security.PublicKey { + method public abstract java.math.BigInteger getY(); + field public static final long serialVersionUID = -6628103563352519193L; // 0xa4043eed23df4de7L + } + + public abstract interface PBEKey implements javax.crypto.SecretKey { + method public abstract int getIterationCount(); + method public abstract char[] getPassword(); + method public abstract byte[] getSalt(); + field public static final long serialVersionUID = -1430015993304333921L; // 0xec279007d7f7c19fL + } + +} + +package javax.crypto.spec { + + public class DESKeySpec implements java.security.spec.KeySpec { + ctor public DESKeySpec(byte[]) throws java.security.InvalidKeyException; + ctor public DESKeySpec(byte[], int) throws java.security.InvalidKeyException; + method public byte[] getKey(); + method public static boolean isParityAdjusted(byte[], int) throws java.security.InvalidKeyException; + method public static boolean isWeak(byte[], int) throws java.security.InvalidKeyException; + field public static final int DES_KEY_LEN = 8; // 0x8 + } + + public class DESedeKeySpec implements java.security.spec.KeySpec { + ctor public DESedeKeySpec(byte[]) throws java.security.InvalidKeyException; + ctor public DESedeKeySpec(byte[], int) throws java.security.InvalidKeyException; + method public byte[] getKey(); + method public static boolean isParityAdjusted(byte[], int) throws java.security.InvalidKeyException; + field public static final int DES_EDE_KEY_LEN = 24; // 0x18 + } + + public class DHGenParameterSpec implements java.security.spec.AlgorithmParameterSpec { + ctor public DHGenParameterSpec(int, int); + method public int getExponentSize(); + method public int getPrimeSize(); + } + + public class DHParameterSpec implements java.security.spec.AlgorithmParameterSpec { + ctor public DHParameterSpec(java.math.BigInteger, java.math.BigInteger); + ctor public DHParameterSpec(java.math.BigInteger, java.math.BigInteger, int); + method public java.math.BigInteger getG(); + method public int getL(); + method public java.math.BigInteger getP(); + } + + public class DHPrivateKeySpec implements java.security.spec.KeySpec { + ctor public DHPrivateKeySpec(java.math.BigInteger, java.math.BigInteger, java.math.BigInteger); + method public java.math.BigInteger getG(); + method public java.math.BigInteger getP(); + method public java.math.BigInteger getX(); + } + + public class DHPublicKeySpec implements java.security.spec.KeySpec { + ctor public DHPublicKeySpec(java.math.BigInteger, java.math.BigInteger, java.math.BigInteger); + method public java.math.BigInteger getG(); + method public java.math.BigInteger getP(); + method public java.math.BigInteger getY(); + } + + public class GCMParameterSpec implements java.security.spec.AlgorithmParameterSpec { + ctor public GCMParameterSpec(int, byte[]); + ctor public GCMParameterSpec(int, byte[], int, int); + method public byte[] getIV(); + method public int getTLen(); + } + + public class IvParameterSpec implements java.security.spec.AlgorithmParameterSpec { + ctor public IvParameterSpec(byte[]); + ctor public IvParameterSpec(byte[], int, int); + method public byte[] getIV(); + } + + public class OAEPParameterSpec implements java.security.spec.AlgorithmParameterSpec { + ctor public OAEPParameterSpec(java.lang.String, java.lang.String, java.security.spec.AlgorithmParameterSpec, javax.crypto.spec.PSource); + method public java.lang.String getDigestAlgorithm(); + method public java.lang.String getMGFAlgorithm(); + method public java.security.spec.AlgorithmParameterSpec getMGFParameters(); + method public javax.crypto.spec.PSource getPSource(); + field public static final javax.crypto.spec.OAEPParameterSpec DEFAULT; + } + + public class PBEKeySpec implements java.security.spec.KeySpec { + ctor public PBEKeySpec(char[]); + ctor public PBEKeySpec(char[], byte[], int, int); + ctor public PBEKeySpec(char[], byte[], int); + method public final void clearPassword(); + method public final int getIterationCount(); + method public final int getKeyLength(); + method public final char[] getPassword(); + method public final byte[] getSalt(); + } + + public class PBEParameterSpec implements java.security.spec.AlgorithmParameterSpec { + ctor public PBEParameterSpec(byte[], int); + method public int getIterationCount(); + method public byte[] getSalt(); + } + + public class PSource { + ctor protected PSource(java.lang.String); + method public java.lang.String getAlgorithm(); + } + + public static final class PSource.PSpecified extends javax.crypto.spec.PSource { + ctor public PSource.PSpecified(byte[]); + method public byte[] getValue(); + field public static final javax.crypto.spec.PSource.PSpecified DEFAULT; + } + + public class RC2ParameterSpec implements java.security.spec.AlgorithmParameterSpec { + ctor public RC2ParameterSpec(int); + ctor public RC2ParameterSpec(int, byte[]); + ctor public RC2ParameterSpec(int, byte[], int); + method public int getEffectiveKeyBits(); + method public byte[] getIV(); + } + + public class RC5ParameterSpec implements java.security.spec.AlgorithmParameterSpec { + ctor public RC5ParameterSpec(int, int, int); + ctor public RC5ParameterSpec(int, int, int, byte[]); + ctor public RC5ParameterSpec(int, int, int, byte[], int); + method public byte[] getIV(); + method public int getRounds(); + method public int getVersion(); + method public int getWordSize(); + } + + public class SecretKeySpec implements java.security.spec.KeySpec javax.crypto.SecretKey java.io.Serializable { + ctor public SecretKeySpec(byte[], java.lang.String); + ctor public SecretKeySpec(byte[], int, int, java.lang.String); + method public java.lang.String getAlgorithm(); + method public byte[] getEncoded(); + method public java.lang.String getFormat(); + } + +} + +package javax.microedition.khronos.egl { + + public abstract interface EGL { + } + + public abstract interface EGL10 implements javax.microedition.khronos.egl.EGL { + method public abstract boolean eglChooseConfig(javax.microedition.khronos.egl.EGLDisplay, int[], javax.microedition.khronos.egl.EGLConfig[], int, int[]); + method public abstract boolean eglCopyBuffers(javax.microedition.khronos.egl.EGLDisplay, javax.microedition.khronos.egl.EGLSurface, java.lang.Object); + method public abstract javax.microedition.khronos.egl.EGLContext eglCreateContext(javax.microedition.khronos.egl.EGLDisplay, javax.microedition.khronos.egl.EGLConfig, javax.microedition.khronos.egl.EGLContext, int[]); + method public abstract javax.microedition.khronos.egl.EGLSurface eglCreatePbufferSurface(javax.microedition.khronos.egl.EGLDisplay, javax.microedition.khronos.egl.EGLConfig, int[]); + method public abstract javax.microedition.khronos.egl.EGLSurface eglCreatePixmapSurface(javax.microedition.khronos.egl.EGLDisplay, javax.microedition.khronos.egl.EGLConfig, java.lang.Object, int[]); + method public abstract javax.microedition.khronos.egl.EGLSurface eglCreateWindowSurface(javax.microedition.khronos.egl.EGLDisplay, javax.microedition.khronos.egl.EGLConfig, java.lang.Object, int[]); + method public abstract boolean eglDestroyContext(javax.microedition.khronos.egl.EGLDisplay, javax.microedition.khronos.egl.EGLContext); + method public abstract boolean eglDestroySurface(javax.microedition.khronos.egl.EGLDisplay, javax.microedition.khronos.egl.EGLSurface); + method public abstract boolean eglGetConfigAttrib(javax.microedition.khronos.egl.EGLDisplay, javax.microedition.khronos.egl.EGLConfig, int, int[]); + method public abstract boolean eglGetConfigs(javax.microedition.khronos.egl.EGLDisplay, javax.microedition.khronos.egl.EGLConfig[], int, int[]); + method public abstract javax.microedition.khronos.egl.EGLContext eglGetCurrentContext(); + method public abstract javax.microedition.khronos.egl.EGLDisplay eglGetCurrentDisplay(); + method public abstract javax.microedition.khronos.egl.EGLSurface eglGetCurrentSurface(int); + method public abstract javax.microedition.khronos.egl.EGLDisplay eglGetDisplay(java.lang.Object); + method public abstract int eglGetError(); + method public abstract boolean eglInitialize(javax.microedition.khronos.egl.EGLDisplay, int[]); + method public abstract boolean eglMakeCurrent(javax.microedition.khronos.egl.EGLDisplay, javax.microedition.khronos.egl.EGLSurface, javax.microedition.khronos.egl.EGLSurface, javax.microedition.khronos.egl.EGLContext); + method public abstract boolean eglQueryContext(javax.microedition.khronos.egl.EGLDisplay, javax.microedition.khronos.egl.EGLContext, int, int[]); + method public abstract java.lang.String eglQueryString(javax.microedition.khronos.egl.EGLDisplay, int); + method public abstract boolean eglQuerySurface(javax.microedition.khronos.egl.EGLDisplay, javax.microedition.khronos.egl.EGLSurface, int, int[]); + method public abstract boolean eglSwapBuffers(javax.microedition.khronos.egl.EGLDisplay, javax.microedition.khronos.egl.EGLSurface); + method public abstract boolean eglTerminate(javax.microedition.khronos.egl.EGLDisplay); + method public abstract boolean eglWaitGL(); + method public abstract boolean eglWaitNative(int, java.lang.Object); + field public static final int EGL_ALPHA_FORMAT = 12424; // 0x3088 + field public static final int EGL_ALPHA_MASK_SIZE = 12350; // 0x303e + field public static final int EGL_ALPHA_SIZE = 12321; // 0x3021 + field public static final int EGL_BAD_ACCESS = 12290; // 0x3002 + field public static final int EGL_BAD_ALLOC = 12291; // 0x3003 + field public static final int EGL_BAD_ATTRIBUTE = 12292; // 0x3004 + field public static final int EGL_BAD_CONFIG = 12293; // 0x3005 + field public static final int EGL_BAD_CONTEXT = 12294; // 0x3006 + field public static final int EGL_BAD_CURRENT_SURFACE = 12295; // 0x3007 + field public static final int EGL_BAD_DISPLAY = 12296; // 0x3008 + field public static final int EGL_BAD_MATCH = 12297; // 0x3009 + field public static final int EGL_BAD_NATIVE_PIXMAP = 12298; // 0x300a + field public static final int EGL_BAD_NATIVE_WINDOW = 12299; // 0x300b + field public static final int EGL_BAD_PARAMETER = 12300; // 0x300c + field public static final int EGL_BAD_SURFACE = 12301; // 0x300d + field public static final int EGL_BLUE_SIZE = 12322; // 0x3022 + field public static final int EGL_BUFFER_SIZE = 12320; // 0x3020 + field public static final int EGL_COLORSPACE = 12423; // 0x3087 + field public static final int EGL_COLOR_BUFFER_TYPE = 12351; // 0x303f + field public static final int EGL_CONFIG_CAVEAT = 12327; // 0x3027 + field public static final int EGL_CONFIG_ID = 12328; // 0x3028 + field public static final int EGL_CORE_NATIVE_ENGINE = 12379; // 0x305b + field public static final java.lang.Object EGL_DEFAULT_DISPLAY; + field public static final int EGL_DEPTH_SIZE = 12325; // 0x3025 + field public static final int EGL_DONT_CARE = -1; // 0xffffffff + field public static final int EGL_DRAW = 12377; // 0x3059 + field public static final int EGL_EXTENSIONS = 12373; // 0x3055 + field public static final int EGL_GREEN_SIZE = 12323; // 0x3023 + field public static final int EGL_HEIGHT = 12374; // 0x3056 + field public static final int EGL_HORIZONTAL_RESOLUTION = 12432; // 0x3090 + field public static final int EGL_LARGEST_PBUFFER = 12376; // 0x3058 + field public static final int EGL_LEVEL = 12329; // 0x3029 + field public static final int EGL_LUMINANCE_BUFFER = 12431; // 0x308f + field public static final int EGL_LUMINANCE_SIZE = 12349; // 0x303d + field public static final int EGL_MAX_PBUFFER_HEIGHT = 12330; // 0x302a + field public static final int EGL_MAX_PBUFFER_PIXELS = 12331; // 0x302b + field public static final int EGL_MAX_PBUFFER_WIDTH = 12332; // 0x302c + field public static final int EGL_NATIVE_RENDERABLE = 12333; // 0x302d + field public static final int EGL_NATIVE_VISUAL_ID = 12334; // 0x302e + field public static final int EGL_NATIVE_VISUAL_TYPE = 12335; // 0x302f + field public static final int EGL_NONE = 12344; // 0x3038 + field public static final int EGL_NON_CONFORMANT_CONFIG = 12369; // 0x3051 + field public static final int EGL_NOT_INITIALIZED = 12289; // 0x3001 + field public static final javax.microedition.khronos.egl.EGLContext EGL_NO_CONTEXT; + field public static final javax.microedition.khronos.egl.EGLDisplay EGL_NO_DISPLAY; + field public static final javax.microedition.khronos.egl.EGLSurface EGL_NO_SURFACE; + field public static final int EGL_PBUFFER_BIT = 1; // 0x1 + field public static final int EGL_PIXEL_ASPECT_RATIO = 12434; // 0x3092 + field public static final int EGL_PIXMAP_BIT = 2; // 0x2 + field public static final int EGL_READ = 12378; // 0x305a + field public static final int EGL_RED_SIZE = 12324; // 0x3024 + field public static final int EGL_RENDERABLE_TYPE = 12352; // 0x3040 + field public static final int EGL_RENDER_BUFFER = 12422; // 0x3086 + field public static final int EGL_RGB_BUFFER = 12430; // 0x308e + field public static final int EGL_SAMPLES = 12337; // 0x3031 + field public static final int EGL_SAMPLE_BUFFERS = 12338; // 0x3032 + field public static final int EGL_SINGLE_BUFFER = 12421; // 0x3085 + field public static final int EGL_SLOW_CONFIG = 12368; // 0x3050 + field public static final int EGL_STENCIL_SIZE = 12326; // 0x3026 + field public static final int EGL_SUCCESS = 12288; // 0x3000 + field public static final int EGL_SURFACE_TYPE = 12339; // 0x3033 + field public static final int EGL_TRANSPARENT_BLUE_VALUE = 12341; // 0x3035 + field public static final int EGL_TRANSPARENT_GREEN_VALUE = 12342; // 0x3036 + field public static final int EGL_TRANSPARENT_RED_VALUE = 12343; // 0x3037 + field public static final int EGL_TRANSPARENT_RGB = 12370; // 0x3052 + field public static final int EGL_TRANSPARENT_TYPE = 12340; // 0x3034 + field public static final int EGL_VENDOR = 12371; // 0x3053 + field public static final int EGL_VERSION = 12372; // 0x3054 + field public static final int EGL_VERTICAL_RESOLUTION = 12433; // 0x3091 + field public static final int EGL_WIDTH = 12375; // 0x3057 + field public static final int EGL_WINDOW_BIT = 4; // 0x4 + } + + public abstract interface EGL11 implements javax.microedition.khronos.egl.EGL10 { + field public static final int EGL_CONTEXT_LOST = 12302; // 0x300e + } + + public abstract class EGLConfig { + ctor public EGLConfig(); + } + + public abstract class EGLContext { + ctor public EGLContext(); + method public static javax.microedition.khronos.egl.EGL getEGL(); + method public abstract javax.microedition.khronos.opengles.GL getGL(); + } + + public abstract class EGLDisplay { + ctor public EGLDisplay(); + } + + public abstract class EGLSurface { + ctor public EGLSurface(); + } + +} + +package javax.microedition.khronos.opengles { + + public abstract interface GL { + } + + public abstract interface GL10 implements javax.microedition.khronos.opengles.GL { + method public abstract void glActiveTexture(int); + method public abstract void glAlphaFunc(int, float); + method public abstract void glAlphaFuncx(int, int); + method public abstract void glBindTexture(int, int); + method public abstract void glBlendFunc(int, int); + method public abstract void glClear(int); + method public abstract void glClearColor(float, float, float, float); + method public abstract void glClearColorx(int, int, int, int); + method public abstract void glClearDepthf(float); + method public abstract void glClearDepthx(int); + method public abstract void glClearStencil(int); + method public abstract void glClientActiveTexture(int); + method public abstract void glColor4f(float, float, float, float); + method public abstract void glColor4x(int, int, int, int); + method public abstract void glColorMask(boolean, boolean, boolean, boolean); + method public abstract void glColorPointer(int, int, int, java.nio.Buffer); + method public abstract void glCompressedTexImage2D(int, int, int, int, int, int, int, java.nio.Buffer); + method public abstract void glCompressedTexSubImage2D(int, int, int, int, int, int, int, int, java.nio.Buffer); + method public abstract void glCopyTexImage2D(int, int, int, int, int, int, int, int); + method public abstract void glCopyTexSubImage2D(int, int, int, int, int, int, int, int); + method public abstract void glCullFace(int); + method public abstract void glDeleteTextures(int, int[], int); + method public abstract void glDeleteTextures(int, java.nio.IntBuffer); + method public abstract void glDepthFunc(int); + method public abstract void glDepthMask(boolean); + method public abstract void glDepthRangef(float, float); + method public abstract void glDepthRangex(int, int); + method public abstract void glDisable(int); + method public abstract void glDisableClientState(int); + method public abstract void glDrawArrays(int, int, int); + method public abstract void glDrawElements(int, int, int, java.nio.Buffer); + method public abstract void glEnable(int); + method public abstract void glEnableClientState(int); + method public abstract void glFinish(); + method public abstract void glFlush(); + method public abstract void glFogf(int, float); + method public abstract void glFogfv(int, float[], int); + method public abstract void glFogfv(int, java.nio.FloatBuffer); + method public abstract void glFogx(int, int); + method public abstract void glFogxv(int, int[], int); + method public abstract void glFogxv(int, java.nio.IntBuffer); + method public abstract void glFrontFace(int); + method public abstract void glFrustumf(float, float, float, float, float, float); + method public abstract void glFrustumx(int, int, int, int, int, int); + method public abstract void glGenTextures(int, int[], int); + method public abstract void glGenTextures(int, java.nio.IntBuffer); + method public abstract int glGetError(); + method public abstract void glGetIntegerv(int, int[], int); + method public abstract void glGetIntegerv(int, java.nio.IntBuffer); + method public abstract java.lang.String glGetString(int); + method public abstract void glHint(int, int); + method public abstract void glLightModelf(int, float); + method public abstract void glLightModelfv(int, float[], int); + method public abstract void glLightModelfv(int, java.nio.FloatBuffer); + method public abstract void glLightModelx(int, int); + method public abstract void glLightModelxv(int, int[], int); + method public abstract void glLightModelxv(int, java.nio.IntBuffer); + method public abstract void glLightf(int, int, float); + method public abstract void glLightfv(int, int, float[], int); + method public abstract void glLightfv(int, int, java.nio.FloatBuffer); + method public abstract void glLightx(int, int, int); + method public abstract void glLightxv(int, int, int[], int); + method public abstract void glLightxv(int, int, java.nio.IntBuffer); + method public abstract void glLineWidth(float); + method public abstract void glLineWidthx(int); + method public abstract void glLoadIdentity(); + method public abstract void glLoadMatrixf(float[], int); + method public abstract void glLoadMatrixf(java.nio.FloatBuffer); + method public abstract void glLoadMatrixx(int[], int); + method public abstract void glLoadMatrixx(java.nio.IntBuffer); + method public abstract void glLogicOp(int); + method public abstract void glMaterialf(int, int, float); + method public abstract void glMaterialfv(int, int, float[], int); + method public abstract void glMaterialfv(int, int, java.nio.FloatBuffer); + method public abstract void glMaterialx(int, int, int); + method public abstract void glMaterialxv(int, int, int[], int); + method public abstract void glMaterialxv(int, int, java.nio.IntBuffer); + method public abstract void glMatrixMode(int); + method public abstract void glMultMatrixf(float[], int); + method public abstract void glMultMatrixf(java.nio.FloatBuffer); + method public abstract void glMultMatrixx(int[], int); + method public abstract void glMultMatrixx(java.nio.IntBuffer); + method public abstract void glMultiTexCoord4f(int, float, float, float, float); + method public abstract void glMultiTexCoord4x(int, int, int, int, int); + method public abstract void glNormal3f(float, float, float); + method public abstract void glNormal3x(int, int, int); + method public abstract void glNormalPointer(int, int, java.nio.Buffer); + method public abstract void glOrthof(float, float, float, float, float, float); + method public abstract void glOrthox(int, int, int, int, int, int); + method public abstract void glPixelStorei(int, int); + method public abstract void glPointSize(float); + method public abstract void glPointSizex(int); + method public abstract void glPolygonOffset(float, float); + method public abstract void glPolygonOffsetx(int, int); + method public abstract void glPopMatrix(); + method public abstract void glPushMatrix(); + method public abstract void glReadPixels(int, int, int, int, int, int, java.nio.Buffer); + method public abstract void glRotatef(float, float, float, float); + method public abstract void glRotatex(int, int, int, int); + method public abstract void glSampleCoverage(float, boolean); + method public abstract void glSampleCoveragex(int, boolean); + method public abstract void glScalef(float, float, float); + method public abstract void glScalex(int, int, int); + method public abstract void glScissor(int, int, int, int); + method public abstract void glShadeModel(int); + method public abstract void glStencilFunc(int, int, int); + method public abstract void glStencilMask(int); + method public abstract void glStencilOp(int, int, int); + method public abstract void glTexCoordPointer(int, int, int, java.nio.Buffer); + method public abstract void glTexEnvf(int, int, float); + method public abstract void glTexEnvfv(int, int, float[], int); + method public abstract void glTexEnvfv(int, int, java.nio.FloatBuffer); + method public abstract void glTexEnvx(int, int, int); + method public abstract void glTexEnvxv(int, int, int[], int); + method public abstract void glTexEnvxv(int, int, java.nio.IntBuffer); + method public abstract void glTexImage2D(int, int, int, int, int, int, int, int, java.nio.Buffer); + method public abstract void glTexParameterf(int, int, float); + method public abstract void glTexParameterx(int, int, int); + method public abstract void glTexSubImage2D(int, int, int, int, int, int, int, int, java.nio.Buffer); + method public abstract void glTranslatef(float, float, float); + method public abstract void glTranslatex(int, int, int); + method public abstract void glVertexPointer(int, int, int, java.nio.Buffer); + method public abstract void glViewport(int, int, int, int); + field public static final int GL_ADD = 260; // 0x104 + field public static final int GL_ALIASED_LINE_WIDTH_RANGE = 33902; // 0x846e + field public static final int GL_ALIASED_POINT_SIZE_RANGE = 33901; // 0x846d + field public static final int GL_ALPHA = 6406; // 0x1906 + field public static final int GL_ALPHA_BITS = 3413; // 0xd55 + field public static final int GL_ALPHA_TEST = 3008; // 0xbc0 + field public static final int GL_ALWAYS = 519; // 0x207 + field public static final int GL_AMBIENT = 4608; // 0x1200 + field public static final int GL_AMBIENT_AND_DIFFUSE = 5634; // 0x1602 + field public static final int GL_AND = 5377; // 0x1501 + field public static final int GL_AND_INVERTED = 5380; // 0x1504 + field public static final int GL_AND_REVERSE = 5378; // 0x1502 + field public static final int GL_BACK = 1029; // 0x405 + field public static final int GL_BLEND = 3042; // 0xbe2 + field public static final int GL_BLUE_BITS = 3412; // 0xd54 + field public static final int GL_BYTE = 5120; // 0x1400 + field public static final int GL_CCW = 2305; // 0x901 + field public static final int GL_CLAMP_TO_EDGE = 33071; // 0x812f + field public static final int GL_CLEAR = 5376; // 0x1500 + field public static final int GL_COLOR_ARRAY = 32886; // 0x8076 + field public static final int GL_COLOR_BUFFER_BIT = 16384; // 0x4000 + field public static final int GL_COLOR_LOGIC_OP = 3058; // 0xbf2 + field public static final int GL_COLOR_MATERIAL = 2903; // 0xb57 + field public static final int GL_COMPRESSED_TEXTURE_FORMATS = 34467; // 0x86a3 + field public static final int GL_CONSTANT_ATTENUATION = 4615; // 0x1207 + field public static final int GL_COPY = 5379; // 0x1503 + field public static final int GL_COPY_INVERTED = 5388; // 0x150c + field public static final int GL_CULL_FACE = 2884; // 0xb44 + field public static final int GL_CW = 2304; // 0x900 + field public static final int GL_DECAL = 8449; // 0x2101 + field public static final int GL_DECR = 7683; // 0x1e03 + field public static final int GL_DEPTH_BITS = 3414; // 0xd56 + field public static final int GL_DEPTH_BUFFER_BIT = 256; // 0x100 + field public static final int GL_DEPTH_TEST = 2929; // 0xb71 + field public static final int GL_DIFFUSE = 4609; // 0x1201 + field public static final int GL_DITHER = 3024; // 0xbd0 + field public static final int GL_DONT_CARE = 4352; // 0x1100 + field public static final int GL_DST_ALPHA = 772; // 0x304 + field public static final int GL_DST_COLOR = 774; // 0x306 + field public static final int GL_EMISSION = 5632; // 0x1600 + field public static final int GL_EQUAL = 514; // 0x202 + field public static final int GL_EQUIV = 5385; // 0x1509 + field public static final int GL_EXP = 2048; // 0x800 + field public static final int GL_EXP2 = 2049; // 0x801 + field public static final int GL_EXTENSIONS = 7939; // 0x1f03 + field public static final int GL_FALSE = 0; // 0x0 + field public static final int GL_FASTEST = 4353; // 0x1101 + field public static final int GL_FIXED = 5132; // 0x140c + field public static final int GL_FLAT = 7424; // 0x1d00 + field public static final int GL_FLOAT = 5126; // 0x1406 + field public static final int GL_FOG = 2912; // 0xb60 + field public static final int GL_FOG_COLOR = 2918; // 0xb66 + field public static final int GL_FOG_DENSITY = 2914; // 0xb62 + field public static final int GL_FOG_END = 2916; // 0xb64 + field public static final int GL_FOG_HINT = 3156; // 0xc54 + field public static final int GL_FOG_MODE = 2917; // 0xb65 + field public static final int GL_FOG_START = 2915; // 0xb63 + field public static final int GL_FRONT = 1028; // 0x404 + field public static final int GL_FRONT_AND_BACK = 1032; // 0x408 + field public static final int GL_GEQUAL = 518; // 0x206 + field public static final int GL_GREATER = 516; // 0x204 + field public static final int GL_GREEN_BITS = 3411; // 0xd53 + field public static final int GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES = 35739; // 0x8b9b + field public static final int GL_IMPLEMENTATION_COLOR_READ_TYPE_OES = 35738; // 0x8b9a + field public static final int GL_INCR = 7682; // 0x1e02 + field public static final int GL_INVALID_ENUM = 1280; // 0x500 + field public static final int GL_INVALID_OPERATION = 1282; // 0x502 + field public static final int GL_INVALID_VALUE = 1281; // 0x501 + field public static final int GL_INVERT = 5386; // 0x150a + field public static final int GL_KEEP = 7680; // 0x1e00 + field public static final int GL_LEQUAL = 515; // 0x203 + field public static final int GL_LESS = 513; // 0x201 + field public static final int GL_LIGHT0 = 16384; // 0x4000 + field public static final int GL_LIGHT1 = 16385; // 0x4001 + field public static final int GL_LIGHT2 = 16386; // 0x4002 + field public static final int GL_LIGHT3 = 16387; // 0x4003 + field public static final int GL_LIGHT4 = 16388; // 0x4004 + field public static final int GL_LIGHT5 = 16389; // 0x4005 + field public static final int GL_LIGHT6 = 16390; // 0x4006 + field public static final int GL_LIGHT7 = 16391; // 0x4007 + field public static final int GL_LIGHTING = 2896; // 0xb50 + field public static final int GL_LIGHT_MODEL_AMBIENT = 2899; // 0xb53 + field public static final int GL_LIGHT_MODEL_TWO_SIDE = 2898; // 0xb52 + field public static final int GL_LINEAR = 9729; // 0x2601 + field public static final int GL_LINEAR_ATTENUATION = 4616; // 0x1208 + field public static final int GL_LINEAR_MIPMAP_LINEAR = 9987; // 0x2703 + field public static final int GL_LINEAR_MIPMAP_NEAREST = 9985; // 0x2701 + field public static final int GL_LINES = 1; // 0x1 + field public static final int GL_LINE_LOOP = 2; // 0x2 + field public static final int GL_LINE_SMOOTH = 2848; // 0xb20 + field public static final int GL_LINE_SMOOTH_HINT = 3154; // 0xc52 + field public static final int GL_LINE_STRIP = 3; // 0x3 + field public static final int GL_LUMINANCE = 6409; // 0x1909 + field public static final int GL_LUMINANCE_ALPHA = 6410; // 0x190a + field public static final int GL_MAX_ELEMENTS_INDICES = 33001; // 0x80e9 + field public static final int GL_MAX_ELEMENTS_VERTICES = 33000; // 0x80e8 + field public static final int GL_MAX_LIGHTS = 3377; // 0xd31 + field public static final int GL_MAX_MODELVIEW_STACK_DEPTH = 3382; // 0xd36 + field public static final int GL_MAX_PROJECTION_STACK_DEPTH = 3384; // 0xd38 + field public static final int GL_MAX_TEXTURE_SIZE = 3379; // 0xd33 + field public static final int GL_MAX_TEXTURE_STACK_DEPTH = 3385; // 0xd39 + field public static final int GL_MAX_TEXTURE_UNITS = 34018; // 0x84e2 + field public static final int GL_MAX_VIEWPORT_DIMS = 3386; // 0xd3a + field public static final int GL_MODELVIEW = 5888; // 0x1700 + field public static final int GL_MODULATE = 8448; // 0x2100 + field public static final int GL_MULTISAMPLE = 32925; // 0x809d + field public static final int GL_NAND = 5390; // 0x150e + field public static final int GL_NEAREST = 9728; // 0x2600 + field public static final int GL_NEAREST_MIPMAP_LINEAR = 9986; // 0x2702 + field public static final int GL_NEAREST_MIPMAP_NEAREST = 9984; // 0x2700 + field public static final int GL_NEVER = 512; // 0x200 + field public static final int GL_NICEST = 4354; // 0x1102 + field public static final int GL_NOOP = 5381; // 0x1505 + field public static final int GL_NOR = 5384; // 0x1508 + field public static final int GL_NORMALIZE = 2977; // 0xba1 + field public static final int GL_NORMAL_ARRAY = 32885; // 0x8075 + field public static final int GL_NOTEQUAL = 517; // 0x205 + field public static final int GL_NO_ERROR = 0; // 0x0 + field public static final int GL_NUM_COMPRESSED_TEXTURE_FORMATS = 34466; // 0x86a2 + field public static final int GL_ONE = 1; // 0x1 + field public static final int GL_ONE_MINUS_DST_ALPHA = 773; // 0x305 + field public static final int GL_ONE_MINUS_DST_COLOR = 775; // 0x307 + field public static final int GL_ONE_MINUS_SRC_ALPHA = 771; // 0x303 + field public static final int GL_ONE_MINUS_SRC_COLOR = 769; // 0x301 + field public static final int GL_OR = 5383; // 0x1507 + field public static final int GL_OR_INVERTED = 5389; // 0x150d + field public static final int GL_OR_REVERSE = 5387; // 0x150b + field public static final int GL_OUT_OF_MEMORY = 1285; // 0x505 + field public static final int GL_PACK_ALIGNMENT = 3333; // 0xd05 + field public static final int GL_PALETTE4_R5_G6_B5_OES = 35730; // 0x8b92 + field public static final int GL_PALETTE4_RGB5_A1_OES = 35732; // 0x8b94 + field public static final int GL_PALETTE4_RGB8_OES = 35728; // 0x8b90 + field public static final int GL_PALETTE4_RGBA4_OES = 35731; // 0x8b93 + field public static final int GL_PALETTE4_RGBA8_OES = 35729; // 0x8b91 + field public static final int GL_PALETTE8_R5_G6_B5_OES = 35735; // 0x8b97 + field public static final int GL_PALETTE8_RGB5_A1_OES = 35737; // 0x8b99 + field public static final int GL_PALETTE8_RGB8_OES = 35733; // 0x8b95 + field public static final int GL_PALETTE8_RGBA4_OES = 35736; // 0x8b98 + field public static final int GL_PALETTE8_RGBA8_OES = 35734; // 0x8b96 + field public static final int GL_PERSPECTIVE_CORRECTION_HINT = 3152; // 0xc50 + field public static final int GL_POINTS = 0; // 0x0 + field public static final int GL_POINT_FADE_THRESHOLD_SIZE = 33064; // 0x8128 + field public static final int GL_POINT_SIZE = 2833; // 0xb11 + field public static final int GL_POINT_SMOOTH = 2832; // 0xb10 + field public static final int GL_POINT_SMOOTH_HINT = 3153; // 0xc51 + field public static final int GL_POLYGON_OFFSET_FILL = 32823; // 0x8037 + field public static final int GL_POLYGON_SMOOTH_HINT = 3155; // 0xc53 + field public static final int GL_POSITION = 4611; // 0x1203 + field public static final int GL_PROJECTION = 5889; // 0x1701 + field public static final int GL_QUADRATIC_ATTENUATION = 4617; // 0x1209 + field public static final int GL_RED_BITS = 3410; // 0xd52 + field public static final int GL_RENDERER = 7937; // 0x1f01 + field public static final int GL_REPEAT = 10497; // 0x2901 + field public static final int GL_REPLACE = 7681; // 0x1e01 + field public static final int GL_RESCALE_NORMAL = 32826; // 0x803a + field public static final int GL_RGB = 6407; // 0x1907 + field public static final int GL_RGBA = 6408; // 0x1908 + field public static final int GL_SAMPLE_ALPHA_TO_COVERAGE = 32926; // 0x809e + field public static final int GL_SAMPLE_ALPHA_TO_ONE = 32927; // 0x809f + field public static final int GL_SAMPLE_COVERAGE = 32928; // 0x80a0 + field public static final int GL_SCISSOR_TEST = 3089; // 0xc11 + field public static final int GL_SET = 5391; // 0x150f + field public static final int GL_SHININESS = 5633; // 0x1601 + field public static final int GL_SHORT = 5122; // 0x1402 + field public static final int GL_SMOOTH = 7425; // 0x1d01 + field public static final int GL_SMOOTH_LINE_WIDTH_RANGE = 2850; // 0xb22 + field public static final int GL_SMOOTH_POINT_SIZE_RANGE = 2834; // 0xb12 + field public static final int GL_SPECULAR = 4610; // 0x1202 + field public static final int GL_SPOT_CUTOFF = 4614; // 0x1206 + field public static final int GL_SPOT_DIRECTION = 4612; // 0x1204 + field public static final int GL_SPOT_EXPONENT = 4613; // 0x1205 + field public static final int GL_SRC_ALPHA = 770; // 0x302 + field public static final int GL_SRC_ALPHA_SATURATE = 776; // 0x308 + field public static final int GL_SRC_COLOR = 768; // 0x300 + field public static final int GL_STACK_OVERFLOW = 1283; // 0x503 + field public static final int GL_STACK_UNDERFLOW = 1284; // 0x504 + field public static final int GL_STENCIL_BITS = 3415; // 0xd57 + field public static final int GL_STENCIL_BUFFER_BIT = 1024; // 0x400 + field public static final int GL_STENCIL_TEST = 2960; // 0xb90 + field public static final int GL_SUBPIXEL_BITS = 3408; // 0xd50 + field public static final int GL_TEXTURE = 5890; // 0x1702 + field public static final int GL_TEXTURE0 = 33984; // 0x84c0 + field public static final int GL_TEXTURE1 = 33985; // 0x84c1 + field public static final int GL_TEXTURE10 = 33994; // 0x84ca + field public static final int GL_TEXTURE11 = 33995; // 0x84cb + field public static final int GL_TEXTURE12 = 33996; // 0x84cc + field public static final int GL_TEXTURE13 = 33997; // 0x84cd + field public static final int GL_TEXTURE14 = 33998; // 0x84ce + field public static final int GL_TEXTURE15 = 33999; // 0x84cf + field public static final int GL_TEXTURE16 = 34000; // 0x84d0 + field public static final int GL_TEXTURE17 = 34001; // 0x84d1 + field public static final int GL_TEXTURE18 = 34002; // 0x84d2 + field public static final int GL_TEXTURE19 = 34003; // 0x84d3 + field public static final int GL_TEXTURE2 = 33986; // 0x84c2 + field public static final int GL_TEXTURE20 = 34004; // 0x84d4 + field public static final int GL_TEXTURE21 = 34005; // 0x84d5 + field public static final int GL_TEXTURE22 = 34006; // 0x84d6 + field public static final int GL_TEXTURE23 = 34007; // 0x84d7 + field public static final int GL_TEXTURE24 = 34008; // 0x84d8 + field public static final int GL_TEXTURE25 = 34009; // 0x84d9 + field public static final int GL_TEXTURE26 = 34010; // 0x84da + field public static final int GL_TEXTURE27 = 34011; // 0x84db + field public static final int GL_TEXTURE28 = 34012; // 0x84dc + field public static final int GL_TEXTURE29 = 34013; // 0x84dd + field public static final int GL_TEXTURE3 = 33987; // 0x84c3 + field public static final int GL_TEXTURE30 = 34014; // 0x84de + field public static final int GL_TEXTURE31 = 34015; // 0x84df + field public static final int GL_TEXTURE4 = 33988; // 0x84c4 + field public static final int GL_TEXTURE5 = 33989; // 0x84c5 + field public static final int GL_TEXTURE6 = 33990; // 0x84c6 + field public static final int GL_TEXTURE7 = 33991; // 0x84c7 + field public static final int GL_TEXTURE8 = 33992; // 0x84c8 + field public static final int GL_TEXTURE9 = 33993; // 0x84c9 + field public static final int GL_TEXTURE_2D = 3553; // 0xde1 + field public static final int GL_TEXTURE_COORD_ARRAY = 32888; // 0x8078 + field public static final int GL_TEXTURE_ENV = 8960; // 0x2300 + field public static final int GL_TEXTURE_ENV_COLOR = 8705; // 0x2201 + field public static final int GL_TEXTURE_ENV_MODE = 8704; // 0x2200 + field public static final int GL_TEXTURE_MAG_FILTER = 10240; // 0x2800 + field public static final int GL_TEXTURE_MIN_FILTER = 10241; // 0x2801 + field public static final int GL_TEXTURE_WRAP_S = 10242; // 0x2802 + field public static final int GL_TEXTURE_WRAP_T = 10243; // 0x2803 + field public static final int GL_TRIANGLES = 4; // 0x4 + field public static final int GL_TRIANGLE_FAN = 6; // 0x6 + field public static final int GL_TRIANGLE_STRIP = 5; // 0x5 + field public static final int GL_TRUE = 1; // 0x1 + field public static final int GL_UNPACK_ALIGNMENT = 3317; // 0xcf5 + field public static final int GL_UNSIGNED_BYTE = 5121; // 0x1401 + field public static final int GL_UNSIGNED_SHORT = 5123; // 0x1403 + field public static final int GL_UNSIGNED_SHORT_4_4_4_4 = 32819; // 0x8033 + field public static final int GL_UNSIGNED_SHORT_5_5_5_1 = 32820; // 0x8034 + field public static final int GL_UNSIGNED_SHORT_5_6_5 = 33635; // 0x8363 + field public static final int GL_VENDOR = 7936; // 0x1f00 + field public static final int GL_VERSION = 7938; // 0x1f02 + field public static final int GL_VERTEX_ARRAY = 32884; // 0x8074 + field public static final int GL_XOR = 5382; // 0x1506 + field public static final int GL_ZERO = 0; // 0x0 + } + + public abstract interface GL10Ext implements javax.microedition.khronos.opengles.GL { + method public abstract int glQueryMatrixxOES(int[], int, int[], int); + method public abstract int glQueryMatrixxOES(java.nio.IntBuffer, java.nio.IntBuffer); + } + + public abstract interface GL11 implements javax.microedition.khronos.opengles.GL10 { + method public abstract void glBindBuffer(int, int); + method public abstract void glBufferData(int, int, java.nio.Buffer, int); + method public abstract void glBufferSubData(int, int, int, java.nio.Buffer); + method public abstract void glClipPlanef(int, float[], int); + method public abstract void glClipPlanef(int, java.nio.FloatBuffer); + method public abstract void glClipPlanex(int, int[], int); + method public abstract void glClipPlanex(int, java.nio.IntBuffer); + method public abstract void glColor4ub(byte, byte, byte, byte); + method public abstract void glColorPointer(int, int, int, int); + method public abstract void glDeleteBuffers(int, int[], int); + method public abstract void glDeleteBuffers(int, java.nio.IntBuffer); + method public abstract void glDrawElements(int, int, int, int); + method public abstract void glGenBuffers(int, int[], int); + method public abstract void glGenBuffers(int, java.nio.IntBuffer); + method public abstract void glGetBooleanv(int, boolean[], int); + method public abstract void glGetBooleanv(int, java.nio.IntBuffer); + method public abstract void glGetBufferParameteriv(int, int, int[], int); + method public abstract void glGetBufferParameteriv(int, int, java.nio.IntBuffer); + method public abstract void glGetClipPlanef(int, float[], int); + method public abstract void glGetClipPlanef(int, java.nio.FloatBuffer); + method public abstract void glGetClipPlanex(int, int[], int); + method public abstract void glGetClipPlanex(int, java.nio.IntBuffer); + method public abstract void glGetFixedv(int, int[], int); + method public abstract void glGetFixedv(int, java.nio.IntBuffer); + method public abstract void glGetFloatv(int, float[], int); + method public abstract void glGetFloatv(int, java.nio.FloatBuffer); + method public abstract void glGetLightfv(int, int, float[], int); + method public abstract void glGetLightfv(int, int, java.nio.FloatBuffer); + method public abstract void glGetLightxv(int, int, int[], int); + method public abstract void glGetLightxv(int, int, java.nio.IntBuffer); + method public abstract void glGetMaterialfv(int, int, float[], int); + method public abstract void glGetMaterialfv(int, int, java.nio.FloatBuffer); + method public abstract void glGetMaterialxv(int, int, int[], int); + method public abstract void glGetMaterialxv(int, int, java.nio.IntBuffer); + method public abstract void glGetPointerv(int, java.nio.Buffer[]); + method public abstract void glGetTexEnviv(int, int, int[], int); + method public abstract void glGetTexEnviv(int, int, java.nio.IntBuffer); + method public abstract void glGetTexEnvxv(int, int, int[], int); + method public abstract void glGetTexEnvxv(int, int, java.nio.IntBuffer); + method public abstract void glGetTexParameterfv(int, int, float[], int); + method public abstract void glGetTexParameterfv(int, int, java.nio.FloatBuffer); + method public abstract void glGetTexParameteriv(int, int, int[], int); + method public abstract void glGetTexParameteriv(int, int, java.nio.IntBuffer); + method public abstract void glGetTexParameterxv(int, int, int[], int); + method public abstract void glGetTexParameterxv(int, int, java.nio.IntBuffer); + method public abstract boolean glIsBuffer(int); + method public abstract boolean glIsEnabled(int); + method public abstract boolean glIsTexture(int); + method public abstract void glNormalPointer(int, int, int); + method public abstract void glPointParameterf(int, float); + method public abstract void glPointParameterfv(int, float[], int); + method public abstract void glPointParameterfv(int, java.nio.FloatBuffer); + method public abstract void glPointParameterx(int, int); + method public abstract void glPointParameterxv(int, int[], int); + method public abstract void glPointParameterxv(int, java.nio.IntBuffer); + method public abstract void glPointSizePointerOES(int, int, java.nio.Buffer); + method public abstract void glTexCoordPointer(int, int, int, int); + method public abstract void glTexEnvi(int, int, int); + method public abstract void glTexEnviv(int, int, int[], int); + method public abstract void glTexEnviv(int, int, java.nio.IntBuffer); + method public abstract void glTexParameterfv(int, int, float[], int); + method public abstract void glTexParameterfv(int, int, java.nio.FloatBuffer); + method public abstract void glTexParameteri(int, int, int); + method public abstract void glTexParameteriv(int, int, int[], int); + method public abstract void glTexParameteriv(int, int, java.nio.IntBuffer); + method public abstract void glTexParameterxv(int, int, int[], int); + method public abstract void glTexParameterxv(int, int, java.nio.IntBuffer); + method public abstract void glVertexPointer(int, int, int, int); + field public static final int GL_ACTIVE_TEXTURE = 34016; // 0x84e0 + field public static final int GL_ADD_SIGNED = 34164; // 0x8574 + field public static final int GL_ALPHA_SCALE = 3356; // 0xd1c + field public static final int GL_ALPHA_TEST_FUNC = 3009; // 0xbc1 + field public static final int GL_ALPHA_TEST_REF = 3010; // 0xbc2 + field public static final int GL_ARRAY_BUFFER = 34962; // 0x8892 + field public static final int GL_ARRAY_BUFFER_BINDING = 34964; // 0x8894 + field public static final int GL_BLEND_DST = 3040; // 0xbe0 + field public static final int GL_BLEND_SRC = 3041; // 0xbe1 + field public static final int GL_BUFFER_ACCESS = 35003; // 0x88bb + field public static final int GL_BUFFER_SIZE = 34660; // 0x8764 + field public static final int GL_BUFFER_USAGE = 34661; // 0x8765 + field public static final int GL_CLIENT_ACTIVE_TEXTURE = 34017; // 0x84e1 + field public static final int GL_CLIP_PLANE0 = 12288; // 0x3000 + field public static final int GL_CLIP_PLANE1 = 12289; // 0x3001 + field public static final int GL_CLIP_PLANE2 = 12290; // 0x3002 + field public static final int GL_CLIP_PLANE3 = 12291; // 0x3003 + field public static final int GL_CLIP_PLANE4 = 12292; // 0x3004 + field public static final int GL_CLIP_PLANE5 = 12293; // 0x3005 + field public static final int GL_COLOR_ARRAY_BUFFER_BINDING = 34968; // 0x8898 + field public static final int GL_COLOR_ARRAY_POINTER = 32912; // 0x8090 + field public static final int GL_COLOR_ARRAY_SIZE = 32897; // 0x8081 + field public static final int GL_COLOR_ARRAY_STRIDE = 32899; // 0x8083 + field public static final int GL_COLOR_ARRAY_TYPE = 32898; // 0x8082 + field public static final int GL_COLOR_CLEAR_VALUE = 3106; // 0xc22 + field public static final int GL_COLOR_WRITEMASK = 3107; // 0xc23 + field public static final int GL_COMBINE = 34160; // 0x8570 + field public static final int GL_COMBINE_ALPHA = 34162; // 0x8572 + field public static final int GL_COMBINE_RGB = 34161; // 0x8571 + field public static final int GL_CONSTANT = 34166; // 0x8576 + field public static final int GL_COORD_REPLACE_OES = 34914; // 0x8862 + field public static final int GL_CULL_FACE_MODE = 2885; // 0xb45 + field public static final int GL_CURRENT_COLOR = 2816; // 0xb00 + field public static final int GL_CURRENT_NORMAL = 2818; // 0xb02 + field public static final int GL_CURRENT_TEXTURE_COORDS = 2819; // 0xb03 + field public static final int GL_DEPTH_CLEAR_VALUE = 2931; // 0xb73 + field public static final int GL_DEPTH_FUNC = 2932; // 0xb74 + field public static final int GL_DEPTH_RANGE = 2928; // 0xb70 + field public static final int GL_DEPTH_WRITEMASK = 2930; // 0xb72 + field public static final int GL_DOT3_RGB = 34478; // 0x86ae + field public static final int GL_DOT3_RGBA = 34479; // 0x86af + field public static final int GL_DYNAMIC_DRAW = 35048; // 0x88e8 + field public static final int GL_ELEMENT_ARRAY_BUFFER = 34963; // 0x8893 + field public static final int GL_ELEMENT_ARRAY_BUFFER_BINDING = 34965; // 0x8895 + field public static final int GL_FRONT_FACE = 2886; // 0xb46 + field public static final int GL_GENERATE_MIPMAP = 33169; // 0x8191 + field public static final int GL_GENERATE_MIPMAP_HINT = 33170; // 0x8192 + field public static final int GL_INTERPOLATE = 34165; // 0x8575 + field public static final int GL_LINE_WIDTH = 2849; // 0xb21 + field public static final int GL_LOGIC_OP_MODE = 3056; // 0xbf0 + field public static final int GL_MATRIX_MODE = 2976; // 0xba0 + field public static final int GL_MAX_CLIP_PLANES = 3378; // 0xd32 + field public static final int GL_MODELVIEW_MATRIX = 2982; // 0xba6 + field public static final int GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES = 35213; // 0x898d + field public static final int GL_MODELVIEW_STACK_DEPTH = 2979; // 0xba3 + field public static final int GL_NORMAL_ARRAY_BUFFER_BINDING = 34967; // 0x8897 + field public static final int GL_NORMAL_ARRAY_POINTER = 32911; // 0x808f + field public static final int GL_NORMAL_ARRAY_STRIDE = 32895; // 0x807f + field public static final int GL_NORMAL_ARRAY_TYPE = 32894; // 0x807e + field public static final int GL_OPERAND0_ALPHA = 34200; // 0x8598 + field public static final int GL_OPERAND0_RGB = 34192; // 0x8590 + field public static final int GL_OPERAND1_ALPHA = 34201; // 0x8599 + field public static final int GL_OPERAND1_RGB = 34193; // 0x8591 + field public static final int GL_OPERAND2_ALPHA = 34202; // 0x859a + field public static final int GL_OPERAND2_RGB = 34194; // 0x8592 + field public static final int GL_POINT_DISTANCE_ATTENUATION = 33065; // 0x8129 + field public static final int GL_POINT_FADE_THRESHOLD_SIZE = 33064; // 0x8128 + field public static final int GL_POINT_SIZE = 2833; // 0xb11 + field public static final int GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES = 35743; // 0x8b9f + field public static final int GL_POINT_SIZE_ARRAY_OES = 35740; // 0x8b9c + field public static final int GL_POINT_SIZE_ARRAY_POINTER_OES = 35212; // 0x898c + field public static final int GL_POINT_SIZE_ARRAY_STRIDE_OES = 35211; // 0x898b + field public static final int GL_POINT_SIZE_ARRAY_TYPE_OES = 35210; // 0x898a + field public static final int GL_POINT_SIZE_MAX = 33063; // 0x8127 + field public static final int GL_POINT_SIZE_MIN = 33062; // 0x8126 + field public static final int GL_POINT_SPRITE_OES = 34913; // 0x8861 + field public static final int GL_POLYGON_OFFSET_FACTOR = 32824; // 0x8038 + field public static final int GL_POLYGON_OFFSET_UNITS = 10752; // 0x2a00 + field public static final int GL_PREVIOUS = 34168; // 0x8578 + field public static final int GL_PRIMARY_COLOR = 34167; // 0x8577 + field public static final int GL_PROJECTION_MATRIX = 2983; // 0xba7 + field public static final int GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES = 35214; // 0x898e + field public static final int GL_PROJECTION_STACK_DEPTH = 2980; // 0xba4 + field public static final int GL_RGB_SCALE = 34163; // 0x8573 + field public static final int GL_SAMPLES = 32937; // 0x80a9 + field public static final int GL_SAMPLE_BUFFERS = 32936; // 0x80a8 + field public static final int GL_SAMPLE_COVERAGE_INVERT = 32939; // 0x80ab + field public static final int GL_SAMPLE_COVERAGE_VALUE = 32938; // 0x80aa + field public static final int GL_SCISSOR_BOX = 3088; // 0xc10 + field public static final int GL_SHADE_MODEL = 2900; // 0xb54 + field public static final int GL_SRC0_ALPHA = 34184; // 0x8588 + field public static final int GL_SRC0_RGB = 34176; // 0x8580 + field public static final int GL_SRC1_ALPHA = 34185; // 0x8589 + field public static final int GL_SRC1_RGB = 34177; // 0x8581 + field public static final int GL_SRC2_ALPHA = 34186; // 0x858a + field public static final int GL_SRC2_RGB = 34178; // 0x8582 + field public static final int GL_STATIC_DRAW = 35044; // 0x88e4 + field public static final int GL_STENCIL_CLEAR_VALUE = 2961; // 0xb91 + field public static final int GL_STENCIL_FAIL = 2964; // 0xb94 + field public static final int GL_STENCIL_FUNC = 2962; // 0xb92 + field public static final int GL_STENCIL_PASS_DEPTH_FAIL = 2965; // 0xb95 + field public static final int GL_STENCIL_PASS_DEPTH_PASS = 2966; // 0xb96 + field public static final int GL_STENCIL_REF = 2967; // 0xb97 + field public static final int GL_STENCIL_VALUE_MASK = 2963; // 0xb93 + field public static final int GL_STENCIL_WRITEMASK = 2968; // 0xb98 + field public static final int GL_SUBTRACT = 34023; // 0x84e7 + field public static final int GL_TEXTURE_BINDING_2D = 32873; // 0x8069 + field public static final int GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING = 34970; // 0x889a + field public static final int GL_TEXTURE_COORD_ARRAY_POINTER = 32914; // 0x8092 + field public static final int GL_TEXTURE_COORD_ARRAY_SIZE = 32904; // 0x8088 + field public static final int GL_TEXTURE_COORD_ARRAY_STRIDE = 32906; // 0x808a + field public static final int GL_TEXTURE_COORD_ARRAY_TYPE = 32905; // 0x8089 + field public static final int GL_TEXTURE_MATRIX = 2984; // 0xba8 + field public static final int GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES = 35215; // 0x898f + field public static final int GL_TEXTURE_STACK_DEPTH = 2981; // 0xba5 + field public static final int GL_VERTEX_ARRAY_BUFFER_BINDING = 34966; // 0x8896 + field public static final int GL_VERTEX_ARRAY_POINTER = 32910; // 0x808e + field public static final int GL_VERTEX_ARRAY_SIZE = 32890; // 0x807a + field public static final int GL_VERTEX_ARRAY_STRIDE = 32892; // 0x807c + field public static final int GL_VERTEX_ARRAY_TYPE = 32891; // 0x807b + field public static final int GL_VIEWPORT = 2978; // 0xba2 + field public static final int GL_WRITE_ONLY = 35001; // 0x88b9 + } + + public abstract interface GL11Ext implements javax.microedition.khronos.opengles.GL { + method public abstract void glCurrentPaletteMatrixOES(int); + method public abstract void glDrawTexfOES(float, float, float, float, float); + method public abstract void glDrawTexfvOES(float[], int); + method public abstract void glDrawTexfvOES(java.nio.FloatBuffer); + method public abstract void glDrawTexiOES(int, int, int, int, int); + method public abstract void glDrawTexivOES(int[], int); + method public abstract void glDrawTexivOES(java.nio.IntBuffer); + method public abstract void glDrawTexsOES(short, short, short, short, short); + method public abstract void glDrawTexsvOES(short[], int); + method public abstract void glDrawTexsvOES(java.nio.ShortBuffer); + method public abstract void glDrawTexxOES(int, int, int, int, int); + method public abstract void glDrawTexxvOES(int[], int); + method public abstract void glDrawTexxvOES(java.nio.IntBuffer); + method public abstract void glEnable(int); + method public abstract void glEnableClientState(int); + method public abstract void glLoadPaletteFromModelViewMatrixOES(); + method public abstract void glMatrixIndexPointerOES(int, int, int, java.nio.Buffer); + method public abstract void glMatrixIndexPointerOES(int, int, int, int); + method public abstract void glTexParameterfv(int, int, float[], int); + method public abstract void glWeightPointerOES(int, int, int, java.nio.Buffer); + method public abstract void glWeightPointerOES(int, int, int, int); + field public static final int GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES = 35742; // 0x8b9e + field public static final int GL_MATRIX_INDEX_ARRAY_OES = 34884; // 0x8844 + field public static final int GL_MATRIX_INDEX_ARRAY_POINTER_OES = 34889; // 0x8849 + field public static final int GL_MATRIX_INDEX_ARRAY_SIZE_OES = 34886; // 0x8846 + field public static final int GL_MATRIX_INDEX_ARRAY_STRIDE_OES = 34888; // 0x8848 + field public static final int GL_MATRIX_INDEX_ARRAY_TYPE_OES = 34887; // 0x8847 + field public static final int GL_MATRIX_PALETTE_OES = 34880; // 0x8840 + field public static final int GL_MAX_PALETTE_MATRICES_OES = 34882; // 0x8842 + field public static final int GL_MAX_VERTEX_UNITS_OES = 34468; // 0x86a4 + field public static final int GL_TEXTURE_CROP_RECT_OES = 35741; // 0x8b9d + field public static final int GL_WEIGHT_ARRAY_BUFFER_BINDING_OES = 34974; // 0x889e + field public static final int GL_WEIGHT_ARRAY_OES = 34477; // 0x86ad + field public static final int GL_WEIGHT_ARRAY_POINTER_OES = 34476; // 0x86ac + field public static final int GL_WEIGHT_ARRAY_SIZE_OES = 34475; // 0x86ab + field public static final int GL_WEIGHT_ARRAY_STRIDE_OES = 34474; // 0x86aa + field public static final int GL_WEIGHT_ARRAY_TYPE_OES = 34473; // 0x86a9 + } + + public abstract interface GL11ExtensionPack implements javax.microedition.khronos.opengles.GL { + method public abstract void glBindFramebufferOES(int, int); + method public abstract void glBindRenderbufferOES(int, int); + method public abstract void glBindTexture(int, int); + method public abstract void glBlendEquation(int); + method public abstract void glBlendEquationSeparate(int, int); + method public abstract void glBlendFuncSeparate(int, int, int, int); + method public abstract int glCheckFramebufferStatusOES(int); + method public abstract void glCompressedTexImage2D(int, int, int, int, int, int, int, java.nio.Buffer); + method public abstract void glCopyTexImage2D(int, int, int, int, int, int, int, int); + method public abstract void glDeleteFramebuffersOES(int, int[], int); + method public abstract void glDeleteFramebuffersOES(int, java.nio.IntBuffer); + method public abstract void glDeleteRenderbuffersOES(int, int[], int); + method public abstract void glDeleteRenderbuffersOES(int, java.nio.IntBuffer); + method public abstract void glEnable(int); + method public abstract void glFramebufferRenderbufferOES(int, int, int, int); + method public abstract void glFramebufferTexture2DOES(int, int, int, int, int); + method public abstract void glGenFramebuffersOES(int, int[], int); + method public abstract void glGenFramebuffersOES(int, java.nio.IntBuffer); + method public abstract void glGenRenderbuffersOES(int, int[], int); + method public abstract void glGenRenderbuffersOES(int, java.nio.IntBuffer); + method public abstract void glGenerateMipmapOES(int); + method public abstract void glGetFramebufferAttachmentParameterivOES(int, int, int, int[], int); + method public abstract void glGetFramebufferAttachmentParameterivOES(int, int, int, java.nio.IntBuffer); + method public abstract void glGetIntegerv(int, int[], int); + method public abstract void glGetIntegerv(int, java.nio.IntBuffer); + method public abstract void glGetRenderbufferParameterivOES(int, int, int[], int); + method public abstract void glGetRenderbufferParameterivOES(int, int, java.nio.IntBuffer); + method public abstract void glGetTexGenfv(int, int, float[], int); + method public abstract void glGetTexGenfv(int, int, java.nio.FloatBuffer); + method public abstract void glGetTexGeniv(int, int, int[], int); + method public abstract void glGetTexGeniv(int, int, java.nio.IntBuffer); + method public abstract void glGetTexGenxv(int, int, int[], int); + method public abstract void glGetTexGenxv(int, int, java.nio.IntBuffer); + method public abstract boolean glIsFramebufferOES(int); + method public abstract boolean glIsRenderbufferOES(int); + method public abstract void glRenderbufferStorageOES(int, int, int, int); + method public abstract void glStencilOp(int, int, int); + method public abstract void glTexEnvf(int, int, float); + method public abstract void glTexEnvfv(int, int, float[], int); + method public abstract void glTexEnvfv(int, int, java.nio.FloatBuffer); + method public abstract void glTexEnvx(int, int, int); + method public abstract void glTexEnvxv(int, int, int[], int); + method public abstract void glTexEnvxv(int, int, java.nio.IntBuffer); + method public abstract void glTexGenf(int, int, float); + method public abstract void glTexGenfv(int, int, float[], int); + method public abstract void glTexGenfv(int, int, java.nio.FloatBuffer); + method public abstract void glTexGeni(int, int, int); + method public abstract void glTexGeniv(int, int, int[], int); + method public abstract void glTexGeniv(int, int, java.nio.IntBuffer); + method public abstract void glTexGenx(int, int, int); + method public abstract void glTexGenxv(int, int, int[], int); + method public abstract void glTexGenxv(int, int, java.nio.IntBuffer); + method public abstract void glTexParameterf(int, int, float); + field public static final int GL_BLEND_DST_ALPHA = 32970; // 0x80ca + field public static final int GL_BLEND_DST_RGB = 32968; // 0x80c8 + field public static final int GL_BLEND_EQUATION = 32777; // 0x8009 + field public static final int GL_BLEND_EQUATION_ALPHA = 34877; // 0x883d + field public static final int GL_BLEND_EQUATION_RGB = 32777; // 0x8009 + field public static final int GL_BLEND_SRC_ALPHA = 32971; // 0x80cb + field public static final int GL_BLEND_SRC_RGB = 32969; // 0x80c9 + field public static final int GL_COLOR_ATTACHMENT0_OES = 36064; // 0x8ce0 + field public static final int GL_COLOR_ATTACHMENT10_OES = 36074; // 0x8cea + field public static final int GL_COLOR_ATTACHMENT11_OES = 36075; // 0x8ceb + field public static final int GL_COLOR_ATTACHMENT12_OES = 36076; // 0x8cec + field public static final int GL_COLOR_ATTACHMENT13_OES = 36077; // 0x8ced + field public static final int GL_COLOR_ATTACHMENT14_OES = 36078; // 0x8cee + field public static final int GL_COLOR_ATTACHMENT15_OES = 36079; // 0x8cef + field public static final int GL_COLOR_ATTACHMENT1_OES = 36065; // 0x8ce1 + field public static final int GL_COLOR_ATTACHMENT2_OES = 36066; // 0x8ce2 + field public static final int GL_COLOR_ATTACHMENT3_OES = 36067; // 0x8ce3 + field public static final int GL_COLOR_ATTACHMENT4_OES = 36068; // 0x8ce4 + field public static final int GL_COLOR_ATTACHMENT5_OES = 36069; // 0x8ce5 + field public static final int GL_COLOR_ATTACHMENT6_OES = 36070; // 0x8ce6 + field public static final int GL_COLOR_ATTACHMENT7_OES = 36071; // 0x8ce7 + field public static final int GL_COLOR_ATTACHMENT8_OES = 36072; // 0x8ce8 + field public static final int GL_COLOR_ATTACHMENT9_OES = 36073; // 0x8ce9 + field public static final int GL_DECR_WRAP = 34056; // 0x8508 + field public static final int GL_DEPTH_ATTACHMENT_OES = 36096; // 0x8d00 + field public static final int GL_DEPTH_COMPONENT = 6402; // 0x1902 + field public static final int GL_DEPTH_COMPONENT16 = 33189; // 0x81a5 + field public static final int GL_DEPTH_COMPONENT24 = 33190; // 0x81a6 + field public static final int GL_DEPTH_COMPONENT32 = 33191; // 0x81a7 + field public static final int GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_OES = 36049; // 0x8cd1 + field public static final int GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_OES = 36048; // 0x8cd0 + field public static final int GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_OES = 36051; // 0x8cd3 + field public static final int GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_OES = 36050; // 0x8cd2 + field public static final int GL_FRAMEBUFFER_BINDING_OES = 36006; // 0x8ca6 + field public static final int GL_FRAMEBUFFER_COMPLETE_OES = 36053; // 0x8cd5 + field public static final int GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES = 36054; // 0x8cd6 + field public static final int GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_OES = 36057; // 0x8cd9 + field public static final int GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_OES = 36059; // 0x8cdb + field public static final int GL_FRAMEBUFFER_INCOMPLETE_FORMATS_OES = 36058; // 0x8cda + field public static final int GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_OES = 36055; // 0x8cd7 + field public static final int GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_OES = 36060; // 0x8cdc + field public static final int GL_FRAMEBUFFER_OES = 36160; // 0x8d40 + field public static final int GL_FRAMEBUFFER_UNSUPPORTED_OES = 36061; // 0x8cdd + field public static final int GL_FUNC_ADD = 32774; // 0x8006 + field public static final int GL_FUNC_REVERSE_SUBTRACT = 32779; // 0x800b + field public static final int GL_FUNC_SUBTRACT = 32778; // 0x800a + field public static final int GL_INCR_WRAP = 34055; // 0x8507 + field public static final int GL_INVALID_FRAMEBUFFER_OPERATION_OES = 1286; // 0x506 + field public static final int GL_MAX_COLOR_ATTACHMENTS_OES = 36063; // 0x8cdf + field public static final int GL_MAX_CUBE_MAP_TEXTURE_SIZE = 34076; // 0x851c + field public static final int GL_MAX_RENDERBUFFER_SIZE_OES = 34024; // 0x84e8 + field public static final int GL_MIRRORED_REPEAT = 33648; // 0x8370 + field public static final int GL_NORMAL_MAP = 34065; // 0x8511 + field public static final int GL_REFLECTION_MAP = 34066; // 0x8512 + field public static final int GL_RENDERBUFFER_ALPHA_SIZE_OES = 36179; // 0x8d53 + field public static final int GL_RENDERBUFFER_BINDING_OES = 36007; // 0x8ca7 + field public static final int GL_RENDERBUFFER_BLUE_SIZE_OES = 36178; // 0x8d52 + field public static final int GL_RENDERBUFFER_DEPTH_SIZE_OES = 36180; // 0x8d54 + field public static final int GL_RENDERBUFFER_GREEN_SIZE_OES = 36177; // 0x8d51 + field public static final int GL_RENDERBUFFER_HEIGHT_OES = 36163; // 0x8d43 + field public static final int GL_RENDERBUFFER_INTERNAL_FORMAT_OES = 36164; // 0x8d44 + field public static final int GL_RENDERBUFFER_OES = 36161; // 0x8d41 + field public static final int GL_RENDERBUFFER_RED_SIZE_OES = 36176; // 0x8d50 + field public static final int GL_RENDERBUFFER_STENCIL_SIZE_OES = 36181; // 0x8d55 + field public static final int GL_RENDERBUFFER_WIDTH_OES = 36162; // 0x8d42 + field public static final int GL_RGB565_OES = 36194; // 0x8d62 + field public static final int GL_RGB5_A1 = 32855; // 0x8057 + field public static final int GL_RGB8 = 32849; // 0x8051 + field public static final int GL_RGBA4 = 32854; // 0x8056 + field public static final int GL_RGBA8 = 32856; // 0x8058 + field public static final int GL_STENCIL_ATTACHMENT_OES = 36128; // 0x8d20 + field public static final int GL_STENCIL_INDEX = 6401; // 0x1901 + field public static final int GL_STENCIL_INDEX1_OES = 36166; // 0x8d46 + field public static final int GL_STENCIL_INDEX4_OES = 36167; // 0x8d47 + field public static final int GL_STENCIL_INDEX8_OES = 36168; // 0x8d48 + field public static final int GL_STR = -1; // 0xffffffff + field public static final int GL_TEXTURE_BINDING_CUBE_MAP = 34068; // 0x8514 + field public static final int GL_TEXTURE_CUBE_MAP = 34067; // 0x8513 + field public static final int GL_TEXTURE_CUBE_MAP_NEGATIVE_X = 34070; // 0x8516 + field public static final int GL_TEXTURE_CUBE_MAP_NEGATIVE_Y = 34072; // 0x8518 + field public static final int GL_TEXTURE_CUBE_MAP_NEGATIVE_Z = 34074; // 0x851a + field public static final int GL_TEXTURE_CUBE_MAP_POSITIVE_X = 34069; // 0x8515 + field public static final int GL_TEXTURE_CUBE_MAP_POSITIVE_Y = 34071; // 0x8517 + field public static final int GL_TEXTURE_CUBE_MAP_POSITIVE_Z = 34073; // 0x8519 + field public static final int GL_TEXTURE_GEN_MODE = 9472; // 0x2500 + field public static final int GL_TEXTURE_GEN_STR = 36192; // 0x8d60 + } + +} + +package javax.net { + + public abstract class ServerSocketFactory { + ctor protected ServerSocketFactory(); + method public java.net.ServerSocket createServerSocket() throws java.io.IOException; + method public abstract java.net.ServerSocket createServerSocket(int) throws java.io.IOException; + method public abstract java.net.ServerSocket createServerSocket(int, int) throws java.io.IOException; + method public abstract java.net.ServerSocket createServerSocket(int, int, java.net.InetAddress) throws java.io.IOException; + method public static synchronized javax.net.ServerSocketFactory getDefault(); + } + + public abstract class SocketFactory { + ctor protected SocketFactory(); + method public java.net.Socket createSocket() throws java.io.IOException; + method public abstract java.net.Socket createSocket(java.lang.String, int) throws java.io.IOException, java.net.UnknownHostException; + method public abstract java.net.Socket createSocket(java.lang.String, int, java.net.InetAddress, int) throws java.io.IOException, java.net.UnknownHostException; + method public abstract java.net.Socket createSocket(java.net.InetAddress, int) throws java.io.IOException; + method public abstract java.net.Socket createSocket(java.net.InetAddress, int, java.net.InetAddress, int) throws java.io.IOException; + method public static synchronized javax.net.SocketFactory getDefault(); + } + +} + +package javax.net.ssl { + + public class CertPathTrustManagerParameters implements javax.net.ssl.ManagerFactoryParameters { + ctor public CertPathTrustManagerParameters(java.security.cert.CertPathParameters); + method public java.security.cert.CertPathParameters getParameters(); + } + + public class HandshakeCompletedEvent extends java.util.EventObject { + ctor public HandshakeCompletedEvent(javax.net.ssl.SSLSocket, javax.net.ssl.SSLSession); + method public java.lang.String getCipherSuite(); + method public java.security.cert.Certificate[] getLocalCertificates(); + method public java.security.Principal getLocalPrincipal(); + method public javax.security.cert.X509Certificate[] getPeerCertificateChain() throws javax.net.ssl.SSLPeerUnverifiedException; + method public java.security.cert.Certificate[] getPeerCertificates() throws javax.net.ssl.SSLPeerUnverifiedException; + method public java.security.Principal getPeerPrincipal() throws javax.net.ssl.SSLPeerUnverifiedException; + method public javax.net.ssl.SSLSession getSession(); + method public javax.net.ssl.SSLSocket getSocket(); + } + + public abstract interface HandshakeCompletedListener implements java.util.EventListener { + method public abstract void handshakeCompleted(javax.net.ssl.HandshakeCompletedEvent); + } + + public abstract interface HostnameVerifier { + method public abstract boolean verify(java.lang.String, javax.net.ssl.SSLSession); + } + + public abstract class HttpsURLConnection extends java.net.HttpURLConnection { + ctor protected HttpsURLConnection(java.net.URL); + method public abstract java.lang.String getCipherSuite(); + method public static javax.net.ssl.HostnameVerifier getDefaultHostnameVerifier(); + method public static javax.net.ssl.SSLSocketFactory getDefaultSSLSocketFactory(); + method public javax.net.ssl.HostnameVerifier getHostnameVerifier(); + method public abstract java.security.cert.Certificate[] getLocalCertificates(); + method public java.security.Principal getLocalPrincipal(); + method public java.security.Principal getPeerPrincipal() throws javax.net.ssl.SSLPeerUnverifiedException; + method public javax.net.ssl.SSLSocketFactory getSSLSocketFactory(); + method public abstract java.security.cert.Certificate[] getServerCertificates() throws javax.net.ssl.SSLPeerUnverifiedException; + method public static void setDefaultHostnameVerifier(javax.net.ssl.HostnameVerifier); + method public static void setDefaultSSLSocketFactory(javax.net.ssl.SSLSocketFactory); + method public void setHostnameVerifier(javax.net.ssl.HostnameVerifier); + method public void setSSLSocketFactory(javax.net.ssl.SSLSocketFactory); + field protected javax.net.ssl.HostnameVerifier hostnameVerifier; + } + + public abstract interface KeyManager { + } + + public class KeyManagerFactory { + ctor protected KeyManagerFactory(javax.net.ssl.KeyManagerFactorySpi, java.security.Provider, java.lang.String); + method public final java.lang.String getAlgorithm(); + method public static final java.lang.String getDefaultAlgorithm(); + method public static final javax.net.ssl.KeyManagerFactory getInstance(java.lang.String) throws java.security.NoSuchAlgorithmException; + method public static final javax.net.ssl.KeyManagerFactory getInstance(java.lang.String, java.lang.String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException; + method public static final javax.net.ssl.KeyManagerFactory getInstance(java.lang.String, java.security.Provider) throws java.security.NoSuchAlgorithmException; + method public final javax.net.ssl.KeyManager[] getKeyManagers(); + method public final java.security.Provider getProvider(); + method public final void init(java.security.KeyStore, char[]) throws java.security.KeyStoreException, java.security.NoSuchAlgorithmException, java.security.UnrecoverableKeyException; + method public final void init(javax.net.ssl.ManagerFactoryParameters) throws java.security.InvalidAlgorithmParameterException; + } + + public abstract class KeyManagerFactorySpi { + ctor public KeyManagerFactorySpi(); + method protected abstract javax.net.ssl.KeyManager[] engineGetKeyManagers(); + method protected abstract void engineInit(java.security.KeyStore, char[]) throws java.security.KeyStoreException, java.security.NoSuchAlgorithmException, java.security.UnrecoverableKeyException; + method protected abstract void engineInit(javax.net.ssl.ManagerFactoryParameters) throws java.security.InvalidAlgorithmParameterException; + } + + public class KeyStoreBuilderParameters implements javax.net.ssl.ManagerFactoryParameters { + ctor public KeyStoreBuilderParameters(java.security.KeyStore.Builder); + ctor public KeyStoreBuilderParameters(java.util.List); + method public java.util.List getParameters(); + } + + public abstract interface ManagerFactoryParameters { + } + + public class SSLContext { + ctor protected SSLContext(javax.net.ssl.SSLContextSpi, java.security.Provider, java.lang.String); + method public final javax.net.ssl.SSLEngine createSSLEngine(); + method public final javax.net.ssl.SSLEngine createSSLEngine(java.lang.String, int); + method public final javax.net.ssl.SSLSessionContext getClientSessionContext(); + method public static javax.net.ssl.SSLContext getDefault() throws java.security.NoSuchAlgorithmException; + method public final javax.net.ssl.SSLParameters getDefaultSSLParameters(); + method public static javax.net.ssl.SSLContext getInstance(java.lang.String) throws java.security.NoSuchAlgorithmException; + method public static javax.net.ssl.SSLContext getInstance(java.lang.String, java.lang.String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException; + method public static javax.net.ssl.SSLContext getInstance(java.lang.String, java.security.Provider) throws java.security.NoSuchAlgorithmException; + method public final java.lang.String getProtocol(); + method public final java.security.Provider getProvider(); + method public final javax.net.ssl.SSLSessionContext getServerSessionContext(); + method public final javax.net.ssl.SSLServerSocketFactory getServerSocketFactory(); + method public final javax.net.ssl.SSLSocketFactory getSocketFactory(); + method public final javax.net.ssl.SSLParameters getSupportedSSLParameters(); + method public final void init(javax.net.ssl.KeyManager[], javax.net.ssl.TrustManager[], java.security.SecureRandom) throws java.security.KeyManagementException; + method public static void setDefault(javax.net.ssl.SSLContext); + } + + public abstract class SSLContextSpi { + ctor public SSLContextSpi(); + method protected abstract javax.net.ssl.SSLEngine engineCreateSSLEngine(java.lang.String, int); + method protected abstract javax.net.ssl.SSLEngine engineCreateSSLEngine(); + method protected abstract javax.net.ssl.SSLSessionContext engineGetClientSessionContext(); + method protected javax.net.ssl.SSLParameters engineGetDefaultSSLParameters(); + method protected abstract javax.net.ssl.SSLSessionContext engineGetServerSessionContext(); + method protected abstract javax.net.ssl.SSLServerSocketFactory engineGetServerSocketFactory(); + method protected abstract javax.net.ssl.SSLSocketFactory engineGetSocketFactory(); + method protected javax.net.ssl.SSLParameters engineGetSupportedSSLParameters(); + method protected abstract void engineInit(javax.net.ssl.KeyManager[], javax.net.ssl.TrustManager[], java.security.SecureRandom) throws java.security.KeyManagementException; + } + + public abstract class SSLEngine { + ctor protected SSLEngine(); + ctor protected SSLEngine(java.lang.String, int); + method public abstract void beginHandshake() throws javax.net.ssl.SSLException; + method public abstract void closeInbound() throws javax.net.ssl.SSLException; + method public abstract void closeOutbound(); + method public abstract java.lang.Runnable getDelegatedTask(); + method public abstract boolean getEnableSessionCreation(); + method public abstract java.lang.String[] getEnabledCipherSuites(); + method public abstract java.lang.String[] getEnabledProtocols(); + method public abstract javax.net.ssl.SSLEngineResult.HandshakeStatus getHandshakeStatus(); + method public abstract boolean getNeedClientAuth(); + method public java.lang.String getPeerHost(); + method public int getPeerPort(); + method public javax.net.ssl.SSLParameters getSSLParameters(); + method public abstract javax.net.ssl.SSLSession getSession(); + method public abstract java.lang.String[] getSupportedCipherSuites(); + method public abstract java.lang.String[] getSupportedProtocols(); + method public abstract boolean getUseClientMode(); + method public abstract boolean getWantClientAuth(); + method public abstract boolean isInboundDone(); + method public abstract boolean isOutboundDone(); + method public abstract void setEnableSessionCreation(boolean); + method public abstract void setEnabledCipherSuites(java.lang.String[]); + method public abstract void setEnabledProtocols(java.lang.String[]); + method public abstract void setNeedClientAuth(boolean); + method public void setSSLParameters(javax.net.ssl.SSLParameters); + method public abstract void setUseClientMode(boolean); + method public abstract void setWantClientAuth(boolean); + method public abstract javax.net.ssl.SSLEngineResult unwrap(java.nio.ByteBuffer, java.nio.ByteBuffer[], int, int) throws javax.net.ssl.SSLException; + method public javax.net.ssl.SSLEngineResult unwrap(java.nio.ByteBuffer, java.nio.ByteBuffer) throws javax.net.ssl.SSLException; + method public javax.net.ssl.SSLEngineResult unwrap(java.nio.ByteBuffer, java.nio.ByteBuffer[]) throws javax.net.ssl.SSLException; + method public abstract javax.net.ssl.SSLEngineResult wrap(java.nio.ByteBuffer[], int, int, java.nio.ByteBuffer) throws javax.net.ssl.SSLException; + method public javax.net.ssl.SSLEngineResult wrap(java.nio.ByteBuffer[], java.nio.ByteBuffer) throws javax.net.ssl.SSLException; + method public javax.net.ssl.SSLEngineResult wrap(java.nio.ByteBuffer, java.nio.ByteBuffer) throws javax.net.ssl.SSLException; + } + + public class SSLEngineResult { + ctor public SSLEngineResult(javax.net.ssl.SSLEngineResult.Status, javax.net.ssl.SSLEngineResult.HandshakeStatus, int, int); + method public final int bytesConsumed(); + method public final int bytesProduced(); + method public final javax.net.ssl.SSLEngineResult.HandshakeStatus getHandshakeStatus(); + method public final javax.net.ssl.SSLEngineResult.Status getStatus(); + } + + public static final class SSLEngineResult.HandshakeStatus extends java.lang.Enum { + method public static javax.net.ssl.SSLEngineResult.HandshakeStatus valueOf(java.lang.String); + method public static final javax.net.ssl.SSLEngineResult.HandshakeStatus[] values(); + enum_constant public static final javax.net.ssl.SSLEngineResult.HandshakeStatus FINISHED; + enum_constant public static final javax.net.ssl.SSLEngineResult.HandshakeStatus NEED_TASK; + enum_constant public static final javax.net.ssl.SSLEngineResult.HandshakeStatus NEED_UNWRAP; + enum_constant public static final javax.net.ssl.SSLEngineResult.HandshakeStatus NEED_WRAP; + enum_constant public static final javax.net.ssl.SSLEngineResult.HandshakeStatus NOT_HANDSHAKING; + } + + public static final class SSLEngineResult.Status extends java.lang.Enum { + method public static javax.net.ssl.SSLEngineResult.Status valueOf(java.lang.String); + method public static final javax.net.ssl.SSLEngineResult.Status[] values(); + enum_constant public static final javax.net.ssl.SSLEngineResult.Status BUFFER_OVERFLOW; + enum_constant public static final javax.net.ssl.SSLEngineResult.Status BUFFER_UNDERFLOW; + enum_constant public static final javax.net.ssl.SSLEngineResult.Status CLOSED; + enum_constant public static final javax.net.ssl.SSLEngineResult.Status OK; + } + + public class SSLException extends java.io.IOException { + ctor public SSLException(java.lang.String); + ctor public SSLException(java.lang.String, java.lang.Throwable); + ctor public SSLException(java.lang.Throwable); + } + + public class SSLHandshakeException extends javax.net.ssl.SSLException { + ctor public SSLHandshakeException(java.lang.String); + } + + public class SSLKeyException extends javax.net.ssl.SSLException { + ctor public SSLKeyException(java.lang.String); + } + + public class SSLParameters { + ctor public SSLParameters(); + ctor public SSLParameters(java.lang.String[]); + ctor public SSLParameters(java.lang.String[], java.lang.String[]); + method public java.lang.String[] getCipherSuites(); + method public boolean getNeedClientAuth(); + method public java.lang.String[] getProtocols(); + method public boolean getWantClientAuth(); + method public void setCipherSuites(java.lang.String[]); + method public void setNeedClientAuth(boolean); + method public void setProtocols(java.lang.String[]); + method public void setWantClientAuth(boolean); + } + + public class SSLPeerUnverifiedException extends javax.net.ssl.SSLException { + ctor public SSLPeerUnverifiedException(java.lang.String); + } + + public final class SSLPermission extends java.security.BasicPermission { + ctor public SSLPermission(java.lang.String); + ctor public SSLPermission(java.lang.String, java.lang.String); + } + + public class SSLProtocolException extends javax.net.ssl.SSLException { + ctor public SSLProtocolException(java.lang.String); + } + + public abstract class SSLServerSocket extends java.net.ServerSocket { + ctor protected SSLServerSocket() throws java.io.IOException; + ctor protected SSLServerSocket(int) throws java.io.IOException; + ctor protected SSLServerSocket(int, int) throws java.io.IOException; + ctor protected SSLServerSocket(int, int, java.net.InetAddress) throws java.io.IOException; + method public abstract boolean getEnableSessionCreation(); + method public abstract java.lang.String[] getEnabledCipherSuites(); + method public abstract java.lang.String[] getEnabledProtocols(); + method public abstract boolean getNeedClientAuth(); + method public abstract java.lang.String[] getSupportedCipherSuites(); + method public abstract java.lang.String[] getSupportedProtocols(); + method public abstract boolean getUseClientMode(); + method public abstract boolean getWantClientAuth(); + method public abstract void setEnableSessionCreation(boolean); + method public abstract void setEnabledCipherSuites(java.lang.String[]); + method public abstract void setEnabledProtocols(java.lang.String[]); + method public abstract void setNeedClientAuth(boolean); + method public abstract void setUseClientMode(boolean); + method public abstract void setWantClientAuth(boolean); + } + + public abstract class SSLServerSocketFactory extends javax.net.ServerSocketFactory { + ctor protected SSLServerSocketFactory(); + method public static synchronized javax.net.ServerSocketFactory getDefault(); + method public abstract java.lang.String[] getDefaultCipherSuites(); + method public abstract java.lang.String[] getSupportedCipherSuites(); + } + + public abstract interface SSLSession { + method public abstract int getApplicationBufferSize(); + method public abstract java.lang.String getCipherSuite(); + method public abstract long getCreationTime(); + method public abstract byte[] getId(); + method public abstract long getLastAccessedTime(); + method public abstract java.security.cert.Certificate[] getLocalCertificates(); + method public abstract java.security.Principal getLocalPrincipal(); + method public abstract int getPacketBufferSize(); + method public abstract javax.security.cert.X509Certificate[] getPeerCertificateChain() throws javax.net.ssl.SSLPeerUnverifiedException; + method public abstract java.security.cert.Certificate[] getPeerCertificates() throws javax.net.ssl.SSLPeerUnverifiedException; + method public abstract java.lang.String getPeerHost(); + method public abstract int getPeerPort(); + method public abstract java.security.Principal getPeerPrincipal() throws javax.net.ssl.SSLPeerUnverifiedException; + method public abstract java.lang.String getProtocol(); + method public abstract javax.net.ssl.SSLSessionContext getSessionContext(); + method public abstract java.lang.Object getValue(java.lang.String); + method public abstract java.lang.String[] getValueNames(); + method public abstract void invalidate(); + method public abstract boolean isValid(); + method public abstract void putValue(java.lang.String, java.lang.Object); + method public abstract void removeValue(java.lang.String); + } + + public class SSLSessionBindingEvent extends java.util.EventObject { + ctor public SSLSessionBindingEvent(javax.net.ssl.SSLSession, java.lang.String); + method public java.lang.String getName(); + method public javax.net.ssl.SSLSession getSession(); + } + + public abstract interface SSLSessionBindingListener implements java.util.EventListener { + method public abstract void valueBound(javax.net.ssl.SSLSessionBindingEvent); + method public abstract void valueUnbound(javax.net.ssl.SSLSessionBindingEvent); + } + + public abstract interface SSLSessionContext { + method public abstract java.util.Enumeration getIds(); + method public abstract javax.net.ssl.SSLSession getSession(byte[]); + method public abstract int getSessionCacheSize(); + method public abstract int getSessionTimeout(); + method public abstract void setSessionCacheSize(int) throws java.lang.IllegalArgumentException; + method public abstract void setSessionTimeout(int) throws java.lang.IllegalArgumentException; + } + + public abstract class SSLSocket extends java.net.Socket { + ctor protected SSLSocket(); + ctor protected SSLSocket(java.lang.String, int) throws java.io.IOException, java.net.UnknownHostException; + ctor protected SSLSocket(java.net.InetAddress, int) throws java.io.IOException; + ctor protected SSLSocket(java.lang.String, int, java.net.InetAddress, int) throws java.io.IOException, java.net.UnknownHostException; + ctor protected SSLSocket(java.net.InetAddress, int, java.net.InetAddress, int) throws java.io.IOException; + method public abstract void addHandshakeCompletedListener(javax.net.ssl.HandshakeCompletedListener); + method public abstract boolean getEnableSessionCreation(); + method public abstract java.lang.String[] getEnabledCipherSuites(); + method public abstract java.lang.String[] getEnabledProtocols(); + method public abstract boolean getNeedClientAuth(); + method public javax.net.ssl.SSLParameters getSSLParameters(); + method public abstract javax.net.ssl.SSLSession getSession(); + method public abstract java.lang.String[] getSupportedCipherSuites(); + method public abstract java.lang.String[] getSupportedProtocols(); + method public abstract boolean getUseClientMode(); + method public abstract boolean getWantClientAuth(); + method public abstract void removeHandshakeCompletedListener(javax.net.ssl.HandshakeCompletedListener); + method public abstract void setEnableSessionCreation(boolean); + method public abstract void setEnabledCipherSuites(java.lang.String[]); + method public abstract void setEnabledProtocols(java.lang.String[]); + method public abstract void setNeedClientAuth(boolean); + method public void setSSLParameters(javax.net.ssl.SSLParameters); + method public abstract void setUseClientMode(boolean); + method public abstract void setWantClientAuth(boolean); + method public abstract void startHandshake() throws java.io.IOException; + } + + public abstract class SSLSocketFactory extends javax.net.SocketFactory { + ctor public SSLSocketFactory(); + method public abstract java.net.Socket createSocket(java.net.Socket, java.lang.String, int, boolean) throws java.io.IOException; + method public static synchronized javax.net.SocketFactory getDefault(); + method public abstract java.lang.String[] getDefaultCipherSuites(); + method public abstract java.lang.String[] getSupportedCipherSuites(); + } + + public abstract interface TrustManager { + } + + public class TrustManagerFactory { + ctor protected TrustManagerFactory(javax.net.ssl.TrustManagerFactorySpi, java.security.Provider, java.lang.String); + method public final java.lang.String getAlgorithm(); + method public static final java.lang.String getDefaultAlgorithm(); + method public static final javax.net.ssl.TrustManagerFactory getInstance(java.lang.String) throws java.security.NoSuchAlgorithmException; + method public static final javax.net.ssl.TrustManagerFactory getInstance(java.lang.String, java.lang.String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException; + method public static final javax.net.ssl.TrustManagerFactory getInstance(java.lang.String, java.security.Provider) throws java.security.NoSuchAlgorithmException; + method public final java.security.Provider getProvider(); + method public final javax.net.ssl.TrustManager[] getTrustManagers(); + method public final void init(java.security.KeyStore) throws java.security.KeyStoreException; + method public final void init(javax.net.ssl.ManagerFactoryParameters) throws java.security.InvalidAlgorithmParameterException; + } + + public abstract class TrustManagerFactorySpi { + ctor public TrustManagerFactorySpi(); + method protected abstract javax.net.ssl.TrustManager[] engineGetTrustManagers(); + method protected abstract void engineInit(java.security.KeyStore) throws java.security.KeyStoreException; + method protected abstract void engineInit(javax.net.ssl.ManagerFactoryParameters) throws java.security.InvalidAlgorithmParameterException; + } + + public abstract class X509ExtendedKeyManager implements javax.net.ssl.X509KeyManager { + ctor protected X509ExtendedKeyManager(); + method public java.lang.String chooseEngineClientAlias(java.lang.String[], java.security.Principal[], javax.net.ssl.SSLEngine); + method public java.lang.String chooseEngineServerAlias(java.lang.String, java.security.Principal[], javax.net.ssl.SSLEngine); + } + + public abstract interface X509KeyManager implements javax.net.ssl.KeyManager { + method public abstract java.lang.String chooseClientAlias(java.lang.String[], java.security.Principal[], java.net.Socket); + method public abstract java.lang.String chooseServerAlias(java.lang.String, java.security.Principal[], java.net.Socket); + method public abstract java.security.cert.X509Certificate[] getCertificateChain(java.lang.String); + method public abstract java.lang.String[] getClientAliases(java.lang.String, java.security.Principal[]); + method public abstract java.security.PrivateKey getPrivateKey(java.lang.String); + method public abstract java.lang.String[] getServerAliases(java.lang.String, java.security.Principal[]); + } + + public abstract interface X509TrustManager implements javax.net.ssl.TrustManager { + method public abstract void checkClientTrusted(java.security.cert.X509Certificate[], java.lang.String) throws java.security.cert.CertificateException; + method public abstract void checkServerTrusted(java.security.cert.X509Certificate[], java.lang.String) throws java.security.cert.CertificateException; + method public abstract java.security.cert.X509Certificate[] getAcceptedIssuers(); + } + +} + +package javax.security.auth { + + public final class AuthPermission extends java.security.BasicPermission { + ctor public AuthPermission(java.lang.String); + ctor public AuthPermission(java.lang.String, java.lang.String); + } + + public class DestroyFailedException extends java.lang.Exception { + ctor public DestroyFailedException(); + ctor public DestroyFailedException(java.lang.String); + } + + public abstract interface Destroyable { + method public abstract void destroy() throws javax.security.auth.DestroyFailedException; + method public abstract boolean isDestroyed(); + } + + public final class PrivateCredentialPermission extends java.security.Permission { + ctor public PrivateCredentialPermission(java.lang.String, java.lang.String); + method public java.lang.String getActions(); + method public java.lang.String getCredentialClass(); + method public java.lang.String[][] getPrincipals(); + method public boolean implies(java.security.Permission); + } + + public final class Subject implements java.io.Serializable { + ctor public Subject(); + ctor public Subject(boolean, java.util.Set, java.util.Set, java.util.Set); + method public static T doAs(javax.security.auth.Subject, java.security.PrivilegedAction); + method public static T doAs(javax.security.auth.Subject, java.security.PrivilegedExceptionAction) throws java.security.PrivilegedActionException; + method public static T doAsPrivileged(javax.security.auth.Subject, java.security.PrivilegedAction, java.security.AccessControlContext); + method public static T doAsPrivileged(javax.security.auth.Subject, java.security.PrivilegedExceptionAction, java.security.AccessControlContext) throws java.security.PrivilegedActionException; + method public java.util.Set getPrincipals(); + method public java.util.Set getPrincipals(java.lang.Class); + method public java.util.Set getPrivateCredentials(); + method public java.util.Set getPrivateCredentials(java.lang.Class); + method public java.util.Set getPublicCredentials(); + method public java.util.Set getPublicCredentials(java.lang.Class); + method public static javax.security.auth.Subject getSubject(java.security.AccessControlContext); + method public boolean isReadOnly(); + method public void setReadOnly(); + } + + public class SubjectDomainCombiner implements java.security.DomainCombiner { + ctor public SubjectDomainCombiner(javax.security.auth.Subject); + method public java.security.ProtectionDomain[] combine(java.security.ProtectionDomain[], java.security.ProtectionDomain[]); + method public javax.security.auth.Subject getSubject(); + } + +} + +package javax.security.auth.callback { + + public abstract interface Callback { + } + + public abstract interface CallbackHandler { + method public abstract void handle(javax.security.auth.callback.Callback[]) throws java.io.IOException, javax.security.auth.callback.UnsupportedCallbackException; + } + + public class PasswordCallback implements javax.security.auth.callback.Callback java.io.Serializable { + ctor public PasswordCallback(java.lang.String, boolean); + method public void clearPassword(); + method public char[] getPassword(); + method public java.lang.String getPrompt(); + method public boolean isEchoOn(); + method public void setPassword(char[]); + } + + public class UnsupportedCallbackException extends java.lang.Exception { + ctor public UnsupportedCallbackException(javax.security.auth.callback.Callback); + ctor public UnsupportedCallbackException(javax.security.auth.callback.Callback, java.lang.String); + method public javax.security.auth.callback.Callback getCallback(); + } + +} + +package javax.security.auth.login { + + public class LoginException extends java.security.GeneralSecurityException { + ctor public LoginException(); + ctor public LoginException(java.lang.String); + } + +} + +package javax.security.auth.x500 { + + public final class X500Principal implements java.security.Principal java.io.Serializable { + ctor public X500Principal(byte[]); + ctor public X500Principal(java.io.InputStream); + ctor public X500Principal(java.lang.String); + ctor public X500Principal(java.lang.String, java.util.Map); + method public byte[] getEncoded(); + method public java.lang.String getName(); + method public java.lang.String getName(java.lang.String); + method public java.lang.String getName(java.lang.String, java.util.Map); + field public static final java.lang.String CANONICAL = "CANONICAL"; + field public static final java.lang.String RFC1779 = "RFC1779"; + field public static final java.lang.String RFC2253 = "RFC2253"; + } + +} + +package javax.security.cert { + + public abstract class Certificate { + ctor public Certificate(); + method public abstract byte[] getEncoded() throws javax.security.cert.CertificateEncodingException; + method public abstract java.security.PublicKey getPublicKey(); + method public abstract java.lang.String toString(); + method public abstract void verify(java.security.PublicKey) throws javax.security.cert.CertificateException, java.security.InvalidKeyException, java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException, java.security.SignatureException; + method public abstract void verify(java.security.PublicKey, java.lang.String) throws javax.security.cert.CertificateException, java.security.InvalidKeyException, java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException, java.security.SignatureException; + } + + public class CertificateEncodingException extends javax.security.cert.CertificateException { + ctor public CertificateEncodingException(java.lang.String); + ctor public CertificateEncodingException(); + } + + public class CertificateException extends java.lang.Exception { + ctor public CertificateException(java.lang.String); + ctor public CertificateException(); + } + + public class CertificateExpiredException extends javax.security.cert.CertificateException { + ctor public CertificateExpiredException(java.lang.String); + ctor public CertificateExpiredException(); + } + + public class CertificateNotYetValidException extends javax.security.cert.CertificateException { + ctor public CertificateNotYetValidException(java.lang.String); + ctor public CertificateNotYetValidException(); + } + + public class CertificateParsingException extends javax.security.cert.CertificateException { + ctor public CertificateParsingException(java.lang.String); + ctor public CertificateParsingException(); + } + + public abstract class X509Certificate extends javax.security.cert.Certificate { + ctor public X509Certificate(); + method public abstract void checkValidity() throws javax.security.cert.CertificateExpiredException, javax.security.cert.CertificateNotYetValidException; + method public abstract void checkValidity(java.util.Date) throws javax.security.cert.CertificateExpiredException, javax.security.cert.CertificateNotYetValidException; + method public static final javax.security.cert.X509Certificate getInstance(java.io.InputStream) throws javax.security.cert.CertificateException; + method public static final javax.security.cert.X509Certificate getInstance(byte[]) throws javax.security.cert.CertificateException; + method public abstract java.security.Principal getIssuerDN(); + method public abstract java.util.Date getNotAfter(); + method public abstract java.util.Date getNotBefore(); + method public abstract java.math.BigInteger getSerialNumber(); + method public abstract java.lang.String getSigAlgName(); + method public abstract java.lang.String getSigAlgOID(); + method public abstract byte[] getSigAlgParams(); + method public abstract java.security.Principal getSubjectDN(); + method public abstract int getVersion(); + } + +} + +package javax.sql { + + public abstract interface CommonDataSource { + method public abstract java.io.PrintWriter getLogWriter() throws java.sql.SQLException; + method public abstract int getLoginTimeout() throws java.sql.SQLException; + method public abstract void setLogWriter(java.io.PrintWriter) throws java.sql.SQLException; + method public abstract void setLoginTimeout(int) throws java.sql.SQLException; + } + + public class ConnectionEvent extends java.util.EventObject implements java.io.Serializable { + ctor public ConnectionEvent(javax.sql.PooledConnection); + ctor public ConnectionEvent(javax.sql.PooledConnection, java.sql.SQLException); + method public java.sql.SQLException getSQLException(); + } + + public abstract interface ConnectionEventListener implements java.util.EventListener { + method public abstract void connectionClosed(javax.sql.ConnectionEvent); + method public abstract void connectionErrorOccurred(javax.sql.ConnectionEvent); + } + + public abstract interface ConnectionPoolDataSource implements javax.sql.CommonDataSource { + method public abstract javax.sql.PooledConnection getPooledConnection() throws java.sql.SQLException; + method public abstract javax.sql.PooledConnection getPooledConnection(java.lang.String, java.lang.String) throws java.sql.SQLException; + } + + public abstract interface DataSource implements javax.sql.CommonDataSource java.sql.Wrapper { + method public abstract java.sql.Connection getConnection() throws java.sql.SQLException; + method public abstract java.sql.Connection getConnection(java.lang.String, java.lang.String) throws java.sql.SQLException; + } + + public abstract interface PooledConnection { + method public abstract void addConnectionEventListener(javax.sql.ConnectionEventListener); + method public abstract void addStatementEventListener(javax.sql.StatementEventListener); + method public abstract void close() throws java.sql.SQLException; + method public abstract java.sql.Connection getConnection() throws java.sql.SQLException; + method public abstract void removeConnectionEventListener(javax.sql.ConnectionEventListener); + method public abstract void removeStatementEventListener(javax.sql.StatementEventListener); + } + + public abstract interface RowSet implements java.sql.ResultSet { + method public abstract void addRowSetListener(javax.sql.RowSetListener); + method public abstract void clearParameters() throws java.sql.SQLException; + method public abstract void execute() throws java.sql.SQLException; + method public abstract java.lang.String getCommand(); + method public abstract java.lang.String getDataSourceName(); + method public abstract boolean getEscapeProcessing() throws java.sql.SQLException; + method public abstract int getMaxFieldSize() throws java.sql.SQLException; + method public abstract int getMaxRows() throws java.sql.SQLException; + method public abstract java.lang.String getPassword(); + method public abstract int getQueryTimeout() throws java.sql.SQLException; + method public abstract int getTransactionIsolation(); + method public abstract java.util.Map> getTypeMap() throws java.sql.SQLException; + method public abstract java.lang.String getUrl() throws java.sql.SQLException; + method public abstract java.lang.String getUsername(); + method public abstract boolean isReadOnly(); + method public abstract void removeRowSetListener(javax.sql.RowSetListener); + method public abstract void setArray(int, java.sql.Array) throws java.sql.SQLException; + method public abstract void setAsciiStream(int, java.io.InputStream, int) throws java.sql.SQLException; + method public abstract void setAsciiStream(int, java.io.InputStream) throws java.sql.SQLException; + method public abstract void setAsciiStream(java.lang.String, java.io.InputStream) throws java.sql.SQLException; + method public abstract void setAsciiStream(java.lang.String, java.io.InputStream, int) throws java.sql.SQLException; + method public abstract void setBigDecimal(int, java.math.BigDecimal) throws java.sql.SQLException; + method public abstract void setBigDecimal(java.lang.String, java.math.BigDecimal) throws java.sql.SQLException; + method public abstract void setBinaryStream(int, java.io.InputStream, int) throws java.sql.SQLException; + method public abstract void setBinaryStream(int, java.io.InputStream) throws java.sql.SQLException; + method public abstract void setBinaryStream(java.lang.String, java.io.InputStream) throws java.sql.SQLException; + method public abstract void setBinaryStream(java.lang.String, java.io.InputStream, int) throws java.sql.SQLException; + method public abstract void setBlob(int, java.sql.Blob) throws java.sql.SQLException; + method public abstract void setBlob(int, java.io.InputStream) throws java.sql.SQLException; + method public abstract void setBlob(int, java.io.InputStream, long) throws java.sql.SQLException; + method public abstract void setBlob(java.lang.String, java.io.InputStream) throws java.sql.SQLException; + method public abstract void setBlob(java.lang.String, java.io.InputStream, long) throws java.sql.SQLException; + method public abstract void setBlob(java.lang.String, java.sql.Blob) throws java.sql.SQLException; + method public abstract void setBoolean(int, boolean) throws java.sql.SQLException; + method public abstract void setBoolean(java.lang.String, boolean) throws java.sql.SQLException; + method public abstract void setByte(int, byte) throws java.sql.SQLException; + method public abstract void setByte(java.lang.String, byte) throws java.sql.SQLException; + method public abstract void setBytes(int, byte[]) throws java.sql.SQLException; + method public abstract void setBytes(java.lang.String, byte[]) throws java.sql.SQLException; + method public abstract void setCharacterStream(int, java.io.Reader, int) throws java.sql.SQLException; + method public abstract void setCharacterStream(int, java.io.Reader) throws java.sql.SQLException; + method public abstract void setCharacterStream(java.lang.String, java.io.Reader) throws java.sql.SQLException; + method public abstract void setCharacterStream(java.lang.String, java.io.Reader, int) throws java.sql.SQLException; + method public abstract void setClob(int, java.sql.Clob) throws java.sql.SQLException; + method public abstract void setClob(int, java.io.Reader) throws java.sql.SQLException; + method public abstract void setClob(int, java.io.Reader, long) throws java.sql.SQLException; + method public abstract void setClob(java.lang.String, java.sql.Clob) throws java.sql.SQLException; + method public abstract void setClob(java.lang.String, java.io.Reader) throws java.sql.SQLException; + method public abstract void setClob(java.lang.String, java.io.Reader, long) throws java.sql.SQLException; + method public abstract void setCommand(java.lang.String) throws java.sql.SQLException; + method public abstract void setConcurrency(int) throws java.sql.SQLException; + method public abstract void setDataSourceName(java.lang.String) throws java.sql.SQLException; + method public abstract void setDate(int, java.sql.Date) throws java.sql.SQLException; + method public abstract void setDate(int, java.sql.Date, java.util.Calendar) throws java.sql.SQLException; + method public abstract void setDate(java.lang.String, java.sql.Date) throws java.sql.SQLException; + method public abstract void setDate(java.lang.String, java.sql.Date, java.util.Calendar) throws java.sql.SQLException; + method public abstract void setDouble(int, double) throws java.sql.SQLException; + method public abstract void setDouble(java.lang.String, double) throws java.sql.SQLException; + method public abstract void setEscapeProcessing(boolean) throws java.sql.SQLException; + method public abstract void setFloat(int, float) throws java.sql.SQLException; + method public abstract void setFloat(java.lang.String, float) throws java.sql.SQLException; + method public abstract void setInt(int, int) throws java.sql.SQLException; + method public abstract void setInt(java.lang.String, int) throws java.sql.SQLException; + method public abstract void setLong(int, long) throws java.sql.SQLException; + method public abstract void setLong(java.lang.String, long) throws java.sql.SQLException; + method public abstract void setMaxFieldSize(int) throws java.sql.SQLException; + method public abstract void setMaxRows(int) throws java.sql.SQLException; + method public abstract void setNCharacterStream(int, java.io.Reader) throws java.sql.SQLException; + method public abstract void setNCharacterStream(int, java.io.Reader, long) throws java.sql.SQLException; + method public abstract void setNCharacterStream(java.lang.String, java.io.Reader) throws java.sql.SQLException; + method public abstract void setNCharacterStream(java.lang.String, java.io.Reader, long) throws java.sql.SQLException; + method public abstract void setNClob(int, java.sql.NClob) throws java.sql.SQLException; + method public abstract void setNClob(int, java.io.Reader) throws java.sql.SQLException; + method public abstract void setNClob(int, java.io.Reader, long) throws java.sql.SQLException; + method public abstract void setNClob(java.lang.String, java.sql.NClob) throws java.sql.SQLException; + method public abstract void setNClob(java.lang.String, java.io.Reader) throws java.sql.SQLException; + method public abstract void setNClob(java.lang.String, java.io.Reader, long) throws java.sql.SQLException; + method public abstract void setNString(int, java.lang.String) throws java.sql.SQLException; + method public abstract void setNString(java.lang.String, java.lang.String) throws java.sql.SQLException; + method public abstract void setNull(int, int) throws java.sql.SQLException; + method public abstract void setNull(int, int, java.lang.String) throws java.sql.SQLException; + method public abstract void setNull(java.lang.String, int) throws java.sql.SQLException; + method public abstract void setNull(java.lang.String, int, java.lang.String) throws java.sql.SQLException; + method public abstract void setObject(int, java.lang.Object) throws java.sql.SQLException; + method public abstract void setObject(int, java.lang.Object, int) throws java.sql.SQLException; + method public abstract void setObject(int, java.lang.Object, int, int) throws java.sql.SQLException; + method public abstract void setObject(java.lang.String, java.lang.Object) throws java.sql.SQLException; + method public abstract void setObject(java.lang.String, java.lang.Object, int) throws java.sql.SQLException; + method public abstract void setObject(java.lang.String, java.lang.Object, int, int) throws java.sql.SQLException; + method public abstract void setPassword(java.lang.String) throws java.sql.SQLException; + method public abstract void setQueryTimeout(int) throws java.sql.SQLException; + method public abstract void setReadOnly(boolean) throws java.sql.SQLException; + method public abstract void setRef(int, java.sql.Ref) throws java.sql.SQLException; + method public abstract void setRowId(int, java.sql.RowId) throws java.sql.SQLException; + method public abstract void setRowId(java.lang.String, java.sql.RowId) throws java.sql.SQLException; + method public abstract void setSQLXML(int, java.sql.SQLXML) throws java.sql.SQLException; + method public abstract void setSQLXML(java.lang.String, java.sql.SQLXML) throws java.sql.SQLException; + method public abstract void setShort(int, short) throws java.sql.SQLException; + method public abstract void setShort(java.lang.String, short) throws java.sql.SQLException; + method public abstract void setString(int, java.lang.String) throws java.sql.SQLException; + method public abstract void setString(java.lang.String, java.lang.String) throws java.sql.SQLException; + method public abstract void setTime(int, java.sql.Time) throws java.sql.SQLException; + method public abstract void setTime(int, java.sql.Time, java.util.Calendar) throws java.sql.SQLException; + method public abstract void setTime(java.lang.String, java.sql.Time) throws java.sql.SQLException; + method public abstract void setTime(java.lang.String, java.sql.Time, java.util.Calendar) throws java.sql.SQLException; + method public abstract void setTimestamp(int, java.sql.Timestamp) throws java.sql.SQLException; + method public abstract void setTimestamp(int, java.sql.Timestamp, java.util.Calendar) throws java.sql.SQLException; + method public abstract void setTimestamp(java.lang.String, java.sql.Timestamp) throws java.sql.SQLException; + method public abstract void setTimestamp(java.lang.String, java.sql.Timestamp, java.util.Calendar) throws java.sql.SQLException; + method public abstract void setTransactionIsolation(int) throws java.sql.SQLException; + method public abstract void setType(int) throws java.sql.SQLException; + method public abstract void setTypeMap(java.util.Map>) throws java.sql.SQLException; + method public abstract void setURL(int, java.net.URL) throws java.sql.SQLException; + method public abstract void setUrl(java.lang.String) throws java.sql.SQLException; + method public abstract void setUsername(java.lang.String) throws java.sql.SQLException; + } + + public class RowSetEvent extends java.util.EventObject implements java.io.Serializable { + ctor public RowSetEvent(javax.sql.RowSet); + } + + public abstract interface RowSetInternal { + method public abstract java.sql.Connection getConnection() throws java.sql.SQLException; + method public abstract java.sql.ResultSet getOriginal() throws java.sql.SQLException; + method public abstract java.sql.ResultSet getOriginalRow() throws java.sql.SQLException; + method public abstract java.lang.Object[] getParams() throws java.sql.SQLException; + method public abstract void setMetaData(javax.sql.RowSetMetaData) throws java.sql.SQLException; + } + + public abstract interface RowSetListener implements java.util.EventListener { + method public abstract void cursorMoved(javax.sql.RowSetEvent); + method public abstract void rowChanged(javax.sql.RowSetEvent); + method public abstract void rowSetChanged(javax.sql.RowSetEvent); + } + + public abstract interface RowSetMetaData implements java.sql.ResultSetMetaData { + method public abstract void setAutoIncrement(int, boolean) throws java.sql.SQLException; + method public abstract void setCaseSensitive(int, boolean) throws java.sql.SQLException; + method public abstract void setCatalogName(int, java.lang.String) throws java.sql.SQLException; + method public abstract void setColumnCount(int) throws java.sql.SQLException; + method public abstract void setColumnDisplaySize(int, int) throws java.sql.SQLException; + method public abstract void setColumnLabel(int, java.lang.String) throws java.sql.SQLException; + method public abstract void setColumnName(int, java.lang.String) throws java.sql.SQLException; + method public abstract void setColumnType(int, int) throws java.sql.SQLException; + method public abstract void setColumnTypeName(int, java.lang.String) throws java.sql.SQLException; + method public abstract void setCurrency(int, boolean) throws java.sql.SQLException; + method public abstract void setNullable(int, int) throws java.sql.SQLException; + method public abstract void setPrecision(int, int) throws java.sql.SQLException; + method public abstract void setScale(int, int) throws java.sql.SQLException; + method public abstract void setSchemaName(int, java.lang.String) throws java.sql.SQLException; + method public abstract void setSearchable(int, boolean) throws java.sql.SQLException; + method public abstract void setSigned(int, boolean) throws java.sql.SQLException; + method public abstract void setTableName(int, java.lang.String) throws java.sql.SQLException; + } + + public abstract interface RowSetReader { + method public abstract void readData(javax.sql.RowSetInternal) throws java.sql.SQLException; + } + + public abstract interface RowSetWriter { + method public abstract boolean writeData(javax.sql.RowSetInternal) throws java.sql.SQLException; + } + + public class StatementEvent extends java.util.EventObject { + ctor public StatementEvent(javax.sql.PooledConnection, java.sql.PreparedStatement, java.sql.SQLException); + ctor public StatementEvent(javax.sql.PooledConnection, java.sql.PreparedStatement); + method public java.sql.SQLException getSQLException(); + method public java.sql.PreparedStatement getStatement(); + } + + public abstract interface StatementEventListener implements java.util.EventListener { + method public abstract void statementClosed(javax.sql.StatementEvent); + method public abstract void statementErrorOccurred(javax.sql.StatementEvent); + } + +} + +package javax.xml { + + public final class XMLConstants { + field public static final java.lang.String DEFAULT_NS_PREFIX = ""; + field public static final java.lang.String FEATURE_SECURE_PROCESSING = "http://javax.xml.XMLConstants/feature/secure-processing"; + field public static final java.lang.String NULL_NS_URI = ""; + field public static final java.lang.String RELAXNG_NS_URI = "http://relaxng.org/ns/structure/1.0"; + field public static final java.lang.String W3C_XML_SCHEMA_INSTANCE_NS_URI = "http://www.w3.org/2001/XMLSchema-instance"; + field public static final java.lang.String W3C_XML_SCHEMA_NS_URI = "http://www.w3.org/2001/XMLSchema"; + field public static final java.lang.String W3C_XPATH_DATATYPE_NS_URI = "http://www.w3.org/2003/11/xpath-datatypes"; + field public static final java.lang.String XMLNS_ATTRIBUTE = "xmlns"; + field public static final java.lang.String XMLNS_ATTRIBUTE_NS_URI = "http://www.w3.org/2000/xmlns/"; + field public static final java.lang.String XML_DTD_NS_URI = "http://www.w3.org/TR/REC-xml"; + field public static final java.lang.String XML_NS_PREFIX = "xml"; + field public static final java.lang.String XML_NS_URI = "http://www.w3.org/XML/1998/namespace"; + } + +} + +package javax.xml.datatype { + + public class DatatypeConfigurationException extends java.lang.Exception { + ctor public DatatypeConfigurationException(); + ctor public DatatypeConfigurationException(java.lang.String); + ctor public DatatypeConfigurationException(java.lang.String, java.lang.Throwable); + ctor public DatatypeConfigurationException(java.lang.Throwable); + } + + public final class DatatypeConstants { + field public static final int APRIL = 4; // 0x4 + field public static final int AUGUST = 8; // 0x8 + field public static final javax.xml.namespace.QName DATE; + field public static final javax.xml.namespace.QName DATETIME; + field public static final javax.xml.datatype.DatatypeConstants.Field DAYS; + field public static final int DECEMBER = 12; // 0xc + field public static final javax.xml.namespace.QName DURATION; + field public static final javax.xml.namespace.QName DURATION_DAYTIME; + field public static final javax.xml.namespace.QName DURATION_YEARMONTH; + field public static final int EQUAL = 0; // 0x0 + field public static final int FEBRUARY = 2; // 0x2 + field public static final int FIELD_UNDEFINED = -2147483648; // 0x80000000 + field public static final javax.xml.namespace.QName GDAY; + field public static final javax.xml.namespace.QName GMONTH; + field public static final javax.xml.namespace.QName GMONTHDAY; + field public static final int GREATER = 1; // 0x1 + field public static final javax.xml.namespace.QName GYEAR; + field public static final javax.xml.namespace.QName GYEARMONTH; + field public static final javax.xml.datatype.DatatypeConstants.Field HOURS; + field public static final int INDETERMINATE = 2; // 0x2 + field public static final int JANUARY = 1; // 0x1 + field public static final int JULY = 7; // 0x7 + field public static final int JUNE = 6; // 0x6 + field public static final int LESSER = -1; // 0xffffffff + field public static final int MARCH = 3; // 0x3 + field public static final int MAX_TIMEZONE_OFFSET = -840; // 0xfffffcb8 + field public static final int MAY = 5; // 0x5 + field public static final javax.xml.datatype.DatatypeConstants.Field MINUTES; + field public static final int MIN_TIMEZONE_OFFSET = 840; // 0x348 + field public static final javax.xml.datatype.DatatypeConstants.Field MONTHS; + field public static final int NOVEMBER = 11; // 0xb + field public static final int OCTOBER = 10; // 0xa + field public static final javax.xml.datatype.DatatypeConstants.Field SECONDS; + field public static final int SEPTEMBER = 9; // 0x9 + field public static final javax.xml.namespace.QName TIME; + field public static final javax.xml.datatype.DatatypeConstants.Field YEARS; + } + + public static final class DatatypeConstants.Field { + method public int getId(); + } + + public abstract class DatatypeFactory { + ctor protected DatatypeFactory(); + method public abstract javax.xml.datatype.Duration newDuration(java.lang.String); + method public abstract javax.xml.datatype.Duration newDuration(long); + method public abstract javax.xml.datatype.Duration newDuration(boolean, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigDecimal); + method public javax.xml.datatype.Duration newDuration(boolean, int, int, int, int, int, int); + method public javax.xml.datatype.Duration newDurationDayTime(java.lang.String); + method public javax.xml.datatype.Duration newDurationDayTime(long); + method public javax.xml.datatype.Duration newDurationDayTime(boolean, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger); + method public javax.xml.datatype.Duration newDurationDayTime(boolean, int, int, int, int); + method public javax.xml.datatype.Duration newDurationYearMonth(java.lang.String); + method public javax.xml.datatype.Duration newDurationYearMonth(long); + method public javax.xml.datatype.Duration newDurationYearMonth(boolean, java.math.BigInteger, java.math.BigInteger); + method public javax.xml.datatype.Duration newDurationYearMonth(boolean, int, int); + method public static javax.xml.datatype.DatatypeFactory newInstance() throws javax.xml.datatype.DatatypeConfigurationException; + method public static javax.xml.datatype.DatatypeFactory newInstance(java.lang.String, java.lang.ClassLoader) throws javax.xml.datatype.DatatypeConfigurationException; + method public abstract javax.xml.datatype.XMLGregorianCalendar newXMLGregorianCalendar(); + method public abstract javax.xml.datatype.XMLGregorianCalendar newXMLGregorianCalendar(java.lang.String); + method public abstract javax.xml.datatype.XMLGregorianCalendar newXMLGregorianCalendar(java.util.GregorianCalendar); + method public abstract javax.xml.datatype.XMLGregorianCalendar newXMLGregorianCalendar(java.math.BigInteger, int, int, int, int, int, java.math.BigDecimal, int); + method public javax.xml.datatype.XMLGregorianCalendar newXMLGregorianCalendar(int, int, int, int, int, int, int, int); + method public javax.xml.datatype.XMLGregorianCalendar newXMLGregorianCalendarDate(int, int, int, int); + method public javax.xml.datatype.XMLGregorianCalendar newXMLGregorianCalendarTime(int, int, int, int); + method public javax.xml.datatype.XMLGregorianCalendar newXMLGregorianCalendarTime(int, int, int, java.math.BigDecimal, int); + method public javax.xml.datatype.XMLGregorianCalendar newXMLGregorianCalendarTime(int, int, int, int, int); + field public static final java.lang.String DATATYPEFACTORY_IMPLEMENTATION_CLASS; + field public static final java.lang.String DATATYPEFACTORY_PROPERTY = "javax.xml.datatype.DatatypeFactory"; + } + + public abstract class Duration { + ctor public Duration(); + method public abstract javax.xml.datatype.Duration add(javax.xml.datatype.Duration); + method public abstract void addTo(java.util.Calendar); + method public void addTo(java.util.Date); + method public abstract int compare(javax.xml.datatype.Duration); + method public int getDays(); + method public abstract java.lang.Number getField(javax.xml.datatype.DatatypeConstants.Field); + method public int getHours(); + method public int getMinutes(); + method public int getMonths(); + method public int getSeconds(); + method public abstract int getSign(); + method public long getTimeInMillis(java.util.Calendar); + method public long getTimeInMillis(java.util.Date); + method public javax.xml.namespace.QName getXMLSchemaType(); + method public int getYears(); + method public abstract int hashCode(); + method public boolean isLongerThan(javax.xml.datatype.Duration); + method public abstract boolean isSet(javax.xml.datatype.DatatypeConstants.Field); + method public boolean isShorterThan(javax.xml.datatype.Duration); + method public javax.xml.datatype.Duration multiply(int); + method public abstract javax.xml.datatype.Duration multiply(java.math.BigDecimal); + method public abstract javax.xml.datatype.Duration negate(); + method public abstract javax.xml.datatype.Duration normalizeWith(java.util.Calendar); + method public javax.xml.datatype.Duration subtract(javax.xml.datatype.Duration); + } + + public abstract class XMLGregorianCalendar implements java.lang.Cloneable { + ctor public XMLGregorianCalendar(); + method public abstract void add(javax.xml.datatype.Duration); + method public abstract void clear(); + method public abstract java.lang.Object clone(); + method public abstract int compare(javax.xml.datatype.XMLGregorianCalendar); + method public abstract int getDay(); + method public abstract java.math.BigInteger getEon(); + method public abstract java.math.BigInteger getEonAndYear(); + method public abstract java.math.BigDecimal getFractionalSecond(); + method public abstract int getHour(); + method public int getMillisecond(); + method public abstract int getMinute(); + method public abstract int getMonth(); + method public abstract int getSecond(); + method public abstract java.util.TimeZone getTimeZone(int); + method public abstract int getTimezone(); + method public abstract javax.xml.namespace.QName getXMLSchemaType(); + method public abstract int getYear(); + method public abstract boolean isValid(); + method public abstract javax.xml.datatype.XMLGregorianCalendar normalize(); + method public abstract void reset(); + method public abstract void setDay(int); + method public abstract void setFractionalSecond(java.math.BigDecimal); + method public abstract void setHour(int); + method public abstract void setMillisecond(int); + method public abstract void setMinute(int); + method public abstract void setMonth(int); + method public abstract void setSecond(int); + method public void setTime(int, int, int); + method public void setTime(int, int, int, java.math.BigDecimal); + method public void setTime(int, int, int, int); + method public abstract void setTimezone(int); + method public abstract void setYear(java.math.BigInteger); + method public abstract void setYear(int); + method public abstract java.util.GregorianCalendar toGregorianCalendar(); + method public abstract java.util.GregorianCalendar toGregorianCalendar(java.util.TimeZone, java.util.Locale, javax.xml.datatype.XMLGregorianCalendar); + method public abstract java.lang.String toXMLFormat(); + } + +} + +package javax.xml.namespace { + + public abstract interface NamespaceContext { + method public abstract java.lang.String getNamespaceURI(java.lang.String); + method public abstract java.lang.String getPrefix(java.lang.String); + method public abstract java.util.Iterator getPrefixes(java.lang.String); + } + + public class QName implements java.io.Serializable { + ctor public QName(java.lang.String, java.lang.String); + ctor public QName(java.lang.String, java.lang.String, java.lang.String); + ctor public QName(java.lang.String); + method public final boolean equals(java.lang.Object); + method public java.lang.String getLocalPart(); + method public java.lang.String getNamespaceURI(); + method public java.lang.String getPrefix(); + method public final int hashCode(); + method public static javax.xml.namespace.QName valueOf(java.lang.String); + } + +} + +package javax.xml.parsers { + + public abstract class DocumentBuilder { + ctor protected DocumentBuilder(); + method public abstract org.w3c.dom.DOMImplementation getDOMImplementation(); + method public javax.xml.validation.Schema getSchema(); + method public abstract boolean isNamespaceAware(); + method public abstract boolean isValidating(); + method public boolean isXIncludeAware(); + method public abstract org.w3c.dom.Document newDocument(); + method public org.w3c.dom.Document parse(java.io.InputStream) throws java.io.IOException, org.xml.sax.SAXException; + method public org.w3c.dom.Document parse(java.io.InputStream, java.lang.String) throws java.io.IOException, org.xml.sax.SAXException; + method public org.w3c.dom.Document parse(java.lang.String) throws java.io.IOException, org.xml.sax.SAXException; + method public org.w3c.dom.Document parse(java.io.File) throws java.io.IOException, org.xml.sax.SAXException; + method public abstract org.w3c.dom.Document parse(org.xml.sax.InputSource) throws java.io.IOException, org.xml.sax.SAXException; + method public void reset(); + method public abstract void setEntityResolver(org.xml.sax.EntityResolver); + method public abstract void setErrorHandler(org.xml.sax.ErrorHandler); + } + + public abstract class DocumentBuilderFactory { + ctor protected DocumentBuilderFactory(); + method public abstract java.lang.Object getAttribute(java.lang.String) throws java.lang.IllegalArgumentException; + method public abstract boolean getFeature(java.lang.String) throws javax.xml.parsers.ParserConfigurationException; + method public javax.xml.validation.Schema getSchema(); + method public boolean isCoalescing(); + method public boolean isExpandEntityReferences(); + method public boolean isIgnoringComments(); + method public boolean isIgnoringElementContentWhitespace(); + method public boolean isNamespaceAware(); + method public boolean isValidating(); + method public boolean isXIncludeAware(); + method public abstract javax.xml.parsers.DocumentBuilder newDocumentBuilder() throws javax.xml.parsers.ParserConfigurationException; + method public static javax.xml.parsers.DocumentBuilderFactory newInstance(); + method public static javax.xml.parsers.DocumentBuilderFactory newInstance(java.lang.String, java.lang.ClassLoader); + method public abstract void setAttribute(java.lang.String, java.lang.Object) throws java.lang.IllegalArgumentException; + method public void setCoalescing(boolean); + method public void setExpandEntityReferences(boolean); + method public abstract void setFeature(java.lang.String, boolean) throws javax.xml.parsers.ParserConfigurationException; + method public void setIgnoringComments(boolean); + method public void setIgnoringElementContentWhitespace(boolean); + method public void setNamespaceAware(boolean); + method public void setSchema(javax.xml.validation.Schema); + method public void setValidating(boolean); + method public void setXIncludeAware(boolean); + } + + public class FactoryConfigurationError extends java.lang.Error { + ctor public FactoryConfigurationError(); + ctor public FactoryConfigurationError(java.lang.String); + ctor public FactoryConfigurationError(java.lang.Exception); + ctor public FactoryConfigurationError(java.lang.Exception, java.lang.String); + method public java.lang.Exception getException(); + } + + public class ParserConfigurationException extends java.lang.Exception { + ctor public ParserConfigurationException(); + ctor public ParserConfigurationException(java.lang.String); + } + + public abstract class SAXParser { + ctor protected SAXParser(); + method public abstract org.xml.sax.Parser getParser() throws org.xml.sax.SAXException; + method public abstract java.lang.Object getProperty(java.lang.String) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException; + method public javax.xml.validation.Schema getSchema(); + method public abstract org.xml.sax.XMLReader getXMLReader() throws org.xml.sax.SAXException; + method public abstract boolean isNamespaceAware(); + method public abstract boolean isValidating(); + method public boolean isXIncludeAware(); + method public void parse(java.io.InputStream, org.xml.sax.HandlerBase) throws java.io.IOException, org.xml.sax.SAXException; + method public void parse(java.io.InputStream, org.xml.sax.HandlerBase, java.lang.String) throws java.io.IOException, org.xml.sax.SAXException; + method public void parse(java.io.InputStream, org.xml.sax.helpers.DefaultHandler) throws java.io.IOException, org.xml.sax.SAXException; + method public void parse(java.io.InputStream, org.xml.sax.helpers.DefaultHandler, java.lang.String) throws java.io.IOException, org.xml.sax.SAXException; + method public void parse(java.lang.String, org.xml.sax.HandlerBase) throws java.io.IOException, org.xml.sax.SAXException; + method public void parse(java.lang.String, org.xml.sax.helpers.DefaultHandler) throws java.io.IOException, org.xml.sax.SAXException; + method public void parse(java.io.File, org.xml.sax.HandlerBase) throws java.io.IOException, org.xml.sax.SAXException; + method public void parse(java.io.File, org.xml.sax.helpers.DefaultHandler) throws java.io.IOException, org.xml.sax.SAXException; + method public void parse(org.xml.sax.InputSource, org.xml.sax.HandlerBase) throws java.io.IOException, org.xml.sax.SAXException; + method public void parse(org.xml.sax.InputSource, org.xml.sax.helpers.DefaultHandler) throws java.io.IOException, org.xml.sax.SAXException; + method public void reset(); + method public abstract void setProperty(java.lang.String, java.lang.Object) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException; + } + + public abstract class SAXParserFactory { + ctor protected SAXParserFactory(); + method public abstract boolean getFeature(java.lang.String) throws javax.xml.parsers.ParserConfigurationException, org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException; + method public javax.xml.validation.Schema getSchema(); + method public boolean isNamespaceAware(); + method public boolean isValidating(); + method public boolean isXIncludeAware(); + method public static javax.xml.parsers.SAXParserFactory newInstance(); + method public static javax.xml.parsers.SAXParserFactory newInstance(java.lang.String, java.lang.ClassLoader); + method public abstract javax.xml.parsers.SAXParser newSAXParser() throws javax.xml.parsers.ParserConfigurationException, org.xml.sax.SAXException; + method public abstract void setFeature(java.lang.String, boolean) throws javax.xml.parsers.ParserConfigurationException, org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException; + method public void setNamespaceAware(boolean); + method public void setSchema(javax.xml.validation.Schema); + method public void setValidating(boolean); + method public void setXIncludeAware(boolean); + } + +} + +package javax.xml.transform { + + public abstract interface ErrorListener { + method public abstract void error(javax.xml.transform.TransformerException) throws javax.xml.transform.TransformerException; + method public abstract void fatalError(javax.xml.transform.TransformerException) throws javax.xml.transform.TransformerException; + method public abstract void warning(javax.xml.transform.TransformerException) throws javax.xml.transform.TransformerException; + } + + public class OutputKeys { + field public static final java.lang.String CDATA_SECTION_ELEMENTS = "cdata-section-elements"; + field public static final java.lang.String DOCTYPE_PUBLIC = "doctype-public"; + field public static final java.lang.String DOCTYPE_SYSTEM = "doctype-system"; + field public static final java.lang.String ENCODING = "encoding"; + field public static final java.lang.String INDENT = "indent"; + field public static final java.lang.String MEDIA_TYPE = "media-type"; + field public static final java.lang.String METHOD = "method"; + field public static final java.lang.String OMIT_XML_DECLARATION = "omit-xml-declaration"; + field public static final java.lang.String STANDALONE = "standalone"; + field public static final java.lang.String VERSION = "version"; + } + + public abstract interface Result { + method public abstract java.lang.String getSystemId(); + method public abstract void setSystemId(java.lang.String); + field public static final java.lang.String PI_DISABLE_OUTPUT_ESCAPING = "javax.xml.transform.disable-output-escaping"; + field public static final java.lang.String PI_ENABLE_OUTPUT_ESCAPING = "javax.xml.transform.enable-output-escaping"; + } + + public abstract interface Source { + method public abstract java.lang.String getSystemId(); + method public abstract void setSystemId(java.lang.String); + } + + public abstract interface SourceLocator { + method public abstract int getColumnNumber(); + method public abstract int getLineNumber(); + method public abstract java.lang.String getPublicId(); + method public abstract java.lang.String getSystemId(); + } + + public abstract interface Templates { + method public abstract java.util.Properties getOutputProperties(); + method public abstract javax.xml.transform.Transformer newTransformer() throws javax.xml.transform.TransformerConfigurationException; + } + + public abstract class Transformer { + ctor protected Transformer(); + method public abstract void clearParameters(); + method public abstract javax.xml.transform.ErrorListener getErrorListener(); + method public abstract java.util.Properties getOutputProperties(); + method public abstract java.lang.String getOutputProperty(java.lang.String) throws java.lang.IllegalArgumentException; + method public abstract java.lang.Object getParameter(java.lang.String); + method public abstract javax.xml.transform.URIResolver getURIResolver(); + method public void reset(); + method public abstract void setErrorListener(javax.xml.transform.ErrorListener) throws java.lang.IllegalArgumentException; + method public abstract void setOutputProperties(java.util.Properties); + method public abstract void setOutputProperty(java.lang.String, java.lang.String) throws java.lang.IllegalArgumentException; + method public abstract void setParameter(java.lang.String, java.lang.Object); + method public abstract void setURIResolver(javax.xml.transform.URIResolver); + method public abstract void transform(javax.xml.transform.Source, javax.xml.transform.Result) throws javax.xml.transform.TransformerException; + } + + public class TransformerConfigurationException extends javax.xml.transform.TransformerException { + ctor public TransformerConfigurationException(); + ctor public TransformerConfigurationException(java.lang.String); + ctor public TransformerConfigurationException(java.lang.Throwable); + ctor public TransformerConfigurationException(java.lang.String, java.lang.Throwable); + ctor public TransformerConfigurationException(java.lang.String, javax.xml.transform.SourceLocator); + ctor public TransformerConfigurationException(java.lang.String, javax.xml.transform.SourceLocator, java.lang.Throwable); + } + + public class TransformerException extends java.lang.Exception { + ctor public TransformerException(java.lang.String); + ctor public TransformerException(java.lang.Throwable); + ctor public TransformerException(java.lang.String, java.lang.Throwable); + ctor public TransformerException(java.lang.String, javax.xml.transform.SourceLocator); + ctor public TransformerException(java.lang.String, javax.xml.transform.SourceLocator, java.lang.Throwable); + method public java.lang.Throwable getException(); + method public java.lang.String getLocationAsString(); + method public javax.xml.transform.SourceLocator getLocator(); + method public java.lang.String getMessageAndLocation(); + method public void setLocator(javax.xml.transform.SourceLocator); + } + + public abstract class TransformerFactory { + ctor protected TransformerFactory(); + method public abstract javax.xml.transform.Source getAssociatedStylesheet(javax.xml.transform.Source, java.lang.String, java.lang.String, java.lang.String) throws javax.xml.transform.TransformerConfigurationException; + method public abstract java.lang.Object getAttribute(java.lang.String); + method public abstract javax.xml.transform.ErrorListener getErrorListener(); + method public abstract boolean getFeature(java.lang.String); + method public abstract javax.xml.transform.URIResolver getURIResolver(); + method public static javax.xml.transform.TransformerFactory newInstance() throws javax.xml.transform.TransformerFactoryConfigurationError; + method public static javax.xml.transform.TransformerFactory newInstance(java.lang.String, java.lang.ClassLoader) throws javax.xml.transform.TransformerFactoryConfigurationError; + method public abstract javax.xml.transform.Templates newTemplates(javax.xml.transform.Source) throws javax.xml.transform.TransformerConfigurationException; + method public abstract javax.xml.transform.Transformer newTransformer(javax.xml.transform.Source) throws javax.xml.transform.TransformerConfigurationException; + method public abstract javax.xml.transform.Transformer newTransformer() throws javax.xml.transform.TransformerConfigurationException; + method public abstract void setAttribute(java.lang.String, java.lang.Object); + method public abstract void setErrorListener(javax.xml.transform.ErrorListener); + method public abstract void setFeature(java.lang.String, boolean) throws javax.xml.transform.TransformerConfigurationException; + method public abstract void setURIResolver(javax.xml.transform.URIResolver); + } + + public class TransformerFactoryConfigurationError extends java.lang.Error { + ctor public TransformerFactoryConfigurationError(); + ctor public TransformerFactoryConfigurationError(java.lang.String); + ctor public TransformerFactoryConfigurationError(java.lang.Exception); + ctor public TransformerFactoryConfigurationError(java.lang.Exception, java.lang.String); + method public java.lang.Exception getException(); + } + + public abstract interface URIResolver { + method public abstract javax.xml.transform.Source resolve(java.lang.String, java.lang.String) throws javax.xml.transform.TransformerException; + } + +} + +package javax.xml.transform.dom { + + public abstract interface DOMLocator implements javax.xml.transform.SourceLocator { + method public abstract org.w3c.dom.Node getOriginatingNode(); + } + + public class DOMResult implements javax.xml.transform.Result { + ctor public DOMResult(); + ctor public DOMResult(org.w3c.dom.Node); + ctor public DOMResult(org.w3c.dom.Node, java.lang.String); + ctor public DOMResult(org.w3c.dom.Node, org.w3c.dom.Node); + ctor public DOMResult(org.w3c.dom.Node, org.w3c.dom.Node, java.lang.String); + method public org.w3c.dom.Node getNextSibling(); + method public org.w3c.dom.Node getNode(); + method public java.lang.String getSystemId(); + method public void setNextSibling(org.w3c.dom.Node); + method public void setNode(org.w3c.dom.Node); + method public void setSystemId(java.lang.String); + field public static final java.lang.String FEATURE = "http://javax.xml.transform.dom.DOMResult/feature"; + } + + public class DOMSource implements javax.xml.transform.Source { + ctor public DOMSource(); + ctor public DOMSource(org.w3c.dom.Node); + ctor public DOMSource(org.w3c.dom.Node, java.lang.String); + method public org.w3c.dom.Node getNode(); + method public java.lang.String getSystemId(); + method public void setNode(org.w3c.dom.Node); + method public void setSystemId(java.lang.String); + field public static final java.lang.String FEATURE = "http://javax.xml.transform.dom.DOMSource/feature"; + } + +} + +package javax.xml.transform.sax { + + public class SAXResult implements javax.xml.transform.Result { + ctor public SAXResult(); + ctor public SAXResult(org.xml.sax.ContentHandler); + method public org.xml.sax.ContentHandler getHandler(); + method public org.xml.sax.ext.LexicalHandler getLexicalHandler(); + method public java.lang.String getSystemId(); + method public void setHandler(org.xml.sax.ContentHandler); + method public void setLexicalHandler(org.xml.sax.ext.LexicalHandler); + method public void setSystemId(java.lang.String); + field public static final java.lang.String FEATURE = "http://javax.xml.transform.sax.SAXResult/feature"; + } + + public class SAXSource implements javax.xml.transform.Source { + ctor public SAXSource(); + ctor public SAXSource(org.xml.sax.XMLReader, org.xml.sax.InputSource); + ctor public SAXSource(org.xml.sax.InputSource); + method public org.xml.sax.InputSource getInputSource(); + method public java.lang.String getSystemId(); + method public org.xml.sax.XMLReader getXMLReader(); + method public void setInputSource(org.xml.sax.InputSource); + method public void setSystemId(java.lang.String); + method public void setXMLReader(org.xml.sax.XMLReader); + method public static org.xml.sax.InputSource sourceToInputSource(javax.xml.transform.Source); + field public static final java.lang.String FEATURE = "http://javax.xml.transform.sax.SAXSource/feature"; + } + + public abstract class SAXTransformerFactory extends javax.xml.transform.TransformerFactory { + ctor protected SAXTransformerFactory(); + method public abstract javax.xml.transform.sax.TemplatesHandler newTemplatesHandler() throws javax.xml.transform.TransformerConfigurationException; + method public abstract javax.xml.transform.sax.TransformerHandler newTransformerHandler(javax.xml.transform.Source) throws javax.xml.transform.TransformerConfigurationException; + method public abstract javax.xml.transform.sax.TransformerHandler newTransformerHandler(javax.xml.transform.Templates) throws javax.xml.transform.TransformerConfigurationException; + method public abstract javax.xml.transform.sax.TransformerHandler newTransformerHandler() throws javax.xml.transform.TransformerConfigurationException; + method public abstract org.xml.sax.XMLFilter newXMLFilter(javax.xml.transform.Source) throws javax.xml.transform.TransformerConfigurationException; + method public abstract org.xml.sax.XMLFilter newXMLFilter(javax.xml.transform.Templates) throws javax.xml.transform.TransformerConfigurationException; + field public static final java.lang.String FEATURE = "http://javax.xml.transform.sax.SAXTransformerFactory/feature"; + field public static final java.lang.String FEATURE_XMLFILTER = "http://javax.xml.transform.sax.SAXTransformerFactory/feature/xmlfilter"; + } + + public abstract interface TemplatesHandler implements org.xml.sax.ContentHandler { + method public abstract java.lang.String getSystemId(); + method public abstract javax.xml.transform.Templates getTemplates(); + method public abstract void setSystemId(java.lang.String); + } + + public abstract interface TransformerHandler implements org.xml.sax.ContentHandler org.xml.sax.DTDHandler org.xml.sax.ext.LexicalHandler { + method public abstract java.lang.String getSystemId(); + method public abstract javax.xml.transform.Transformer getTransformer(); + method public abstract void setResult(javax.xml.transform.Result) throws java.lang.IllegalArgumentException; + method public abstract void setSystemId(java.lang.String); + } + +} + +package javax.xml.transform.stream { + + public class StreamResult implements javax.xml.transform.Result { + ctor public StreamResult(); + ctor public StreamResult(java.io.OutputStream); + ctor public StreamResult(java.io.Writer); + ctor public StreamResult(java.lang.String); + ctor public StreamResult(java.io.File); + method public java.io.OutputStream getOutputStream(); + method public java.lang.String getSystemId(); + method public java.io.Writer getWriter(); + method public void setOutputStream(java.io.OutputStream); + method public void setSystemId(java.lang.String); + method public void setSystemId(java.io.File); + method public void setWriter(java.io.Writer); + field public static final java.lang.String FEATURE = "http://javax.xml.transform.stream.StreamResult/feature"; + } + + public class StreamSource implements javax.xml.transform.Source { + ctor public StreamSource(); + ctor public StreamSource(java.io.InputStream); + ctor public StreamSource(java.io.InputStream, java.lang.String); + ctor public StreamSource(java.io.Reader); + ctor public StreamSource(java.io.Reader, java.lang.String); + ctor public StreamSource(java.lang.String); + ctor public StreamSource(java.io.File); + method public java.io.InputStream getInputStream(); + method public java.lang.String getPublicId(); + method public java.io.Reader getReader(); + method public java.lang.String getSystemId(); + method public void setInputStream(java.io.InputStream); + method public void setPublicId(java.lang.String); + method public void setReader(java.io.Reader); + method public void setSystemId(java.lang.String); + method public void setSystemId(java.io.File); + field public static final java.lang.String FEATURE = "http://javax.xml.transform.stream.StreamSource/feature"; + } + +} + +package javax.xml.validation { + + public abstract class Schema { + ctor protected Schema(); + method public abstract javax.xml.validation.Validator newValidator(); + method public abstract javax.xml.validation.ValidatorHandler newValidatorHandler(); + } + + public abstract class SchemaFactory { + ctor protected SchemaFactory(); + method public abstract org.xml.sax.ErrorHandler getErrorHandler(); + method public boolean getFeature(java.lang.String) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException; + method public java.lang.Object getProperty(java.lang.String) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException; + method public abstract org.w3c.dom.ls.LSResourceResolver getResourceResolver(); + method public abstract boolean isSchemaLanguageSupported(java.lang.String); + method public static javax.xml.validation.SchemaFactory newInstance(java.lang.String); + method public static javax.xml.validation.SchemaFactory newInstance(java.lang.String, java.lang.String, java.lang.ClassLoader); + method public javax.xml.validation.Schema newSchema(javax.xml.transform.Source) throws org.xml.sax.SAXException; + method public javax.xml.validation.Schema newSchema(java.io.File) throws org.xml.sax.SAXException; + method public javax.xml.validation.Schema newSchema(java.net.URL) throws org.xml.sax.SAXException; + method public abstract javax.xml.validation.Schema newSchema(javax.xml.transform.Source[]) throws org.xml.sax.SAXException; + method public abstract javax.xml.validation.Schema newSchema() throws org.xml.sax.SAXException; + method public abstract void setErrorHandler(org.xml.sax.ErrorHandler); + method public void setFeature(java.lang.String, boolean) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException; + method public void setProperty(java.lang.String, java.lang.Object) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException; + method public abstract void setResourceResolver(org.w3c.dom.ls.LSResourceResolver); + } + + public abstract class SchemaFactoryLoader { + ctor protected SchemaFactoryLoader(); + method public abstract javax.xml.validation.SchemaFactory newFactory(java.lang.String); + } + + public abstract class TypeInfoProvider { + ctor protected TypeInfoProvider(); + method public abstract org.w3c.dom.TypeInfo getAttributeTypeInfo(int); + method public abstract org.w3c.dom.TypeInfo getElementTypeInfo(); + method public abstract boolean isIdAttribute(int); + method public abstract boolean isSpecified(int); + } + + public abstract class Validator { + ctor protected Validator(); + method public abstract org.xml.sax.ErrorHandler getErrorHandler(); + method public boolean getFeature(java.lang.String) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException; + method public java.lang.Object getProperty(java.lang.String) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException; + method public abstract org.w3c.dom.ls.LSResourceResolver getResourceResolver(); + method public abstract void reset(); + method public abstract void setErrorHandler(org.xml.sax.ErrorHandler); + method public void setFeature(java.lang.String, boolean) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException; + method public void setProperty(java.lang.String, java.lang.Object) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException; + method public abstract void setResourceResolver(org.w3c.dom.ls.LSResourceResolver); + method public void validate(javax.xml.transform.Source) throws java.io.IOException, org.xml.sax.SAXException; + method public abstract void validate(javax.xml.transform.Source, javax.xml.transform.Result) throws java.io.IOException, org.xml.sax.SAXException; + } + + public abstract class ValidatorHandler implements org.xml.sax.ContentHandler { + ctor protected ValidatorHandler(); + method public abstract org.xml.sax.ContentHandler getContentHandler(); + method public abstract org.xml.sax.ErrorHandler getErrorHandler(); + method public boolean getFeature(java.lang.String) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException; + method public java.lang.Object getProperty(java.lang.String) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException; + method public abstract org.w3c.dom.ls.LSResourceResolver getResourceResolver(); + method public abstract javax.xml.validation.TypeInfoProvider getTypeInfoProvider(); + method public abstract void setContentHandler(org.xml.sax.ContentHandler); + method public abstract void setErrorHandler(org.xml.sax.ErrorHandler); + method public void setFeature(java.lang.String, boolean) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException; + method public void setProperty(java.lang.String, java.lang.Object) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException; + method public abstract void setResourceResolver(org.w3c.dom.ls.LSResourceResolver); + } + +} + +package javax.xml.xpath { + + public abstract interface XPath { + method public abstract javax.xml.xpath.XPathExpression compile(java.lang.String) throws javax.xml.xpath.XPathExpressionException; + method public abstract java.lang.Object evaluate(java.lang.String, java.lang.Object, javax.xml.namespace.QName) throws javax.xml.xpath.XPathExpressionException; + method public abstract java.lang.String evaluate(java.lang.String, java.lang.Object) throws javax.xml.xpath.XPathExpressionException; + method public abstract java.lang.Object evaluate(java.lang.String, org.xml.sax.InputSource, javax.xml.namespace.QName) throws javax.xml.xpath.XPathExpressionException; + method public abstract java.lang.String evaluate(java.lang.String, org.xml.sax.InputSource) throws javax.xml.xpath.XPathExpressionException; + method public abstract javax.xml.namespace.NamespaceContext getNamespaceContext(); + method public abstract javax.xml.xpath.XPathFunctionResolver getXPathFunctionResolver(); + method public abstract javax.xml.xpath.XPathVariableResolver getXPathVariableResolver(); + method public abstract void reset(); + method public abstract void setNamespaceContext(javax.xml.namespace.NamespaceContext); + method public abstract void setXPathFunctionResolver(javax.xml.xpath.XPathFunctionResolver); + method public abstract void setXPathVariableResolver(javax.xml.xpath.XPathVariableResolver); + } + + public class XPathConstants { + field public static final javax.xml.namespace.QName BOOLEAN; + field public static final java.lang.String DOM_OBJECT_MODEL = "http://java.sun.com/jaxp/xpath/dom"; + field public static final javax.xml.namespace.QName NODE; + field public static final javax.xml.namespace.QName NODESET; + field public static final javax.xml.namespace.QName NUMBER; + field public static final javax.xml.namespace.QName STRING; + } + + public class XPathException extends java.lang.Exception { + ctor public XPathException(java.lang.String); + ctor public XPathException(java.lang.Throwable); + } + + public abstract interface XPathExpression { + method public abstract java.lang.Object evaluate(java.lang.Object, javax.xml.namespace.QName) throws javax.xml.xpath.XPathExpressionException; + method public abstract java.lang.String evaluate(java.lang.Object) throws javax.xml.xpath.XPathExpressionException; + method public abstract java.lang.Object evaluate(org.xml.sax.InputSource, javax.xml.namespace.QName) throws javax.xml.xpath.XPathExpressionException; + method public abstract java.lang.String evaluate(org.xml.sax.InputSource) throws javax.xml.xpath.XPathExpressionException; + } + + public class XPathExpressionException extends javax.xml.xpath.XPathException { + ctor public XPathExpressionException(java.lang.String); + ctor public XPathExpressionException(java.lang.Throwable); + } + + public abstract class XPathFactory { + ctor protected XPathFactory(); + method public abstract boolean getFeature(java.lang.String) throws javax.xml.xpath.XPathFactoryConfigurationException; + method public abstract boolean isObjectModelSupported(java.lang.String); + method public static final javax.xml.xpath.XPathFactory newInstance(); + method public static final javax.xml.xpath.XPathFactory newInstance(java.lang.String) throws javax.xml.xpath.XPathFactoryConfigurationException; + method public static javax.xml.xpath.XPathFactory newInstance(java.lang.String, java.lang.String, java.lang.ClassLoader) throws javax.xml.xpath.XPathFactoryConfigurationException; + method public abstract javax.xml.xpath.XPath newXPath(); + method public abstract void setFeature(java.lang.String, boolean) throws javax.xml.xpath.XPathFactoryConfigurationException; + method public abstract void setXPathFunctionResolver(javax.xml.xpath.XPathFunctionResolver); + method public abstract void setXPathVariableResolver(javax.xml.xpath.XPathVariableResolver); + field public static final java.lang.String DEFAULT_OBJECT_MODEL_URI = "http://java.sun.com/jaxp/xpath/dom"; + field public static final java.lang.String DEFAULT_PROPERTY_NAME = "javax.xml.xpath.XPathFactory"; + } + + public class XPathFactoryConfigurationException extends javax.xml.xpath.XPathException { + ctor public XPathFactoryConfigurationException(java.lang.String); + ctor public XPathFactoryConfigurationException(java.lang.Throwable); + } + + public abstract interface XPathFunction { + method public abstract java.lang.Object evaluate(java.util.List) throws javax.xml.xpath.XPathFunctionException; + } + + public class XPathFunctionException extends javax.xml.xpath.XPathExpressionException { + ctor public XPathFunctionException(java.lang.String); + ctor public XPathFunctionException(java.lang.Throwable); + } + + public abstract interface XPathFunctionResolver { + method public abstract javax.xml.xpath.XPathFunction resolveFunction(javax.xml.namespace.QName, int); + } + + public abstract interface XPathVariableResolver { + method public abstract java.lang.Object resolveVariable(javax.xml.namespace.QName); + } + +} + +package junit.framework { + + public class Assert { + ctor protected Assert(); + method public static void assertEquals(java.lang.String, java.lang.Object, java.lang.Object); + method public static void assertEquals(java.lang.Object, java.lang.Object); + method public static void assertEquals(java.lang.String, java.lang.String, java.lang.String); + method public static void assertEquals(java.lang.String, java.lang.String); + method public static void assertEquals(java.lang.String, double, double, double); + method public static void assertEquals(double, double, double); + method public static void assertEquals(java.lang.String, float, float, float); + method public static void assertEquals(float, float, float); + method public static void assertEquals(java.lang.String, long, long); + method public static void assertEquals(long, long); + method public static void assertEquals(java.lang.String, boolean, boolean); + method public static void assertEquals(boolean, boolean); + method public static void assertEquals(java.lang.String, byte, byte); + method public static void assertEquals(byte, byte); + method public static void assertEquals(java.lang.String, char, char); + method public static void assertEquals(char, char); + method public static void assertEquals(java.lang.String, short, short); + method public static void assertEquals(short, short); + method public static void assertEquals(java.lang.String, int, int); + method public static void assertEquals(int, int); + method public static void assertFalse(java.lang.String, boolean); + method public static void assertFalse(boolean); + method public static void assertNotNull(java.lang.Object); + method public static void assertNotNull(java.lang.String, java.lang.Object); + method public static void assertNotSame(java.lang.String, java.lang.Object, java.lang.Object); + method public static void assertNotSame(java.lang.Object, java.lang.Object); + method public static void assertNull(java.lang.Object); + method public static void assertNull(java.lang.String, java.lang.Object); + method public static void assertSame(java.lang.String, java.lang.Object, java.lang.Object); + method public static void assertSame(java.lang.Object, java.lang.Object); + method public static void assertTrue(java.lang.String, boolean); + method public static void assertTrue(boolean); + method public static void fail(java.lang.String); + method public static void fail(); + method public static void failNotEquals(java.lang.String, java.lang.Object, java.lang.Object); + method public static void failNotSame(java.lang.String, java.lang.Object, java.lang.Object); + method public static void failSame(java.lang.String); + method public static java.lang.String format(java.lang.String, java.lang.Object, java.lang.Object); + } + + public class AssertionFailedError extends java.lang.AssertionError { + ctor public AssertionFailedError(); + ctor public AssertionFailedError(java.lang.String); + } + + public class ComparisonFailure extends junit.framework.AssertionFailedError { + ctor public ComparisonFailure(java.lang.String, java.lang.String, java.lang.String); + method public java.lang.String getActual(); + method public java.lang.String getExpected(); + } + + public abstract interface Protectable { + method public abstract void protect() throws java.lang.Throwable; + } + + public abstract interface Test { + method public abstract int countTestCases(); + method public abstract void run(junit.framework.TestResult); + } + + public abstract class TestCase extends junit.framework.Assert implements junit.framework.Test { + ctor public TestCase(); + ctor public TestCase(java.lang.String); + method public int countTestCases(); + method protected junit.framework.TestResult createResult(); + method public java.lang.String getName(); + method public junit.framework.TestResult run(); + method public void run(junit.framework.TestResult); + method public void runBare() throws java.lang.Throwable; + method protected void runTest() throws java.lang.Throwable; + method public void setName(java.lang.String); + method protected void setUp() throws java.lang.Exception; + method protected void tearDown() throws java.lang.Exception; + } + + public class TestFailure { + ctor public TestFailure(junit.framework.Test, java.lang.Throwable); + method public java.lang.String exceptionMessage(); + method public junit.framework.Test failedTest(); + method public boolean isFailure(); + method public java.lang.Throwable thrownException(); + method public java.lang.String trace(); + field protected junit.framework.Test fFailedTest; + field protected java.lang.Throwable fThrownException; + } + + public abstract interface TestListener { + method public abstract void addError(junit.framework.Test, java.lang.Throwable); + method public abstract void addFailure(junit.framework.Test, junit.framework.AssertionFailedError); + method public abstract void endTest(junit.framework.Test); + method public abstract void startTest(junit.framework.Test); + } + + public class TestResult { + ctor public TestResult(); + method public synchronized void addError(junit.framework.Test, java.lang.Throwable); + method public synchronized void addFailure(junit.framework.Test, junit.framework.AssertionFailedError); + method public synchronized void addListener(junit.framework.TestListener); + method public void endTest(junit.framework.Test); + method public synchronized int errorCount(); + method public synchronized java.util.Enumeration errors(); + method public synchronized int failureCount(); + method public synchronized java.util.Enumeration failures(); + method public synchronized void removeListener(junit.framework.TestListener); + method protected void run(junit.framework.TestCase); + method public synchronized int runCount(); + method public void runProtected(junit.framework.Test, junit.framework.Protectable); + method public synchronized boolean shouldStop(); + method public void startTest(junit.framework.Test); + method public synchronized void stop(); + method public synchronized boolean wasSuccessful(); + field protected java.util.Vector fErrors; + field protected java.util.Vector fFailures; + field protected java.util.Vector fListeners; + field protected int fRunTests; + } + + public class TestSuite implements junit.framework.Test { + ctor public TestSuite(); + ctor public TestSuite(java.lang.Class); + ctor public TestSuite(java.lang.Class, java.lang.String); + ctor public TestSuite(java.lang.String); + ctor public TestSuite(java.lang.Class...); + ctor public TestSuite(java.lang.Class[], java.lang.String); + method public void addTest(junit.framework.Test); + method public void addTestSuite(java.lang.Class); + method public int countTestCases(); + method public static junit.framework.Test createTest(java.lang.Class, java.lang.String); + method public java.lang.String getName(); + method public static java.lang.reflect.Constructor getTestConstructor(java.lang.Class) throws java.lang.NoSuchMethodException; + method public void run(junit.framework.TestResult); + method public void runTest(junit.framework.Test, junit.framework.TestResult); + method public void setName(java.lang.String); + method public junit.framework.Test testAt(int); + method public int testCount(); + method public java.util.Enumeration tests(); + method public static junit.framework.Test warning(java.lang.String); + } + +} + +package junit.runner { + + public abstract class BaseTestRunner implements junit.framework.TestListener { + ctor public BaseTestRunner(); + method public synchronized void addError(junit.framework.Test, java.lang.Throwable); + method public synchronized void addFailure(junit.framework.Test, junit.framework.AssertionFailedError); + method protected void clearStatus(); + method public java.lang.String elapsedTimeAsString(long); + method public synchronized void endTest(junit.framework.Test); + method public java.lang.String extractClassName(java.lang.String); + method public static java.lang.String getFilteredTrace(java.lang.Throwable); + method public static java.lang.String getFilteredTrace(java.lang.String); + method public deprecated junit.runner.TestSuiteLoader getLoader(); + method public static java.lang.String getPreference(java.lang.String); + method public static int getPreference(java.lang.String, int); + method protected static java.util.Properties getPreferences(); + method public junit.framework.Test getTest(java.lang.String); + method public static deprecated boolean inVAJava(); + method protected java.lang.Class loadSuiteClass(java.lang.String) throws java.lang.ClassNotFoundException; + method protected java.lang.String processArguments(java.lang.String[]); + method protected abstract void runFailed(java.lang.String); + method public static void savePreferences() throws java.io.IOException; + method public void setLoading(boolean); + method public void setPreference(java.lang.String, java.lang.String); + method protected static void setPreferences(java.util.Properties); + method protected static boolean showStackRaw(); + method public synchronized void startTest(junit.framework.Test); + method public abstract void testEnded(java.lang.String); + method public abstract void testFailed(int, junit.framework.Test, java.lang.Throwable); + method public abstract void testStarted(java.lang.String); + method public static java.lang.String truncate(java.lang.String); + method protected boolean useReloadingTestSuiteLoader(); + field public static final java.lang.String SUITE_METHODNAME = "suite"; + } + + public abstract interface TestSuiteLoader { + method public abstract java.lang.Class load(java.lang.String) throws java.lang.ClassNotFoundException; + method public abstract java.lang.Class reload(java.lang.Class) throws java.lang.ClassNotFoundException; + } + + public class Version { + method public static java.lang.String id(); + } + +} + +package org.apache.commons.logging { + + public abstract deprecated interface Log { + method public abstract void debug(java.lang.Object); + method public abstract void debug(java.lang.Object, java.lang.Throwable); + method public abstract void error(java.lang.Object); + method public abstract void error(java.lang.Object, java.lang.Throwable); + method public abstract void fatal(java.lang.Object); + method public abstract void fatal(java.lang.Object, java.lang.Throwable); + method public abstract void info(java.lang.Object); + method public abstract void info(java.lang.Object, java.lang.Throwable); + method public abstract boolean isDebugEnabled(); + method public abstract boolean isErrorEnabled(); + method public abstract boolean isFatalEnabled(); + method public abstract boolean isInfoEnabled(); + method public abstract boolean isTraceEnabled(); + method public abstract boolean isWarnEnabled(); + method public abstract void trace(java.lang.Object); + method public abstract void trace(java.lang.Object, java.lang.Throwable); + method public abstract void warn(java.lang.Object); + method public abstract void warn(java.lang.Object, java.lang.Throwable); + } + +} + +package org.apache.http { + + public deprecated class ConnectionClosedException extends java.io.IOException { + ctor public ConnectionClosedException(java.lang.String); + } + + public abstract deprecated interface ConnectionReuseStrategy { + method public abstract boolean keepAlive(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext); + } + + public abstract deprecated interface FormattedHeader implements org.apache.http.Header { + method public abstract org.apache.http.util.CharArrayBuffer getBuffer(); + method public abstract int getValuePos(); + } + + public abstract deprecated interface Header { + method public abstract org.apache.http.HeaderElement[] getElements() throws org.apache.http.ParseException; + method public abstract java.lang.String getName(); + method public abstract java.lang.String getValue(); + } + + public abstract deprecated interface HeaderElement { + method public abstract java.lang.String getName(); + method public abstract org.apache.http.NameValuePair getParameter(int); + method public abstract org.apache.http.NameValuePair getParameterByName(java.lang.String); + method public abstract int getParameterCount(); + method public abstract org.apache.http.NameValuePair[] getParameters(); + method public abstract java.lang.String getValue(); + } + + public abstract deprecated interface HeaderElementIterator implements java.util.Iterator { + method public abstract boolean hasNext(); + method public abstract org.apache.http.HeaderElement nextElement(); + } + + public abstract deprecated interface HeaderIterator implements java.util.Iterator { + method public abstract boolean hasNext(); + method public abstract org.apache.http.Header nextHeader(); + } + + public abstract deprecated interface HttpClientConnection implements org.apache.http.HttpConnection { + method public abstract void flush() throws java.io.IOException; + method public abstract boolean isResponseAvailable(int) throws java.io.IOException; + method public abstract void receiveResponseEntity(org.apache.http.HttpResponse) throws org.apache.http.HttpException, java.io.IOException; + method public abstract org.apache.http.HttpResponse receiveResponseHeader() throws org.apache.http.HttpException, java.io.IOException; + method public abstract void sendRequestEntity(org.apache.http.HttpEntityEnclosingRequest) throws org.apache.http.HttpException, java.io.IOException; + method public abstract void sendRequestHeader(org.apache.http.HttpRequest) throws org.apache.http.HttpException, java.io.IOException; + } + + public abstract deprecated interface HttpConnection { + method public abstract void close() throws java.io.IOException; + method public abstract org.apache.http.HttpConnectionMetrics getMetrics(); + method public abstract int getSocketTimeout(); + method public abstract boolean isOpen(); + method public abstract boolean isStale(); + method public abstract void setSocketTimeout(int); + method public abstract void shutdown() throws java.io.IOException; + } + + public abstract deprecated interface HttpConnectionMetrics { + method public abstract java.lang.Object getMetric(java.lang.String); + method public abstract long getReceivedBytesCount(); + method public abstract long getRequestCount(); + method public abstract long getResponseCount(); + method public abstract long getSentBytesCount(); + method public abstract void reset(); + } + + public abstract deprecated interface HttpEntity { + method public abstract void consumeContent() throws java.io.IOException; + method public abstract java.io.InputStream getContent() throws java.io.IOException, java.lang.IllegalStateException; + method public abstract org.apache.http.Header getContentEncoding(); + method public abstract long getContentLength(); + method public abstract org.apache.http.Header getContentType(); + method public abstract boolean isChunked(); + method public abstract boolean isRepeatable(); + method public abstract boolean isStreaming(); + method public abstract void writeTo(java.io.OutputStream) throws java.io.IOException; + } + + public abstract deprecated interface HttpEntityEnclosingRequest implements org.apache.http.HttpRequest { + method public abstract boolean expectContinue(); + method public abstract org.apache.http.HttpEntity getEntity(); + method public abstract void setEntity(org.apache.http.HttpEntity); + } + + public deprecated class HttpException extends java.lang.Exception { + ctor public HttpException(); + ctor public HttpException(java.lang.String); + ctor public HttpException(java.lang.String, java.lang.Throwable); + } + + public final deprecated class HttpHost implements java.lang.Cloneable { + ctor public HttpHost(java.lang.String, int, java.lang.String); + ctor public HttpHost(java.lang.String, int); + ctor public HttpHost(java.lang.String); + ctor public HttpHost(org.apache.http.HttpHost); + method public java.lang.Object clone() throws java.lang.CloneNotSupportedException; + method public java.lang.String getHostName(); + method public int getPort(); + method public java.lang.String getSchemeName(); + method public java.lang.String toHostString(); + method public java.lang.String toURI(); + field public static final java.lang.String DEFAULT_SCHEME_NAME = "http"; + field protected final java.lang.String hostname; + field protected final java.lang.String lcHostname; + field protected final int port; + field protected final java.lang.String schemeName; + } + + public abstract deprecated interface HttpInetConnection implements org.apache.http.HttpConnection { + method public abstract java.net.InetAddress getLocalAddress(); + method public abstract int getLocalPort(); + method public abstract java.net.InetAddress getRemoteAddress(); + method public abstract int getRemotePort(); + } + + public abstract deprecated interface HttpMessage { + method public abstract void addHeader(org.apache.http.Header); + method public abstract void addHeader(java.lang.String, java.lang.String); + method public abstract boolean containsHeader(java.lang.String); + method public abstract org.apache.http.Header[] getAllHeaders(); + method public abstract org.apache.http.Header getFirstHeader(java.lang.String); + method public abstract org.apache.http.Header[] getHeaders(java.lang.String); + method public abstract org.apache.http.Header getLastHeader(java.lang.String); + method public abstract org.apache.http.params.HttpParams getParams(); + method public abstract org.apache.http.ProtocolVersion getProtocolVersion(); + method public abstract org.apache.http.HeaderIterator headerIterator(); + method public abstract org.apache.http.HeaderIterator headerIterator(java.lang.String); + method public abstract void removeHeader(org.apache.http.Header); + method public abstract void removeHeaders(java.lang.String); + method public abstract void setHeader(org.apache.http.Header); + method public abstract void setHeader(java.lang.String, java.lang.String); + method public abstract void setHeaders(org.apache.http.Header[]); + method public abstract void setParams(org.apache.http.params.HttpParams); + } + + public abstract deprecated interface HttpRequest implements org.apache.http.HttpMessage { + method public abstract org.apache.http.RequestLine getRequestLine(); + } + + public abstract deprecated interface HttpRequestFactory { + method public abstract org.apache.http.HttpRequest newHttpRequest(org.apache.http.RequestLine) throws org.apache.http.MethodNotSupportedException; + method public abstract org.apache.http.HttpRequest newHttpRequest(java.lang.String, java.lang.String) throws org.apache.http.MethodNotSupportedException; + } + + public abstract deprecated interface HttpRequestInterceptor { + method public abstract void process(org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; + } + + public abstract deprecated interface HttpResponse implements org.apache.http.HttpMessage { + method public abstract org.apache.http.HttpEntity getEntity(); + method public abstract java.util.Locale getLocale(); + method public abstract org.apache.http.StatusLine getStatusLine(); + method public abstract void setEntity(org.apache.http.HttpEntity); + method public abstract void setLocale(java.util.Locale); + method public abstract void setReasonPhrase(java.lang.String) throws java.lang.IllegalStateException; + method public abstract void setStatusCode(int) throws java.lang.IllegalStateException; + method public abstract void setStatusLine(org.apache.http.StatusLine); + method public abstract void setStatusLine(org.apache.http.ProtocolVersion, int); + method public abstract void setStatusLine(org.apache.http.ProtocolVersion, int, java.lang.String); + } + + public abstract deprecated interface HttpResponseFactory { + method public abstract org.apache.http.HttpResponse newHttpResponse(org.apache.http.ProtocolVersion, int, org.apache.http.protocol.HttpContext); + method public abstract org.apache.http.HttpResponse newHttpResponse(org.apache.http.StatusLine, org.apache.http.protocol.HttpContext); + } + + public abstract deprecated interface HttpResponseInterceptor { + method public abstract void process(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; + } + + public abstract deprecated interface HttpServerConnection implements org.apache.http.HttpConnection { + method public abstract void flush() throws java.io.IOException; + method public abstract void receiveRequestEntity(org.apache.http.HttpEntityEnclosingRequest) throws org.apache.http.HttpException, java.io.IOException; + method public abstract org.apache.http.HttpRequest receiveRequestHeader() throws org.apache.http.HttpException, java.io.IOException; + method public abstract void sendResponseEntity(org.apache.http.HttpResponse) throws org.apache.http.HttpException, java.io.IOException; + method public abstract void sendResponseHeader(org.apache.http.HttpResponse) throws org.apache.http.HttpException, java.io.IOException; + } + + public abstract deprecated interface HttpStatus { + field public static final int SC_ACCEPTED = 202; // 0xca + field public static final int SC_BAD_GATEWAY = 502; // 0x1f6 + field public static final int SC_BAD_REQUEST = 400; // 0x190 + field public static final int SC_CONFLICT = 409; // 0x199 + field public static final int SC_CONTINUE = 100; // 0x64 + field public static final int SC_CREATED = 201; // 0xc9 + field public static final int SC_EXPECTATION_FAILED = 417; // 0x1a1 + field public static final int SC_FAILED_DEPENDENCY = 424; // 0x1a8 + field public static final int SC_FORBIDDEN = 403; // 0x193 + field public static final int SC_GATEWAY_TIMEOUT = 504; // 0x1f8 + field public static final int SC_GONE = 410; // 0x19a + field public static final int SC_HTTP_VERSION_NOT_SUPPORTED = 505; // 0x1f9 + field public static final int SC_INSUFFICIENT_SPACE_ON_RESOURCE = 419; // 0x1a3 + field public static final int SC_INSUFFICIENT_STORAGE = 507; // 0x1fb + field public static final int SC_INTERNAL_SERVER_ERROR = 500; // 0x1f4 + field public static final int SC_LENGTH_REQUIRED = 411; // 0x19b + field public static final int SC_LOCKED = 423; // 0x1a7 + field public static final int SC_METHOD_FAILURE = 420; // 0x1a4 + field public static final int SC_METHOD_NOT_ALLOWED = 405; // 0x195 + field public static final int SC_MOVED_PERMANENTLY = 301; // 0x12d + field public static final int SC_MOVED_TEMPORARILY = 302; // 0x12e + field public static final int SC_MULTIPLE_CHOICES = 300; // 0x12c + field public static final int SC_MULTI_STATUS = 207; // 0xcf + field public static final int SC_NON_AUTHORITATIVE_INFORMATION = 203; // 0xcb + field public static final int SC_NOT_ACCEPTABLE = 406; // 0x196 + field public static final int SC_NOT_FOUND = 404; // 0x194 + field public static final int SC_NOT_IMPLEMENTED = 501; // 0x1f5 + field public static final int SC_NOT_MODIFIED = 304; // 0x130 + field public static final int SC_NO_CONTENT = 204; // 0xcc + field public static final int SC_OK = 200; // 0xc8 + field public static final int SC_PARTIAL_CONTENT = 206; // 0xce + field public static final int SC_PAYMENT_REQUIRED = 402; // 0x192 + field public static final int SC_PRECONDITION_FAILED = 412; // 0x19c + field public static final int SC_PROCESSING = 102; // 0x66 + field public static final int SC_PROXY_AUTHENTICATION_REQUIRED = 407; // 0x197 + field public static final int SC_REQUESTED_RANGE_NOT_SATISFIABLE = 416; // 0x1a0 + field public static final int SC_REQUEST_TIMEOUT = 408; // 0x198 + field public static final int SC_REQUEST_TOO_LONG = 413; // 0x19d + field public static final int SC_REQUEST_URI_TOO_LONG = 414; // 0x19e + field public static final int SC_RESET_CONTENT = 205; // 0xcd + field public static final int SC_SEE_OTHER = 303; // 0x12f + field public static final int SC_SERVICE_UNAVAILABLE = 503; // 0x1f7 + field public static final int SC_SWITCHING_PROTOCOLS = 101; // 0x65 + field public static final int SC_TEMPORARY_REDIRECT = 307; // 0x133 + field public static final int SC_UNAUTHORIZED = 401; // 0x191 + field public static final int SC_UNPROCESSABLE_ENTITY = 422; // 0x1a6 + field public static final int SC_UNSUPPORTED_MEDIA_TYPE = 415; // 0x19f + field public static final int SC_USE_PROXY = 305; // 0x131 + } + + public final deprecated class HttpVersion extends org.apache.http.ProtocolVersion implements java.io.Serializable { + ctor public HttpVersion(int, int); + field public static final java.lang.String HTTP = "HTTP"; + field public static final org.apache.http.HttpVersion HTTP_0_9; + field public static final org.apache.http.HttpVersion HTTP_1_0; + field public static final org.apache.http.HttpVersion HTTP_1_1; + } + + public deprecated class MalformedChunkCodingException extends java.io.IOException { + ctor public MalformedChunkCodingException(); + ctor public MalformedChunkCodingException(java.lang.String); + } + + public deprecated class MethodNotSupportedException extends org.apache.http.HttpException { + ctor public MethodNotSupportedException(java.lang.String); + ctor public MethodNotSupportedException(java.lang.String, java.lang.Throwable); + } + + public abstract deprecated interface NameValuePair { + method public abstract java.lang.String getName(); + method public abstract java.lang.String getValue(); + } + + public deprecated class NoHttpResponseException extends java.io.IOException { + ctor public NoHttpResponseException(java.lang.String); + } + + public deprecated class ParseException extends java.lang.RuntimeException { + ctor public ParseException(); + ctor public ParseException(java.lang.String); + } + + public deprecated class ProtocolException extends org.apache.http.HttpException { + ctor public ProtocolException(); + ctor public ProtocolException(java.lang.String); + ctor public ProtocolException(java.lang.String, java.lang.Throwable); + } + + public deprecated class ProtocolVersion implements java.lang.Cloneable java.io.Serializable { + ctor public ProtocolVersion(java.lang.String, int, int); + method public java.lang.Object clone() throws java.lang.CloneNotSupportedException; + method public int compareToVersion(org.apache.http.ProtocolVersion); + method public final boolean equals(java.lang.Object); + method public org.apache.http.ProtocolVersion forVersion(int, int); + method public final int getMajor(); + method public final int getMinor(); + method public final java.lang.String getProtocol(); + method public final boolean greaterEquals(org.apache.http.ProtocolVersion); + method public final int hashCode(); + method public boolean isComparable(org.apache.http.ProtocolVersion); + method public final boolean lessEquals(org.apache.http.ProtocolVersion); + field protected final int major; + field protected final int minor; + field protected final java.lang.String protocol; + } + + public abstract deprecated interface ReasonPhraseCatalog { + method public abstract java.lang.String getReason(int, java.util.Locale); + } + + public abstract deprecated interface RequestLine { + method public abstract java.lang.String getMethod(); + method public abstract org.apache.http.ProtocolVersion getProtocolVersion(); + method public abstract java.lang.String getUri(); + } + + public abstract deprecated interface StatusLine { + method public abstract org.apache.http.ProtocolVersion getProtocolVersion(); + method public abstract java.lang.String getReasonPhrase(); + method public abstract int getStatusCode(); + } + + public abstract deprecated interface TokenIterator implements java.util.Iterator { + method public abstract boolean hasNext(); + method public abstract java.lang.String nextToken(); + } + + public deprecated class UnsupportedHttpVersionException extends org.apache.http.ProtocolException { + ctor public UnsupportedHttpVersionException(); + ctor public UnsupportedHttpVersionException(java.lang.String); + } + +} + +package org.apache.http.auth { + + public final deprecated class AUTH { + field public static final java.lang.String PROXY_AUTH = "Proxy-Authenticate"; + field public static final java.lang.String PROXY_AUTH_RESP = "Proxy-Authorization"; + field public static final java.lang.String WWW_AUTH = "WWW-Authenticate"; + field public static final java.lang.String WWW_AUTH_RESP = "Authorization"; + } + + public abstract deprecated interface AuthScheme { + method public abstract org.apache.http.Header authenticate(org.apache.http.auth.Credentials, org.apache.http.HttpRequest) throws org.apache.http.auth.AuthenticationException; + method public abstract java.lang.String getParameter(java.lang.String); + method public abstract java.lang.String getRealm(); + method public abstract java.lang.String getSchemeName(); + method public abstract boolean isComplete(); + method public abstract boolean isConnectionBased(); + method public abstract void processChallenge(org.apache.http.Header) throws org.apache.http.auth.MalformedChallengeException; + } + + public abstract deprecated interface AuthSchemeFactory { + method public abstract org.apache.http.auth.AuthScheme newInstance(org.apache.http.params.HttpParams); + } + + public final deprecated class AuthSchemeRegistry { + ctor public AuthSchemeRegistry(); + method public synchronized org.apache.http.auth.AuthScheme getAuthScheme(java.lang.String, org.apache.http.params.HttpParams) throws java.lang.IllegalStateException; + method public synchronized java.util.List getSchemeNames(); + method public synchronized void register(java.lang.String, org.apache.http.auth.AuthSchemeFactory); + method public synchronized void setItems(java.util.Map); + method public synchronized void unregister(java.lang.String); + } + + public deprecated class AuthScope { + ctor public AuthScope(java.lang.String, int, java.lang.String, java.lang.String); + ctor public AuthScope(java.lang.String, int, java.lang.String); + ctor public AuthScope(java.lang.String, int); + ctor public AuthScope(org.apache.http.auth.AuthScope); + method public java.lang.String getHost(); + method public int getPort(); + method public java.lang.String getRealm(); + method public java.lang.String getScheme(); + method public int match(org.apache.http.auth.AuthScope); + field public static final org.apache.http.auth.AuthScope ANY; + field public static final java.lang.String ANY_HOST; + field public static final int ANY_PORT = -1; // 0xffffffff + field public static final java.lang.String ANY_REALM; + field public static final java.lang.String ANY_SCHEME; + } + + public deprecated class AuthState { + ctor public AuthState(); + method public org.apache.http.auth.AuthScheme getAuthScheme(); + method public org.apache.http.auth.AuthScope getAuthScope(); + method public org.apache.http.auth.Credentials getCredentials(); + method public void invalidate(); + method public boolean isValid(); + method public void setAuthScheme(org.apache.http.auth.AuthScheme); + method public void setAuthScope(org.apache.http.auth.AuthScope); + method public void setCredentials(org.apache.http.auth.Credentials); + } + + public deprecated class AuthenticationException extends org.apache.http.ProtocolException { + ctor public AuthenticationException(); + ctor public AuthenticationException(java.lang.String); + ctor public AuthenticationException(java.lang.String, java.lang.Throwable); + } + + public final deprecated class BasicUserPrincipal implements java.security.Principal { + ctor public BasicUserPrincipal(java.lang.String); + method public java.lang.String getName(); + } + + public abstract deprecated interface Credentials { + method public abstract java.lang.String getPassword(); + method public abstract java.security.Principal getUserPrincipal(); + } + + public deprecated class InvalidCredentialsException extends org.apache.http.auth.AuthenticationException { + ctor public InvalidCredentialsException(); + ctor public InvalidCredentialsException(java.lang.String); + ctor public InvalidCredentialsException(java.lang.String, java.lang.Throwable); + } + + public deprecated class MalformedChallengeException extends org.apache.http.ProtocolException { + ctor public MalformedChallengeException(); + ctor public MalformedChallengeException(java.lang.String); + ctor public MalformedChallengeException(java.lang.String, java.lang.Throwable); + } + + public deprecated class NTCredentials implements org.apache.http.auth.Credentials { + ctor public NTCredentials(java.lang.String); + ctor public NTCredentials(java.lang.String, java.lang.String, java.lang.String, java.lang.String); + method public java.lang.String getDomain(); + method public java.lang.String getPassword(); + method public java.lang.String getUserName(); + method public java.security.Principal getUserPrincipal(); + method public java.lang.String getWorkstation(); + } + + public deprecated class NTUserPrincipal implements java.security.Principal { + ctor public NTUserPrincipal(java.lang.String, java.lang.String); + method public java.lang.String getDomain(); + method public java.lang.String getName(); + method public java.lang.String getUsername(); + } + + public deprecated class UsernamePasswordCredentials implements org.apache.http.auth.Credentials { + ctor public UsernamePasswordCredentials(java.lang.String); + ctor public UsernamePasswordCredentials(java.lang.String, java.lang.String); + method public java.lang.String getPassword(); + method public java.lang.String getUserName(); + method public java.security.Principal getUserPrincipal(); + } + +} + +package org.apache.http.auth.params { + + public abstract deprecated interface AuthPNames { + field public static final java.lang.String CREDENTIAL_CHARSET = "http.auth.credential-charset"; + } + + public deprecated class AuthParamBean extends org.apache.http.params.HttpAbstractParamBean { + ctor public AuthParamBean(org.apache.http.params.HttpParams); + method public void setCredentialCharset(java.lang.String); + } + + public final deprecated class AuthParams { + method public static java.lang.String getCredentialCharset(org.apache.http.params.HttpParams); + method public static void setCredentialCharset(org.apache.http.params.HttpParams, java.lang.String); + } + +} + +package org.apache.http.client { + + public abstract deprecated interface AuthenticationHandler { + method public abstract java.util.Map getChallenges(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.auth.MalformedChallengeException; + method public abstract boolean isAuthenticationRequested(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext); + method public abstract org.apache.http.auth.AuthScheme selectScheme(java.util.Map, org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.auth.AuthenticationException; + } + + public deprecated class CircularRedirectException extends org.apache.http.client.RedirectException { + ctor public CircularRedirectException(); + ctor public CircularRedirectException(java.lang.String); + ctor public CircularRedirectException(java.lang.String, java.lang.Throwable); + } + + public deprecated class ClientProtocolException extends java.io.IOException { + ctor public ClientProtocolException(); + ctor public ClientProtocolException(java.lang.String); + ctor public ClientProtocolException(java.lang.Throwable); + ctor public ClientProtocolException(java.lang.String, java.lang.Throwable); + } + + public abstract deprecated interface CookieStore { + method public abstract void addCookie(org.apache.http.cookie.Cookie); + method public abstract void clear(); + method public abstract boolean clearExpired(java.util.Date); + method public abstract java.util.List getCookies(); + } + + public abstract deprecated interface CredentialsProvider { + method public abstract void clear(); + method public abstract org.apache.http.auth.Credentials getCredentials(org.apache.http.auth.AuthScope); + method public abstract void setCredentials(org.apache.http.auth.AuthScope, org.apache.http.auth.Credentials); + } + + public abstract deprecated interface HttpClient { + method public abstract org.apache.http.HttpResponse execute(org.apache.http.client.methods.HttpUriRequest) throws org.apache.http.client.ClientProtocolException, java.io.IOException; + method public abstract org.apache.http.HttpResponse execute(org.apache.http.client.methods.HttpUriRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.client.ClientProtocolException, java.io.IOException; + method public abstract org.apache.http.HttpResponse execute(org.apache.http.HttpHost, org.apache.http.HttpRequest) throws org.apache.http.client.ClientProtocolException, java.io.IOException; + method public abstract org.apache.http.HttpResponse execute(org.apache.http.HttpHost, org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.client.ClientProtocolException, java.io.IOException; + method public abstract T execute(org.apache.http.client.methods.HttpUriRequest, org.apache.http.client.ResponseHandler) throws org.apache.http.client.ClientProtocolException, java.io.IOException; + method public abstract T execute(org.apache.http.client.methods.HttpUriRequest, org.apache.http.client.ResponseHandler, org.apache.http.protocol.HttpContext) throws org.apache.http.client.ClientProtocolException, java.io.IOException; + method public abstract T execute(org.apache.http.HttpHost, org.apache.http.HttpRequest, org.apache.http.client.ResponseHandler) throws org.apache.http.client.ClientProtocolException, java.io.IOException; + method public abstract T execute(org.apache.http.HttpHost, org.apache.http.HttpRequest, org.apache.http.client.ResponseHandler, org.apache.http.protocol.HttpContext) throws org.apache.http.client.ClientProtocolException, java.io.IOException; + method public abstract org.apache.http.conn.ClientConnectionManager getConnectionManager(); + method public abstract org.apache.http.params.HttpParams getParams(); + } + + public abstract deprecated interface HttpRequestRetryHandler { + method public abstract boolean retryRequest(java.io.IOException, int, org.apache.http.protocol.HttpContext); + } + + public deprecated class HttpResponseException extends org.apache.http.client.ClientProtocolException { + ctor public HttpResponseException(int, java.lang.String); + method public int getStatusCode(); + } + + public deprecated class NonRepeatableRequestException extends org.apache.http.ProtocolException { + ctor public NonRepeatableRequestException(); + ctor public NonRepeatableRequestException(java.lang.String); + } + + public deprecated class RedirectException extends org.apache.http.ProtocolException { + ctor public RedirectException(); + ctor public RedirectException(java.lang.String); + ctor public RedirectException(java.lang.String, java.lang.Throwable); + } + + public abstract deprecated interface RedirectHandler { + method public abstract java.net.URI getLocationURI(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.ProtocolException; + method public abstract boolean isRedirectRequested(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext); + } + + public abstract deprecated interface RequestDirector { + method public abstract org.apache.http.HttpResponse execute(org.apache.http.HttpHost, org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; + } + + public abstract deprecated interface ResponseHandler { + method public abstract T handleResponse(org.apache.http.HttpResponse) throws org.apache.http.client.ClientProtocolException, java.io.IOException; + } + + public abstract deprecated interface UserTokenHandler { + method public abstract java.lang.Object getUserToken(org.apache.http.protocol.HttpContext); + } + +} + +package org.apache.http.client.entity { + + public deprecated class UrlEncodedFormEntity extends org.apache.http.entity.StringEntity { + ctor public UrlEncodedFormEntity(java.util.List, java.lang.String) throws java.io.UnsupportedEncodingException; + ctor public UrlEncodedFormEntity(java.util.List) throws java.io.UnsupportedEncodingException; + } + +} + +package org.apache.http.client.methods { + + public abstract deprecated interface AbortableHttpRequest { + method public abstract void abort(); + method public abstract void setConnectionRequest(org.apache.http.conn.ClientConnectionRequest) throws java.io.IOException; + method public abstract void setReleaseTrigger(org.apache.http.conn.ConnectionReleaseTrigger) throws java.io.IOException; + } + + public deprecated class HttpDelete extends org.apache.http.client.methods.HttpRequestBase { + ctor public HttpDelete(); + ctor public HttpDelete(java.net.URI); + ctor public HttpDelete(java.lang.String); + method public java.lang.String getMethod(); + field public static final java.lang.String METHOD_NAME = "DELETE"; + } + + public abstract deprecated class HttpEntityEnclosingRequestBase extends org.apache.http.client.methods.HttpRequestBase implements org.apache.http.HttpEntityEnclosingRequest { + ctor public HttpEntityEnclosingRequestBase(); + method public boolean expectContinue(); + method public org.apache.http.HttpEntity getEntity(); + method public void setEntity(org.apache.http.HttpEntity); + } + + public deprecated class HttpGet extends org.apache.http.client.methods.HttpRequestBase { + ctor public HttpGet(); + ctor public HttpGet(java.net.URI); + ctor public HttpGet(java.lang.String); + method public java.lang.String getMethod(); + field public static final java.lang.String METHOD_NAME = "GET"; + } + + public deprecated class HttpHead extends org.apache.http.client.methods.HttpRequestBase { + ctor public HttpHead(); + ctor public HttpHead(java.net.URI); + ctor public HttpHead(java.lang.String); + method public java.lang.String getMethod(); + field public static final java.lang.String METHOD_NAME = "HEAD"; + } + + public deprecated class HttpOptions extends org.apache.http.client.methods.HttpRequestBase { + ctor public HttpOptions(); + ctor public HttpOptions(java.net.URI); + ctor public HttpOptions(java.lang.String); + method public java.util.Set getAllowedMethods(org.apache.http.HttpResponse); + method public java.lang.String getMethod(); + field public static final java.lang.String METHOD_NAME = "OPTIONS"; + } + + public deprecated class HttpPost extends org.apache.http.client.methods.HttpEntityEnclosingRequestBase { + ctor public HttpPost(); + ctor public HttpPost(java.net.URI); + ctor public HttpPost(java.lang.String); + method public java.lang.String getMethod(); + field public static final java.lang.String METHOD_NAME = "POST"; + } + + public deprecated class HttpPut extends org.apache.http.client.methods.HttpEntityEnclosingRequestBase { + ctor public HttpPut(); + ctor public HttpPut(java.net.URI); + ctor public HttpPut(java.lang.String); + method public java.lang.String getMethod(); + field public static final java.lang.String METHOD_NAME = "PUT"; + } + + public abstract deprecated class HttpRequestBase extends org.apache.http.message.AbstractHttpMessage implements org.apache.http.client.methods.AbortableHttpRequest java.lang.Cloneable org.apache.http.client.methods.HttpUriRequest { + ctor public HttpRequestBase(); + method public void abort(); + method public java.lang.Object clone() throws java.lang.CloneNotSupportedException; + method public abstract java.lang.String getMethod(); + method public org.apache.http.ProtocolVersion getProtocolVersion(); + method public org.apache.http.RequestLine getRequestLine(); + method public java.net.URI getURI(); + method public boolean isAborted(); + method public void setConnectionRequest(org.apache.http.conn.ClientConnectionRequest) throws java.io.IOException; + method public void setReleaseTrigger(org.apache.http.conn.ConnectionReleaseTrigger) throws java.io.IOException; + method public void setURI(java.net.URI); + } + + public deprecated class HttpTrace extends org.apache.http.client.methods.HttpRequestBase { + ctor public HttpTrace(); + ctor public HttpTrace(java.net.URI); + ctor public HttpTrace(java.lang.String); + method public java.lang.String getMethod(); + field public static final java.lang.String METHOD_NAME = "TRACE"; + } + + public abstract deprecated interface HttpUriRequest implements org.apache.http.HttpRequest { + method public abstract void abort() throws java.lang.UnsupportedOperationException; + method public abstract java.lang.String getMethod(); + method public abstract java.net.URI getURI(); + method public abstract boolean isAborted(); + } + +} + +package org.apache.http.client.params { + + public abstract deprecated interface AllClientPNames implements org.apache.http.auth.params.AuthPNames org.apache.http.client.params.ClientPNames org.apache.http.conn.params.ConnConnectionPNames org.apache.http.conn.params.ConnManagerPNames org.apache.http.conn.params.ConnRoutePNames org.apache.http.cookie.params.CookieSpecPNames org.apache.http.params.CoreConnectionPNames org.apache.http.params.CoreProtocolPNames { + } + + public final deprecated class AuthPolicy { + field public static final java.lang.String BASIC = "Basic"; + field public static final java.lang.String DIGEST = "Digest"; + field public static final java.lang.String NTLM = "NTLM"; + } + + public abstract deprecated interface ClientPNames { + field public static final java.lang.String ALLOW_CIRCULAR_REDIRECTS = "http.protocol.allow-circular-redirects"; + field public static final java.lang.String CONNECTION_MANAGER_FACTORY = "http.connection-manager.factory-object"; + field public static final java.lang.String CONNECTION_MANAGER_FACTORY_CLASS_NAME = "http.connection-manager.factory-class-name"; + field public static final java.lang.String COOKIE_POLICY = "http.protocol.cookie-policy"; + field public static final java.lang.String DEFAULT_HEADERS = "http.default-headers"; + field public static final java.lang.String DEFAULT_HOST = "http.default-host"; + field public static final java.lang.String HANDLE_AUTHENTICATION = "http.protocol.handle-authentication"; + field public static final java.lang.String HANDLE_REDIRECTS = "http.protocol.handle-redirects"; + field public static final java.lang.String MAX_REDIRECTS = "http.protocol.max-redirects"; + field public static final java.lang.String REJECT_RELATIVE_REDIRECT = "http.protocol.reject-relative-redirect"; + field public static final java.lang.String VIRTUAL_HOST = "http.virtual-host"; + } + + public deprecated class ClientParamBean extends org.apache.http.params.HttpAbstractParamBean { + ctor public ClientParamBean(org.apache.http.params.HttpParams); + method public void setAllowCircularRedirects(boolean); + method public void setConnectionManagerFactory(org.apache.http.conn.ClientConnectionManagerFactory); + method public void setConnectionManagerFactoryClassName(java.lang.String); + method public void setCookiePolicy(java.lang.String); + method public void setDefaultHeaders(java.util.Collection); + method public void setDefaultHost(org.apache.http.HttpHost); + method public void setHandleAuthentication(boolean); + method public void setHandleRedirects(boolean); + method public void setMaxRedirects(int); + method public void setRejectRelativeRedirect(boolean); + method public void setVirtualHost(org.apache.http.HttpHost); + } + + public final deprecated class CookiePolicy { + field public static final java.lang.String BEST_MATCH = "best-match"; + field public static final java.lang.String BROWSER_COMPATIBILITY = "compatibility"; + field public static final java.lang.String NETSCAPE = "netscape"; + field public static final java.lang.String RFC_2109 = "rfc2109"; + field public static final java.lang.String RFC_2965 = "rfc2965"; + } + + public deprecated class HttpClientParams { + method public static java.lang.String getCookiePolicy(org.apache.http.params.HttpParams); + method public static boolean isAuthenticating(org.apache.http.params.HttpParams); + method public static boolean isRedirecting(org.apache.http.params.HttpParams); + method public static void setAuthenticating(org.apache.http.params.HttpParams, boolean); + method public static void setCookiePolicy(org.apache.http.params.HttpParams, java.lang.String); + method public static void setRedirecting(org.apache.http.params.HttpParams, boolean); + } + +} + +package org.apache.http.client.protocol { + + public abstract deprecated interface ClientContext { + field public static final java.lang.String AUTHSCHEME_REGISTRY = "http.authscheme-registry"; + field public static final java.lang.String AUTH_SCHEME_PREF = "http.auth.scheme-pref"; + field public static final java.lang.String COOKIESPEC_REGISTRY = "http.cookiespec-registry"; + field public static final java.lang.String COOKIE_ORIGIN = "http.cookie-origin"; + field public static final java.lang.String COOKIE_SPEC = "http.cookie-spec"; + field public static final java.lang.String COOKIE_STORE = "http.cookie-store"; + field public static final java.lang.String CREDS_PROVIDER = "http.auth.credentials-provider"; + field public static final java.lang.String PROXY_AUTH_STATE = "http.auth.proxy-scope"; + field public static final java.lang.String TARGET_AUTH_STATE = "http.auth.target-scope"; + field public static final java.lang.String USER_TOKEN = "http.user-token"; + } + + public deprecated class ClientContextConfigurer implements org.apache.http.client.protocol.ClientContext { + ctor public ClientContextConfigurer(org.apache.http.protocol.HttpContext); + method public void setAuthSchemePref(java.util.List); + method public void setAuthSchemeRegistry(org.apache.http.auth.AuthSchemeRegistry); + method public void setCookieSpecRegistry(org.apache.http.cookie.CookieSpecRegistry); + method public void setCookieStore(org.apache.http.client.CookieStore); + method public void setCredentialsProvider(org.apache.http.client.CredentialsProvider); + } + + public deprecated class RequestAddCookies implements org.apache.http.HttpRequestInterceptor { + ctor public RequestAddCookies(); + method public void process(org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; + } + + public deprecated class RequestDefaultHeaders implements org.apache.http.HttpRequestInterceptor { + ctor public RequestDefaultHeaders(); + method public void process(org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; + } + + public deprecated class RequestProxyAuthentication implements org.apache.http.HttpRequestInterceptor { + ctor public RequestProxyAuthentication(); + method public void process(org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; + } + + public deprecated class RequestTargetAuthentication implements org.apache.http.HttpRequestInterceptor { + ctor public RequestTargetAuthentication(); + method public void process(org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; + } + + public deprecated class ResponseProcessCookies implements org.apache.http.HttpResponseInterceptor { + ctor public ResponseProcessCookies(); + method public void process(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; + } + +} + +package org.apache.http.client.utils { + + public deprecated class CloneUtils { + method public static java.lang.Object clone(java.lang.Object) throws java.lang.CloneNotSupportedException; + } + + public deprecated class URIUtils { + method public static java.net.URI createURI(java.lang.String, java.lang.String, int, java.lang.String, java.lang.String, java.lang.String) throws java.net.URISyntaxException; + method public static java.net.URI resolve(java.net.URI, java.lang.String); + method public static java.net.URI resolve(java.net.URI, java.net.URI); + method public static java.net.URI rewriteURI(java.net.URI, org.apache.http.HttpHost, boolean) throws java.net.URISyntaxException; + method public static java.net.URI rewriteURI(java.net.URI, org.apache.http.HttpHost) throws java.net.URISyntaxException; + } + + public deprecated class URLEncodedUtils { + ctor public URLEncodedUtils(); + method public static java.lang.String format(java.util.List, java.lang.String); + method public static boolean isEncoded(org.apache.http.HttpEntity); + method public static java.util.List parse(java.net.URI, java.lang.String); + method public static java.util.List parse(org.apache.http.HttpEntity) throws java.io.IOException; + method public static void parse(java.util.List, java.util.Scanner, java.lang.String); + field public static final java.lang.String CONTENT_TYPE = "application/x-www-form-urlencoded"; + } + +} + +package org.apache.http.conn { + + public deprecated class BasicEofSensorWatcher implements org.apache.http.conn.EofSensorWatcher { + ctor public BasicEofSensorWatcher(org.apache.http.conn.ManagedClientConnection, boolean); + method public boolean eofDetected(java.io.InputStream) throws java.io.IOException; + method public boolean streamAbort(java.io.InputStream) throws java.io.IOException; + method public boolean streamClosed(java.io.InputStream) throws java.io.IOException; + field protected boolean attemptReuse; + field protected org.apache.http.conn.ManagedClientConnection managedConn; + } + + public deprecated class BasicManagedEntity extends org.apache.http.entity.HttpEntityWrapper implements org.apache.http.conn.ConnectionReleaseTrigger org.apache.http.conn.EofSensorWatcher { + ctor public BasicManagedEntity(org.apache.http.HttpEntity, org.apache.http.conn.ManagedClientConnection, boolean); + method public void abortConnection() throws java.io.IOException; + method public boolean eofDetected(java.io.InputStream) throws java.io.IOException; + method public void releaseConnection() throws java.io.IOException; + method protected void releaseManagedConnection() throws java.io.IOException; + method public boolean streamAbort(java.io.InputStream) throws java.io.IOException; + method public boolean streamClosed(java.io.InputStream) throws java.io.IOException; + field protected final boolean attemptReuse; + field protected org.apache.http.conn.ManagedClientConnection managedConn; + } + + public abstract deprecated interface ClientConnectionManager { + method public abstract void closeExpiredConnections(); + method public abstract void closeIdleConnections(long, java.util.concurrent.TimeUnit); + method public abstract org.apache.http.conn.scheme.SchemeRegistry getSchemeRegistry(); + method public abstract void releaseConnection(org.apache.http.conn.ManagedClientConnection, long, java.util.concurrent.TimeUnit); + method public abstract org.apache.http.conn.ClientConnectionRequest requestConnection(org.apache.http.conn.routing.HttpRoute, java.lang.Object); + method public abstract void shutdown(); + } + + public abstract deprecated interface ClientConnectionManagerFactory { + method public abstract org.apache.http.conn.ClientConnectionManager newInstance(org.apache.http.params.HttpParams, org.apache.http.conn.scheme.SchemeRegistry); + } + + public abstract deprecated interface ClientConnectionOperator { + method public abstract org.apache.http.conn.OperatedClientConnection createConnection(); + method public abstract void openConnection(org.apache.http.conn.OperatedClientConnection, org.apache.http.HttpHost, java.net.InetAddress, org.apache.http.protocol.HttpContext, org.apache.http.params.HttpParams) throws java.io.IOException; + method public abstract void updateSecureConnection(org.apache.http.conn.OperatedClientConnection, org.apache.http.HttpHost, org.apache.http.protocol.HttpContext, org.apache.http.params.HttpParams) throws java.io.IOException; + } + + public abstract deprecated interface ClientConnectionRequest { + method public abstract void abortRequest(); + method public abstract org.apache.http.conn.ManagedClientConnection getConnection(long, java.util.concurrent.TimeUnit) throws org.apache.http.conn.ConnectionPoolTimeoutException, java.lang.InterruptedException; + } + + public deprecated class ConnectTimeoutException extends java.io.InterruptedIOException { + ctor public ConnectTimeoutException(); + ctor public ConnectTimeoutException(java.lang.String); + } + + public abstract deprecated interface ConnectionKeepAliveStrategy { + method public abstract long getKeepAliveDuration(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext); + } + + public deprecated class ConnectionPoolTimeoutException extends org.apache.http.conn.ConnectTimeoutException { + ctor public ConnectionPoolTimeoutException(); + ctor public ConnectionPoolTimeoutException(java.lang.String); + } + + public abstract deprecated interface ConnectionReleaseTrigger { + method public abstract void abortConnection() throws java.io.IOException; + method public abstract void releaseConnection() throws java.io.IOException; + } + + public deprecated class EofSensorInputStream extends java.io.InputStream implements org.apache.http.conn.ConnectionReleaseTrigger { + ctor public EofSensorInputStream(java.io.InputStream, org.apache.http.conn.EofSensorWatcher); + method public void abortConnection() throws java.io.IOException; + method protected void checkAbort() throws java.io.IOException; + method protected void checkClose() throws java.io.IOException; + method protected void checkEOF(int) throws java.io.IOException; + method protected boolean isReadAllowed() throws java.io.IOException; + method public int read() throws java.io.IOException; + method public void releaseConnection() throws java.io.IOException; + field protected java.io.InputStream wrappedStream; + } + + public abstract deprecated interface EofSensorWatcher { + method public abstract boolean eofDetected(java.io.InputStream) throws java.io.IOException; + method public abstract boolean streamAbort(java.io.InputStream) throws java.io.IOException; + method public abstract boolean streamClosed(java.io.InputStream) throws java.io.IOException; + } + + public deprecated class HttpHostConnectException extends java.net.ConnectException { + ctor public HttpHostConnectException(org.apache.http.HttpHost, java.net.ConnectException); + method public org.apache.http.HttpHost getHost(); + } + + public abstract deprecated interface ManagedClientConnection implements org.apache.http.conn.ConnectionReleaseTrigger org.apache.http.HttpClientConnection org.apache.http.HttpInetConnection { + method public abstract org.apache.http.conn.routing.HttpRoute getRoute(); + method public abstract javax.net.ssl.SSLSession getSSLSession(); + method public abstract java.lang.Object getState(); + method public abstract boolean isMarkedReusable(); + method public abstract boolean isSecure(); + method public abstract void layerProtocol(org.apache.http.protocol.HttpContext, org.apache.http.params.HttpParams) throws java.io.IOException; + method public abstract void markReusable(); + method public abstract void open(org.apache.http.conn.routing.HttpRoute, org.apache.http.protocol.HttpContext, org.apache.http.params.HttpParams) throws java.io.IOException; + method public abstract void setIdleDuration(long, java.util.concurrent.TimeUnit); + method public abstract void setState(java.lang.Object); + method public abstract void tunnelProxy(org.apache.http.HttpHost, boolean, org.apache.http.params.HttpParams) throws java.io.IOException; + method public abstract void tunnelTarget(boolean, org.apache.http.params.HttpParams) throws java.io.IOException; + method public abstract void unmarkReusable(); + } + + public final deprecated class MultihomePlainSocketFactory implements org.apache.http.conn.scheme.SocketFactory { + method public java.net.Socket connectSocket(java.net.Socket, java.lang.String, int, java.net.InetAddress, int, org.apache.http.params.HttpParams) throws java.io.IOException; + method public java.net.Socket createSocket(); + method public static org.apache.http.conn.MultihomePlainSocketFactory getSocketFactory(); + method public final boolean isSecure(java.net.Socket) throws java.lang.IllegalArgumentException; + } + + public abstract deprecated interface OperatedClientConnection implements org.apache.http.HttpClientConnection org.apache.http.HttpInetConnection { + method public abstract java.net.Socket getSocket(); + method public abstract org.apache.http.HttpHost getTargetHost(); + method public abstract boolean isSecure(); + method public abstract void openCompleted(boolean, org.apache.http.params.HttpParams) throws java.io.IOException; + method public abstract void opening(java.net.Socket, org.apache.http.HttpHost) throws java.io.IOException; + method public abstract void update(java.net.Socket, org.apache.http.HttpHost, boolean, org.apache.http.params.HttpParams) throws java.io.IOException; + } + +} + +package org.apache.http.conn.params { + + public abstract deprecated interface ConnConnectionPNames { + field public static final java.lang.String MAX_STATUS_LINE_GARBAGE = "http.connection.max-status-line-garbage"; + } + + public deprecated class ConnConnectionParamBean extends org.apache.http.params.HttpAbstractParamBean { + ctor public ConnConnectionParamBean(org.apache.http.params.HttpParams); + method public void setMaxStatusLineGarbage(int); + } + + public abstract deprecated interface ConnManagerPNames { + field public static final java.lang.String MAX_CONNECTIONS_PER_ROUTE = "http.conn-manager.max-per-route"; + field public static final java.lang.String MAX_TOTAL_CONNECTIONS = "http.conn-manager.max-total"; + field public static final java.lang.String TIMEOUT = "http.conn-manager.timeout"; + } + + public deprecated class ConnManagerParamBean extends org.apache.http.params.HttpAbstractParamBean { + ctor public ConnManagerParamBean(org.apache.http.params.HttpParams); + method public void setConnectionsPerRoute(org.apache.http.conn.params.ConnPerRouteBean); + method public void setMaxTotalConnections(int); + method public void setTimeout(long); + } + + public final deprecated class ConnManagerParams implements org.apache.http.conn.params.ConnManagerPNames { + ctor public ConnManagerParams(); + method public static org.apache.http.conn.params.ConnPerRoute getMaxConnectionsPerRoute(org.apache.http.params.HttpParams); + method public static int getMaxTotalConnections(org.apache.http.params.HttpParams); + method public static long getTimeout(org.apache.http.params.HttpParams); + method public static void setMaxConnectionsPerRoute(org.apache.http.params.HttpParams, org.apache.http.conn.params.ConnPerRoute); + method public static void setMaxTotalConnections(org.apache.http.params.HttpParams, int); + method public static void setTimeout(org.apache.http.params.HttpParams, long); + field public static final int DEFAULT_MAX_TOTAL_CONNECTIONS = 20; // 0x14 + } + + public abstract deprecated interface ConnPerRoute { + method public abstract int getMaxForRoute(org.apache.http.conn.routing.HttpRoute); + } + + public final deprecated class ConnPerRouteBean implements org.apache.http.conn.params.ConnPerRoute { + ctor public ConnPerRouteBean(int); + ctor public ConnPerRouteBean(); + method public int getDefaultMax(); + method public int getMaxForRoute(org.apache.http.conn.routing.HttpRoute); + method public void setDefaultMaxPerRoute(int); + method public void setMaxForRoute(org.apache.http.conn.routing.HttpRoute, int); + method public void setMaxForRoutes(java.util.Map); + field public static final int DEFAULT_MAX_CONNECTIONS_PER_ROUTE = 2; // 0x2 + } + + public abstract deprecated interface ConnRoutePNames { + field public static final java.lang.String DEFAULT_PROXY = "http.route.default-proxy"; + field public static final java.lang.String FORCED_ROUTE = "http.route.forced-route"; + field public static final java.lang.String LOCAL_ADDRESS = "http.route.local-address"; + } + + public deprecated class ConnRouteParamBean extends org.apache.http.params.HttpAbstractParamBean { + ctor public ConnRouteParamBean(org.apache.http.params.HttpParams); + method public void setDefaultProxy(org.apache.http.HttpHost); + method public void setForcedRoute(org.apache.http.conn.routing.HttpRoute); + method public void setLocalAddress(java.net.InetAddress); + } + + public deprecated class ConnRouteParams implements org.apache.http.conn.params.ConnRoutePNames { + method public static org.apache.http.HttpHost getDefaultProxy(org.apache.http.params.HttpParams); + method public static org.apache.http.conn.routing.HttpRoute getForcedRoute(org.apache.http.params.HttpParams); + method public static java.net.InetAddress getLocalAddress(org.apache.http.params.HttpParams); + method public static void setDefaultProxy(org.apache.http.params.HttpParams, org.apache.http.HttpHost); + method public static void setForcedRoute(org.apache.http.params.HttpParams, org.apache.http.conn.routing.HttpRoute); + method public static void setLocalAddress(org.apache.http.params.HttpParams, java.net.InetAddress); + field public static final org.apache.http.HttpHost NO_HOST; + field public static final org.apache.http.conn.routing.HttpRoute NO_ROUTE; + } + +} + +package org.apache.http.conn.routing { + + public deprecated class BasicRouteDirector implements org.apache.http.conn.routing.HttpRouteDirector { + ctor public BasicRouteDirector(); + method protected int directStep(org.apache.http.conn.routing.RouteInfo, org.apache.http.conn.routing.RouteInfo); + method protected int firstStep(org.apache.http.conn.routing.RouteInfo); + method public int nextStep(org.apache.http.conn.routing.RouteInfo, org.apache.http.conn.routing.RouteInfo); + method protected int proxiedStep(org.apache.http.conn.routing.RouteInfo, org.apache.http.conn.routing.RouteInfo); + } + + public final deprecated class HttpRoute implements java.lang.Cloneable org.apache.http.conn.routing.RouteInfo { + ctor public HttpRoute(org.apache.http.HttpHost, java.net.InetAddress, org.apache.http.HttpHost[], boolean, org.apache.http.conn.routing.RouteInfo.TunnelType, org.apache.http.conn.routing.RouteInfo.LayerType); + ctor public HttpRoute(org.apache.http.HttpHost, java.net.InetAddress, org.apache.http.HttpHost, boolean, org.apache.http.conn.routing.RouteInfo.TunnelType, org.apache.http.conn.routing.RouteInfo.LayerType); + ctor public HttpRoute(org.apache.http.HttpHost, java.net.InetAddress, boolean); + ctor public HttpRoute(org.apache.http.HttpHost); + ctor public HttpRoute(org.apache.http.HttpHost, java.net.InetAddress, org.apache.http.HttpHost, boolean); + method public java.lang.Object clone() throws java.lang.CloneNotSupportedException; + method public final boolean equals(java.lang.Object); + method public final int getHopCount(); + method public final org.apache.http.HttpHost getHopTarget(int); + method public final org.apache.http.conn.routing.RouteInfo.LayerType getLayerType(); + method public final java.net.InetAddress getLocalAddress(); + method public final org.apache.http.HttpHost getProxyHost(); + method public final org.apache.http.HttpHost getTargetHost(); + method public final org.apache.http.conn.routing.RouteInfo.TunnelType getTunnelType(); + method public final int hashCode(); + method public final boolean isLayered(); + method public final boolean isSecure(); + method public final boolean isTunnelled(); + method public final java.lang.String toString(); + } + + public abstract deprecated interface HttpRouteDirector { + method public abstract int nextStep(org.apache.http.conn.routing.RouteInfo, org.apache.http.conn.routing.RouteInfo); + field public static final int COMPLETE = 0; // 0x0 + field public static final int CONNECT_PROXY = 2; // 0x2 + field public static final int CONNECT_TARGET = 1; // 0x1 + field public static final int LAYER_PROTOCOL = 5; // 0x5 + field public static final int TUNNEL_PROXY = 4; // 0x4 + field public static final int TUNNEL_TARGET = 3; // 0x3 + field public static final int UNREACHABLE = -1; // 0xffffffff + } + + public abstract deprecated interface HttpRoutePlanner { + method public abstract org.apache.http.conn.routing.HttpRoute determineRoute(org.apache.http.HttpHost, org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException; + } + + public abstract deprecated interface RouteInfo { + method public abstract int getHopCount(); + method public abstract org.apache.http.HttpHost getHopTarget(int); + method public abstract org.apache.http.conn.routing.RouteInfo.LayerType getLayerType(); + method public abstract java.net.InetAddress getLocalAddress(); + method public abstract org.apache.http.HttpHost getProxyHost(); + method public abstract org.apache.http.HttpHost getTargetHost(); + method public abstract org.apache.http.conn.routing.RouteInfo.TunnelType getTunnelType(); + method public abstract boolean isLayered(); + method public abstract boolean isSecure(); + method public abstract boolean isTunnelled(); + } + + public static final class RouteInfo.LayerType extends java.lang.Enum { + method public static org.apache.http.conn.routing.RouteInfo.LayerType valueOf(java.lang.String); + method public static final org.apache.http.conn.routing.RouteInfo.LayerType[] values(); + enum_constant public static final org.apache.http.conn.routing.RouteInfo.LayerType LAYERED; + enum_constant public static final org.apache.http.conn.routing.RouteInfo.LayerType PLAIN; + } + + public static final class RouteInfo.TunnelType extends java.lang.Enum { + method public static org.apache.http.conn.routing.RouteInfo.TunnelType valueOf(java.lang.String); + method public static final org.apache.http.conn.routing.RouteInfo.TunnelType[] values(); + enum_constant public static final org.apache.http.conn.routing.RouteInfo.TunnelType PLAIN; + enum_constant public static final org.apache.http.conn.routing.RouteInfo.TunnelType TUNNELLED; + } + + public final deprecated class RouteTracker implements java.lang.Cloneable org.apache.http.conn.routing.RouteInfo { + ctor public RouteTracker(org.apache.http.HttpHost, java.net.InetAddress); + ctor public RouteTracker(org.apache.http.conn.routing.HttpRoute); + method public java.lang.Object clone() throws java.lang.CloneNotSupportedException; + method public final void connectProxy(org.apache.http.HttpHost, boolean); + method public final void connectTarget(boolean); + method public final boolean equals(java.lang.Object); + method public final int getHopCount(); + method public final org.apache.http.HttpHost getHopTarget(int); + method public final org.apache.http.conn.routing.RouteInfo.LayerType getLayerType(); + method public final java.net.InetAddress getLocalAddress(); + method public final org.apache.http.HttpHost getProxyHost(); + method public final org.apache.http.HttpHost getTargetHost(); + method public final org.apache.http.conn.routing.RouteInfo.TunnelType getTunnelType(); + method public final int hashCode(); + method public final boolean isConnected(); + method public final boolean isLayered(); + method public final boolean isSecure(); + method public final boolean isTunnelled(); + method public final void layerProtocol(boolean); + method public final org.apache.http.conn.routing.HttpRoute toRoute(); + method public final java.lang.String toString(); + method public final void tunnelProxy(org.apache.http.HttpHost, boolean); + method public final void tunnelTarget(boolean); + } + +} + +package org.apache.http.conn.scheme { + + public abstract deprecated interface HostNameResolver { + method public abstract java.net.InetAddress resolve(java.lang.String) throws java.io.IOException; + } + + public abstract deprecated interface LayeredSocketFactory implements org.apache.http.conn.scheme.SocketFactory { + method public abstract java.net.Socket createSocket(java.net.Socket, java.lang.String, int, boolean) throws java.io.IOException, java.net.UnknownHostException; + } + + public final deprecated class PlainSocketFactory implements org.apache.http.conn.scheme.SocketFactory { + ctor public PlainSocketFactory(org.apache.http.conn.scheme.HostNameResolver); + ctor public PlainSocketFactory(); + method public java.net.Socket connectSocket(java.net.Socket, java.lang.String, int, java.net.InetAddress, int, org.apache.http.params.HttpParams) throws java.io.IOException; + method public java.net.Socket createSocket(); + method public static org.apache.http.conn.scheme.PlainSocketFactory getSocketFactory(); + method public final boolean isSecure(java.net.Socket) throws java.lang.IllegalArgumentException; + } + + public final deprecated class Scheme { + ctor public Scheme(java.lang.String, org.apache.http.conn.scheme.SocketFactory, int); + method public final boolean equals(java.lang.Object); + method public final int getDefaultPort(); + method public final java.lang.String getName(); + method public final org.apache.http.conn.scheme.SocketFactory getSocketFactory(); + method public final boolean isLayered(); + method public final int resolvePort(int); + method public final java.lang.String toString(); + } + + public final deprecated class SchemeRegistry { + ctor public SchemeRegistry(); + method public final synchronized org.apache.http.conn.scheme.Scheme get(java.lang.String); + method public final synchronized org.apache.http.conn.scheme.Scheme getScheme(java.lang.String); + method public final synchronized org.apache.http.conn.scheme.Scheme getScheme(org.apache.http.HttpHost); + method public final synchronized java.util.List getSchemeNames(); + method public final synchronized org.apache.http.conn.scheme.Scheme register(org.apache.http.conn.scheme.Scheme); + method public synchronized void setItems(java.util.Map); + method public final synchronized org.apache.http.conn.scheme.Scheme unregister(java.lang.String); + } + + public abstract deprecated interface SocketFactory { + method public abstract java.net.Socket connectSocket(java.net.Socket, java.lang.String, int, java.net.InetAddress, int, org.apache.http.params.HttpParams) throws org.apache.http.conn.ConnectTimeoutException, java.io.IOException, java.net.UnknownHostException; + method public abstract java.net.Socket createSocket() throws java.io.IOException; + method public abstract boolean isSecure(java.net.Socket) throws java.lang.IllegalArgumentException; + } + +} + +package org.apache.http.conn.ssl { + + public abstract deprecated class AbstractVerifier implements org.apache.http.conn.ssl.X509HostnameVerifier { + ctor public AbstractVerifier(); + method public static boolean acceptableCountryWildcard(java.lang.String); + method public static int countDots(java.lang.String); + method public static java.lang.String[] getCNs(java.security.cert.X509Certificate); + method public static java.lang.String[] getDNSSubjectAlts(java.security.cert.X509Certificate); + method public final void verify(java.lang.String, javax.net.ssl.SSLSocket) throws java.io.IOException; + method public final boolean verify(java.lang.String, javax.net.ssl.SSLSession); + method public final void verify(java.lang.String, java.security.cert.X509Certificate) throws javax.net.ssl.SSLException; + method public final void verify(java.lang.String, java.lang.String[], java.lang.String[], boolean) throws javax.net.ssl.SSLException; + } + + public deprecated class AllowAllHostnameVerifier extends org.apache.http.conn.ssl.AbstractVerifier { + ctor public AllowAllHostnameVerifier(); + method public final java.lang.String toString(); + method public final void verify(java.lang.String, java.lang.String[], java.lang.String[]); + } + + public deprecated class BrowserCompatHostnameVerifier extends org.apache.http.conn.ssl.AbstractVerifier { + ctor public BrowserCompatHostnameVerifier(); + method public final java.lang.String toString(); + method public final void verify(java.lang.String, java.lang.String[], java.lang.String[]) throws javax.net.ssl.SSLException; + } + + public deprecated class SSLSocketFactory implements org.apache.http.conn.scheme.LayeredSocketFactory { + ctor public SSLSocketFactory(java.lang.String, java.security.KeyStore, java.lang.String, java.security.KeyStore, java.security.SecureRandom, org.apache.http.conn.scheme.HostNameResolver) throws java.security.KeyManagementException, java.security.KeyStoreException, java.security.NoSuchAlgorithmException, java.security.UnrecoverableKeyException; + ctor public SSLSocketFactory(java.security.KeyStore, java.lang.String, java.security.KeyStore) throws java.security.KeyManagementException, java.security.KeyStoreException, java.security.NoSuchAlgorithmException, java.security.UnrecoverableKeyException; + ctor public SSLSocketFactory(java.security.KeyStore, java.lang.String) throws java.security.KeyManagementException, java.security.KeyStoreException, java.security.NoSuchAlgorithmException, java.security.UnrecoverableKeyException; + ctor public SSLSocketFactory(java.security.KeyStore) throws java.security.KeyManagementException, java.security.KeyStoreException, java.security.NoSuchAlgorithmException, java.security.UnrecoverableKeyException; + method public java.net.Socket connectSocket(java.net.Socket, java.lang.String, int, java.net.InetAddress, int, org.apache.http.params.HttpParams) throws java.io.IOException; + method public java.net.Socket createSocket() throws java.io.IOException; + method public java.net.Socket createSocket(java.net.Socket, java.lang.String, int, boolean) throws java.io.IOException, java.net.UnknownHostException; + method public org.apache.http.conn.ssl.X509HostnameVerifier getHostnameVerifier(); + method public static org.apache.http.conn.ssl.SSLSocketFactory getSocketFactory(); + method public boolean isSecure(java.net.Socket) throws java.lang.IllegalArgumentException; + method public void setHostnameVerifier(org.apache.http.conn.ssl.X509HostnameVerifier); + field public static final org.apache.http.conn.ssl.X509HostnameVerifier ALLOW_ALL_HOSTNAME_VERIFIER; + field public static final org.apache.http.conn.ssl.X509HostnameVerifier BROWSER_COMPATIBLE_HOSTNAME_VERIFIER; + field public static final java.lang.String SSL = "SSL"; + field public static final java.lang.String SSLV2 = "SSLv2"; + field public static final org.apache.http.conn.ssl.X509HostnameVerifier STRICT_HOSTNAME_VERIFIER; + field public static final java.lang.String TLS = "TLS"; + } + + public deprecated class StrictHostnameVerifier extends org.apache.http.conn.ssl.AbstractVerifier { + ctor public StrictHostnameVerifier(); + method public final java.lang.String toString(); + method public final void verify(java.lang.String, java.lang.String[], java.lang.String[]) throws javax.net.ssl.SSLException; + } + + public abstract deprecated interface X509HostnameVerifier implements javax.net.ssl.HostnameVerifier { + method public abstract boolean verify(java.lang.String, javax.net.ssl.SSLSession); + method public abstract void verify(java.lang.String, javax.net.ssl.SSLSocket) throws java.io.IOException; + method public abstract void verify(java.lang.String, java.security.cert.X509Certificate) throws javax.net.ssl.SSLException; + method public abstract void verify(java.lang.String, java.lang.String[], java.lang.String[]) throws javax.net.ssl.SSLException; + } + +} + +package org.apache.http.conn.util { + + public deprecated class InetAddressUtils { + method public static boolean isIPv4Address(java.lang.String); + method public static boolean isIPv6Address(java.lang.String); + method public static boolean isIPv6HexCompressedAddress(java.lang.String); + method public static boolean isIPv6StdAddress(java.lang.String); + } + +} + +package org.apache.http.cookie { + + public abstract deprecated interface ClientCookie implements org.apache.http.cookie.Cookie { + method public abstract boolean containsAttribute(java.lang.String); + method public abstract java.lang.String getAttribute(java.lang.String); + field public static final java.lang.String COMMENTURL_ATTR = "commenturl"; + field public static final java.lang.String COMMENT_ATTR = "comment"; + field public static final java.lang.String DISCARD_ATTR = "discard"; + field public static final java.lang.String DOMAIN_ATTR = "domain"; + field public static final java.lang.String EXPIRES_ATTR = "expires"; + field public static final java.lang.String MAX_AGE_ATTR = "max-age"; + field public static final java.lang.String PATH_ATTR = "path"; + field public static final java.lang.String PORT_ATTR = "port"; + field public static final java.lang.String SECURE_ATTR = "secure"; + field public static final java.lang.String VERSION_ATTR = "version"; + } + + public abstract deprecated interface Cookie { + method public abstract java.lang.String getComment(); + method public abstract java.lang.String getCommentURL(); + method public abstract java.lang.String getDomain(); + method public abstract java.util.Date getExpiryDate(); + method public abstract java.lang.String getName(); + method public abstract java.lang.String getPath(); + method public abstract int[] getPorts(); + method public abstract java.lang.String getValue(); + method public abstract int getVersion(); + method public abstract boolean isExpired(java.util.Date); + method public abstract boolean isPersistent(); + method public abstract boolean isSecure(); + } + + public abstract deprecated interface CookieAttributeHandler { + method public abstract boolean match(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin); + method public abstract void parse(org.apache.http.cookie.SetCookie, java.lang.String) throws org.apache.http.cookie.MalformedCookieException; + method public abstract void validate(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin) throws org.apache.http.cookie.MalformedCookieException; + } + + public deprecated class CookieIdentityComparator implements java.util.Comparator java.io.Serializable { + ctor public CookieIdentityComparator(); + method public int compare(org.apache.http.cookie.Cookie, org.apache.http.cookie.Cookie); + } + + public final deprecated class CookieOrigin { + ctor public CookieOrigin(java.lang.String, int, java.lang.String, boolean); + method public java.lang.String getHost(); + method public java.lang.String getPath(); + method public int getPort(); + method public boolean isSecure(); + } + + public deprecated class CookiePathComparator implements java.util.Comparator java.io.Serializable { + ctor public CookiePathComparator(); + method public int compare(org.apache.http.cookie.Cookie, org.apache.http.cookie.Cookie); + } + + public abstract deprecated interface CookieSpec { + method public abstract java.util.List formatCookies(java.util.List); + method public abstract int getVersion(); + method public abstract org.apache.http.Header getVersionHeader(); + method public abstract boolean match(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin); + method public abstract java.util.List parse(org.apache.http.Header, org.apache.http.cookie.CookieOrigin) throws org.apache.http.cookie.MalformedCookieException; + method public abstract void validate(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin) throws org.apache.http.cookie.MalformedCookieException; + } + + public abstract deprecated interface CookieSpecFactory { + method public abstract org.apache.http.cookie.CookieSpec newInstance(org.apache.http.params.HttpParams); + } + + public final deprecated class CookieSpecRegistry { + ctor public CookieSpecRegistry(); + method public synchronized org.apache.http.cookie.CookieSpec getCookieSpec(java.lang.String, org.apache.http.params.HttpParams) throws java.lang.IllegalStateException; + method public synchronized org.apache.http.cookie.CookieSpec getCookieSpec(java.lang.String) throws java.lang.IllegalStateException; + method public synchronized java.util.List getSpecNames(); + method public synchronized void register(java.lang.String, org.apache.http.cookie.CookieSpecFactory); + method public synchronized void setItems(java.util.Map); + method public synchronized void unregister(java.lang.String); + } + + public deprecated class MalformedCookieException extends org.apache.http.ProtocolException { + ctor public MalformedCookieException(); + ctor public MalformedCookieException(java.lang.String); + ctor public MalformedCookieException(java.lang.String, java.lang.Throwable); + } + + public abstract deprecated interface SM { + field public static final java.lang.String COOKIE = "Cookie"; + field public static final java.lang.String COOKIE2 = "Cookie2"; + field public static final java.lang.String SET_COOKIE = "Set-Cookie"; + field public static final java.lang.String SET_COOKIE2 = "Set-Cookie2"; + } + + public abstract deprecated interface SetCookie implements org.apache.http.cookie.Cookie { + method public abstract void setComment(java.lang.String); + method public abstract void setDomain(java.lang.String); + method public abstract void setExpiryDate(java.util.Date); + method public abstract void setPath(java.lang.String); + method public abstract void setSecure(boolean); + method public abstract void setValue(java.lang.String); + method public abstract void setVersion(int); + } + + public abstract deprecated interface SetCookie2 implements org.apache.http.cookie.SetCookie { + method public abstract void setCommentURL(java.lang.String); + method public abstract void setDiscard(boolean); + method public abstract void setPorts(int[]); + } + +} + +package org.apache.http.cookie.params { + + public abstract deprecated interface CookieSpecPNames { + field public static final java.lang.String DATE_PATTERNS = "http.protocol.cookie-datepatterns"; + field public static final java.lang.String SINGLE_COOKIE_HEADER = "http.protocol.single-cookie-header"; + } + + public deprecated class CookieSpecParamBean extends org.apache.http.params.HttpAbstractParamBean { + ctor public CookieSpecParamBean(org.apache.http.params.HttpParams); + method public void setDatePatterns(java.util.Collection); + method public void setSingleHeader(boolean); + } + +} + +package org.apache.http.entity { + + public abstract deprecated class AbstractHttpEntity implements org.apache.http.HttpEntity { + ctor protected AbstractHttpEntity(); + method public void consumeContent() throws java.io.IOException, java.lang.UnsupportedOperationException; + method public org.apache.http.Header getContentEncoding(); + method public org.apache.http.Header getContentType(); + method public boolean isChunked(); + method public void setChunked(boolean); + method public void setContentEncoding(org.apache.http.Header); + method public void setContentEncoding(java.lang.String); + method public void setContentType(org.apache.http.Header); + method public void setContentType(java.lang.String); + field protected boolean chunked; + field protected org.apache.http.Header contentEncoding; + field protected org.apache.http.Header contentType; + } + + public deprecated class BasicHttpEntity extends org.apache.http.entity.AbstractHttpEntity { + ctor public BasicHttpEntity(); + method public java.io.InputStream getContent() throws java.lang.IllegalStateException; + method public long getContentLength(); + method public boolean isRepeatable(); + method public boolean isStreaming(); + method public void setContent(java.io.InputStream); + method public void setContentLength(long); + method public void writeTo(java.io.OutputStream) throws java.io.IOException; + } + + public deprecated class BufferedHttpEntity extends org.apache.http.entity.HttpEntityWrapper { + ctor public BufferedHttpEntity(org.apache.http.HttpEntity) throws java.io.IOException; + } + + public deprecated class ByteArrayEntity extends org.apache.http.entity.AbstractHttpEntity implements java.lang.Cloneable { + ctor public ByteArrayEntity(byte[]); + method public java.lang.Object clone() throws java.lang.CloneNotSupportedException; + method public java.io.InputStream getContent(); + method public long getContentLength(); + method public boolean isRepeatable(); + method public boolean isStreaming(); + method public void writeTo(java.io.OutputStream) throws java.io.IOException; + field protected final byte[] content; + } + + public abstract deprecated interface ContentLengthStrategy { + method public abstract long determineLength(org.apache.http.HttpMessage) throws org.apache.http.HttpException; + field public static final int CHUNKED = -2; // 0xfffffffe + field public static final int IDENTITY = -1; // 0xffffffff + } + + public abstract deprecated interface ContentProducer { + method public abstract void writeTo(java.io.OutputStream) throws java.io.IOException; + } + + public deprecated class EntityTemplate extends org.apache.http.entity.AbstractHttpEntity { + ctor public EntityTemplate(org.apache.http.entity.ContentProducer); + method public java.io.InputStream getContent(); + method public long getContentLength(); + method public boolean isRepeatable(); + method public boolean isStreaming(); + method public void writeTo(java.io.OutputStream) throws java.io.IOException; + } + + public deprecated class FileEntity extends org.apache.http.entity.AbstractHttpEntity implements java.lang.Cloneable { + ctor public FileEntity(java.io.File, java.lang.String); + method public java.lang.Object clone() throws java.lang.CloneNotSupportedException; + method public java.io.InputStream getContent() throws java.io.IOException; + method public long getContentLength(); + method public boolean isRepeatable(); + method public boolean isStreaming(); + method public void writeTo(java.io.OutputStream) throws java.io.IOException; + field protected final java.io.File file; + } + + public deprecated class HttpEntityWrapper implements org.apache.http.HttpEntity { + ctor public HttpEntityWrapper(org.apache.http.HttpEntity); + method public void consumeContent() throws java.io.IOException; + method public java.io.InputStream getContent() throws java.io.IOException; + method public org.apache.http.Header getContentEncoding(); + method public long getContentLength(); + method public org.apache.http.Header getContentType(); + method public boolean isChunked(); + method public boolean isRepeatable(); + method public boolean isStreaming(); + method public void writeTo(java.io.OutputStream) throws java.io.IOException; + field protected org.apache.http.HttpEntity wrappedEntity; + } + + public deprecated class InputStreamEntity extends org.apache.http.entity.AbstractHttpEntity { + ctor public InputStreamEntity(java.io.InputStream, long); + method public java.io.InputStream getContent() throws java.io.IOException; + method public long getContentLength(); + method public boolean isRepeatable(); + method public boolean isStreaming(); + method public void writeTo(java.io.OutputStream) throws java.io.IOException; + } + + public deprecated class SerializableEntity extends org.apache.http.entity.AbstractHttpEntity { + ctor public SerializableEntity(java.io.Serializable, boolean) throws java.io.IOException; + method public java.io.InputStream getContent() throws java.io.IOException, java.lang.IllegalStateException; + method public long getContentLength(); + method public boolean isRepeatable(); + method public boolean isStreaming(); + method public void writeTo(java.io.OutputStream) throws java.io.IOException; + } + + public deprecated class StringEntity extends org.apache.http.entity.AbstractHttpEntity implements java.lang.Cloneable { + ctor public StringEntity(java.lang.String, java.lang.String) throws java.io.UnsupportedEncodingException; + ctor public StringEntity(java.lang.String) throws java.io.UnsupportedEncodingException; + method public java.lang.Object clone() throws java.lang.CloneNotSupportedException; + method public java.io.InputStream getContent() throws java.io.IOException; + method public long getContentLength(); + method public boolean isRepeatable(); + method public boolean isStreaming(); + method public void writeTo(java.io.OutputStream) throws java.io.IOException; + field protected final byte[] content; + } + +} + +package org.apache.http.impl { + + public abstract deprecated class AbstractHttpClientConnection implements org.apache.http.HttpClientConnection { + ctor public AbstractHttpClientConnection(); + method protected abstract void assertOpen() throws java.lang.IllegalStateException; + method protected org.apache.http.impl.entity.EntityDeserializer createEntityDeserializer(); + method protected org.apache.http.impl.entity.EntitySerializer createEntitySerializer(); + method protected org.apache.http.HttpResponseFactory createHttpResponseFactory(); + method protected org.apache.http.io.HttpMessageWriter createRequestWriter(org.apache.http.io.SessionOutputBuffer, org.apache.http.params.HttpParams); + method protected org.apache.http.io.HttpMessageParser createResponseParser(org.apache.http.io.SessionInputBuffer, org.apache.http.HttpResponseFactory, org.apache.http.params.HttpParams); + method protected void doFlush() throws java.io.IOException; + method public void flush() throws java.io.IOException; + method public org.apache.http.HttpConnectionMetrics getMetrics(); + method protected void init(org.apache.http.io.SessionInputBuffer, org.apache.http.io.SessionOutputBuffer, org.apache.http.params.HttpParams); + method public boolean isResponseAvailable(int) throws java.io.IOException; + method public boolean isStale(); + method public void receiveResponseEntity(org.apache.http.HttpResponse) throws org.apache.http.HttpException, java.io.IOException; + method public org.apache.http.HttpResponse receiveResponseHeader() throws org.apache.http.HttpException, java.io.IOException; + method public void sendRequestEntity(org.apache.http.HttpEntityEnclosingRequest) throws org.apache.http.HttpException, java.io.IOException; + method public void sendRequestHeader(org.apache.http.HttpRequest) throws org.apache.http.HttpException, java.io.IOException; + } + + public abstract deprecated class AbstractHttpServerConnection implements org.apache.http.HttpServerConnection { + ctor public AbstractHttpServerConnection(); + method protected abstract void assertOpen() throws java.lang.IllegalStateException; + method protected org.apache.http.impl.entity.EntityDeserializer createEntityDeserializer(); + method protected org.apache.http.impl.entity.EntitySerializer createEntitySerializer(); + method protected org.apache.http.HttpRequestFactory createHttpRequestFactory(); + method protected org.apache.http.io.HttpMessageParser createRequestParser(org.apache.http.io.SessionInputBuffer, org.apache.http.HttpRequestFactory, org.apache.http.params.HttpParams); + method protected org.apache.http.io.HttpMessageWriter createResponseWriter(org.apache.http.io.SessionOutputBuffer, org.apache.http.params.HttpParams); + method protected void doFlush() throws java.io.IOException; + method public void flush() throws java.io.IOException; + method public org.apache.http.HttpConnectionMetrics getMetrics(); + method protected void init(org.apache.http.io.SessionInputBuffer, org.apache.http.io.SessionOutputBuffer, org.apache.http.params.HttpParams); + method public boolean isStale(); + method public void receiveRequestEntity(org.apache.http.HttpEntityEnclosingRequest) throws org.apache.http.HttpException, java.io.IOException; + method public org.apache.http.HttpRequest receiveRequestHeader() throws org.apache.http.HttpException, java.io.IOException; + method public void sendResponseEntity(org.apache.http.HttpResponse) throws org.apache.http.HttpException, java.io.IOException; + method public void sendResponseHeader(org.apache.http.HttpResponse) throws org.apache.http.HttpException, java.io.IOException; + } + + public deprecated class DefaultConnectionReuseStrategy implements org.apache.http.ConnectionReuseStrategy { + ctor public DefaultConnectionReuseStrategy(); + method protected org.apache.http.TokenIterator createTokenIterator(org.apache.http.HeaderIterator); + method public boolean keepAlive(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext); + } + + public deprecated class DefaultHttpClientConnection extends org.apache.http.impl.SocketHttpClientConnection { + ctor public DefaultHttpClientConnection(); + method public void bind(java.net.Socket, org.apache.http.params.HttpParams) throws java.io.IOException; + } + + public deprecated class DefaultHttpRequestFactory implements org.apache.http.HttpRequestFactory { + ctor public DefaultHttpRequestFactory(); + method public org.apache.http.HttpRequest newHttpRequest(org.apache.http.RequestLine) throws org.apache.http.MethodNotSupportedException; + method public org.apache.http.HttpRequest newHttpRequest(java.lang.String, java.lang.String) throws org.apache.http.MethodNotSupportedException; + } + + public deprecated class DefaultHttpResponseFactory implements org.apache.http.HttpResponseFactory { + ctor public DefaultHttpResponseFactory(org.apache.http.ReasonPhraseCatalog); + ctor public DefaultHttpResponseFactory(); + method protected java.util.Locale determineLocale(org.apache.http.protocol.HttpContext); + method public org.apache.http.HttpResponse newHttpResponse(org.apache.http.ProtocolVersion, int, org.apache.http.protocol.HttpContext); + method public org.apache.http.HttpResponse newHttpResponse(org.apache.http.StatusLine, org.apache.http.protocol.HttpContext); + field protected final org.apache.http.ReasonPhraseCatalog reasonCatalog; + } + + public deprecated class DefaultHttpServerConnection extends org.apache.http.impl.SocketHttpServerConnection { + ctor public DefaultHttpServerConnection(); + method public void bind(java.net.Socket, org.apache.http.params.HttpParams) throws java.io.IOException; + } + + public deprecated class EnglishReasonPhraseCatalog implements org.apache.http.ReasonPhraseCatalog { + ctor protected EnglishReasonPhraseCatalog(); + method public java.lang.String getReason(int, java.util.Locale); + field public static final org.apache.http.impl.EnglishReasonPhraseCatalog INSTANCE; + } + + public deprecated class HttpConnectionMetricsImpl implements org.apache.http.HttpConnectionMetrics { + ctor public HttpConnectionMetricsImpl(org.apache.http.io.HttpTransportMetrics, org.apache.http.io.HttpTransportMetrics); + method public java.lang.Object getMetric(java.lang.String); + method public long getReceivedBytesCount(); + method public long getRequestCount(); + method public long getResponseCount(); + method public long getSentBytesCount(); + method public void incrementRequestCount(); + method public void incrementResponseCount(); + method public void reset(); + method public void setMetric(java.lang.String, java.lang.Object); + field public static final java.lang.String RECEIVED_BYTES_COUNT = "http.received-bytes-count"; + field public static final java.lang.String REQUEST_COUNT = "http.request-count"; + field public static final java.lang.String RESPONSE_COUNT = "http.response-count"; + field public static final java.lang.String SENT_BYTES_COUNT = "http.sent-bytes-count"; + } + + public deprecated class NoConnectionReuseStrategy implements org.apache.http.ConnectionReuseStrategy { + ctor public NoConnectionReuseStrategy(); + method public boolean keepAlive(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext); + } + + public deprecated class SocketHttpClientConnection extends org.apache.http.impl.AbstractHttpClientConnection implements org.apache.http.HttpInetConnection { + ctor public SocketHttpClientConnection(); + method protected void assertNotOpen(); + method protected void assertOpen(); + method protected void bind(java.net.Socket, org.apache.http.params.HttpParams) throws java.io.IOException; + method public void close() throws java.io.IOException; + method protected org.apache.http.io.SessionInputBuffer createSessionInputBuffer(java.net.Socket, int, org.apache.http.params.HttpParams) throws java.io.IOException; + method protected org.apache.http.io.SessionOutputBuffer createSessionOutputBuffer(java.net.Socket, int, org.apache.http.params.HttpParams) throws java.io.IOException; + method public java.net.InetAddress getLocalAddress(); + method public int getLocalPort(); + method public java.net.InetAddress getRemoteAddress(); + method public int getRemotePort(); + method protected java.net.Socket getSocket(); + method public int getSocketTimeout(); + method public boolean isOpen(); + method public void setSocketTimeout(int); + method public void shutdown() throws java.io.IOException; + } + + public deprecated class SocketHttpServerConnection extends org.apache.http.impl.AbstractHttpServerConnection implements org.apache.http.HttpInetConnection { + ctor public SocketHttpServerConnection(); + method protected void assertNotOpen(); + method protected void assertOpen(); + method protected void bind(java.net.Socket, org.apache.http.params.HttpParams) throws java.io.IOException; + method public void close() throws java.io.IOException; + method protected org.apache.http.io.SessionInputBuffer createHttpDataReceiver(java.net.Socket, int, org.apache.http.params.HttpParams) throws java.io.IOException; + method protected org.apache.http.io.SessionOutputBuffer createHttpDataTransmitter(java.net.Socket, int, org.apache.http.params.HttpParams) throws java.io.IOException; + method public java.net.InetAddress getLocalAddress(); + method public int getLocalPort(); + method public java.net.InetAddress getRemoteAddress(); + method public int getRemotePort(); + method protected java.net.Socket getSocket(); + method public int getSocketTimeout(); + method public boolean isOpen(); + method public void setSocketTimeout(int); + method public void shutdown() throws java.io.IOException; + } + +} + +package org.apache.http.impl.auth { + + public abstract deprecated class AuthSchemeBase implements org.apache.http.auth.AuthScheme { + ctor public AuthSchemeBase(); + method public boolean isProxy(); + method protected abstract void parseChallenge(org.apache.http.util.CharArrayBuffer, int, int) throws org.apache.http.auth.MalformedChallengeException; + method public void processChallenge(org.apache.http.Header) throws org.apache.http.auth.MalformedChallengeException; + } + + public deprecated class BasicScheme extends org.apache.http.impl.auth.RFC2617Scheme { + ctor public BasicScheme(); + method public org.apache.http.Header authenticate(org.apache.http.auth.Credentials, org.apache.http.HttpRequest) throws org.apache.http.auth.AuthenticationException; + method public static org.apache.http.Header authenticate(org.apache.http.auth.Credentials, java.lang.String, boolean); + method public java.lang.String getSchemeName(); + method public boolean isComplete(); + method public boolean isConnectionBased(); + } + + public deprecated class BasicSchemeFactory implements org.apache.http.auth.AuthSchemeFactory { + ctor public BasicSchemeFactory(); + method public org.apache.http.auth.AuthScheme newInstance(org.apache.http.params.HttpParams); + } + + public deprecated class DigestScheme extends org.apache.http.impl.auth.RFC2617Scheme { + ctor public DigestScheme(); + method public org.apache.http.Header authenticate(org.apache.http.auth.Credentials, org.apache.http.HttpRequest) throws org.apache.http.auth.AuthenticationException; + method public static java.lang.String createCnonce(); + method public java.lang.String getSchemeName(); + method public boolean isComplete(); + method public boolean isConnectionBased(); + method public void overrideParamter(java.lang.String, java.lang.String); + } + + public deprecated class DigestSchemeFactory implements org.apache.http.auth.AuthSchemeFactory { + ctor public DigestSchemeFactory(); + method public org.apache.http.auth.AuthScheme newInstance(org.apache.http.params.HttpParams); + } + + public abstract deprecated interface NTLMEngine { + method public abstract java.lang.String generateType1Msg(java.lang.String, java.lang.String) throws org.apache.http.impl.auth.NTLMEngineException; + method public abstract java.lang.String generateType3Msg(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws org.apache.http.impl.auth.NTLMEngineException; + } + + public deprecated class NTLMEngineException extends org.apache.http.auth.AuthenticationException { + ctor public NTLMEngineException(); + ctor public NTLMEngineException(java.lang.String); + ctor public NTLMEngineException(java.lang.String, java.lang.Throwable); + } + + public deprecated class NTLMScheme extends org.apache.http.impl.auth.AuthSchemeBase { + ctor public NTLMScheme(org.apache.http.impl.auth.NTLMEngine); + method public org.apache.http.Header authenticate(org.apache.http.auth.Credentials, org.apache.http.HttpRequest) throws org.apache.http.auth.AuthenticationException; + method public java.lang.String getParameter(java.lang.String); + method public java.lang.String getRealm(); + method public java.lang.String getSchemeName(); + method public boolean isComplete(); + method public boolean isConnectionBased(); + method protected void parseChallenge(org.apache.http.util.CharArrayBuffer, int, int) throws org.apache.http.auth.MalformedChallengeException; + } + + public abstract deprecated class RFC2617Scheme extends org.apache.http.impl.auth.AuthSchemeBase { + ctor public RFC2617Scheme(); + method public java.lang.String getParameter(java.lang.String); + method protected java.util.Map getParameters(); + method public java.lang.String getRealm(); + method protected void parseChallenge(org.apache.http.util.CharArrayBuffer, int, int) throws org.apache.http.auth.MalformedChallengeException; + } + + public deprecated class UnsupportedDigestAlgorithmException extends java.lang.RuntimeException { + ctor public UnsupportedDigestAlgorithmException(); + ctor public UnsupportedDigestAlgorithmException(java.lang.String); + ctor public UnsupportedDigestAlgorithmException(java.lang.String, java.lang.Throwable); + } + +} + +package org.apache.http.impl.client { + + public abstract deprecated class AbstractAuthenticationHandler implements org.apache.http.client.AuthenticationHandler { + ctor public AbstractAuthenticationHandler(); + method protected java.util.List getAuthPreferences(); + method protected java.util.Map parseChallenges(org.apache.http.Header[]) throws org.apache.http.auth.MalformedChallengeException; + method public org.apache.http.auth.AuthScheme selectScheme(java.util.Map, org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.auth.AuthenticationException; + } + + public abstract deprecated class AbstractHttpClient implements org.apache.http.client.HttpClient { + ctor protected AbstractHttpClient(org.apache.http.conn.ClientConnectionManager, org.apache.http.params.HttpParams); + method public synchronized void addRequestInterceptor(org.apache.http.HttpRequestInterceptor); + method public synchronized void addRequestInterceptor(org.apache.http.HttpRequestInterceptor, int); + method public synchronized void addResponseInterceptor(org.apache.http.HttpResponseInterceptor); + method public synchronized void addResponseInterceptor(org.apache.http.HttpResponseInterceptor, int); + method public synchronized void clearRequestInterceptors(); + method public synchronized void clearResponseInterceptors(); + method protected abstract org.apache.http.auth.AuthSchemeRegistry createAuthSchemeRegistry(); + method protected abstract org.apache.http.conn.ClientConnectionManager createClientConnectionManager(); + method protected org.apache.http.client.RequestDirector createClientRequestDirector(org.apache.http.protocol.HttpRequestExecutor, org.apache.http.conn.ClientConnectionManager, org.apache.http.ConnectionReuseStrategy, org.apache.http.conn.ConnectionKeepAliveStrategy, org.apache.http.conn.routing.HttpRoutePlanner, org.apache.http.protocol.HttpProcessor, org.apache.http.client.HttpRequestRetryHandler, org.apache.http.client.RedirectHandler, org.apache.http.client.AuthenticationHandler, org.apache.http.client.AuthenticationHandler, org.apache.http.client.UserTokenHandler, org.apache.http.params.HttpParams); + method protected abstract org.apache.http.conn.ConnectionKeepAliveStrategy createConnectionKeepAliveStrategy(); + method protected abstract org.apache.http.ConnectionReuseStrategy createConnectionReuseStrategy(); + method protected abstract org.apache.http.cookie.CookieSpecRegistry createCookieSpecRegistry(); + method protected abstract org.apache.http.client.CookieStore createCookieStore(); + method protected abstract org.apache.http.client.CredentialsProvider createCredentialsProvider(); + method protected abstract org.apache.http.protocol.HttpContext createHttpContext(); + method protected abstract org.apache.http.params.HttpParams createHttpParams(); + method protected abstract org.apache.http.protocol.BasicHttpProcessor createHttpProcessor(); + method protected abstract org.apache.http.client.HttpRequestRetryHandler createHttpRequestRetryHandler(); + method protected abstract org.apache.http.conn.routing.HttpRoutePlanner createHttpRoutePlanner(); + method protected abstract org.apache.http.client.AuthenticationHandler createProxyAuthenticationHandler(); + method protected abstract org.apache.http.client.RedirectHandler createRedirectHandler(); + method protected abstract org.apache.http.protocol.HttpRequestExecutor createRequestExecutor(); + method protected abstract org.apache.http.client.AuthenticationHandler createTargetAuthenticationHandler(); + method protected abstract org.apache.http.client.UserTokenHandler createUserTokenHandler(); + method protected org.apache.http.params.HttpParams determineParams(org.apache.http.HttpRequest); + method public final org.apache.http.HttpResponse execute(org.apache.http.client.methods.HttpUriRequest) throws org.apache.http.client.ClientProtocolException, java.io.IOException; + method public final org.apache.http.HttpResponse execute(org.apache.http.client.methods.HttpUriRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.client.ClientProtocolException, java.io.IOException; + method public final org.apache.http.HttpResponse execute(org.apache.http.HttpHost, org.apache.http.HttpRequest) throws org.apache.http.client.ClientProtocolException, java.io.IOException; + method public final org.apache.http.HttpResponse execute(org.apache.http.HttpHost, org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.client.ClientProtocolException, java.io.IOException; + method public T execute(org.apache.http.client.methods.HttpUriRequest, org.apache.http.client.ResponseHandler) throws org.apache.http.client.ClientProtocolException, java.io.IOException; + method public T execute(org.apache.http.client.methods.HttpUriRequest, org.apache.http.client.ResponseHandler, org.apache.http.protocol.HttpContext) throws org.apache.http.client.ClientProtocolException, java.io.IOException; + method public T execute(org.apache.http.HttpHost, org.apache.http.HttpRequest, org.apache.http.client.ResponseHandler) throws org.apache.http.client.ClientProtocolException, java.io.IOException; + method public T execute(org.apache.http.HttpHost, org.apache.http.HttpRequest, org.apache.http.client.ResponseHandler, org.apache.http.protocol.HttpContext) throws org.apache.http.client.ClientProtocolException, java.io.IOException; + method public final synchronized org.apache.http.auth.AuthSchemeRegistry getAuthSchemes(); + method public final synchronized org.apache.http.conn.ConnectionKeepAliveStrategy getConnectionKeepAliveStrategy(); + method public final synchronized org.apache.http.conn.ClientConnectionManager getConnectionManager(); + method public final synchronized org.apache.http.ConnectionReuseStrategy getConnectionReuseStrategy(); + method public final synchronized org.apache.http.cookie.CookieSpecRegistry getCookieSpecs(); + method public final synchronized org.apache.http.client.CookieStore getCookieStore(); + method public final synchronized org.apache.http.client.CredentialsProvider getCredentialsProvider(); + method protected final synchronized org.apache.http.protocol.BasicHttpProcessor getHttpProcessor(); + method public final synchronized org.apache.http.client.HttpRequestRetryHandler getHttpRequestRetryHandler(); + method public final synchronized org.apache.http.params.HttpParams getParams(); + method public final synchronized org.apache.http.client.AuthenticationHandler getProxyAuthenticationHandler(); + method public final synchronized org.apache.http.client.RedirectHandler getRedirectHandler(); + method public final synchronized org.apache.http.protocol.HttpRequestExecutor getRequestExecutor(); + method public synchronized org.apache.http.HttpRequestInterceptor getRequestInterceptor(int); + method public synchronized int getRequestInterceptorCount(); + method public synchronized org.apache.http.HttpResponseInterceptor getResponseInterceptor(int); + method public synchronized int getResponseInterceptorCount(); + method public final synchronized org.apache.http.conn.routing.HttpRoutePlanner getRoutePlanner(); + method public final synchronized org.apache.http.client.AuthenticationHandler getTargetAuthenticationHandler(); + method public final synchronized org.apache.http.client.UserTokenHandler getUserTokenHandler(); + method public void removeRequestInterceptorByClass(java.lang.Class); + method public void removeResponseInterceptorByClass(java.lang.Class); + method public synchronized void setAuthSchemes(org.apache.http.auth.AuthSchemeRegistry); + method public synchronized void setCookieSpecs(org.apache.http.cookie.CookieSpecRegistry); + method public synchronized void setCookieStore(org.apache.http.client.CookieStore); + method public synchronized void setCredentialsProvider(org.apache.http.client.CredentialsProvider); + method public synchronized void setHttpRequestRetryHandler(org.apache.http.client.HttpRequestRetryHandler); + method public synchronized void setKeepAliveStrategy(org.apache.http.conn.ConnectionKeepAliveStrategy); + method public synchronized void setParams(org.apache.http.params.HttpParams); + method public synchronized void setProxyAuthenticationHandler(org.apache.http.client.AuthenticationHandler); + method public synchronized void setRedirectHandler(org.apache.http.client.RedirectHandler); + method public synchronized void setReuseStrategy(org.apache.http.ConnectionReuseStrategy); + method public synchronized void setRoutePlanner(org.apache.http.conn.routing.HttpRoutePlanner); + method public synchronized void setTargetAuthenticationHandler(org.apache.http.client.AuthenticationHandler); + method public synchronized void setUserTokenHandler(org.apache.http.client.UserTokenHandler); + } + + public deprecated class BasicCookieStore implements org.apache.http.client.CookieStore { + ctor public BasicCookieStore(); + method public synchronized void addCookie(org.apache.http.cookie.Cookie); + method public synchronized void addCookies(org.apache.http.cookie.Cookie[]); + method public synchronized void clear(); + method public synchronized boolean clearExpired(java.util.Date); + method public synchronized java.util.List getCookies(); + } + + public deprecated class BasicCredentialsProvider implements org.apache.http.client.CredentialsProvider { + ctor public BasicCredentialsProvider(); + method public synchronized void clear(); + method public synchronized org.apache.http.auth.Credentials getCredentials(org.apache.http.auth.AuthScope); + method public synchronized void setCredentials(org.apache.http.auth.AuthScope, org.apache.http.auth.Credentials); + } + + public deprecated class BasicResponseHandler implements org.apache.http.client.ResponseHandler { + ctor public BasicResponseHandler(); + method public java.lang.String handleResponse(org.apache.http.HttpResponse) throws org.apache.http.client.HttpResponseException, java.io.IOException; + } + + public deprecated class ClientParamsStack extends org.apache.http.params.AbstractHttpParams { + ctor public ClientParamsStack(org.apache.http.params.HttpParams, org.apache.http.params.HttpParams, org.apache.http.params.HttpParams, org.apache.http.params.HttpParams); + ctor public ClientParamsStack(org.apache.http.impl.client.ClientParamsStack); + ctor public ClientParamsStack(org.apache.http.impl.client.ClientParamsStack, org.apache.http.params.HttpParams, org.apache.http.params.HttpParams, org.apache.http.params.HttpParams, org.apache.http.params.HttpParams); + method public org.apache.http.params.HttpParams copy(); + method public final org.apache.http.params.HttpParams getApplicationParams(); + method public final org.apache.http.params.HttpParams getClientParams(); + method public final org.apache.http.params.HttpParams getOverrideParams(); + method public java.lang.Object getParameter(java.lang.String); + method public final org.apache.http.params.HttpParams getRequestParams(); + method public boolean removeParameter(java.lang.String); + method public org.apache.http.params.HttpParams setParameter(java.lang.String, java.lang.Object) throws java.lang.UnsupportedOperationException; + field protected final org.apache.http.params.HttpParams applicationParams; + field protected final org.apache.http.params.HttpParams clientParams; + field protected final org.apache.http.params.HttpParams overrideParams; + field protected final org.apache.http.params.HttpParams requestParams; + } + + public deprecated class DefaultConnectionKeepAliveStrategy implements org.apache.http.conn.ConnectionKeepAliveStrategy { + ctor public DefaultConnectionKeepAliveStrategy(); + method public long getKeepAliveDuration(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext); + } + + public deprecated class DefaultHttpClient extends org.apache.http.impl.client.AbstractHttpClient { + ctor public DefaultHttpClient(org.apache.http.conn.ClientConnectionManager, org.apache.http.params.HttpParams); + ctor public DefaultHttpClient(org.apache.http.params.HttpParams); + ctor public DefaultHttpClient(); + method protected org.apache.http.auth.AuthSchemeRegistry createAuthSchemeRegistry(); + method protected org.apache.http.conn.ClientConnectionManager createClientConnectionManager(); + method protected org.apache.http.conn.ConnectionKeepAliveStrategy createConnectionKeepAliveStrategy(); + method protected org.apache.http.ConnectionReuseStrategy createConnectionReuseStrategy(); + method protected org.apache.http.cookie.CookieSpecRegistry createCookieSpecRegistry(); + method protected org.apache.http.client.CookieStore createCookieStore(); + method protected org.apache.http.client.CredentialsProvider createCredentialsProvider(); + method protected org.apache.http.protocol.HttpContext createHttpContext(); + method protected org.apache.http.params.HttpParams createHttpParams(); + method protected org.apache.http.protocol.BasicHttpProcessor createHttpProcessor(); + method protected org.apache.http.client.HttpRequestRetryHandler createHttpRequestRetryHandler(); + method protected org.apache.http.conn.routing.HttpRoutePlanner createHttpRoutePlanner(); + method protected org.apache.http.client.AuthenticationHandler createProxyAuthenticationHandler(); + method protected org.apache.http.client.RedirectHandler createRedirectHandler(); + method protected org.apache.http.protocol.HttpRequestExecutor createRequestExecutor(); + method protected org.apache.http.client.AuthenticationHandler createTargetAuthenticationHandler(); + method protected org.apache.http.client.UserTokenHandler createUserTokenHandler(); + } + + public deprecated class DefaultHttpRequestRetryHandler implements org.apache.http.client.HttpRequestRetryHandler { + ctor public DefaultHttpRequestRetryHandler(int, boolean); + ctor public DefaultHttpRequestRetryHandler(); + method public int getRetryCount(); + method public boolean isRequestSentRetryEnabled(); + method public boolean retryRequest(java.io.IOException, int, org.apache.http.protocol.HttpContext); + } + + public deprecated class DefaultProxyAuthenticationHandler extends org.apache.http.impl.client.AbstractAuthenticationHandler { + ctor public DefaultProxyAuthenticationHandler(); + method public java.util.Map getChallenges(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.auth.MalformedChallengeException; + method public boolean isAuthenticationRequested(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext); + } + + public deprecated class DefaultRedirectHandler implements org.apache.http.client.RedirectHandler { + ctor public DefaultRedirectHandler(); + method public java.net.URI getLocationURI(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.ProtocolException; + method public boolean isRedirectRequested(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext); + } + + public deprecated class DefaultRequestDirector implements org.apache.http.client.RequestDirector { + ctor public DefaultRequestDirector(org.apache.http.protocol.HttpRequestExecutor, org.apache.http.conn.ClientConnectionManager, org.apache.http.ConnectionReuseStrategy, org.apache.http.conn.ConnectionKeepAliveStrategy, org.apache.http.conn.routing.HttpRoutePlanner, org.apache.http.protocol.HttpProcessor, org.apache.http.client.HttpRequestRetryHandler, org.apache.http.client.RedirectHandler, org.apache.http.client.AuthenticationHandler, org.apache.http.client.AuthenticationHandler, org.apache.http.client.UserTokenHandler, org.apache.http.params.HttpParams); + method protected org.apache.http.HttpRequest createConnectRequest(org.apache.http.conn.routing.HttpRoute, org.apache.http.protocol.HttpContext); + method protected boolean createTunnelToProxy(org.apache.http.conn.routing.HttpRoute, int, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; + method protected boolean createTunnelToTarget(org.apache.http.conn.routing.HttpRoute, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; + method protected org.apache.http.conn.routing.HttpRoute determineRoute(org.apache.http.HttpHost, org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException; + method protected void establishRoute(org.apache.http.conn.routing.HttpRoute, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; + method public org.apache.http.HttpResponse execute(org.apache.http.HttpHost, org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; + method protected org.apache.http.impl.client.RoutedRequest handleResponse(org.apache.http.impl.client.RoutedRequest, org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; + method protected void releaseConnection(); + method protected void rewriteRequestURI(org.apache.http.impl.client.RequestWrapper, org.apache.http.conn.routing.HttpRoute) throws org.apache.http.ProtocolException; + field protected final org.apache.http.conn.ClientConnectionManager connManager; + field protected final org.apache.http.protocol.HttpProcessor httpProcessor; + field protected final org.apache.http.conn.ConnectionKeepAliveStrategy keepAliveStrategy; + field protected org.apache.http.conn.ManagedClientConnection managedConn; + field protected final org.apache.http.params.HttpParams params; + field protected final org.apache.http.client.RedirectHandler redirectHandler; + field protected final org.apache.http.protocol.HttpRequestExecutor requestExec; + field protected final org.apache.http.client.HttpRequestRetryHandler retryHandler; + field protected final org.apache.http.ConnectionReuseStrategy reuseStrategy; + field protected final org.apache.http.conn.routing.HttpRoutePlanner routePlanner; + } + + public deprecated class DefaultTargetAuthenticationHandler extends org.apache.http.impl.client.AbstractAuthenticationHandler { + ctor public DefaultTargetAuthenticationHandler(); + method public java.util.Map getChallenges(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.auth.MalformedChallengeException; + method public boolean isAuthenticationRequested(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext); + } + + public deprecated class DefaultUserTokenHandler implements org.apache.http.client.UserTokenHandler { + ctor public DefaultUserTokenHandler(); + method public java.lang.Object getUserToken(org.apache.http.protocol.HttpContext); + } + + public deprecated class EntityEnclosingRequestWrapper extends org.apache.http.impl.client.RequestWrapper implements org.apache.http.HttpEntityEnclosingRequest { + ctor public EntityEnclosingRequestWrapper(org.apache.http.HttpEntityEnclosingRequest) throws org.apache.http.ProtocolException; + method public boolean expectContinue(); + method public org.apache.http.HttpEntity getEntity(); + method public void setEntity(org.apache.http.HttpEntity); + } + + public deprecated class RedirectLocations { + ctor public RedirectLocations(); + method public void add(java.net.URI); + method public boolean contains(java.net.URI); + method public boolean remove(java.net.URI); + } + + public deprecated class RequestWrapper extends org.apache.http.message.AbstractHttpMessage implements org.apache.http.client.methods.HttpUriRequest { + ctor public RequestWrapper(org.apache.http.HttpRequest) throws org.apache.http.ProtocolException; + method public void abort() throws java.lang.UnsupportedOperationException; + method public int getExecCount(); + method public java.lang.String getMethod(); + method public org.apache.http.HttpRequest getOriginal(); + method public org.apache.http.ProtocolVersion getProtocolVersion(); + method public org.apache.http.RequestLine getRequestLine(); + method public java.net.URI getURI(); + method public void incrementExecCount(); + method public boolean isAborted(); + method public boolean isRepeatable(); + method public void resetHeaders(); + method public void setMethod(java.lang.String); + method public void setProtocolVersion(org.apache.http.ProtocolVersion); + method public void setURI(java.net.URI); + } + + public deprecated class RoutedRequest { + ctor public RoutedRequest(org.apache.http.impl.client.RequestWrapper, org.apache.http.conn.routing.HttpRoute); + method public final org.apache.http.impl.client.RequestWrapper getRequest(); + method public final org.apache.http.conn.routing.HttpRoute getRoute(); + field protected final org.apache.http.impl.client.RequestWrapper request; + field protected final org.apache.http.conn.routing.HttpRoute route; + } + + public deprecated class TunnelRefusedException extends org.apache.http.HttpException { + ctor public TunnelRefusedException(java.lang.String, org.apache.http.HttpResponse); + method public org.apache.http.HttpResponse getResponse(); + } + +} + +package org.apache.http.impl.conn { + + public abstract deprecated class AbstractClientConnAdapter implements org.apache.http.conn.ManagedClientConnection { + ctor protected AbstractClientConnAdapter(org.apache.http.conn.ClientConnectionManager, org.apache.http.conn.OperatedClientConnection); + method public void abortConnection(); + method protected final void assertNotAborted() throws java.io.InterruptedIOException; + method protected final void assertValid(org.apache.http.conn.OperatedClientConnection); + method protected void detach(); + method public void flush() throws java.io.IOException; + method public java.net.InetAddress getLocalAddress(); + method public int getLocalPort(); + method protected org.apache.http.conn.ClientConnectionManager getManager(); + method public org.apache.http.HttpConnectionMetrics getMetrics(); + method public java.net.InetAddress getRemoteAddress(); + method public int getRemotePort(); + method public javax.net.ssl.SSLSession getSSLSession(); + method public int getSocketTimeout(); + method protected org.apache.http.conn.OperatedClientConnection getWrappedConnection(); + method public boolean isMarkedReusable(); + method public boolean isOpen(); + method public boolean isResponseAvailable(int) throws java.io.IOException; + method public boolean isSecure(); + method public boolean isStale(); + method public void markReusable(); + method public void receiveResponseEntity(org.apache.http.HttpResponse) throws org.apache.http.HttpException, java.io.IOException; + method public org.apache.http.HttpResponse receiveResponseHeader() throws org.apache.http.HttpException, java.io.IOException; + method public void releaseConnection(); + method public void sendRequestEntity(org.apache.http.HttpEntityEnclosingRequest) throws org.apache.http.HttpException, java.io.IOException; + method public void sendRequestHeader(org.apache.http.HttpRequest) throws org.apache.http.HttpException, java.io.IOException; + method public void setIdleDuration(long, java.util.concurrent.TimeUnit); + method public void setSocketTimeout(int); + method public void unmarkReusable(); + } + + public abstract deprecated class AbstractPoolEntry { + ctor protected AbstractPoolEntry(org.apache.http.conn.ClientConnectionOperator, org.apache.http.conn.routing.HttpRoute); + method public java.lang.Object getState(); + method public void layerProtocol(org.apache.http.protocol.HttpContext, org.apache.http.params.HttpParams) throws java.io.IOException; + method public void open(org.apache.http.conn.routing.HttpRoute, org.apache.http.protocol.HttpContext, org.apache.http.params.HttpParams) throws java.io.IOException; + method public void setState(java.lang.Object); + method protected void shutdownEntry(); + method public void tunnelProxy(org.apache.http.HttpHost, boolean, org.apache.http.params.HttpParams) throws java.io.IOException; + method public void tunnelTarget(boolean, org.apache.http.params.HttpParams) throws java.io.IOException; + field protected final org.apache.http.conn.ClientConnectionOperator connOperator; + field protected final org.apache.http.conn.OperatedClientConnection connection; + field protected volatile org.apache.http.conn.routing.HttpRoute route; + field protected volatile java.lang.Object state; + field protected volatile org.apache.http.conn.routing.RouteTracker tracker; + } + + public abstract deprecated class AbstractPooledConnAdapter extends org.apache.http.impl.conn.AbstractClientConnAdapter { + ctor protected AbstractPooledConnAdapter(org.apache.http.conn.ClientConnectionManager, org.apache.http.impl.conn.AbstractPoolEntry); + method protected final void assertAttached(); + method public void close() throws java.io.IOException; + method public org.apache.http.conn.routing.HttpRoute getRoute(); + method public java.lang.Object getState(); + method public void layerProtocol(org.apache.http.protocol.HttpContext, org.apache.http.params.HttpParams) throws java.io.IOException; + method public void open(org.apache.http.conn.routing.HttpRoute, org.apache.http.protocol.HttpContext, org.apache.http.params.HttpParams) throws java.io.IOException; + method public void setState(java.lang.Object); + method public void shutdown() throws java.io.IOException; + method public void tunnelProxy(org.apache.http.HttpHost, boolean, org.apache.http.params.HttpParams) throws java.io.IOException; + method public void tunnelTarget(boolean, org.apache.http.params.HttpParams) throws java.io.IOException; + field protected volatile org.apache.http.impl.conn.AbstractPoolEntry poolEntry; + } + + public deprecated class DefaultClientConnection extends org.apache.http.impl.SocketHttpClientConnection implements org.apache.http.conn.OperatedClientConnection { + ctor public DefaultClientConnection(); + method public final java.net.Socket getSocket(); + method public final org.apache.http.HttpHost getTargetHost(); + method public final boolean isSecure(); + method public void openCompleted(boolean, org.apache.http.params.HttpParams) throws java.io.IOException; + method public void opening(java.net.Socket, org.apache.http.HttpHost) throws java.io.IOException; + method public void update(java.net.Socket, org.apache.http.HttpHost, boolean, org.apache.http.params.HttpParams) throws java.io.IOException; + } + + public deprecated class DefaultClientConnectionOperator implements org.apache.http.conn.ClientConnectionOperator { + ctor public DefaultClientConnectionOperator(org.apache.http.conn.scheme.SchemeRegistry); + method public org.apache.http.conn.OperatedClientConnection createConnection(); + method public void openConnection(org.apache.http.conn.OperatedClientConnection, org.apache.http.HttpHost, java.net.InetAddress, org.apache.http.protocol.HttpContext, org.apache.http.params.HttpParams) throws java.io.IOException; + method protected void prepareSocket(java.net.Socket, org.apache.http.protocol.HttpContext, org.apache.http.params.HttpParams) throws java.io.IOException; + method public void updateSecureConnection(org.apache.http.conn.OperatedClientConnection, org.apache.http.HttpHost, org.apache.http.protocol.HttpContext, org.apache.http.params.HttpParams) throws java.io.IOException; + field protected org.apache.http.conn.scheme.SchemeRegistry schemeRegistry; + } + + public deprecated class DefaultHttpRoutePlanner implements org.apache.http.conn.routing.HttpRoutePlanner { + ctor public DefaultHttpRoutePlanner(org.apache.http.conn.scheme.SchemeRegistry); + method public org.apache.http.conn.routing.HttpRoute determineRoute(org.apache.http.HttpHost, org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException; + field protected org.apache.http.conn.scheme.SchemeRegistry schemeRegistry; + } + + public deprecated class DefaultResponseParser extends org.apache.http.impl.io.AbstractMessageParser { + ctor public DefaultResponseParser(org.apache.http.io.SessionInputBuffer, org.apache.http.message.LineParser, org.apache.http.HttpResponseFactory, org.apache.http.params.HttpParams); + method protected org.apache.http.HttpMessage parseHead(org.apache.http.io.SessionInputBuffer) throws org.apache.http.HttpException, java.io.IOException; + } + + public deprecated class IdleConnectionHandler { + ctor public IdleConnectionHandler(); + method public void add(org.apache.http.HttpConnection, long, java.util.concurrent.TimeUnit); + method public void closeExpiredConnections(); + method public void closeIdleConnections(long); + method public boolean remove(org.apache.http.HttpConnection); + method public void removeAll(); + } + + public deprecated class LoggingSessionInputBuffer implements org.apache.http.io.SessionInputBuffer { + ctor public LoggingSessionInputBuffer(org.apache.http.io.SessionInputBuffer, org.apache.http.impl.conn.Wire); + method public org.apache.http.io.HttpTransportMetrics getMetrics(); + method public boolean isDataAvailable(int) throws java.io.IOException; + method public int read(byte[], int, int) throws java.io.IOException; + method public int read() throws java.io.IOException; + method public int read(byte[]) throws java.io.IOException; + method public java.lang.String readLine() throws java.io.IOException; + method public int readLine(org.apache.http.util.CharArrayBuffer) throws java.io.IOException; + } + + public deprecated class LoggingSessionOutputBuffer implements org.apache.http.io.SessionOutputBuffer { + ctor public LoggingSessionOutputBuffer(org.apache.http.io.SessionOutputBuffer, org.apache.http.impl.conn.Wire); + method public void flush() throws java.io.IOException; + method public org.apache.http.io.HttpTransportMetrics getMetrics(); + method public void write(byte[], int, int) throws java.io.IOException; + method public void write(int) throws java.io.IOException; + method public void write(byte[]) throws java.io.IOException; + method public void writeLine(org.apache.http.util.CharArrayBuffer) throws java.io.IOException; + method public void writeLine(java.lang.String) throws java.io.IOException; + } + + public deprecated class ProxySelectorRoutePlanner implements org.apache.http.conn.routing.HttpRoutePlanner { + ctor public ProxySelectorRoutePlanner(org.apache.http.conn.scheme.SchemeRegistry, java.net.ProxySelector); + method protected java.net.Proxy chooseProxy(java.util.List, org.apache.http.HttpHost, org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext); + method protected org.apache.http.HttpHost determineProxy(org.apache.http.HttpHost, org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException; + method public org.apache.http.conn.routing.HttpRoute determineRoute(org.apache.http.HttpHost, org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException; + method protected java.lang.String getHost(java.net.InetSocketAddress); + method public java.net.ProxySelector getProxySelector(); + method public void setProxySelector(java.net.ProxySelector); + field protected java.net.ProxySelector proxySelector; + field protected org.apache.http.conn.scheme.SchemeRegistry schemeRegistry; + } + + public deprecated class SingleClientConnManager implements org.apache.http.conn.ClientConnectionManager { + ctor public SingleClientConnManager(org.apache.http.params.HttpParams, org.apache.http.conn.scheme.SchemeRegistry); + method protected final void assertStillUp() throws java.lang.IllegalStateException; + method public void closeExpiredConnections(); + method public void closeIdleConnections(long, java.util.concurrent.TimeUnit); + method protected org.apache.http.conn.ClientConnectionOperator createConnectionOperator(org.apache.http.conn.scheme.SchemeRegistry); + method public org.apache.http.conn.ManagedClientConnection getConnection(org.apache.http.conn.routing.HttpRoute, java.lang.Object); + method public org.apache.http.conn.scheme.SchemeRegistry getSchemeRegistry(); + method public void releaseConnection(org.apache.http.conn.ManagedClientConnection, long, java.util.concurrent.TimeUnit); + method public final org.apache.http.conn.ClientConnectionRequest requestConnection(org.apache.http.conn.routing.HttpRoute, java.lang.Object); + method protected void revokeConnection(); + method public void shutdown(); + field public static final java.lang.String MISUSE_MESSAGE = "Invalid use of SingleClientConnManager: connection still allocated.\nMake sure to release the connection before allocating another one."; + field protected boolean alwaysShutDown; + field protected org.apache.http.conn.ClientConnectionOperator connOperator; + field protected long connectionExpiresTime; + field protected volatile boolean isShutDown; + field protected long lastReleaseTime; + field protected org.apache.http.impl.conn.SingleClientConnManager.ConnAdapter managedConn; + field protected org.apache.http.conn.scheme.SchemeRegistry schemeRegistry; + field protected org.apache.http.impl.conn.SingleClientConnManager.PoolEntry uniquePoolEntry; + } + + protected class SingleClientConnManager.ConnAdapter extends org.apache.http.impl.conn.AbstractPooledConnAdapter { + ctor protected SingleClientConnManager.ConnAdapter(org.apache.http.impl.conn.SingleClientConnManager.PoolEntry, org.apache.http.conn.routing.HttpRoute); + } + + protected class SingleClientConnManager.PoolEntry extends org.apache.http.impl.conn.AbstractPoolEntry { + ctor protected SingleClientConnManager.PoolEntry(); + method protected void close() throws java.io.IOException; + method protected void shutdown() throws java.io.IOException; + } + + public deprecated class Wire { + ctor public Wire(org.apache.commons.logging.Log); + method public boolean enabled(); + method public void input(java.io.InputStream) throws java.io.IOException; + method public void input(byte[], int, int) throws java.io.IOException; + method public void input(byte[]) throws java.io.IOException; + method public void input(int) throws java.io.IOException; + method public void input(java.lang.String) throws java.io.IOException; + method public void output(java.io.InputStream) throws java.io.IOException; + method public void output(byte[], int, int) throws java.io.IOException; + method public void output(byte[]) throws java.io.IOException; + method public void output(int) throws java.io.IOException; + method public void output(java.lang.String) throws java.io.IOException; + } + +} + +package org.apache.http.impl.conn.tsccm { + + public abstract deprecated class AbstractConnPool implements org.apache.http.impl.conn.tsccm.RefQueueHandler { + ctor protected AbstractConnPool(); + method protected void closeConnection(org.apache.http.conn.OperatedClientConnection); + method public void closeExpiredConnections(); + method public void closeIdleConnections(long, java.util.concurrent.TimeUnit); + method public abstract void deleteClosedConnections(); + method public void enableConnectionGC() throws java.lang.IllegalStateException; + method public abstract void freeEntry(org.apache.http.impl.conn.tsccm.BasicPoolEntry, boolean, long, java.util.concurrent.TimeUnit); + method public final org.apache.http.impl.conn.tsccm.BasicPoolEntry getEntry(org.apache.http.conn.routing.HttpRoute, java.lang.Object, long, java.util.concurrent.TimeUnit) throws org.apache.http.conn.ConnectionPoolTimeoutException, java.lang.InterruptedException; + method protected abstract void handleLostEntry(org.apache.http.conn.routing.HttpRoute); + method public void handleReference(java.lang.ref.Reference); + method public abstract org.apache.http.impl.conn.tsccm.PoolEntryRequest requestPoolEntry(org.apache.http.conn.routing.HttpRoute, java.lang.Object); + method public void shutdown(); + field protected org.apache.http.impl.conn.IdleConnectionHandler idleConnHandler; + field protected volatile boolean isShutDown; + field protected java.util.Set issuedConnections; + field protected int numConnections; + field protected final java.util.concurrent.locks.Lock poolLock; + field protected java.lang.ref.ReferenceQueue refQueue; + } + + public deprecated class BasicPoolEntry extends org.apache.http.impl.conn.AbstractPoolEntry { + ctor public BasicPoolEntry(org.apache.http.conn.ClientConnectionOperator, org.apache.http.conn.routing.HttpRoute, java.lang.ref.ReferenceQueue); + method protected final org.apache.http.conn.OperatedClientConnection getConnection(); + method protected final org.apache.http.conn.routing.HttpRoute getPlannedRoute(); + method protected final org.apache.http.impl.conn.tsccm.BasicPoolEntryRef getWeakRef(); + } + + public deprecated class BasicPoolEntryRef extends java.lang.ref.WeakReference { + ctor public BasicPoolEntryRef(org.apache.http.impl.conn.tsccm.BasicPoolEntry, java.lang.ref.ReferenceQueue); + method public final org.apache.http.conn.routing.HttpRoute getRoute(); + } + + public deprecated class BasicPooledConnAdapter extends org.apache.http.impl.conn.AbstractPooledConnAdapter { + ctor protected BasicPooledConnAdapter(org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager, org.apache.http.impl.conn.AbstractPoolEntry); + method protected org.apache.http.impl.conn.AbstractPoolEntry getPoolEntry(); + } + + public deprecated class ConnPoolByRoute extends org.apache.http.impl.conn.tsccm.AbstractConnPool { + ctor public ConnPoolByRoute(org.apache.http.conn.ClientConnectionOperator, org.apache.http.params.HttpParams); + method protected org.apache.http.impl.conn.tsccm.BasicPoolEntry createEntry(org.apache.http.impl.conn.tsccm.RouteSpecificPool, org.apache.http.conn.ClientConnectionOperator); + method protected java.util.Queue createFreeConnQueue(); + method protected java.util.Map createRouteToPoolMap(); + method protected java.util.Queue createWaitingThreadQueue(); + method public void deleteClosedConnections(); + method protected void deleteEntry(org.apache.http.impl.conn.tsccm.BasicPoolEntry); + method protected void deleteLeastUsedEntry(); + method public void freeEntry(org.apache.http.impl.conn.tsccm.BasicPoolEntry, boolean, long, java.util.concurrent.TimeUnit); + method public int getConnectionsInPool(org.apache.http.conn.routing.HttpRoute); + method protected org.apache.http.impl.conn.tsccm.BasicPoolEntry getEntryBlocking(org.apache.http.conn.routing.HttpRoute, java.lang.Object, long, java.util.concurrent.TimeUnit, org.apache.http.impl.conn.tsccm.WaitingThreadAborter) throws org.apache.http.conn.ConnectionPoolTimeoutException, java.lang.InterruptedException; + method protected org.apache.http.impl.conn.tsccm.BasicPoolEntry getFreeEntry(org.apache.http.impl.conn.tsccm.RouteSpecificPool, java.lang.Object); + method protected org.apache.http.impl.conn.tsccm.RouteSpecificPool getRoutePool(org.apache.http.conn.routing.HttpRoute, boolean); + method protected void handleLostEntry(org.apache.http.conn.routing.HttpRoute); + method protected org.apache.http.impl.conn.tsccm.RouteSpecificPool newRouteSpecificPool(org.apache.http.conn.routing.HttpRoute); + method protected org.apache.http.impl.conn.tsccm.WaitingThread newWaitingThread(java.util.concurrent.locks.Condition, org.apache.http.impl.conn.tsccm.RouteSpecificPool); + method protected void notifyWaitingThread(org.apache.http.impl.conn.tsccm.RouteSpecificPool); + method public org.apache.http.impl.conn.tsccm.PoolEntryRequest requestPoolEntry(org.apache.http.conn.routing.HttpRoute, java.lang.Object); + field protected java.util.Queue freeConnections; + field protected final int maxTotalConnections; + field protected final org.apache.http.conn.ClientConnectionOperator operator; + field protected final java.util.Map routeToPool; + field protected java.util.Queue waitingThreads; + } + + public abstract deprecated interface PoolEntryRequest { + method public abstract void abortRequest(); + method public abstract org.apache.http.impl.conn.tsccm.BasicPoolEntry getPoolEntry(long, java.util.concurrent.TimeUnit) throws org.apache.http.conn.ConnectionPoolTimeoutException, java.lang.InterruptedException; + } + + public abstract deprecated interface RefQueueHandler { + method public abstract void handleReference(java.lang.ref.Reference); + } + + public deprecated class RefQueueWorker implements java.lang.Runnable { + ctor public RefQueueWorker(java.lang.ref.ReferenceQueue, org.apache.http.impl.conn.tsccm.RefQueueHandler); + method public void run(); + method public void shutdown(); + field protected final org.apache.http.impl.conn.tsccm.RefQueueHandler refHandler; + field protected final java.lang.ref.ReferenceQueue refQueue; + field protected volatile java.lang.Thread workerThread; + } + + public deprecated class RouteSpecificPool { + ctor public RouteSpecificPool(org.apache.http.conn.routing.HttpRoute, int); + method public org.apache.http.impl.conn.tsccm.BasicPoolEntry allocEntry(java.lang.Object); + method public void createdEntry(org.apache.http.impl.conn.tsccm.BasicPoolEntry); + method public boolean deleteEntry(org.apache.http.impl.conn.tsccm.BasicPoolEntry); + method public void dropEntry(); + method public void freeEntry(org.apache.http.impl.conn.tsccm.BasicPoolEntry); + method public int getCapacity(); + method public final int getEntryCount(); + method public final int getMaxEntries(); + method public final org.apache.http.conn.routing.HttpRoute getRoute(); + method public boolean hasThread(); + method public boolean isUnused(); + method public org.apache.http.impl.conn.tsccm.WaitingThread nextThread(); + method public void queueThread(org.apache.http.impl.conn.tsccm.WaitingThread); + method public void removeThread(org.apache.http.impl.conn.tsccm.WaitingThread); + field protected final java.util.LinkedList freeEntries; + field protected final int maxEntries; + field protected int numEntries; + field protected final org.apache.http.conn.routing.HttpRoute route; + field protected final java.util.Queue waitingThreads; + } + + public deprecated class ThreadSafeClientConnManager implements org.apache.http.conn.ClientConnectionManager { + ctor public ThreadSafeClientConnManager(org.apache.http.params.HttpParams, org.apache.http.conn.scheme.SchemeRegistry); + method public void closeExpiredConnections(); + method public void closeIdleConnections(long, java.util.concurrent.TimeUnit); + method protected org.apache.http.conn.ClientConnectionOperator createConnectionOperator(org.apache.http.conn.scheme.SchemeRegistry); + method protected org.apache.http.impl.conn.tsccm.AbstractConnPool createConnectionPool(org.apache.http.params.HttpParams); + method public int getConnectionsInPool(org.apache.http.conn.routing.HttpRoute); + method public int getConnectionsInPool(); + method public org.apache.http.conn.scheme.SchemeRegistry getSchemeRegistry(); + method public void releaseConnection(org.apache.http.conn.ManagedClientConnection, long, java.util.concurrent.TimeUnit); + method public org.apache.http.conn.ClientConnectionRequest requestConnection(org.apache.http.conn.routing.HttpRoute, java.lang.Object); + method public void shutdown(); + field protected org.apache.http.conn.ClientConnectionOperator connOperator; + field protected final org.apache.http.impl.conn.tsccm.AbstractConnPool connectionPool; + field protected org.apache.http.conn.scheme.SchemeRegistry schemeRegistry; + } + + public deprecated class WaitingThread { + ctor public WaitingThread(java.util.concurrent.locks.Condition, org.apache.http.impl.conn.tsccm.RouteSpecificPool); + method public boolean await(java.util.Date) throws java.lang.InterruptedException; + method public final java.util.concurrent.locks.Condition getCondition(); + method public final org.apache.http.impl.conn.tsccm.RouteSpecificPool getPool(); + method public final java.lang.Thread getThread(); + method public void interrupt(); + method public void wakeup(); + } + + public deprecated class WaitingThreadAborter { + ctor public WaitingThreadAborter(); + method public void abort(); + method public void setWaitingThread(org.apache.http.impl.conn.tsccm.WaitingThread); + } + +} + +package org.apache.http.impl.cookie { + + public abstract deprecated class AbstractCookieAttributeHandler implements org.apache.http.cookie.CookieAttributeHandler { + ctor public AbstractCookieAttributeHandler(); + method public boolean match(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin); + method public void validate(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin) throws org.apache.http.cookie.MalformedCookieException; + } + + public abstract deprecated class AbstractCookieSpec implements org.apache.http.cookie.CookieSpec { + ctor public AbstractCookieSpec(); + method protected org.apache.http.cookie.CookieAttributeHandler findAttribHandler(java.lang.String); + method protected org.apache.http.cookie.CookieAttributeHandler getAttribHandler(java.lang.String); + method protected java.util.Collection getAttribHandlers(); + method public void registerAttribHandler(java.lang.String, org.apache.http.cookie.CookieAttributeHandler); + } + + public deprecated class BasicClientCookie implements org.apache.http.cookie.ClientCookie java.lang.Cloneable org.apache.http.cookie.SetCookie { + ctor public BasicClientCookie(java.lang.String, java.lang.String); + method public java.lang.Object clone() throws java.lang.CloneNotSupportedException; + method public boolean containsAttribute(java.lang.String); + method public java.lang.String getAttribute(java.lang.String); + method public java.lang.String getComment(); + method public java.lang.String getCommentURL(); + method public java.lang.String getDomain(); + method public java.util.Date getExpiryDate(); + method public java.lang.String getName(); + method public java.lang.String getPath(); + method public int[] getPorts(); + method public java.lang.String getValue(); + method public int getVersion(); + method public boolean isExpired(java.util.Date); + method public boolean isPersistent(); + method public boolean isSecure(); + method public void setAttribute(java.lang.String, java.lang.String); + method public void setComment(java.lang.String); + method public void setDomain(java.lang.String); + method public void setExpiryDate(java.util.Date); + method public void setPath(java.lang.String); + method public void setSecure(boolean); + method public void setValue(java.lang.String); + method public void setVersion(int); + } + + public deprecated class BasicClientCookie2 extends org.apache.http.impl.cookie.BasicClientCookie implements org.apache.http.cookie.SetCookie2 { + ctor public BasicClientCookie2(java.lang.String, java.lang.String); + method public void setCommentURL(java.lang.String); + method public void setDiscard(boolean); + method public void setPorts(int[]); + } + + public deprecated class BasicCommentHandler extends org.apache.http.impl.cookie.AbstractCookieAttributeHandler { + ctor public BasicCommentHandler(); + method public void parse(org.apache.http.cookie.SetCookie, java.lang.String) throws org.apache.http.cookie.MalformedCookieException; + } + + public deprecated class BasicDomainHandler implements org.apache.http.cookie.CookieAttributeHandler { + ctor public BasicDomainHandler(); + method public boolean match(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin); + method public void parse(org.apache.http.cookie.SetCookie, java.lang.String) throws org.apache.http.cookie.MalformedCookieException; + method public void validate(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin) throws org.apache.http.cookie.MalformedCookieException; + } + + public deprecated class BasicExpiresHandler extends org.apache.http.impl.cookie.AbstractCookieAttributeHandler { + ctor public BasicExpiresHandler(java.lang.String[]); + method public void parse(org.apache.http.cookie.SetCookie, java.lang.String) throws org.apache.http.cookie.MalformedCookieException; + } + + public deprecated class BasicMaxAgeHandler extends org.apache.http.impl.cookie.AbstractCookieAttributeHandler { + ctor public BasicMaxAgeHandler(); + method public void parse(org.apache.http.cookie.SetCookie, java.lang.String) throws org.apache.http.cookie.MalformedCookieException; + } + + public deprecated class BasicPathHandler implements org.apache.http.cookie.CookieAttributeHandler { + ctor public BasicPathHandler(); + method public boolean match(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin); + method public void parse(org.apache.http.cookie.SetCookie, java.lang.String) throws org.apache.http.cookie.MalformedCookieException; + method public void validate(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin) throws org.apache.http.cookie.MalformedCookieException; + } + + public deprecated class BasicSecureHandler extends org.apache.http.impl.cookie.AbstractCookieAttributeHandler { + ctor public BasicSecureHandler(); + method public void parse(org.apache.http.cookie.SetCookie, java.lang.String) throws org.apache.http.cookie.MalformedCookieException; + } + + public deprecated class BestMatchSpec implements org.apache.http.cookie.CookieSpec { + ctor public BestMatchSpec(java.lang.String[], boolean); + ctor public BestMatchSpec(); + method public java.util.List formatCookies(java.util.List); + method public int getVersion(); + method public org.apache.http.Header getVersionHeader(); + method public boolean match(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin); + method public java.util.List parse(org.apache.http.Header, org.apache.http.cookie.CookieOrigin) throws org.apache.http.cookie.MalformedCookieException; + method public void validate(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin) throws org.apache.http.cookie.MalformedCookieException; + } + + public deprecated class BestMatchSpecFactory implements org.apache.http.cookie.CookieSpecFactory { + ctor public BestMatchSpecFactory(); + method public org.apache.http.cookie.CookieSpec newInstance(org.apache.http.params.HttpParams); + } + + public deprecated class BrowserCompatSpec extends org.apache.http.impl.cookie.CookieSpecBase { + ctor public BrowserCompatSpec(java.lang.String[]); + ctor public BrowserCompatSpec(); + method public java.util.List formatCookies(java.util.List); + method public int getVersion(); + method public org.apache.http.Header getVersionHeader(); + method public java.util.List parse(org.apache.http.Header, org.apache.http.cookie.CookieOrigin) throws org.apache.http.cookie.MalformedCookieException; + field protected static final java.lang.String[] DATE_PATTERNS; + } + + public deprecated class BrowserCompatSpecFactory implements org.apache.http.cookie.CookieSpecFactory { + ctor public BrowserCompatSpecFactory(); + method public org.apache.http.cookie.CookieSpec newInstance(org.apache.http.params.HttpParams); + } + + public abstract deprecated class CookieSpecBase extends org.apache.http.impl.cookie.AbstractCookieSpec { + ctor public CookieSpecBase(); + method protected static java.lang.String getDefaultDomain(org.apache.http.cookie.CookieOrigin); + method protected static java.lang.String getDefaultPath(org.apache.http.cookie.CookieOrigin); + method public boolean match(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin); + method protected java.util.List parse(org.apache.http.HeaderElement[], org.apache.http.cookie.CookieOrigin) throws org.apache.http.cookie.MalformedCookieException; + method public void validate(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin) throws org.apache.http.cookie.MalformedCookieException; + } + + public deprecated class DateParseException extends java.lang.Exception { + ctor public DateParseException(); + ctor public DateParseException(java.lang.String); + } + + public final deprecated class DateUtils { + method public static java.lang.String formatDate(java.util.Date); + method public static java.lang.String formatDate(java.util.Date, java.lang.String); + method public static java.util.Date parseDate(java.lang.String) throws org.apache.http.impl.cookie.DateParseException; + method public static java.util.Date parseDate(java.lang.String, java.lang.String[]) throws org.apache.http.impl.cookie.DateParseException; + method public static java.util.Date parseDate(java.lang.String, java.lang.String[], java.util.Date) throws org.apache.http.impl.cookie.DateParseException; + field public static final java.util.TimeZone GMT; + field public static final java.lang.String PATTERN_ASCTIME = "EEE MMM d HH:mm:ss yyyy"; + field public static final java.lang.String PATTERN_RFC1036 = "EEEE, dd-MMM-yy HH:mm:ss zzz"; + field public static final java.lang.String PATTERN_RFC1123 = "EEE, dd MMM yyyy HH:mm:ss zzz"; + } + + public deprecated class NetscapeDomainHandler extends org.apache.http.impl.cookie.BasicDomainHandler { + ctor public NetscapeDomainHandler(); + } + + public deprecated class NetscapeDraftHeaderParser { + ctor public NetscapeDraftHeaderParser(); + method public org.apache.http.HeaderElement parseHeader(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor) throws org.apache.http.ParseException; + field public static final org.apache.http.impl.cookie.NetscapeDraftHeaderParser DEFAULT; + } + + public deprecated class NetscapeDraftSpec extends org.apache.http.impl.cookie.CookieSpecBase { + ctor public NetscapeDraftSpec(java.lang.String[]); + ctor public NetscapeDraftSpec(); + method public java.util.List formatCookies(java.util.List); + method public int getVersion(); + method public org.apache.http.Header getVersionHeader(); + method public java.util.List parse(org.apache.http.Header, org.apache.http.cookie.CookieOrigin) throws org.apache.http.cookie.MalformedCookieException; + field protected static final java.lang.String EXPIRES_PATTERN = "EEE, dd-MMM-yyyy HH:mm:ss z"; + } + + public deprecated class NetscapeDraftSpecFactory implements org.apache.http.cookie.CookieSpecFactory { + ctor public NetscapeDraftSpecFactory(); + method public org.apache.http.cookie.CookieSpec newInstance(org.apache.http.params.HttpParams); + } + + public deprecated class RFC2109DomainHandler implements org.apache.http.cookie.CookieAttributeHandler { + ctor public RFC2109DomainHandler(); + method public boolean match(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin); + method public void parse(org.apache.http.cookie.SetCookie, java.lang.String) throws org.apache.http.cookie.MalformedCookieException; + method public void validate(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin) throws org.apache.http.cookie.MalformedCookieException; + } + + public deprecated class RFC2109Spec extends org.apache.http.impl.cookie.CookieSpecBase { + ctor public RFC2109Spec(java.lang.String[], boolean); + ctor public RFC2109Spec(); + method protected void formatCookieAsVer(org.apache.http.util.CharArrayBuffer, org.apache.http.cookie.Cookie, int); + method public java.util.List formatCookies(java.util.List); + method protected void formatParamAsVer(org.apache.http.util.CharArrayBuffer, java.lang.String, java.lang.String, int); + method public int getVersion(); + method public org.apache.http.Header getVersionHeader(); + method public java.util.List parse(org.apache.http.Header, org.apache.http.cookie.CookieOrigin) throws org.apache.http.cookie.MalformedCookieException; + } + + public deprecated class RFC2109SpecFactory implements org.apache.http.cookie.CookieSpecFactory { + ctor public RFC2109SpecFactory(); + method public org.apache.http.cookie.CookieSpec newInstance(org.apache.http.params.HttpParams); + } + + public deprecated class RFC2109VersionHandler extends org.apache.http.impl.cookie.AbstractCookieAttributeHandler { + ctor public RFC2109VersionHandler(); + method public void parse(org.apache.http.cookie.SetCookie, java.lang.String) throws org.apache.http.cookie.MalformedCookieException; + } + + public deprecated class RFC2965CommentUrlAttributeHandler implements org.apache.http.cookie.CookieAttributeHandler { + ctor public RFC2965CommentUrlAttributeHandler(); + method public boolean match(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin); + method public void parse(org.apache.http.cookie.SetCookie, java.lang.String) throws org.apache.http.cookie.MalformedCookieException; + method public void validate(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin) throws org.apache.http.cookie.MalformedCookieException; + } + + public deprecated class RFC2965DiscardAttributeHandler implements org.apache.http.cookie.CookieAttributeHandler { + ctor public RFC2965DiscardAttributeHandler(); + method public boolean match(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin); + method public void parse(org.apache.http.cookie.SetCookie, java.lang.String) throws org.apache.http.cookie.MalformedCookieException; + method public void validate(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin) throws org.apache.http.cookie.MalformedCookieException; + } + + public deprecated class RFC2965DomainAttributeHandler implements org.apache.http.cookie.CookieAttributeHandler { + ctor public RFC2965DomainAttributeHandler(); + method public boolean domainMatch(java.lang.String, java.lang.String); + method public boolean match(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin); + method public void parse(org.apache.http.cookie.SetCookie, java.lang.String) throws org.apache.http.cookie.MalformedCookieException; + method public void validate(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin) throws org.apache.http.cookie.MalformedCookieException; + } + + public deprecated class RFC2965PortAttributeHandler implements org.apache.http.cookie.CookieAttributeHandler { + ctor public RFC2965PortAttributeHandler(); + method public boolean match(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin); + method public void parse(org.apache.http.cookie.SetCookie, java.lang.String) throws org.apache.http.cookie.MalformedCookieException; + method public void validate(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin) throws org.apache.http.cookie.MalformedCookieException; + } + + public deprecated class RFC2965Spec extends org.apache.http.impl.cookie.RFC2109Spec { + ctor public RFC2965Spec(); + ctor public RFC2965Spec(java.lang.String[], boolean); + } + + public deprecated class RFC2965SpecFactory implements org.apache.http.cookie.CookieSpecFactory { + ctor public RFC2965SpecFactory(); + method public org.apache.http.cookie.CookieSpec newInstance(org.apache.http.params.HttpParams); + } + + public deprecated class RFC2965VersionAttributeHandler implements org.apache.http.cookie.CookieAttributeHandler { + ctor public RFC2965VersionAttributeHandler(); + method public boolean match(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin); + method public void parse(org.apache.http.cookie.SetCookie, java.lang.String) throws org.apache.http.cookie.MalformedCookieException; + method public void validate(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin) throws org.apache.http.cookie.MalformedCookieException; + } + +} + +package org.apache.http.impl.entity { + + public deprecated class EntityDeserializer { + ctor public EntityDeserializer(org.apache.http.entity.ContentLengthStrategy); + method public org.apache.http.HttpEntity deserialize(org.apache.http.io.SessionInputBuffer, org.apache.http.HttpMessage) throws org.apache.http.HttpException, java.io.IOException; + method protected org.apache.http.entity.BasicHttpEntity doDeserialize(org.apache.http.io.SessionInputBuffer, org.apache.http.HttpMessage) throws org.apache.http.HttpException, java.io.IOException; + } + + public deprecated class EntitySerializer { + ctor public EntitySerializer(org.apache.http.entity.ContentLengthStrategy); + method protected java.io.OutputStream doSerialize(org.apache.http.io.SessionOutputBuffer, org.apache.http.HttpMessage) throws org.apache.http.HttpException, java.io.IOException; + method public void serialize(org.apache.http.io.SessionOutputBuffer, org.apache.http.HttpMessage, org.apache.http.HttpEntity) throws org.apache.http.HttpException, java.io.IOException; + } + + public deprecated class LaxContentLengthStrategy implements org.apache.http.entity.ContentLengthStrategy { + ctor public LaxContentLengthStrategy(); + method public long determineLength(org.apache.http.HttpMessage) throws org.apache.http.HttpException; + } + + public deprecated class StrictContentLengthStrategy implements org.apache.http.entity.ContentLengthStrategy { + ctor public StrictContentLengthStrategy(); + method public long determineLength(org.apache.http.HttpMessage) throws org.apache.http.HttpException; + } + +} + +package org.apache.http.impl.io { + + public abstract deprecated class AbstractMessageParser implements org.apache.http.io.HttpMessageParser { + ctor public AbstractMessageParser(org.apache.http.io.SessionInputBuffer, org.apache.http.message.LineParser, org.apache.http.params.HttpParams); + method public org.apache.http.HttpMessage parse() throws org.apache.http.HttpException, java.io.IOException; + method protected abstract org.apache.http.HttpMessage parseHead(org.apache.http.io.SessionInputBuffer) throws org.apache.http.HttpException, java.io.IOException, org.apache.http.ParseException; + method public static org.apache.http.Header[] parseHeaders(org.apache.http.io.SessionInputBuffer, int, int, org.apache.http.message.LineParser) throws org.apache.http.HttpException, java.io.IOException; + field protected final org.apache.http.message.LineParser lineParser; + } + + public abstract deprecated class AbstractMessageWriter implements org.apache.http.io.HttpMessageWriter { + ctor public AbstractMessageWriter(org.apache.http.io.SessionOutputBuffer, org.apache.http.message.LineFormatter, org.apache.http.params.HttpParams); + method public void write(org.apache.http.HttpMessage) throws org.apache.http.HttpException, java.io.IOException; + method protected abstract void writeHeadLine(org.apache.http.HttpMessage) throws java.io.IOException; + field protected final org.apache.http.util.CharArrayBuffer lineBuf; + field protected final org.apache.http.message.LineFormatter lineFormatter; + field protected final org.apache.http.io.SessionOutputBuffer sessionBuffer; + } + + public abstract deprecated class AbstractSessionInputBuffer implements org.apache.http.io.SessionInputBuffer { + ctor public AbstractSessionInputBuffer(); + method protected int fillBuffer() throws java.io.IOException; + method public org.apache.http.io.HttpTransportMetrics getMetrics(); + method protected boolean hasBufferedData(); + method protected void init(java.io.InputStream, int, org.apache.http.params.HttpParams); + method public int read() throws java.io.IOException; + method public int read(byte[], int, int) throws java.io.IOException; + method public int read(byte[]) throws java.io.IOException; + method public int readLine(org.apache.http.util.CharArrayBuffer) throws java.io.IOException; + method public java.lang.String readLine() throws java.io.IOException; + } + + public abstract deprecated class AbstractSessionOutputBuffer implements org.apache.http.io.SessionOutputBuffer { + ctor public AbstractSessionOutputBuffer(); + method public void flush() throws java.io.IOException; + method protected void flushBuffer() throws java.io.IOException; + method public org.apache.http.io.HttpTransportMetrics getMetrics(); + method protected void init(java.io.OutputStream, int, org.apache.http.params.HttpParams); + method public void write(byte[], int, int) throws java.io.IOException; + method public void write(byte[]) throws java.io.IOException; + method public void write(int) throws java.io.IOException; + method public void writeLine(java.lang.String) throws java.io.IOException; + method public void writeLine(org.apache.http.util.CharArrayBuffer) throws java.io.IOException; + } + + public deprecated class ChunkedInputStream extends java.io.InputStream { + ctor public ChunkedInputStream(org.apache.http.io.SessionInputBuffer); + method public org.apache.http.Header[] getFooters(); + method public int read() throws java.io.IOException; + } + + public deprecated class ChunkedOutputStream extends java.io.OutputStream { + ctor public ChunkedOutputStream(org.apache.http.io.SessionOutputBuffer, int) throws java.io.IOException; + ctor public ChunkedOutputStream(org.apache.http.io.SessionOutputBuffer) throws java.io.IOException; + method public void finish() throws java.io.IOException; + method protected void flushCache() throws java.io.IOException; + method protected void flushCacheWithAppend(byte[], int, int) throws java.io.IOException; + method public void write(int) throws java.io.IOException; + method protected void writeClosingChunk() throws java.io.IOException; + } + + public deprecated class ContentLengthInputStream extends java.io.InputStream { + ctor public ContentLengthInputStream(org.apache.http.io.SessionInputBuffer, long); + method public int read() throws java.io.IOException; + } + + public deprecated class ContentLengthOutputStream extends java.io.OutputStream { + ctor public ContentLengthOutputStream(org.apache.http.io.SessionOutputBuffer, long); + method public void write(int) throws java.io.IOException; + } + + public deprecated class HttpRequestParser extends org.apache.http.impl.io.AbstractMessageParser { + ctor public HttpRequestParser(org.apache.http.io.SessionInputBuffer, org.apache.http.message.LineParser, org.apache.http.HttpRequestFactory, org.apache.http.params.HttpParams); + method protected org.apache.http.HttpMessage parseHead(org.apache.http.io.SessionInputBuffer) throws org.apache.http.HttpException, java.io.IOException, org.apache.http.ParseException; + } + + public deprecated class HttpRequestWriter extends org.apache.http.impl.io.AbstractMessageWriter { + ctor public HttpRequestWriter(org.apache.http.io.SessionOutputBuffer, org.apache.http.message.LineFormatter, org.apache.http.params.HttpParams); + method protected void writeHeadLine(org.apache.http.HttpMessage) throws java.io.IOException; + } + + public deprecated class HttpResponseParser extends org.apache.http.impl.io.AbstractMessageParser { + ctor public HttpResponseParser(org.apache.http.io.SessionInputBuffer, org.apache.http.message.LineParser, org.apache.http.HttpResponseFactory, org.apache.http.params.HttpParams); + method protected org.apache.http.HttpMessage parseHead(org.apache.http.io.SessionInputBuffer) throws org.apache.http.HttpException, java.io.IOException, org.apache.http.ParseException; + } + + public deprecated class HttpResponseWriter extends org.apache.http.impl.io.AbstractMessageWriter { + ctor public HttpResponseWriter(org.apache.http.io.SessionOutputBuffer, org.apache.http.message.LineFormatter, org.apache.http.params.HttpParams); + method protected void writeHeadLine(org.apache.http.HttpMessage) throws java.io.IOException; + } + + public deprecated class HttpTransportMetricsImpl implements org.apache.http.io.HttpTransportMetrics { + ctor public HttpTransportMetricsImpl(); + method public long getBytesTransferred(); + method public void incrementBytesTransferred(long); + method public void reset(); + method public void setBytesTransferred(long); + } + + public deprecated class IdentityInputStream extends java.io.InputStream { + ctor public IdentityInputStream(org.apache.http.io.SessionInputBuffer); + method public int read() throws java.io.IOException; + } + + public deprecated class IdentityOutputStream extends java.io.OutputStream { + ctor public IdentityOutputStream(org.apache.http.io.SessionOutputBuffer); + method public void write(int) throws java.io.IOException; + } + + public deprecated class SocketInputBuffer extends org.apache.http.impl.io.AbstractSessionInputBuffer { + ctor public SocketInputBuffer(java.net.Socket, int, org.apache.http.params.HttpParams) throws java.io.IOException; + method public boolean isDataAvailable(int) throws java.io.IOException; + } + + public deprecated class SocketOutputBuffer extends org.apache.http.impl.io.AbstractSessionOutputBuffer { + ctor public SocketOutputBuffer(java.net.Socket, int, org.apache.http.params.HttpParams) throws java.io.IOException; + } + +} + +package org.apache.http.io { + + public abstract deprecated interface HttpMessageParser { + method public abstract org.apache.http.HttpMessage parse() throws org.apache.http.HttpException, java.io.IOException; + } + + public abstract deprecated interface HttpMessageWriter { + method public abstract void write(org.apache.http.HttpMessage) throws org.apache.http.HttpException, java.io.IOException; + } + + public abstract deprecated interface HttpTransportMetrics { + method public abstract long getBytesTransferred(); + method public abstract void reset(); + } + + public abstract deprecated interface SessionInputBuffer { + method public abstract org.apache.http.io.HttpTransportMetrics getMetrics(); + method public abstract boolean isDataAvailable(int) throws java.io.IOException; + method public abstract int read(byte[], int, int) throws java.io.IOException; + method public abstract int read(byte[]) throws java.io.IOException; + method public abstract int read() throws java.io.IOException; + method public abstract int readLine(org.apache.http.util.CharArrayBuffer) throws java.io.IOException; + method public abstract java.lang.String readLine() throws java.io.IOException; + } + + public abstract deprecated interface SessionOutputBuffer { + method public abstract void flush() throws java.io.IOException; + method public abstract org.apache.http.io.HttpTransportMetrics getMetrics(); + method public abstract void write(byte[], int, int) throws java.io.IOException; + method public abstract void write(byte[]) throws java.io.IOException; + method public abstract void write(int) throws java.io.IOException; + method public abstract void writeLine(java.lang.String) throws java.io.IOException; + method public abstract void writeLine(org.apache.http.util.CharArrayBuffer) throws java.io.IOException; + } + +} + +package org.apache.http.message { + + public abstract deprecated class AbstractHttpMessage implements org.apache.http.HttpMessage { + ctor protected AbstractHttpMessage(org.apache.http.params.HttpParams); + ctor protected AbstractHttpMessage(); + method public void addHeader(org.apache.http.Header); + method public void addHeader(java.lang.String, java.lang.String); + method public boolean containsHeader(java.lang.String); + method public org.apache.http.Header[] getAllHeaders(); + method public org.apache.http.Header getFirstHeader(java.lang.String); + method public org.apache.http.Header[] getHeaders(java.lang.String); + method public org.apache.http.Header getLastHeader(java.lang.String); + method public org.apache.http.params.HttpParams getParams(); + method public org.apache.http.HeaderIterator headerIterator(); + method public org.apache.http.HeaderIterator headerIterator(java.lang.String); + method public void removeHeader(org.apache.http.Header); + method public void removeHeaders(java.lang.String); + method public void setHeader(org.apache.http.Header); + method public void setHeader(java.lang.String, java.lang.String); + method public void setHeaders(org.apache.http.Header[]); + method public void setParams(org.apache.http.params.HttpParams); + field protected org.apache.http.message.HeaderGroup headergroup; + field protected org.apache.http.params.HttpParams params; + } + + public deprecated class BasicHeader implements java.lang.Cloneable org.apache.http.Header { + ctor public BasicHeader(java.lang.String, java.lang.String); + method public java.lang.Object clone() throws java.lang.CloneNotSupportedException; + method public org.apache.http.HeaderElement[] getElements() throws org.apache.http.ParseException; + method public java.lang.String getName(); + method public java.lang.String getValue(); + } + + public deprecated class BasicHeaderElement implements java.lang.Cloneable org.apache.http.HeaderElement { + ctor public BasicHeaderElement(java.lang.String, java.lang.String, org.apache.http.NameValuePair[]); + ctor public BasicHeaderElement(java.lang.String, java.lang.String); + method public java.lang.Object clone() throws java.lang.CloneNotSupportedException; + method public java.lang.String getName(); + method public org.apache.http.NameValuePair getParameter(int); + method public org.apache.http.NameValuePair getParameterByName(java.lang.String); + method public int getParameterCount(); + method public org.apache.http.NameValuePair[] getParameters(); + method public java.lang.String getValue(); + } + + public deprecated class BasicHeaderElementIterator implements org.apache.http.HeaderElementIterator { + ctor public BasicHeaderElementIterator(org.apache.http.HeaderIterator, org.apache.http.message.HeaderValueParser); + ctor public BasicHeaderElementIterator(org.apache.http.HeaderIterator); + method public boolean hasNext(); + method public final java.lang.Object next() throws java.util.NoSuchElementException; + method public org.apache.http.HeaderElement nextElement() throws java.util.NoSuchElementException; + method public void remove() throws java.lang.UnsupportedOperationException; + } + + public deprecated class BasicHeaderIterator implements org.apache.http.HeaderIterator { + ctor public BasicHeaderIterator(org.apache.http.Header[], java.lang.String); + method protected boolean filterHeader(int); + method protected int findNext(int); + method public boolean hasNext(); + method public final java.lang.Object next() throws java.util.NoSuchElementException; + method public org.apache.http.Header nextHeader() throws java.util.NoSuchElementException; + method public void remove() throws java.lang.UnsupportedOperationException; + field protected final org.apache.http.Header[] allHeaders; + field protected int currentIndex; + field protected java.lang.String headerName; + } + + public deprecated class BasicHeaderValueFormatter implements org.apache.http.message.HeaderValueFormatter { + ctor public BasicHeaderValueFormatter(); + method protected void doFormatValue(org.apache.http.util.CharArrayBuffer, java.lang.String, boolean); + method protected int estimateElementsLen(org.apache.http.HeaderElement[]); + method protected int estimateHeaderElementLen(org.apache.http.HeaderElement); + method protected int estimateNameValuePairLen(org.apache.http.NameValuePair); + method protected int estimateParametersLen(org.apache.http.NameValuePair[]); + method public static final java.lang.String formatElements(org.apache.http.HeaderElement[], boolean, org.apache.http.message.HeaderValueFormatter); + method public org.apache.http.util.CharArrayBuffer formatElements(org.apache.http.util.CharArrayBuffer, org.apache.http.HeaderElement[], boolean); + method public static final java.lang.String formatHeaderElement(org.apache.http.HeaderElement, boolean, org.apache.http.message.HeaderValueFormatter); + method public org.apache.http.util.CharArrayBuffer formatHeaderElement(org.apache.http.util.CharArrayBuffer, org.apache.http.HeaderElement, boolean); + method public static final java.lang.String formatNameValuePair(org.apache.http.NameValuePair, boolean, org.apache.http.message.HeaderValueFormatter); + method public org.apache.http.util.CharArrayBuffer formatNameValuePair(org.apache.http.util.CharArrayBuffer, org.apache.http.NameValuePair, boolean); + method public static final java.lang.String formatParameters(org.apache.http.NameValuePair[], boolean, org.apache.http.message.HeaderValueFormatter); + method public org.apache.http.util.CharArrayBuffer formatParameters(org.apache.http.util.CharArrayBuffer, org.apache.http.NameValuePair[], boolean); + method protected boolean isSeparator(char); + method protected boolean isUnsafe(char); + field public static final org.apache.http.message.BasicHeaderValueFormatter DEFAULT; + field public static final java.lang.String SEPARATORS = " ;,:@()<>\\\"/[]?={}\t"; + field public static final java.lang.String UNSAFE_CHARS = "\"\\"; + } + + public deprecated class BasicHeaderValueParser implements org.apache.http.message.HeaderValueParser { + ctor public BasicHeaderValueParser(); + method protected org.apache.http.HeaderElement createHeaderElement(java.lang.String, java.lang.String, org.apache.http.NameValuePair[]); + method protected org.apache.http.NameValuePair createNameValuePair(java.lang.String, java.lang.String); + method public static final org.apache.http.HeaderElement[] parseElements(java.lang.String, org.apache.http.message.HeaderValueParser) throws org.apache.http.ParseException; + method public org.apache.http.HeaderElement[] parseElements(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor); + method public static final org.apache.http.HeaderElement parseHeaderElement(java.lang.String, org.apache.http.message.HeaderValueParser) throws org.apache.http.ParseException; + method public org.apache.http.HeaderElement parseHeaderElement(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor); + method public static final org.apache.http.NameValuePair parseNameValuePair(java.lang.String, org.apache.http.message.HeaderValueParser) throws org.apache.http.ParseException; + method public org.apache.http.NameValuePair parseNameValuePair(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor); + method public org.apache.http.NameValuePair parseNameValuePair(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor, char[]); + method public static final org.apache.http.NameValuePair[] parseParameters(java.lang.String, org.apache.http.message.HeaderValueParser) throws org.apache.http.ParseException; + method public org.apache.http.NameValuePair[] parseParameters(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor); + field public static final org.apache.http.message.BasicHeaderValueParser DEFAULT; + } + + public deprecated class BasicHttpEntityEnclosingRequest extends org.apache.http.message.BasicHttpRequest implements org.apache.http.HttpEntityEnclosingRequest { + ctor public BasicHttpEntityEnclosingRequest(java.lang.String, java.lang.String); + ctor public BasicHttpEntityEnclosingRequest(java.lang.String, java.lang.String, org.apache.http.ProtocolVersion); + ctor public BasicHttpEntityEnclosingRequest(org.apache.http.RequestLine); + method public boolean expectContinue(); + method public org.apache.http.HttpEntity getEntity(); + method public void setEntity(org.apache.http.HttpEntity); + } + + public deprecated class BasicHttpRequest extends org.apache.http.message.AbstractHttpMessage implements org.apache.http.HttpRequest { + ctor public BasicHttpRequest(java.lang.String, java.lang.String); + ctor public BasicHttpRequest(java.lang.String, java.lang.String, org.apache.http.ProtocolVersion); + ctor public BasicHttpRequest(org.apache.http.RequestLine); + method public org.apache.http.ProtocolVersion getProtocolVersion(); + method public org.apache.http.RequestLine getRequestLine(); + } + + public deprecated class BasicHttpResponse extends org.apache.http.message.AbstractHttpMessage implements org.apache.http.HttpResponse { + ctor public BasicHttpResponse(org.apache.http.StatusLine, org.apache.http.ReasonPhraseCatalog, java.util.Locale); + ctor public BasicHttpResponse(org.apache.http.StatusLine); + ctor public BasicHttpResponse(org.apache.http.ProtocolVersion, int, java.lang.String); + method public org.apache.http.HttpEntity getEntity(); + method public java.util.Locale getLocale(); + method public org.apache.http.ProtocolVersion getProtocolVersion(); + method protected java.lang.String getReason(int); + method public org.apache.http.StatusLine getStatusLine(); + method public void setEntity(org.apache.http.HttpEntity); + method public void setLocale(java.util.Locale); + method public void setReasonPhrase(java.lang.String); + method public void setStatusCode(int); + method public void setStatusLine(org.apache.http.StatusLine); + method public void setStatusLine(org.apache.http.ProtocolVersion, int); + method public void setStatusLine(org.apache.http.ProtocolVersion, int, java.lang.String); + } + + public deprecated class BasicLineFormatter implements org.apache.http.message.LineFormatter { + ctor public BasicLineFormatter(); + method public org.apache.http.util.CharArrayBuffer appendProtocolVersion(org.apache.http.util.CharArrayBuffer, org.apache.http.ProtocolVersion); + method protected void doFormatHeader(org.apache.http.util.CharArrayBuffer, org.apache.http.Header); + method protected void doFormatRequestLine(org.apache.http.util.CharArrayBuffer, org.apache.http.RequestLine); + method protected void doFormatStatusLine(org.apache.http.util.CharArrayBuffer, org.apache.http.StatusLine); + method protected int estimateProtocolVersionLen(org.apache.http.ProtocolVersion); + method public static final java.lang.String formatHeader(org.apache.http.Header, org.apache.http.message.LineFormatter); + method public org.apache.http.util.CharArrayBuffer formatHeader(org.apache.http.util.CharArrayBuffer, org.apache.http.Header); + method public static final java.lang.String formatProtocolVersion(org.apache.http.ProtocolVersion, org.apache.http.message.LineFormatter); + method public static final java.lang.String formatRequestLine(org.apache.http.RequestLine, org.apache.http.message.LineFormatter); + method public org.apache.http.util.CharArrayBuffer formatRequestLine(org.apache.http.util.CharArrayBuffer, org.apache.http.RequestLine); + method public static final java.lang.String formatStatusLine(org.apache.http.StatusLine, org.apache.http.message.LineFormatter); + method public org.apache.http.util.CharArrayBuffer formatStatusLine(org.apache.http.util.CharArrayBuffer, org.apache.http.StatusLine); + method protected org.apache.http.util.CharArrayBuffer initBuffer(org.apache.http.util.CharArrayBuffer); + field public static final org.apache.http.message.BasicLineFormatter DEFAULT; + } + + public deprecated class BasicLineParser implements org.apache.http.message.LineParser { + ctor public BasicLineParser(org.apache.http.ProtocolVersion); + ctor public BasicLineParser(); + method protected org.apache.http.ProtocolVersion createProtocolVersion(int, int); + method protected org.apache.http.RequestLine createRequestLine(java.lang.String, java.lang.String, org.apache.http.ProtocolVersion); + method protected org.apache.http.StatusLine createStatusLine(org.apache.http.ProtocolVersion, int, java.lang.String); + method public boolean hasProtocolVersion(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor); + method public static final org.apache.http.Header parseHeader(java.lang.String, org.apache.http.message.LineParser) throws org.apache.http.ParseException; + method public org.apache.http.Header parseHeader(org.apache.http.util.CharArrayBuffer) throws org.apache.http.ParseException; + method public static final org.apache.http.ProtocolVersion parseProtocolVersion(java.lang.String, org.apache.http.message.LineParser) throws org.apache.http.ParseException; + method public org.apache.http.ProtocolVersion parseProtocolVersion(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor) throws org.apache.http.ParseException; + method public static final org.apache.http.RequestLine parseRequestLine(java.lang.String, org.apache.http.message.LineParser) throws org.apache.http.ParseException; + method public org.apache.http.RequestLine parseRequestLine(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor) throws org.apache.http.ParseException; + method public static final org.apache.http.StatusLine parseStatusLine(java.lang.String, org.apache.http.message.LineParser) throws org.apache.http.ParseException; + method public org.apache.http.StatusLine parseStatusLine(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor) throws org.apache.http.ParseException; + method protected void skipWhitespace(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor); + field public static final org.apache.http.message.BasicLineParser DEFAULT; + field protected final org.apache.http.ProtocolVersion protocol; + } + + public deprecated class BasicListHeaderIterator implements org.apache.http.HeaderIterator { + ctor public BasicListHeaderIterator(java.util.List, java.lang.String); + method protected boolean filterHeader(int); + method protected int findNext(int); + method public boolean hasNext(); + method public final java.lang.Object next() throws java.util.NoSuchElementException; + method public org.apache.http.Header nextHeader() throws java.util.NoSuchElementException; + method public void remove() throws java.lang.UnsupportedOperationException; + field protected final java.util.List allHeaders; + field protected int currentIndex; + field protected java.lang.String headerName; + field protected int lastIndex; + } + + public deprecated class BasicNameValuePair implements java.lang.Cloneable org.apache.http.NameValuePair { + ctor public BasicNameValuePair(java.lang.String, java.lang.String); + method public java.lang.Object clone() throws java.lang.CloneNotSupportedException; + method public java.lang.String getName(); + method public java.lang.String getValue(); + } + + public deprecated class BasicRequestLine implements java.lang.Cloneable org.apache.http.RequestLine { + ctor public BasicRequestLine(java.lang.String, java.lang.String, org.apache.http.ProtocolVersion); + method public java.lang.Object clone() throws java.lang.CloneNotSupportedException; + method public java.lang.String getMethod(); + method public org.apache.http.ProtocolVersion getProtocolVersion(); + method public java.lang.String getUri(); + } + + public deprecated class BasicStatusLine implements java.lang.Cloneable org.apache.http.StatusLine { + ctor public BasicStatusLine(org.apache.http.ProtocolVersion, int, java.lang.String); + method public java.lang.Object clone() throws java.lang.CloneNotSupportedException; + method public org.apache.http.ProtocolVersion getProtocolVersion(); + method public java.lang.String getReasonPhrase(); + method public int getStatusCode(); + } + + public deprecated class BasicTokenIterator implements org.apache.http.TokenIterator { + ctor public BasicTokenIterator(org.apache.http.HeaderIterator); + method protected java.lang.String createToken(java.lang.String, int, int); + method protected int findNext(int) throws org.apache.http.ParseException; + method protected int findTokenEnd(int); + method protected int findTokenSeparator(int); + method protected int findTokenStart(int); + method public boolean hasNext(); + method protected boolean isHttpSeparator(char); + method protected boolean isTokenChar(char); + method protected boolean isTokenSeparator(char); + method protected boolean isWhitespace(char); + method public final java.lang.Object next() throws java.util.NoSuchElementException, org.apache.http.ParseException; + method public java.lang.String nextToken() throws java.util.NoSuchElementException, org.apache.http.ParseException; + method public final void remove() throws java.lang.UnsupportedOperationException; + field public static final java.lang.String HTTP_SEPARATORS = " ,;=()<>@:\\\"/[]?{}\t"; + field protected java.lang.String currentHeader; + field protected java.lang.String currentToken; + field protected final org.apache.http.HeaderIterator headerIt; + field protected int searchPos; + } + + public deprecated class BufferedHeader implements java.lang.Cloneable org.apache.http.FormattedHeader { + ctor public BufferedHeader(org.apache.http.util.CharArrayBuffer) throws org.apache.http.ParseException; + method public java.lang.Object clone() throws java.lang.CloneNotSupportedException; + method public org.apache.http.util.CharArrayBuffer getBuffer(); + method public org.apache.http.HeaderElement[] getElements() throws org.apache.http.ParseException; + method public java.lang.String getName(); + method public java.lang.String getValue(); + method public int getValuePos(); + } + + public deprecated class HeaderGroup implements java.lang.Cloneable { + ctor public HeaderGroup(); + method public void addHeader(org.apache.http.Header); + method public void clear(); + method public java.lang.Object clone() throws java.lang.CloneNotSupportedException; + method public boolean containsHeader(java.lang.String); + method public org.apache.http.message.HeaderGroup copy(); + method public org.apache.http.Header[] getAllHeaders(); + method public org.apache.http.Header getCondensedHeader(java.lang.String); + method public org.apache.http.Header getFirstHeader(java.lang.String); + method public org.apache.http.Header[] getHeaders(java.lang.String); + method public org.apache.http.Header getLastHeader(java.lang.String); + method public org.apache.http.HeaderIterator iterator(); + method public org.apache.http.HeaderIterator iterator(java.lang.String); + method public void removeHeader(org.apache.http.Header); + method public void setHeaders(org.apache.http.Header[]); + method public void updateHeader(org.apache.http.Header); + } + + public abstract deprecated interface HeaderValueFormatter { + method public abstract org.apache.http.util.CharArrayBuffer formatElements(org.apache.http.util.CharArrayBuffer, org.apache.http.HeaderElement[], boolean); + method public abstract org.apache.http.util.CharArrayBuffer formatHeaderElement(org.apache.http.util.CharArrayBuffer, org.apache.http.HeaderElement, boolean); + method public abstract org.apache.http.util.CharArrayBuffer formatNameValuePair(org.apache.http.util.CharArrayBuffer, org.apache.http.NameValuePair, boolean); + method public abstract org.apache.http.util.CharArrayBuffer formatParameters(org.apache.http.util.CharArrayBuffer, org.apache.http.NameValuePair[], boolean); + } + + public abstract deprecated interface HeaderValueParser { + method public abstract org.apache.http.HeaderElement[] parseElements(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor) throws org.apache.http.ParseException; + method public abstract org.apache.http.HeaderElement parseHeaderElement(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor) throws org.apache.http.ParseException; + method public abstract org.apache.http.NameValuePair parseNameValuePair(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor) throws org.apache.http.ParseException; + method public abstract org.apache.http.NameValuePair[] parseParameters(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor) throws org.apache.http.ParseException; + } + + public abstract deprecated interface LineFormatter { + method public abstract org.apache.http.util.CharArrayBuffer appendProtocolVersion(org.apache.http.util.CharArrayBuffer, org.apache.http.ProtocolVersion); + method public abstract org.apache.http.util.CharArrayBuffer formatHeader(org.apache.http.util.CharArrayBuffer, org.apache.http.Header); + method public abstract org.apache.http.util.CharArrayBuffer formatRequestLine(org.apache.http.util.CharArrayBuffer, org.apache.http.RequestLine); + method public abstract org.apache.http.util.CharArrayBuffer formatStatusLine(org.apache.http.util.CharArrayBuffer, org.apache.http.StatusLine); + } + + public abstract deprecated interface LineParser { + method public abstract boolean hasProtocolVersion(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor); + method public abstract org.apache.http.Header parseHeader(org.apache.http.util.CharArrayBuffer) throws org.apache.http.ParseException; + method public abstract org.apache.http.ProtocolVersion parseProtocolVersion(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor) throws org.apache.http.ParseException; + method public abstract org.apache.http.RequestLine parseRequestLine(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor) throws org.apache.http.ParseException; + method public abstract org.apache.http.StatusLine parseStatusLine(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor) throws org.apache.http.ParseException; + } + + public deprecated class ParserCursor { + ctor public ParserCursor(int, int); + method public boolean atEnd(); + method public int getLowerBound(); + method public int getPos(); + method public int getUpperBound(); + method public void updatePos(int); + } + +} + +package org.apache.http.params { + + public abstract deprecated class AbstractHttpParams implements org.apache.http.params.HttpParams { + ctor protected AbstractHttpParams(); + method public boolean getBooleanParameter(java.lang.String, boolean); + method public double getDoubleParameter(java.lang.String, double); + method public int getIntParameter(java.lang.String, int); + method public long getLongParameter(java.lang.String, long); + method public boolean isParameterFalse(java.lang.String); + method public boolean isParameterTrue(java.lang.String); + method public org.apache.http.params.HttpParams setBooleanParameter(java.lang.String, boolean); + method public org.apache.http.params.HttpParams setDoubleParameter(java.lang.String, double); + method public org.apache.http.params.HttpParams setIntParameter(java.lang.String, int); + method public org.apache.http.params.HttpParams setLongParameter(java.lang.String, long); + } + + public final deprecated class BasicHttpParams extends org.apache.http.params.AbstractHttpParams implements java.lang.Cloneable java.io.Serializable { + ctor public BasicHttpParams(); + method public void clear(); + method public java.lang.Object clone() throws java.lang.CloneNotSupportedException; + method public org.apache.http.params.HttpParams copy(); + method protected void copyParams(org.apache.http.params.HttpParams); + method public java.lang.Object getParameter(java.lang.String); + method public boolean isParameterSet(java.lang.String); + method public boolean isParameterSetLocally(java.lang.String); + method public boolean removeParameter(java.lang.String); + method public org.apache.http.params.HttpParams setParameter(java.lang.String, java.lang.Object); + method public void setParameters(java.lang.String[], java.lang.Object); + } + + public abstract deprecated interface CoreConnectionPNames { + field public static final java.lang.String CONNECTION_TIMEOUT = "http.connection.timeout"; + field public static final java.lang.String MAX_HEADER_COUNT = "http.connection.max-header-count"; + field public static final java.lang.String MAX_LINE_LENGTH = "http.connection.max-line-length"; + field public static final java.lang.String SOCKET_BUFFER_SIZE = "http.socket.buffer-size"; + field public static final java.lang.String SO_LINGER = "http.socket.linger"; + field public static final java.lang.String SO_TIMEOUT = "http.socket.timeout"; + field public static final java.lang.String STALE_CONNECTION_CHECK = "http.connection.stalecheck"; + field public static final java.lang.String TCP_NODELAY = "http.tcp.nodelay"; + } + + public abstract deprecated interface CoreProtocolPNames { + field public static final java.lang.String HTTP_CONTENT_CHARSET = "http.protocol.content-charset"; + field public static final java.lang.String HTTP_ELEMENT_CHARSET = "http.protocol.element-charset"; + field public static final java.lang.String ORIGIN_SERVER = "http.origin-server"; + field public static final java.lang.String PROTOCOL_VERSION = "http.protocol.version"; + field public static final java.lang.String STRICT_TRANSFER_ENCODING = "http.protocol.strict-transfer-encoding"; + field public static final java.lang.String USER_AGENT = "http.useragent"; + field public static final java.lang.String USE_EXPECT_CONTINUE = "http.protocol.expect-continue"; + field public static final java.lang.String WAIT_FOR_CONTINUE = "http.protocol.wait-for-continue"; + } + + public final deprecated class DefaultedHttpParams extends org.apache.http.params.AbstractHttpParams { + ctor public DefaultedHttpParams(org.apache.http.params.HttpParams, org.apache.http.params.HttpParams); + method public org.apache.http.params.HttpParams copy(); + method public org.apache.http.params.HttpParams getDefaults(); + method public java.lang.Object getParameter(java.lang.String); + method public boolean removeParameter(java.lang.String); + method public org.apache.http.params.HttpParams setParameter(java.lang.String, java.lang.Object); + } + + public abstract deprecated class HttpAbstractParamBean { + ctor public HttpAbstractParamBean(org.apache.http.params.HttpParams); + field protected final org.apache.http.params.HttpParams params; + } + + public deprecated class HttpConnectionParamBean extends org.apache.http.params.HttpAbstractParamBean { + ctor public HttpConnectionParamBean(org.apache.http.params.HttpParams); + method public void setConnectionTimeout(int); + method public void setLinger(int); + method public void setSoTimeout(int); + method public void setSocketBufferSize(int); + method public void setStaleCheckingEnabled(boolean); + method public void setTcpNoDelay(boolean); + } + + public final deprecated class HttpConnectionParams implements org.apache.http.params.CoreConnectionPNames { + method public static int getConnectionTimeout(org.apache.http.params.HttpParams); + method public static int getLinger(org.apache.http.params.HttpParams); + method public static int getSoTimeout(org.apache.http.params.HttpParams); + method public static int getSocketBufferSize(org.apache.http.params.HttpParams); + method public static boolean getTcpNoDelay(org.apache.http.params.HttpParams); + method public static boolean isStaleCheckingEnabled(org.apache.http.params.HttpParams); + method public static void setConnectionTimeout(org.apache.http.params.HttpParams, int); + method public static void setLinger(org.apache.http.params.HttpParams, int); + method public static void setSoTimeout(org.apache.http.params.HttpParams, int); + method public static void setSocketBufferSize(org.apache.http.params.HttpParams, int); + method public static void setStaleCheckingEnabled(org.apache.http.params.HttpParams, boolean); + method public static void setTcpNoDelay(org.apache.http.params.HttpParams, boolean); + } + + public abstract deprecated interface HttpParams { + method public abstract org.apache.http.params.HttpParams copy(); + method public abstract boolean getBooleanParameter(java.lang.String, boolean); + method public abstract double getDoubleParameter(java.lang.String, double); + method public abstract int getIntParameter(java.lang.String, int); + method public abstract long getLongParameter(java.lang.String, long); + method public abstract java.lang.Object getParameter(java.lang.String); + method public abstract boolean isParameterFalse(java.lang.String); + method public abstract boolean isParameterTrue(java.lang.String); + method public abstract boolean removeParameter(java.lang.String); + method public abstract org.apache.http.params.HttpParams setBooleanParameter(java.lang.String, boolean); + method public abstract org.apache.http.params.HttpParams setDoubleParameter(java.lang.String, double); + method public abstract org.apache.http.params.HttpParams setIntParameter(java.lang.String, int); + method public abstract org.apache.http.params.HttpParams setLongParameter(java.lang.String, long); + method public abstract org.apache.http.params.HttpParams setParameter(java.lang.String, java.lang.Object); + } + + public deprecated class HttpProtocolParamBean extends org.apache.http.params.HttpAbstractParamBean { + ctor public HttpProtocolParamBean(org.apache.http.params.HttpParams); + method public void setContentCharset(java.lang.String); + method public void setHttpElementCharset(java.lang.String); + method public void setUseExpectContinue(boolean); + method public void setUserAgent(java.lang.String); + method public void setVersion(org.apache.http.HttpVersion); + } + + public final deprecated class HttpProtocolParams implements org.apache.http.params.CoreProtocolPNames { + method public static java.lang.String getContentCharset(org.apache.http.params.HttpParams); + method public static java.lang.String getHttpElementCharset(org.apache.http.params.HttpParams); + method public static java.lang.String getUserAgent(org.apache.http.params.HttpParams); + method public static org.apache.http.ProtocolVersion getVersion(org.apache.http.params.HttpParams); + method public static void setContentCharset(org.apache.http.params.HttpParams, java.lang.String); + method public static void setHttpElementCharset(org.apache.http.params.HttpParams, java.lang.String); + method public static void setUseExpectContinue(org.apache.http.params.HttpParams, boolean); + method public static void setUserAgent(org.apache.http.params.HttpParams, java.lang.String); + method public static void setVersion(org.apache.http.params.HttpParams, org.apache.http.ProtocolVersion); + method public static boolean useExpectContinue(org.apache.http.params.HttpParams); + } + +} + +package org.apache.http.protocol { + + public deprecated class BasicHttpContext implements org.apache.http.protocol.HttpContext { + ctor public BasicHttpContext(); + ctor public BasicHttpContext(org.apache.http.protocol.HttpContext); + method public java.lang.Object getAttribute(java.lang.String); + method public java.lang.Object removeAttribute(java.lang.String); + method public void setAttribute(java.lang.String, java.lang.Object); + } + + public final deprecated class BasicHttpProcessor implements java.lang.Cloneable org.apache.http.protocol.HttpProcessor org.apache.http.protocol.HttpRequestInterceptorList org.apache.http.protocol.HttpResponseInterceptorList { + ctor public BasicHttpProcessor(); + method public final void addInterceptor(org.apache.http.HttpRequestInterceptor); + method public final void addInterceptor(org.apache.http.HttpRequestInterceptor, int); + method public final void addInterceptor(org.apache.http.HttpResponseInterceptor); + method public final void addInterceptor(org.apache.http.HttpResponseInterceptor, int); + method public void addRequestInterceptor(org.apache.http.HttpRequestInterceptor); + method public void addRequestInterceptor(org.apache.http.HttpRequestInterceptor, int); + method public void addResponseInterceptor(org.apache.http.HttpResponseInterceptor, int); + method public void addResponseInterceptor(org.apache.http.HttpResponseInterceptor); + method public void clearInterceptors(); + method public void clearRequestInterceptors(); + method public void clearResponseInterceptors(); + method public java.lang.Object clone() throws java.lang.CloneNotSupportedException; + method public org.apache.http.protocol.BasicHttpProcessor copy(); + method protected void copyInterceptors(org.apache.http.protocol.BasicHttpProcessor); + method public org.apache.http.HttpRequestInterceptor getRequestInterceptor(int); + method public int getRequestInterceptorCount(); + method public org.apache.http.HttpResponseInterceptor getResponseInterceptor(int); + method public int getResponseInterceptorCount(); + method public void process(org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; + method public void process(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; + method public void removeRequestInterceptorByClass(java.lang.Class); + method public void removeResponseInterceptorByClass(java.lang.Class); + method public void setInterceptors(java.util.List); + field protected java.util.List requestInterceptors; + field protected java.util.List responseInterceptors; + } + + public final deprecated class DefaultedHttpContext implements org.apache.http.protocol.HttpContext { + ctor public DefaultedHttpContext(org.apache.http.protocol.HttpContext, org.apache.http.protocol.HttpContext); + method public java.lang.Object getAttribute(java.lang.String); + method public org.apache.http.protocol.HttpContext getDefaults(); + method public java.lang.Object removeAttribute(java.lang.String); + method public void setAttribute(java.lang.String, java.lang.Object); + } + + public abstract deprecated interface ExecutionContext { + field public static final java.lang.String HTTP_CONNECTION = "http.connection"; + field public static final java.lang.String HTTP_PROXY_HOST = "http.proxy_host"; + field public static final java.lang.String HTTP_REQUEST = "http.request"; + field public static final java.lang.String HTTP_REQ_SENT = "http.request_sent"; + field public static final java.lang.String HTTP_RESPONSE = "http.response"; + field public static final java.lang.String HTTP_TARGET_HOST = "http.target_host"; + } + + public final deprecated class HTTP { + method public static boolean isWhitespace(char); + field public static final java.lang.String ASCII = "ASCII"; + field public static final java.lang.String CHARSET_PARAM = "; charset="; + field public static final java.lang.String CHUNK_CODING = "chunked"; + field public static final java.lang.String CONN_CLOSE = "Close"; + field public static final java.lang.String CONN_DIRECTIVE = "Connection"; + field public static final java.lang.String CONN_KEEP_ALIVE = "Keep-Alive"; + field public static final java.lang.String CONTENT_ENCODING = "Content-Encoding"; + field public static final java.lang.String CONTENT_LEN = "Content-Length"; + field public static final java.lang.String CONTENT_TYPE = "Content-Type"; + field public static final int CR = 13; // 0xd + field public static final java.lang.String DATE_HEADER = "Date"; + field public static final java.lang.String DEFAULT_CONTENT_CHARSET = "ISO-8859-1"; + field public static final java.lang.String DEFAULT_CONTENT_TYPE = "application/octet-stream"; + field public static final java.lang.String DEFAULT_PROTOCOL_CHARSET = "US-ASCII"; + field public static final java.lang.String EXPECT_CONTINUE = "100-continue"; + field public static final java.lang.String EXPECT_DIRECTIVE = "Expect"; + field public static final int HT = 9; // 0x9 + field public static final java.lang.String IDENTITY_CODING = "identity"; + field public static final java.lang.String ISO_8859_1 = "ISO-8859-1"; + field public static final int LF = 10; // 0xa + field public static final java.lang.String OCTET_STREAM_TYPE = "application/octet-stream"; + field public static final java.lang.String PLAIN_TEXT_TYPE = "text/plain"; + field public static final java.lang.String SERVER_HEADER = "Server"; + field public static final int SP = 32; // 0x20 + field public static final java.lang.String TARGET_HOST = "Host"; + field public static final java.lang.String TRANSFER_ENCODING = "Transfer-Encoding"; + field public static final java.lang.String USER_AGENT = "User-Agent"; + field public static final java.lang.String US_ASCII = "US-ASCII"; + field public static final java.lang.String UTF_16 = "UTF-16"; + field public static final java.lang.String UTF_8 = "UTF-8"; + } + + public abstract deprecated interface HttpContext { + method public abstract java.lang.Object getAttribute(java.lang.String); + method public abstract java.lang.Object removeAttribute(java.lang.String); + method public abstract void setAttribute(java.lang.String, java.lang.Object); + field public static final java.lang.String RESERVED_PREFIX = "http."; + } + + public deprecated class HttpDateGenerator { + ctor public HttpDateGenerator(); + method public synchronized java.lang.String getCurrentDate(); + field public static final java.util.TimeZone GMT; + field public static final java.lang.String PATTERN_RFC1123 = "EEE, dd MMM yyyy HH:mm:ss zzz"; + } + + public abstract deprecated interface HttpExpectationVerifier { + method public abstract void verify(org.apache.http.HttpRequest, org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException; + } + + public abstract deprecated interface HttpProcessor implements org.apache.http.HttpRequestInterceptor org.apache.http.HttpResponseInterceptor { + } + + public deprecated class HttpRequestExecutor { + ctor public HttpRequestExecutor(); + method protected boolean canResponseHaveBody(org.apache.http.HttpRequest, org.apache.http.HttpResponse); + method protected org.apache.http.HttpResponse doReceiveResponse(org.apache.http.HttpRequest, org.apache.http.HttpClientConnection, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; + method protected org.apache.http.HttpResponse doSendRequest(org.apache.http.HttpRequest, org.apache.http.HttpClientConnection, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; + method public org.apache.http.HttpResponse execute(org.apache.http.HttpRequest, org.apache.http.HttpClientConnection, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; + method public void postProcess(org.apache.http.HttpResponse, org.apache.http.protocol.HttpProcessor, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; + method public void preProcess(org.apache.http.HttpRequest, org.apache.http.protocol.HttpProcessor, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; + } + + public abstract deprecated interface HttpRequestHandler { + method public abstract void handle(org.apache.http.HttpRequest, org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; + } + + public deprecated class HttpRequestHandlerRegistry implements org.apache.http.protocol.HttpRequestHandlerResolver { + ctor public HttpRequestHandlerRegistry(); + method public org.apache.http.protocol.HttpRequestHandler lookup(java.lang.String); + method protected deprecated boolean matchUriRequestPattern(java.lang.String, java.lang.String); + method public void register(java.lang.String, org.apache.http.protocol.HttpRequestHandler); + method public void setHandlers(java.util.Map); + method public void unregister(java.lang.String); + } + + public abstract deprecated interface HttpRequestHandlerResolver { + method public abstract org.apache.http.protocol.HttpRequestHandler lookup(java.lang.String); + } + + public abstract deprecated interface HttpRequestInterceptorList { + method public abstract void addRequestInterceptor(org.apache.http.HttpRequestInterceptor); + method public abstract void addRequestInterceptor(org.apache.http.HttpRequestInterceptor, int); + method public abstract void clearRequestInterceptors(); + method public abstract org.apache.http.HttpRequestInterceptor getRequestInterceptor(int); + method public abstract int getRequestInterceptorCount(); + method public abstract void removeRequestInterceptorByClass(java.lang.Class); + method public abstract void setInterceptors(java.util.List); + } + + public abstract deprecated interface HttpResponseInterceptorList { + method public abstract void addResponseInterceptor(org.apache.http.HttpResponseInterceptor); + method public abstract void addResponseInterceptor(org.apache.http.HttpResponseInterceptor, int); + method public abstract void clearResponseInterceptors(); + method public abstract org.apache.http.HttpResponseInterceptor getResponseInterceptor(int); + method public abstract int getResponseInterceptorCount(); + method public abstract void removeResponseInterceptorByClass(java.lang.Class); + method public abstract void setInterceptors(java.util.List); + } + + public deprecated class HttpService { + ctor public HttpService(org.apache.http.protocol.HttpProcessor, org.apache.http.ConnectionReuseStrategy, org.apache.http.HttpResponseFactory); + method protected void doService(org.apache.http.HttpRequest, org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; + method public org.apache.http.params.HttpParams getParams(); + method protected void handleException(org.apache.http.HttpException, org.apache.http.HttpResponse); + method public void handleRequest(org.apache.http.HttpServerConnection, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; + method public void setConnReuseStrategy(org.apache.http.ConnectionReuseStrategy); + method public void setExpectationVerifier(org.apache.http.protocol.HttpExpectationVerifier); + method public void setHandlerResolver(org.apache.http.protocol.HttpRequestHandlerResolver); + method public void setHttpProcessor(org.apache.http.protocol.HttpProcessor); + method public void setParams(org.apache.http.params.HttpParams); + method public void setResponseFactory(org.apache.http.HttpResponseFactory); + } + + public deprecated class RequestConnControl implements org.apache.http.HttpRequestInterceptor { + ctor public RequestConnControl(); + method public void process(org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; + } + + public deprecated class RequestContent implements org.apache.http.HttpRequestInterceptor { + ctor public RequestContent(); + method public void process(org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; + } + + public deprecated class RequestDate implements org.apache.http.HttpRequestInterceptor { + ctor public RequestDate(); + method public void process(org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; + } + + public deprecated class RequestExpectContinue implements org.apache.http.HttpRequestInterceptor { + ctor public RequestExpectContinue(); + method public void process(org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; + } + + public deprecated class RequestTargetHost implements org.apache.http.HttpRequestInterceptor { + ctor public RequestTargetHost(); + method public void process(org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; + } + + public deprecated class RequestUserAgent implements org.apache.http.HttpRequestInterceptor { + ctor public RequestUserAgent(); + method public void process(org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; + } + + public deprecated class ResponseConnControl implements org.apache.http.HttpResponseInterceptor { + ctor public ResponseConnControl(); + method public void process(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; + } + + public deprecated class ResponseContent implements org.apache.http.HttpResponseInterceptor { + ctor public ResponseContent(); + method public void process(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; + } + + public deprecated class ResponseDate implements org.apache.http.HttpResponseInterceptor { + ctor public ResponseDate(); + method public void process(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; + } + + public deprecated class ResponseServer implements org.apache.http.HttpResponseInterceptor { + ctor public ResponseServer(); + method public void process(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; + } + + public deprecated class SyncBasicHttpContext extends org.apache.http.protocol.BasicHttpContext { + ctor public SyncBasicHttpContext(org.apache.http.protocol.HttpContext); + } + + public deprecated class UriPatternMatcher { + ctor public UriPatternMatcher(); + method public java.lang.Object lookup(java.lang.String); + method protected boolean matchUriRequestPattern(java.lang.String, java.lang.String); + method public void register(java.lang.String, java.lang.Object); + method public void setHandlers(java.util.Map); + method public void unregister(java.lang.String); + } + +} + +package org.apache.http.util { + + public final deprecated class ByteArrayBuffer { + ctor public ByteArrayBuffer(int); + method public void append(byte[], int, int); + method public void append(int); + method public void append(char[], int, int); + method public void append(org.apache.http.util.CharArrayBuffer, int, int); + method public byte[] buffer(); + method public int byteAt(int); + method public int capacity(); + method public void clear(); + method public boolean isEmpty(); + method public boolean isFull(); + method public int length(); + method public void setLength(int); + method public byte[] toByteArray(); + } + + public final deprecated class CharArrayBuffer { + ctor public CharArrayBuffer(int); + method public void append(char[], int, int); + method public void append(java.lang.String); + method public void append(org.apache.http.util.CharArrayBuffer, int, int); + method public void append(org.apache.http.util.CharArrayBuffer); + method public void append(char); + method public void append(byte[], int, int); + method public void append(org.apache.http.util.ByteArrayBuffer, int, int); + method public void append(java.lang.Object); + method public char[] buffer(); + method public int capacity(); + method public char charAt(int); + method public void clear(); + method public void ensureCapacity(int); + method public int indexOf(int, int, int); + method public int indexOf(int); + method public boolean isEmpty(); + method public boolean isFull(); + method public int length(); + method public void setLength(int); + method public java.lang.String substring(int, int); + method public java.lang.String substringTrimmed(int, int); + method public char[] toCharArray(); + } + + public final deprecated class EncodingUtils { + method public static byte[] getAsciiBytes(java.lang.String); + method public static java.lang.String getAsciiString(byte[], int, int); + method public static java.lang.String getAsciiString(byte[]); + method public static byte[] getBytes(java.lang.String, java.lang.String); + method public static java.lang.String getString(byte[], int, int, java.lang.String); + method public static java.lang.String getString(byte[], java.lang.String); + } + + public final deprecated class EntityUtils { + method public static java.lang.String getContentCharSet(org.apache.http.HttpEntity) throws org.apache.http.ParseException; + method public static byte[] toByteArray(org.apache.http.HttpEntity) throws java.io.IOException; + method public static java.lang.String toString(org.apache.http.HttpEntity, java.lang.String) throws java.io.IOException, org.apache.http.ParseException; + method public static java.lang.String toString(org.apache.http.HttpEntity) throws java.io.IOException, org.apache.http.ParseException; + } + + public final deprecated class ExceptionUtils { + method public static void initCause(java.lang.Throwable, java.lang.Throwable); + } + + public final deprecated class LangUtils { + method public static boolean equals(java.lang.Object, java.lang.Object); + method public static boolean equals(java.lang.Object[], java.lang.Object[]); + method public static int hashCode(int, int); + method public static int hashCode(int, boolean); + method public static int hashCode(int, java.lang.Object); + field public static final int HASH_OFFSET = 37; // 0x25 + field public static final int HASH_SEED = 17; // 0x11 + } + + public deprecated class VersionInfo { + ctor protected VersionInfo(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String); + method protected static final org.apache.http.util.VersionInfo fromMap(java.lang.String, java.util.Map, java.lang.ClassLoader); + method public final java.lang.String getClassloader(); + method public final java.lang.String getModule(); + method public final java.lang.String getPackage(); + method public final java.lang.String getRelease(); + method public final java.lang.String getTimestamp(); + method public static final org.apache.http.util.VersionInfo[] loadVersionInfo(java.lang.String[], java.lang.ClassLoader); + method public static final org.apache.http.util.VersionInfo loadVersionInfo(java.lang.String, java.lang.ClassLoader); + field public static final java.lang.String PROPERTY_MODULE = "info.module"; + field public static final java.lang.String PROPERTY_RELEASE = "info.release"; + field public static final java.lang.String PROPERTY_TIMESTAMP = "info.timestamp"; + field public static final java.lang.String UNAVAILABLE = "UNAVAILABLE"; + field public static final java.lang.String VERSION_PROPERTY_FILE = "version.properties"; + } + +} + +package org.json { + + public class JSONArray { + ctor public JSONArray(); + ctor public JSONArray(java.util.Collection); + ctor public JSONArray(org.json.JSONTokener) throws org.json.JSONException; + ctor public JSONArray(java.lang.String) throws org.json.JSONException; + ctor public JSONArray(java.lang.Object) throws org.json.JSONException; + method public java.lang.Object get(int) throws org.json.JSONException; + method public boolean getBoolean(int) throws org.json.JSONException; + method public double getDouble(int) throws org.json.JSONException; + method public int getInt(int) throws org.json.JSONException; + method public org.json.JSONArray getJSONArray(int) throws org.json.JSONException; + method public org.json.JSONObject getJSONObject(int) throws org.json.JSONException; + method public long getLong(int) throws org.json.JSONException; + method public java.lang.String getString(int) throws org.json.JSONException; + method public boolean isNull(int); + method public java.lang.String join(java.lang.String) throws org.json.JSONException; + method public int length(); + method public java.lang.Object opt(int); + method public boolean optBoolean(int); + method public boolean optBoolean(int, boolean); + method public double optDouble(int); + method public double optDouble(int, double); + method public int optInt(int); + method public int optInt(int, int); + method public org.json.JSONArray optJSONArray(int); + method public org.json.JSONObject optJSONObject(int); + method public long optLong(int); + method public long optLong(int, long); + method public java.lang.String optString(int); + method public java.lang.String optString(int, java.lang.String); + method public org.json.JSONArray put(boolean); + method public org.json.JSONArray put(double) throws org.json.JSONException; + method public org.json.JSONArray put(int); + method public org.json.JSONArray put(long); + method public org.json.JSONArray put(java.lang.Object); + method public org.json.JSONArray put(int, boolean) throws org.json.JSONException; + method public org.json.JSONArray put(int, double) throws org.json.JSONException; + method public org.json.JSONArray put(int, int) throws org.json.JSONException; + method public org.json.JSONArray put(int, long) throws org.json.JSONException; + method public org.json.JSONArray put(int, java.lang.Object) throws org.json.JSONException; + method public java.lang.Object remove(int); + method public org.json.JSONObject toJSONObject(org.json.JSONArray) throws org.json.JSONException; + method public java.lang.String toString(int) throws org.json.JSONException; + } + + public class JSONException extends java.lang.Exception { + ctor public JSONException(java.lang.String); + } + + public class JSONObject { + ctor public JSONObject(); + ctor public JSONObject(java.util.Map); + ctor public JSONObject(org.json.JSONTokener) throws org.json.JSONException; + ctor public JSONObject(java.lang.String) throws org.json.JSONException; + ctor public JSONObject(org.json.JSONObject, java.lang.String[]) throws org.json.JSONException; + method public org.json.JSONObject accumulate(java.lang.String, java.lang.Object) throws org.json.JSONException; + method public java.lang.Object get(java.lang.String) throws org.json.JSONException; + method public boolean getBoolean(java.lang.String) throws org.json.JSONException; + method public double getDouble(java.lang.String) throws org.json.JSONException; + method public int getInt(java.lang.String) throws org.json.JSONException; + method public org.json.JSONArray getJSONArray(java.lang.String) throws org.json.JSONException; + method public org.json.JSONObject getJSONObject(java.lang.String) throws org.json.JSONException; + method public long getLong(java.lang.String) throws org.json.JSONException; + method public java.lang.String getString(java.lang.String) throws org.json.JSONException; + method public boolean has(java.lang.String); + method public boolean isNull(java.lang.String); + method public java.util.Iterator keys(); + method public int length(); + method public org.json.JSONArray names(); + method public static java.lang.String numberToString(java.lang.Number) throws org.json.JSONException; + method public java.lang.Object opt(java.lang.String); + method public boolean optBoolean(java.lang.String); + method public boolean optBoolean(java.lang.String, boolean); + method public double optDouble(java.lang.String); + method public double optDouble(java.lang.String, double); + method public int optInt(java.lang.String); + method public int optInt(java.lang.String, int); + method public org.json.JSONArray optJSONArray(java.lang.String); + method public org.json.JSONObject optJSONObject(java.lang.String); + method public long optLong(java.lang.String); + method public long optLong(java.lang.String, long); + method public java.lang.String optString(java.lang.String); + method public java.lang.String optString(java.lang.String, java.lang.String); + method public org.json.JSONObject put(java.lang.String, boolean) throws org.json.JSONException; + method public org.json.JSONObject put(java.lang.String, double) throws org.json.JSONException; + method public org.json.JSONObject put(java.lang.String, int) throws org.json.JSONException; + method public org.json.JSONObject put(java.lang.String, long) throws org.json.JSONException; + method public org.json.JSONObject put(java.lang.String, java.lang.Object) throws org.json.JSONException; + method public org.json.JSONObject putOpt(java.lang.String, java.lang.Object) throws org.json.JSONException; + method public static java.lang.String quote(java.lang.String); + method public java.lang.Object remove(java.lang.String); + method public org.json.JSONArray toJSONArray(org.json.JSONArray) throws org.json.JSONException; + method public java.lang.String toString(int) throws org.json.JSONException; + method public static java.lang.Object wrap(java.lang.Object); + field public static final java.lang.Object NULL; + } + + public class JSONStringer { + ctor public JSONStringer(); + method public org.json.JSONStringer array() throws org.json.JSONException; + method public org.json.JSONStringer endArray() throws org.json.JSONException; + method public org.json.JSONStringer endObject() throws org.json.JSONException; + method public org.json.JSONStringer key(java.lang.String) throws org.json.JSONException; + method public org.json.JSONStringer object() throws org.json.JSONException; + method public org.json.JSONStringer value(java.lang.Object) throws org.json.JSONException; + method public org.json.JSONStringer value(boolean) throws org.json.JSONException; + method public org.json.JSONStringer value(double) throws org.json.JSONException; + method public org.json.JSONStringer value(long) throws org.json.JSONException; + } + + public class JSONTokener { + ctor public JSONTokener(java.lang.String); + method public void back(); + method public static int dehexchar(char); + method public boolean more(); + method public char next(); + method public char next(char) throws org.json.JSONException; + method public java.lang.String next(int) throws org.json.JSONException; + method public char nextClean() throws org.json.JSONException; + method public java.lang.String nextString(char) throws org.json.JSONException; + method public java.lang.String nextTo(java.lang.String); + method public java.lang.String nextTo(char); + method public java.lang.Object nextValue() throws org.json.JSONException; + method public void skipPast(java.lang.String); + method public char skipTo(char); + method public org.json.JSONException syntaxError(java.lang.String); + } + +} + +package org.w3c.dom { + + public abstract interface Attr implements org.w3c.dom.Node { + method public abstract java.lang.String getName(); + method public abstract org.w3c.dom.Element getOwnerElement(); + method public abstract org.w3c.dom.TypeInfo getSchemaTypeInfo(); + method public abstract boolean getSpecified(); + method public abstract java.lang.String getValue(); + method public abstract boolean isId(); + method public abstract void setValue(java.lang.String) throws org.w3c.dom.DOMException; + } + + public abstract interface CDATASection implements org.w3c.dom.Text { + } + + public abstract interface CharacterData implements org.w3c.dom.Node { + method public abstract void appendData(java.lang.String) throws org.w3c.dom.DOMException; + method public abstract void deleteData(int, int) throws org.w3c.dom.DOMException; + method public abstract java.lang.String getData() throws org.w3c.dom.DOMException; + method public abstract int getLength(); + method public abstract void insertData(int, java.lang.String) throws org.w3c.dom.DOMException; + method public abstract void replaceData(int, int, java.lang.String) throws org.w3c.dom.DOMException; + method public abstract void setData(java.lang.String) throws org.w3c.dom.DOMException; + method public abstract java.lang.String substringData(int, int) throws org.w3c.dom.DOMException; + } + + public abstract interface Comment implements org.w3c.dom.CharacterData { + } + + public abstract interface DOMConfiguration { + method public abstract boolean canSetParameter(java.lang.String, java.lang.Object); + method public abstract java.lang.Object getParameter(java.lang.String) throws org.w3c.dom.DOMException; + method public abstract org.w3c.dom.DOMStringList getParameterNames(); + method public abstract void setParameter(java.lang.String, java.lang.Object) throws org.w3c.dom.DOMException; + } + + public abstract interface DOMError { + method public abstract org.w3c.dom.DOMLocator getLocation(); + method public abstract java.lang.String getMessage(); + method public abstract java.lang.Object getRelatedData(); + method public abstract java.lang.Object getRelatedException(); + method public abstract short getSeverity(); + method public abstract java.lang.String getType(); + field public static final short SEVERITY_ERROR = 2; // 0x2 + field public static final short SEVERITY_FATAL_ERROR = 3; // 0x3 + field public static final short SEVERITY_WARNING = 1; // 0x1 + } + + public abstract interface DOMErrorHandler { + method public abstract boolean handleError(org.w3c.dom.DOMError); + } + + public class DOMException extends java.lang.RuntimeException { + ctor public DOMException(short, java.lang.String); + field public static final short DOMSTRING_SIZE_ERR = 2; // 0x2 + field public static final short HIERARCHY_REQUEST_ERR = 3; // 0x3 + field public static final short INDEX_SIZE_ERR = 1; // 0x1 + field public static final short INUSE_ATTRIBUTE_ERR = 10; // 0xa + field public static final short INVALID_ACCESS_ERR = 15; // 0xf + field public static final short INVALID_CHARACTER_ERR = 5; // 0x5 + field public static final short INVALID_MODIFICATION_ERR = 13; // 0xd + field public static final short INVALID_STATE_ERR = 11; // 0xb + field public static final short NAMESPACE_ERR = 14; // 0xe + field public static final short NOT_FOUND_ERR = 8; // 0x8 + field public static final short NOT_SUPPORTED_ERR = 9; // 0x9 + field public static final short NO_DATA_ALLOWED_ERR = 6; // 0x6 + field public static final short NO_MODIFICATION_ALLOWED_ERR = 7; // 0x7 + field public static final short SYNTAX_ERR = 12; // 0xc + field public static final short TYPE_MISMATCH_ERR = 17; // 0x11 + field public static final short VALIDATION_ERR = 16; // 0x10 + field public static final short WRONG_DOCUMENT_ERR = 4; // 0x4 + field public short code; + } + + public abstract interface DOMImplementation { + method public abstract org.w3c.dom.Document createDocument(java.lang.String, java.lang.String, org.w3c.dom.DocumentType) throws org.w3c.dom.DOMException; + method public abstract org.w3c.dom.DocumentType createDocumentType(java.lang.String, java.lang.String, java.lang.String) throws org.w3c.dom.DOMException; + method public abstract java.lang.Object getFeature(java.lang.String, java.lang.String); + method public abstract boolean hasFeature(java.lang.String, java.lang.String); + } + + public abstract interface DOMImplementationList { + method public abstract int getLength(); + method public abstract org.w3c.dom.DOMImplementation item(int); + } + + public abstract interface DOMImplementationSource { + method public abstract org.w3c.dom.DOMImplementation getDOMImplementation(java.lang.String); + method public abstract org.w3c.dom.DOMImplementationList getDOMImplementationList(java.lang.String); + } + + public abstract interface DOMLocator { + method public abstract int getByteOffset(); + method public abstract int getColumnNumber(); + method public abstract int getLineNumber(); + method public abstract org.w3c.dom.Node getRelatedNode(); + method public abstract java.lang.String getUri(); + method public abstract int getUtf16Offset(); + } + + public abstract interface DOMStringList { + method public abstract boolean contains(java.lang.String); + method public abstract int getLength(); + method public abstract java.lang.String item(int); + } + + public abstract interface Document implements org.w3c.dom.Node { + method public abstract org.w3c.dom.Node adoptNode(org.w3c.dom.Node) throws org.w3c.dom.DOMException; + method public abstract org.w3c.dom.Attr createAttribute(java.lang.String) throws org.w3c.dom.DOMException; + method public abstract org.w3c.dom.Attr createAttributeNS(java.lang.String, java.lang.String) throws org.w3c.dom.DOMException; + method public abstract org.w3c.dom.CDATASection createCDATASection(java.lang.String) throws org.w3c.dom.DOMException; + method public abstract org.w3c.dom.Comment createComment(java.lang.String); + method public abstract org.w3c.dom.DocumentFragment createDocumentFragment(); + method public abstract org.w3c.dom.Element createElement(java.lang.String) throws org.w3c.dom.DOMException; + method public abstract org.w3c.dom.Element createElementNS(java.lang.String, java.lang.String) throws org.w3c.dom.DOMException; + method public abstract org.w3c.dom.EntityReference createEntityReference(java.lang.String) throws org.w3c.dom.DOMException; + method public abstract org.w3c.dom.ProcessingInstruction createProcessingInstruction(java.lang.String, java.lang.String) throws org.w3c.dom.DOMException; + method public abstract org.w3c.dom.Text createTextNode(java.lang.String); + method public abstract org.w3c.dom.DocumentType getDoctype(); + method public abstract org.w3c.dom.Element getDocumentElement(); + method public abstract java.lang.String getDocumentURI(); + method public abstract org.w3c.dom.DOMConfiguration getDomConfig(); + method public abstract org.w3c.dom.Element getElementById(java.lang.String); + method public abstract org.w3c.dom.NodeList getElementsByTagName(java.lang.String); + method public abstract org.w3c.dom.NodeList getElementsByTagNameNS(java.lang.String, java.lang.String); + method public abstract org.w3c.dom.DOMImplementation getImplementation(); + method public abstract java.lang.String getInputEncoding(); + method public abstract boolean getStrictErrorChecking(); + method public abstract java.lang.String getXmlEncoding(); + method public abstract boolean getXmlStandalone(); + method public abstract java.lang.String getXmlVersion(); + method public abstract org.w3c.dom.Node importNode(org.w3c.dom.Node, boolean) throws org.w3c.dom.DOMException; + method public abstract void normalizeDocument(); + method public abstract org.w3c.dom.Node renameNode(org.w3c.dom.Node, java.lang.String, java.lang.String) throws org.w3c.dom.DOMException; + method public abstract void setDocumentURI(java.lang.String); + method public abstract void setStrictErrorChecking(boolean); + method public abstract void setXmlStandalone(boolean) throws org.w3c.dom.DOMException; + method public abstract void setXmlVersion(java.lang.String) throws org.w3c.dom.DOMException; + } + + public abstract interface DocumentFragment implements org.w3c.dom.Node { + } + + public abstract interface DocumentType implements org.w3c.dom.Node { + method public abstract org.w3c.dom.NamedNodeMap getEntities(); + method public abstract java.lang.String getInternalSubset(); + method public abstract java.lang.String getName(); + method public abstract org.w3c.dom.NamedNodeMap getNotations(); + method public abstract java.lang.String getPublicId(); + method public abstract java.lang.String getSystemId(); + } + + public abstract interface Element implements org.w3c.dom.Node { + method public abstract java.lang.String getAttribute(java.lang.String); + method public abstract java.lang.String getAttributeNS(java.lang.String, java.lang.String) throws org.w3c.dom.DOMException; + method public abstract org.w3c.dom.Attr getAttributeNode(java.lang.String); + method public abstract org.w3c.dom.Attr getAttributeNodeNS(java.lang.String, java.lang.String) throws org.w3c.dom.DOMException; + method public abstract org.w3c.dom.NodeList getElementsByTagName(java.lang.String); + method public abstract org.w3c.dom.NodeList getElementsByTagNameNS(java.lang.String, java.lang.String) throws org.w3c.dom.DOMException; + method public abstract org.w3c.dom.TypeInfo getSchemaTypeInfo(); + method public abstract java.lang.String getTagName(); + method public abstract boolean hasAttribute(java.lang.String); + method public abstract boolean hasAttributeNS(java.lang.String, java.lang.String) throws org.w3c.dom.DOMException; + method public abstract void removeAttribute(java.lang.String) throws org.w3c.dom.DOMException; + method public abstract void removeAttributeNS(java.lang.String, java.lang.String) throws org.w3c.dom.DOMException; + method public abstract org.w3c.dom.Attr removeAttributeNode(org.w3c.dom.Attr) throws org.w3c.dom.DOMException; + method public abstract void setAttribute(java.lang.String, java.lang.String) throws org.w3c.dom.DOMException; + method public abstract void setAttributeNS(java.lang.String, java.lang.String, java.lang.String) throws org.w3c.dom.DOMException; + method public abstract org.w3c.dom.Attr setAttributeNode(org.w3c.dom.Attr) throws org.w3c.dom.DOMException; + method public abstract org.w3c.dom.Attr setAttributeNodeNS(org.w3c.dom.Attr) throws org.w3c.dom.DOMException; + method public abstract void setIdAttribute(java.lang.String, boolean) throws org.w3c.dom.DOMException; + method public abstract void setIdAttributeNS(java.lang.String, java.lang.String, boolean) throws org.w3c.dom.DOMException; + method public abstract void setIdAttributeNode(org.w3c.dom.Attr, boolean) throws org.w3c.dom.DOMException; + } + + public abstract interface Entity implements org.w3c.dom.Node { + method public abstract java.lang.String getInputEncoding(); + method public abstract java.lang.String getNotationName(); + method public abstract java.lang.String getPublicId(); + method public abstract java.lang.String getSystemId(); + method public abstract java.lang.String getXmlEncoding(); + method public abstract java.lang.String getXmlVersion(); + } + + public abstract interface EntityReference implements org.w3c.dom.Node { + } + + public abstract interface NameList { + method public abstract boolean contains(java.lang.String); + method public abstract boolean containsNS(java.lang.String, java.lang.String); + method public abstract int getLength(); + method public abstract java.lang.String getName(int); + method public abstract java.lang.String getNamespaceURI(int); + } + + public abstract interface NamedNodeMap { + method public abstract int getLength(); + method public abstract org.w3c.dom.Node getNamedItem(java.lang.String); + method public abstract org.w3c.dom.Node getNamedItemNS(java.lang.String, java.lang.String) throws org.w3c.dom.DOMException; + method public abstract org.w3c.dom.Node item(int); + method public abstract org.w3c.dom.Node removeNamedItem(java.lang.String) throws org.w3c.dom.DOMException; + method public abstract org.w3c.dom.Node removeNamedItemNS(java.lang.String, java.lang.String) throws org.w3c.dom.DOMException; + method public abstract org.w3c.dom.Node setNamedItem(org.w3c.dom.Node) throws org.w3c.dom.DOMException; + method public abstract org.w3c.dom.Node setNamedItemNS(org.w3c.dom.Node) throws org.w3c.dom.DOMException; + } + + public abstract interface Node { + method public abstract org.w3c.dom.Node appendChild(org.w3c.dom.Node) throws org.w3c.dom.DOMException; + method public abstract org.w3c.dom.Node cloneNode(boolean); + method public abstract short compareDocumentPosition(org.w3c.dom.Node) throws org.w3c.dom.DOMException; + method public abstract org.w3c.dom.NamedNodeMap getAttributes(); + method public abstract java.lang.String getBaseURI(); + method public abstract org.w3c.dom.NodeList getChildNodes(); + method public abstract java.lang.Object getFeature(java.lang.String, java.lang.String); + method public abstract org.w3c.dom.Node getFirstChild(); + method public abstract org.w3c.dom.Node getLastChild(); + method public abstract java.lang.String getLocalName(); + method public abstract java.lang.String getNamespaceURI(); + method public abstract org.w3c.dom.Node getNextSibling(); + method public abstract java.lang.String getNodeName(); + method public abstract short getNodeType(); + method public abstract java.lang.String getNodeValue() throws org.w3c.dom.DOMException; + method public abstract org.w3c.dom.Document getOwnerDocument(); + method public abstract org.w3c.dom.Node getParentNode(); + method public abstract java.lang.String getPrefix(); + method public abstract org.w3c.dom.Node getPreviousSibling(); + method public abstract java.lang.String getTextContent() throws org.w3c.dom.DOMException; + method public abstract java.lang.Object getUserData(java.lang.String); + method public abstract boolean hasAttributes(); + method public abstract boolean hasChildNodes(); + method public abstract org.w3c.dom.Node insertBefore(org.w3c.dom.Node, org.w3c.dom.Node) throws org.w3c.dom.DOMException; + method public abstract boolean isDefaultNamespace(java.lang.String); + method public abstract boolean isEqualNode(org.w3c.dom.Node); + method public abstract boolean isSameNode(org.w3c.dom.Node); + method public abstract boolean isSupported(java.lang.String, java.lang.String); + method public abstract java.lang.String lookupNamespaceURI(java.lang.String); + method public abstract java.lang.String lookupPrefix(java.lang.String); + method public abstract void normalize(); + method public abstract org.w3c.dom.Node removeChild(org.w3c.dom.Node) throws org.w3c.dom.DOMException; + method public abstract org.w3c.dom.Node replaceChild(org.w3c.dom.Node, org.w3c.dom.Node) throws org.w3c.dom.DOMException; + method public abstract void setNodeValue(java.lang.String) throws org.w3c.dom.DOMException; + method public abstract void setPrefix(java.lang.String) throws org.w3c.dom.DOMException; + method public abstract void setTextContent(java.lang.String) throws org.w3c.dom.DOMException; + method public abstract java.lang.Object setUserData(java.lang.String, java.lang.Object, org.w3c.dom.UserDataHandler); + field public static final short ATTRIBUTE_NODE = 2; // 0x2 + field public static final short CDATA_SECTION_NODE = 4; // 0x4 + field public static final short COMMENT_NODE = 8; // 0x8 + field public static final short DOCUMENT_FRAGMENT_NODE = 11; // 0xb + field public static final short DOCUMENT_NODE = 9; // 0x9 + field public static final short DOCUMENT_POSITION_CONTAINED_BY = 16; // 0x10 + field public static final short DOCUMENT_POSITION_CONTAINS = 8; // 0x8 + field public static final short DOCUMENT_POSITION_DISCONNECTED = 1; // 0x1 + field public static final short DOCUMENT_POSITION_FOLLOWING = 4; // 0x4 + field public static final short DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = 32; // 0x20 + field public static final short DOCUMENT_POSITION_PRECEDING = 2; // 0x2 + field public static final short DOCUMENT_TYPE_NODE = 10; // 0xa + field public static final short ELEMENT_NODE = 1; // 0x1 + field public static final short ENTITY_NODE = 6; // 0x6 + field public static final short ENTITY_REFERENCE_NODE = 5; // 0x5 + field public static final short NOTATION_NODE = 12; // 0xc + field public static final short PROCESSING_INSTRUCTION_NODE = 7; // 0x7 + field public static final short TEXT_NODE = 3; // 0x3 + } + + public abstract interface NodeList { + method public abstract int getLength(); + method public abstract org.w3c.dom.Node item(int); + } + + public abstract interface Notation implements org.w3c.dom.Node { + method public abstract java.lang.String getPublicId(); + method public abstract java.lang.String getSystemId(); + } + + public abstract interface ProcessingInstruction implements org.w3c.dom.Node { + method public abstract java.lang.String getData(); + method public abstract java.lang.String getTarget(); + method public abstract void setData(java.lang.String) throws org.w3c.dom.DOMException; + } + + public abstract interface Text implements org.w3c.dom.CharacterData { + method public abstract java.lang.String getWholeText(); + method public abstract boolean isElementContentWhitespace(); + method public abstract org.w3c.dom.Text replaceWholeText(java.lang.String) throws org.w3c.dom.DOMException; + method public abstract org.w3c.dom.Text splitText(int) throws org.w3c.dom.DOMException; + } + + public abstract interface TypeInfo { + method public abstract java.lang.String getTypeName(); + method public abstract java.lang.String getTypeNamespace(); + method public abstract boolean isDerivedFrom(java.lang.String, java.lang.String, int); + field public static final int DERIVATION_EXTENSION = 2; // 0x2 + field public static final int DERIVATION_LIST = 8; // 0x8 + field public static final int DERIVATION_RESTRICTION = 1; // 0x1 + field public static final int DERIVATION_UNION = 4; // 0x4 + } + + public abstract interface UserDataHandler { + method public abstract void handle(short, java.lang.String, java.lang.Object, org.w3c.dom.Node, org.w3c.dom.Node); + field public static final short NODE_ADOPTED = 5; // 0x5 + field public static final short NODE_CLONED = 1; // 0x1 + field public static final short NODE_DELETED = 3; // 0x3 + field public static final short NODE_IMPORTED = 2; // 0x2 + field public static final short NODE_RENAMED = 4; // 0x4 + } + +} + +package org.w3c.dom.ls { + + public abstract interface DOMImplementationLS { + method public abstract org.w3c.dom.ls.LSInput createLSInput(); + method public abstract org.w3c.dom.ls.LSOutput createLSOutput(); + method public abstract org.w3c.dom.ls.LSParser createLSParser(short, java.lang.String) throws org.w3c.dom.DOMException; + method public abstract org.w3c.dom.ls.LSSerializer createLSSerializer(); + field public static final short MODE_ASYNCHRONOUS = 2; // 0x2 + field public static final short MODE_SYNCHRONOUS = 1; // 0x1 + } + + public class LSException extends java.lang.RuntimeException { + ctor public LSException(short, java.lang.String); + field public static final short PARSE_ERR = 81; // 0x51 + field public static final short SERIALIZE_ERR = 82; // 0x52 + field public short code; + } + + public abstract interface LSInput { + method public abstract java.lang.String getBaseURI(); + method public abstract java.io.InputStream getByteStream(); + method public abstract boolean getCertifiedText(); + method public abstract java.io.Reader getCharacterStream(); + method public abstract java.lang.String getEncoding(); + method public abstract java.lang.String getPublicId(); + method public abstract java.lang.String getStringData(); + method public abstract java.lang.String getSystemId(); + method public abstract void setBaseURI(java.lang.String); + method public abstract void setByteStream(java.io.InputStream); + method public abstract void setCertifiedText(boolean); + method public abstract void setCharacterStream(java.io.Reader); + method public abstract void setEncoding(java.lang.String); + method public abstract void setPublicId(java.lang.String); + method public abstract void setStringData(java.lang.String); + method public abstract void setSystemId(java.lang.String); + } + + public abstract interface LSOutput { + method public abstract java.io.OutputStream getByteStream(); + method public abstract java.io.Writer getCharacterStream(); + method public abstract java.lang.String getEncoding(); + method public abstract java.lang.String getSystemId(); + method public abstract void setByteStream(java.io.OutputStream); + method public abstract void setCharacterStream(java.io.Writer); + method public abstract void setEncoding(java.lang.String); + method public abstract void setSystemId(java.lang.String); + } + + public abstract interface LSParser { + method public abstract void abort(); + method public abstract boolean getAsync(); + method public abstract boolean getBusy(); + method public abstract org.w3c.dom.DOMConfiguration getDomConfig(); + method public abstract org.w3c.dom.ls.LSParserFilter getFilter(); + method public abstract org.w3c.dom.Document parse(org.w3c.dom.ls.LSInput) throws org.w3c.dom.DOMException, org.w3c.dom.ls.LSException; + method public abstract org.w3c.dom.Document parseURI(java.lang.String) throws org.w3c.dom.DOMException, org.w3c.dom.ls.LSException; + method public abstract org.w3c.dom.Node parseWithContext(org.w3c.dom.ls.LSInput, org.w3c.dom.Node, short) throws org.w3c.dom.DOMException, org.w3c.dom.ls.LSException; + method public abstract void setFilter(org.w3c.dom.ls.LSParserFilter); + field public static final short ACTION_APPEND_AS_CHILDREN = 1; // 0x1 + field public static final short ACTION_INSERT_AFTER = 4; // 0x4 + field public static final short ACTION_INSERT_BEFORE = 3; // 0x3 + field public static final short ACTION_REPLACE = 5; // 0x5 + field public static final short ACTION_REPLACE_CHILDREN = 2; // 0x2 + } + + public abstract interface LSParserFilter { + method public abstract short acceptNode(org.w3c.dom.Node); + method public abstract int getWhatToShow(); + method public abstract short startElement(org.w3c.dom.Element); + field public static final short FILTER_ACCEPT = 1; // 0x1 + field public static final short FILTER_INTERRUPT = 4; // 0x4 + field public static final short FILTER_REJECT = 2; // 0x2 + field public static final short FILTER_SKIP = 3; // 0x3 + } + + public abstract interface LSResourceResolver { + method public abstract org.w3c.dom.ls.LSInput resolveResource(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String); + } + + public abstract interface LSSerializer { + method public abstract org.w3c.dom.DOMConfiguration getDomConfig(); + method public abstract java.lang.String getNewLine(); + method public abstract void setNewLine(java.lang.String); + method public abstract boolean write(org.w3c.dom.Node, org.w3c.dom.ls.LSOutput) throws org.w3c.dom.ls.LSException; + method public abstract java.lang.String writeToString(org.w3c.dom.Node) throws org.w3c.dom.DOMException, org.w3c.dom.ls.LSException; + method public abstract boolean writeToURI(org.w3c.dom.Node, java.lang.String) throws org.w3c.dom.ls.LSException; + } + +} + +package org.xml.sax { + + public abstract deprecated interface AttributeList { + method public abstract int getLength(); + method public abstract java.lang.String getName(int); + method public abstract java.lang.String getType(int); + method public abstract java.lang.String getType(java.lang.String); + method public abstract java.lang.String getValue(int); + method public abstract java.lang.String getValue(java.lang.String); + } + + public abstract interface Attributes { + method public abstract int getIndex(java.lang.String, java.lang.String); + method public abstract int getIndex(java.lang.String); + method public abstract int getLength(); + method public abstract java.lang.String getLocalName(int); + method public abstract java.lang.String getQName(int); + method public abstract java.lang.String getType(int); + method public abstract java.lang.String getType(java.lang.String, java.lang.String); + method public abstract java.lang.String getType(java.lang.String); + method public abstract java.lang.String getURI(int); + method public abstract java.lang.String getValue(int); + method public abstract java.lang.String getValue(java.lang.String, java.lang.String); + method public abstract java.lang.String getValue(java.lang.String); + } + + public abstract interface ContentHandler { + method public abstract void characters(char[], int, int) throws org.xml.sax.SAXException; + method public abstract void endDocument() throws org.xml.sax.SAXException; + method public abstract void endElement(java.lang.String, java.lang.String, java.lang.String) throws org.xml.sax.SAXException; + method public abstract void endPrefixMapping(java.lang.String) throws org.xml.sax.SAXException; + method public abstract void ignorableWhitespace(char[], int, int) throws org.xml.sax.SAXException; + method public abstract void processingInstruction(java.lang.String, java.lang.String) throws org.xml.sax.SAXException; + method public abstract void setDocumentLocator(org.xml.sax.Locator); + method public abstract void skippedEntity(java.lang.String) throws org.xml.sax.SAXException; + method public abstract void startDocument() throws org.xml.sax.SAXException; + method public abstract void startElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes) throws org.xml.sax.SAXException; + method public abstract void startPrefixMapping(java.lang.String, java.lang.String) throws org.xml.sax.SAXException; + } + + public abstract interface DTDHandler { + method public abstract void notationDecl(java.lang.String, java.lang.String, java.lang.String) throws org.xml.sax.SAXException; + method public abstract void unparsedEntityDecl(java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws org.xml.sax.SAXException; + } + + public abstract deprecated interface DocumentHandler { + method public abstract void characters(char[], int, int) throws org.xml.sax.SAXException; + method public abstract void endDocument() throws org.xml.sax.SAXException; + method public abstract void endElement(java.lang.String) throws org.xml.sax.SAXException; + method public abstract void ignorableWhitespace(char[], int, int) throws org.xml.sax.SAXException; + method public abstract void processingInstruction(java.lang.String, java.lang.String) throws org.xml.sax.SAXException; + method public abstract void setDocumentLocator(org.xml.sax.Locator); + method public abstract void startDocument() throws org.xml.sax.SAXException; + method public abstract void startElement(java.lang.String, org.xml.sax.AttributeList) throws org.xml.sax.SAXException; + } + + public abstract interface EntityResolver { + method public abstract org.xml.sax.InputSource resolveEntity(java.lang.String, java.lang.String) throws java.io.IOException, org.xml.sax.SAXException; + } + + public abstract interface ErrorHandler { + method public abstract void error(org.xml.sax.SAXParseException) throws org.xml.sax.SAXException; + method public abstract void fatalError(org.xml.sax.SAXParseException) throws org.xml.sax.SAXException; + method public abstract void warning(org.xml.sax.SAXParseException) throws org.xml.sax.SAXException; + } + + public deprecated class HandlerBase implements org.xml.sax.DTDHandler org.xml.sax.DocumentHandler org.xml.sax.EntityResolver org.xml.sax.ErrorHandler { + ctor public HandlerBase(); + method public void characters(char[], int, int) throws org.xml.sax.SAXException; + method public void endDocument() throws org.xml.sax.SAXException; + method public void endElement(java.lang.String) throws org.xml.sax.SAXException; + method public void error(org.xml.sax.SAXParseException) throws org.xml.sax.SAXException; + method public void fatalError(org.xml.sax.SAXParseException) throws org.xml.sax.SAXException; + method public void ignorableWhitespace(char[], int, int) throws org.xml.sax.SAXException; + method public void notationDecl(java.lang.String, java.lang.String, java.lang.String); + method public void processingInstruction(java.lang.String, java.lang.String) throws org.xml.sax.SAXException; + method public org.xml.sax.InputSource resolveEntity(java.lang.String, java.lang.String) throws org.xml.sax.SAXException; + method public void setDocumentLocator(org.xml.sax.Locator); + method public void startDocument() throws org.xml.sax.SAXException; + method public void startElement(java.lang.String, org.xml.sax.AttributeList) throws org.xml.sax.SAXException; + method public void unparsedEntityDecl(java.lang.String, java.lang.String, java.lang.String, java.lang.String); + method public void warning(org.xml.sax.SAXParseException) throws org.xml.sax.SAXException; + } + + public class InputSource { + ctor public InputSource(); + ctor public InputSource(java.lang.String); + ctor public InputSource(java.io.InputStream); + ctor public InputSource(java.io.Reader); + method public java.io.InputStream getByteStream(); + method public java.io.Reader getCharacterStream(); + method public java.lang.String getEncoding(); + method public java.lang.String getPublicId(); + method public java.lang.String getSystemId(); + method public void setByteStream(java.io.InputStream); + method public void setCharacterStream(java.io.Reader); + method public void setEncoding(java.lang.String); + method public void setPublicId(java.lang.String); + method public void setSystemId(java.lang.String); + } + + public abstract interface Locator { + method public abstract int getColumnNumber(); + method public abstract int getLineNumber(); + method public abstract java.lang.String getPublicId(); + method public abstract java.lang.String getSystemId(); + } + + public abstract deprecated interface Parser { + method public abstract void parse(org.xml.sax.InputSource) throws java.io.IOException, org.xml.sax.SAXException; + method public abstract void parse(java.lang.String) throws java.io.IOException, org.xml.sax.SAXException; + method public abstract void setDTDHandler(org.xml.sax.DTDHandler); + method public abstract void setDocumentHandler(org.xml.sax.DocumentHandler); + method public abstract void setEntityResolver(org.xml.sax.EntityResolver); + method public abstract void setErrorHandler(org.xml.sax.ErrorHandler); + method public abstract void setLocale(java.util.Locale) throws org.xml.sax.SAXException; + } + + public class SAXException extends java.lang.Exception { + ctor public SAXException(); + ctor public SAXException(java.lang.String); + ctor public SAXException(java.lang.Exception); + ctor public SAXException(java.lang.String, java.lang.Exception); + method public java.lang.Exception getException(); + } + + public class SAXNotRecognizedException extends org.xml.sax.SAXException { + ctor public SAXNotRecognizedException(); + ctor public SAXNotRecognizedException(java.lang.String); + } + + public class SAXNotSupportedException extends org.xml.sax.SAXException { + ctor public SAXNotSupportedException(); + ctor public SAXNotSupportedException(java.lang.String); + } + + public class SAXParseException extends org.xml.sax.SAXException { + ctor public SAXParseException(java.lang.String, org.xml.sax.Locator); + ctor public SAXParseException(java.lang.String, org.xml.sax.Locator, java.lang.Exception); + ctor public SAXParseException(java.lang.String, java.lang.String, java.lang.String, int, int); + ctor public SAXParseException(java.lang.String, java.lang.String, java.lang.String, int, int, java.lang.Exception); + method public int getColumnNumber(); + method public int getLineNumber(); + method public java.lang.String getPublicId(); + method public java.lang.String getSystemId(); + } + + public abstract interface XMLFilter implements org.xml.sax.XMLReader { + method public abstract org.xml.sax.XMLReader getParent(); + method public abstract void setParent(org.xml.sax.XMLReader); + } + + public abstract interface XMLReader { + method public abstract org.xml.sax.ContentHandler getContentHandler(); + method public abstract org.xml.sax.DTDHandler getDTDHandler(); + method public abstract org.xml.sax.EntityResolver getEntityResolver(); + method public abstract org.xml.sax.ErrorHandler getErrorHandler(); + method public abstract boolean getFeature(java.lang.String) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException; + method public abstract java.lang.Object getProperty(java.lang.String) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException; + method public abstract void parse(org.xml.sax.InputSource) throws java.io.IOException, org.xml.sax.SAXException; + method public abstract void parse(java.lang.String) throws java.io.IOException, org.xml.sax.SAXException; + method public abstract void setContentHandler(org.xml.sax.ContentHandler); + method public abstract void setDTDHandler(org.xml.sax.DTDHandler); + method public abstract void setEntityResolver(org.xml.sax.EntityResolver); + method public abstract void setErrorHandler(org.xml.sax.ErrorHandler); + method public abstract void setFeature(java.lang.String, boolean) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException; + method public abstract void setProperty(java.lang.String, java.lang.Object) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException; + } + +} + +package org.xml.sax.ext { + + public abstract interface Attributes2 implements org.xml.sax.Attributes { + method public abstract boolean isDeclared(int); + method public abstract boolean isDeclared(java.lang.String); + method public abstract boolean isDeclared(java.lang.String, java.lang.String); + method public abstract boolean isSpecified(int); + method public abstract boolean isSpecified(java.lang.String, java.lang.String); + method public abstract boolean isSpecified(java.lang.String); + } + + public class Attributes2Impl extends org.xml.sax.helpers.AttributesImpl implements org.xml.sax.ext.Attributes2 { + ctor public Attributes2Impl(); + ctor public Attributes2Impl(org.xml.sax.Attributes); + method public boolean isDeclared(int); + method public boolean isDeclared(java.lang.String, java.lang.String); + method public boolean isDeclared(java.lang.String); + method public boolean isSpecified(int); + method public boolean isSpecified(java.lang.String, java.lang.String); + method public boolean isSpecified(java.lang.String); + method public void setDeclared(int, boolean); + method public void setSpecified(int, boolean); + } + + public abstract interface DeclHandler { + method public abstract void attributeDecl(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws org.xml.sax.SAXException; + method public abstract void elementDecl(java.lang.String, java.lang.String) throws org.xml.sax.SAXException; + method public abstract void externalEntityDecl(java.lang.String, java.lang.String, java.lang.String) throws org.xml.sax.SAXException; + method public abstract void internalEntityDecl(java.lang.String, java.lang.String) throws org.xml.sax.SAXException; + } + + public class DefaultHandler2 extends org.xml.sax.helpers.DefaultHandler implements org.xml.sax.ext.DeclHandler org.xml.sax.ext.EntityResolver2 org.xml.sax.ext.LexicalHandler { + ctor public DefaultHandler2(); + method public void attributeDecl(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws org.xml.sax.SAXException; + method public void comment(char[], int, int) throws org.xml.sax.SAXException; + method public void elementDecl(java.lang.String, java.lang.String) throws org.xml.sax.SAXException; + method public void endCDATA() throws org.xml.sax.SAXException; + method public void endDTD() throws org.xml.sax.SAXException; + method public void endEntity(java.lang.String) throws org.xml.sax.SAXException; + method public void externalEntityDecl(java.lang.String, java.lang.String, java.lang.String) throws org.xml.sax.SAXException; + method public org.xml.sax.InputSource getExternalSubset(java.lang.String, java.lang.String) throws java.io.IOException, org.xml.sax.SAXException; + method public void internalEntityDecl(java.lang.String, java.lang.String) throws org.xml.sax.SAXException; + method public org.xml.sax.InputSource resolveEntity(java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.io.IOException, org.xml.sax.SAXException; + method public void startCDATA() throws org.xml.sax.SAXException; + method public void startDTD(java.lang.String, java.lang.String, java.lang.String) throws org.xml.sax.SAXException; + method public void startEntity(java.lang.String) throws org.xml.sax.SAXException; + } + + public abstract interface EntityResolver2 implements org.xml.sax.EntityResolver { + method public abstract org.xml.sax.InputSource getExternalSubset(java.lang.String, java.lang.String) throws java.io.IOException, org.xml.sax.SAXException; + method public abstract org.xml.sax.InputSource resolveEntity(java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.io.IOException, org.xml.sax.SAXException; + } + + public abstract interface LexicalHandler { + method public abstract void comment(char[], int, int) throws org.xml.sax.SAXException; + method public abstract void endCDATA() throws org.xml.sax.SAXException; + method public abstract void endDTD() throws org.xml.sax.SAXException; + method public abstract void endEntity(java.lang.String) throws org.xml.sax.SAXException; + method public abstract void startCDATA() throws org.xml.sax.SAXException; + method public abstract void startDTD(java.lang.String, java.lang.String, java.lang.String) throws org.xml.sax.SAXException; + method public abstract void startEntity(java.lang.String) throws org.xml.sax.SAXException; + } + + public abstract interface Locator2 implements org.xml.sax.Locator { + method public abstract java.lang.String getEncoding(); + method public abstract java.lang.String getXMLVersion(); + } + + public class Locator2Impl extends org.xml.sax.helpers.LocatorImpl implements org.xml.sax.ext.Locator2 { + ctor public Locator2Impl(); + ctor public Locator2Impl(org.xml.sax.Locator); + method public java.lang.String getEncoding(); + method public java.lang.String getXMLVersion(); + method public void setEncoding(java.lang.String); + method public void setXMLVersion(java.lang.String); + } + +} + +package org.xml.sax.helpers { + + public deprecated class AttributeListImpl implements org.xml.sax.AttributeList { + ctor public AttributeListImpl(); + ctor public AttributeListImpl(org.xml.sax.AttributeList); + method public void addAttribute(java.lang.String, java.lang.String, java.lang.String); + method public void clear(); + method public int getLength(); + method public java.lang.String getName(int); + method public java.lang.String getType(int); + method public java.lang.String getType(java.lang.String); + method public java.lang.String getValue(int); + method public java.lang.String getValue(java.lang.String); + method public void removeAttribute(java.lang.String); + method public void setAttributeList(org.xml.sax.AttributeList); + } + + public class AttributesImpl implements org.xml.sax.Attributes { + ctor public AttributesImpl(); + ctor public AttributesImpl(org.xml.sax.Attributes); + method public void addAttribute(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String); + method public void clear(); + method public int getIndex(java.lang.String, java.lang.String); + method public int getIndex(java.lang.String); + method public int getLength(); + method public java.lang.String getLocalName(int); + method public java.lang.String getQName(int); + method public java.lang.String getType(int); + method public java.lang.String getType(java.lang.String, java.lang.String); + method public java.lang.String getType(java.lang.String); + method public java.lang.String getURI(int); + method public java.lang.String getValue(int); + method public java.lang.String getValue(java.lang.String, java.lang.String); + method public java.lang.String getValue(java.lang.String); + method public void removeAttribute(int); + method public void setAttribute(int, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String); + method public void setAttributes(org.xml.sax.Attributes); + method public void setLocalName(int, java.lang.String); + method public void setQName(int, java.lang.String); + method public void setType(int, java.lang.String); + method public void setURI(int, java.lang.String); + method public void setValue(int, java.lang.String); + } + + public class DefaultHandler implements org.xml.sax.ContentHandler org.xml.sax.DTDHandler org.xml.sax.EntityResolver org.xml.sax.ErrorHandler { + ctor public DefaultHandler(); + method public void characters(char[], int, int) throws org.xml.sax.SAXException; + method public void endDocument() throws org.xml.sax.SAXException; + method public void endElement(java.lang.String, java.lang.String, java.lang.String) throws org.xml.sax.SAXException; + method public void endPrefixMapping(java.lang.String) throws org.xml.sax.SAXException; + method public void error(org.xml.sax.SAXParseException) throws org.xml.sax.SAXException; + method public void fatalError(org.xml.sax.SAXParseException) throws org.xml.sax.SAXException; + method public void ignorableWhitespace(char[], int, int) throws org.xml.sax.SAXException; + method public void notationDecl(java.lang.String, java.lang.String, java.lang.String) throws org.xml.sax.SAXException; + method public void processingInstruction(java.lang.String, java.lang.String) throws org.xml.sax.SAXException; + method public org.xml.sax.InputSource resolveEntity(java.lang.String, java.lang.String) throws java.io.IOException, org.xml.sax.SAXException; + method public void setDocumentLocator(org.xml.sax.Locator); + method public void skippedEntity(java.lang.String) throws org.xml.sax.SAXException; + method public void startDocument() throws org.xml.sax.SAXException; + method public void startElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes) throws org.xml.sax.SAXException; + method public void startPrefixMapping(java.lang.String, java.lang.String) throws org.xml.sax.SAXException; + method public void unparsedEntityDecl(java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws org.xml.sax.SAXException; + method public void warning(org.xml.sax.SAXParseException) throws org.xml.sax.SAXException; + } + + public class LocatorImpl implements org.xml.sax.Locator { + ctor public LocatorImpl(); + ctor public LocatorImpl(org.xml.sax.Locator); + method public int getColumnNumber(); + method public int getLineNumber(); + method public java.lang.String getPublicId(); + method public java.lang.String getSystemId(); + method public void setColumnNumber(int); + method public void setLineNumber(int); + method public void setPublicId(java.lang.String); + method public void setSystemId(java.lang.String); + } + + public class NamespaceSupport { + ctor public NamespaceSupport(); + method public boolean declarePrefix(java.lang.String, java.lang.String); + method public java.util.Enumeration getDeclaredPrefixes(); + method public java.lang.String getPrefix(java.lang.String); + method public java.util.Enumeration getPrefixes(); + method public java.util.Enumeration getPrefixes(java.lang.String); + method public java.lang.String getURI(java.lang.String); + method public boolean isNamespaceDeclUris(); + method public void popContext(); + method public java.lang.String[] processName(java.lang.String, java.lang.String[], boolean); + method public void pushContext(); + method public void reset(); + method public void setNamespaceDeclUris(boolean); + field public static final java.lang.String NSDECL = "http://www.w3.org/xmlns/2000/"; + field public static final java.lang.String XMLNS = "http://www.w3.org/XML/1998/namespace"; + } + + public class ParserAdapter implements org.xml.sax.DocumentHandler org.xml.sax.XMLReader { + ctor public ParserAdapter() throws org.xml.sax.SAXException; + ctor public ParserAdapter(org.xml.sax.Parser); + method public void characters(char[], int, int) throws org.xml.sax.SAXException; + method public void endDocument() throws org.xml.sax.SAXException; + method public void endElement(java.lang.String) throws org.xml.sax.SAXException; + method public org.xml.sax.ContentHandler getContentHandler(); + method public org.xml.sax.DTDHandler getDTDHandler(); + method public org.xml.sax.EntityResolver getEntityResolver(); + method public org.xml.sax.ErrorHandler getErrorHandler(); + method public boolean getFeature(java.lang.String) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException; + method public java.lang.Object getProperty(java.lang.String) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException; + method public void ignorableWhitespace(char[], int, int) throws org.xml.sax.SAXException; + method public void parse(java.lang.String) throws java.io.IOException, org.xml.sax.SAXException; + method public void parse(org.xml.sax.InputSource) throws java.io.IOException, org.xml.sax.SAXException; + method public void processingInstruction(java.lang.String, java.lang.String) throws org.xml.sax.SAXException; + method public void setContentHandler(org.xml.sax.ContentHandler); + method public void setDTDHandler(org.xml.sax.DTDHandler); + method public void setDocumentLocator(org.xml.sax.Locator); + method public void setEntityResolver(org.xml.sax.EntityResolver); + method public void setErrorHandler(org.xml.sax.ErrorHandler); + method public void setFeature(java.lang.String, boolean) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException; + method public void setProperty(java.lang.String, java.lang.Object) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException; + method public void startDocument() throws org.xml.sax.SAXException; + method public void startElement(java.lang.String, org.xml.sax.AttributeList) throws org.xml.sax.SAXException; + } + + public deprecated class ParserFactory { + method public static org.xml.sax.Parser makeParser() throws java.lang.ClassCastException, java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException, java.lang.NullPointerException; + method public static org.xml.sax.Parser makeParser(java.lang.String) throws java.lang.ClassCastException, java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException; + } + + public class XMLFilterImpl implements org.xml.sax.ContentHandler org.xml.sax.DTDHandler org.xml.sax.EntityResolver org.xml.sax.ErrorHandler org.xml.sax.XMLFilter { + ctor public XMLFilterImpl(); + ctor public XMLFilterImpl(org.xml.sax.XMLReader); + method public void characters(char[], int, int) throws org.xml.sax.SAXException; + method public void endDocument() throws org.xml.sax.SAXException; + method public void endElement(java.lang.String, java.lang.String, java.lang.String) throws org.xml.sax.SAXException; + method public void endPrefixMapping(java.lang.String) throws org.xml.sax.SAXException; + method public void error(org.xml.sax.SAXParseException) throws org.xml.sax.SAXException; + method public void fatalError(org.xml.sax.SAXParseException) throws org.xml.sax.SAXException; + method public org.xml.sax.ContentHandler getContentHandler(); + method public org.xml.sax.DTDHandler getDTDHandler(); + method public org.xml.sax.EntityResolver getEntityResolver(); + method public org.xml.sax.ErrorHandler getErrorHandler(); + method public boolean getFeature(java.lang.String) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException; + method public org.xml.sax.XMLReader getParent(); + method public java.lang.Object getProperty(java.lang.String) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException; + method public void ignorableWhitespace(char[], int, int) throws org.xml.sax.SAXException; + method public void notationDecl(java.lang.String, java.lang.String, java.lang.String) throws org.xml.sax.SAXException; + method public void parse(org.xml.sax.InputSource) throws java.io.IOException, org.xml.sax.SAXException; + method public void parse(java.lang.String) throws java.io.IOException, org.xml.sax.SAXException; + method public void processingInstruction(java.lang.String, java.lang.String) throws org.xml.sax.SAXException; + method public org.xml.sax.InputSource resolveEntity(java.lang.String, java.lang.String) throws java.io.IOException, org.xml.sax.SAXException; + method public void setContentHandler(org.xml.sax.ContentHandler); + method public void setDTDHandler(org.xml.sax.DTDHandler); + method public void setDocumentLocator(org.xml.sax.Locator); + method public void setEntityResolver(org.xml.sax.EntityResolver); + method public void setErrorHandler(org.xml.sax.ErrorHandler); + method public void setFeature(java.lang.String, boolean) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException; + method public void setParent(org.xml.sax.XMLReader); + method public void setProperty(java.lang.String, java.lang.Object) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException; + method public void skippedEntity(java.lang.String) throws org.xml.sax.SAXException; + method public void startDocument() throws org.xml.sax.SAXException; + method public void startElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes) throws org.xml.sax.SAXException; + method public void startPrefixMapping(java.lang.String, java.lang.String) throws org.xml.sax.SAXException; + method public void unparsedEntityDecl(java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws org.xml.sax.SAXException; + method public void warning(org.xml.sax.SAXParseException) throws org.xml.sax.SAXException; + } + + public class XMLReaderAdapter implements org.xml.sax.ContentHandler org.xml.sax.Parser { + ctor public XMLReaderAdapter() throws org.xml.sax.SAXException; + ctor public XMLReaderAdapter(org.xml.sax.XMLReader); + method public void characters(char[], int, int) throws org.xml.sax.SAXException; + method public void endDocument() throws org.xml.sax.SAXException; + method public void endElement(java.lang.String, java.lang.String, java.lang.String) throws org.xml.sax.SAXException; + method public void endPrefixMapping(java.lang.String); + method public void ignorableWhitespace(char[], int, int) throws org.xml.sax.SAXException; + method public void parse(java.lang.String) throws java.io.IOException, org.xml.sax.SAXException; + method public void parse(org.xml.sax.InputSource) throws java.io.IOException, org.xml.sax.SAXException; + method public void processingInstruction(java.lang.String, java.lang.String) throws org.xml.sax.SAXException; + method public void setDTDHandler(org.xml.sax.DTDHandler); + method public void setDocumentHandler(org.xml.sax.DocumentHandler); + method public void setDocumentLocator(org.xml.sax.Locator); + method public void setEntityResolver(org.xml.sax.EntityResolver); + method public void setErrorHandler(org.xml.sax.ErrorHandler); + method public void setLocale(java.util.Locale) throws org.xml.sax.SAXException; + method public void skippedEntity(java.lang.String) throws org.xml.sax.SAXException; + method public void startDocument() throws org.xml.sax.SAXException; + method public void startElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes) throws org.xml.sax.SAXException; + method public void startPrefixMapping(java.lang.String, java.lang.String); + } + + public final class XMLReaderFactory { + method public static org.xml.sax.XMLReader createXMLReader() throws org.xml.sax.SAXException; + method public static org.xml.sax.XMLReader createXMLReader(java.lang.String) throws org.xml.sax.SAXException; + } + +} + +package org.xmlpull.v1 { + + public abstract interface XmlPullParser { + method public abstract void defineEntityReplacementText(java.lang.String, java.lang.String) throws org.xmlpull.v1.XmlPullParserException; + method public abstract int getAttributeCount(); + method public abstract java.lang.String getAttributeName(int); + method public abstract java.lang.String getAttributeNamespace(int); + method public abstract java.lang.String getAttributePrefix(int); + method public abstract java.lang.String getAttributeType(int); + method public abstract java.lang.String getAttributeValue(int); + method public abstract java.lang.String getAttributeValue(java.lang.String, java.lang.String); + method public abstract int getColumnNumber(); + method public abstract int getDepth(); + method public abstract int getEventType() throws org.xmlpull.v1.XmlPullParserException; + method public abstract boolean getFeature(java.lang.String); + method public abstract java.lang.String getInputEncoding(); + method public abstract int getLineNumber(); + method public abstract java.lang.String getName(); + method public abstract java.lang.String getNamespace(java.lang.String); + method public abstract java.lang.String getNamespace(); + method public abstract int getNamespaceCount(int) throws org.xmlpull.v1.XmlPullParserException; + method public abstract java.lang.String getNamespacePrefix(int) throws org.xmlpull.v1.XmlPullParserException; + method public abstract java.lang.String getNamespaceUri(int) throws org.xmlpull.v1.XmlPullParserException; + method public abstract java.lang.String getPositionDescription(); + method public abstract java.lang.String getPrefix(); + method public abstract java.lang.Object getProperty(java.lang.String); + method public abstract java.lang.String getText(); + method public abstract char[] getTextCharacters(int[]); + method public abstract boolean isAttributeDefault(int); + method public abstract boolean isEmptyElementTag() throws org.xmlpull.v1.XmlPullParserException; + method public abstract boolean isWhitespace() throws org.xmlpull.v1.XmlPullParserException; + method public abstract int next() throws java.io.IOException, org.xmlpull.v1.XmlPullParserException; + method public abstract int nextTag() throws java.io.IOException, org.xmlpull.v1.XmlPullParserException; + method public abstract java.lang.String nextText() throws java.io.IOException, org.xmlpull.v1.XmlPullParserException; + method public abstract int nextToken() throws java.io.IOException, org.xmlpull.v1.XmlPullParserException; + method public abstract void require(int, java.lang.String, java.lang.String) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException; + method public abstract void setFeature(java.lang.String, boolean) throws org.xmlpull.v1.XmlPullParserException; + method public abstract void setInput(java.io.Reader) throws org.xmlpull.v1.XmlPullParserException; + method public abstract void setInput(java.io.InputStream, java.lang.String) throws org.xmlpull.v1.XmlPullParserException; + method public abstract void setProperty(java.lang.String, java.lang.Object) throws org.xmlpull.v1.XmlPullParserException; + field public static final int CDSECT = 5; // 0x5 + field public static final int COMMENT = 9; // 0x9 + field public static final int DOCDECL = 10; // 0xa + field public static final int END_DOCUMENT = 1; // 0x1 + field public static final int END_TAG = 3; // 0x3 + field public static final int ENTITY_REF = 6; // 0x6 + field public static final java.lang.String FEATURE_PROCESS_DOCDECL = "http://xmlpull.org/v1/doc/features.html#process-docdecl"; + field public static final java.lang.String FEATURE_PROCESS_NAMESPACES = "http://xmlpull.org/v1/doc/features.html#process-namespaces"; + field public static final java.lang.String FEATURE_REPORT_NAMESPACE_ATTRIBUTES = "http://xmlpull.org/v1/doc/features.html#report-namespace-prefixes"; + field public static final java.lang.String FEATURE_VALIDATION = "http://xmlpull.org/v1/doc/features.html#validation"; + field public static final int IGNORABLE_WHITESPACE = 7; // 0x7 + field public static final java.lang.String NO_NAMESPACE = ""; + field public static final int PROCESSING_INSTRUCTION = 8; // 0x8 + field public static final int START_DOCUMENT = 0; // 0x0 + field public static final int START_TAG = 2; // 0x2 + field public static final int TEXT = 4; // 0x4 + field public static final java.lang.String[] TYPES; + } + + public class XmlPullParserException extends java.lang.Exception { + ctor public XmlPullParserException(java.lang.String); + ctor public XmlPullParserException(java.lang.String, org.xmlpull.v1.XmlPullParser, java.lang.Throwable); + method public int getColumnNumber(); + method public java.lang.Throwable getDetail(); + method public int getLineNumber(); + field protected int column; + field protected java.lang.Throwable detail; + field protected int row; + } + + public class XmlPullParserFactory { + ctor protected XmlPullParserFactory(); + method public boolean getFeature(java.lang.String); + method public boolean isNamespaceAware(); + method public boolean isValidating(); + method public static org.xmlpull.v1.XmlPullParserFactory newInstance() throws org.xmlpull.v1.XmlPullParserException; + method public static org.xmlpull.v1.XmlPullParserFactory newInstance(java.lang.String, java.lang.Class) throws org.xmlpull.v1.XmlPullParserException; + method public org.xmlpull.v1.XmlPullParser newPullParser() throws org.xmlpull.v1.XmlPullParserException; + method public org.xmlpull.v1.XmlSerializer newSerializer() throws org.xmlpull.v1.XmlPullParserException; + method public void setFeature(java.lang.String, boolean) throws org.xmlpull.v1.XmlPullParserException; + method public void setNamespaceAware(boolean); + method public void setValidating(boolean); + field public static final java.lang.String PROPERTY_NAME = "org.xmlpull.v1.XmlPullParserFactory"; + field protected java.lang.String classNamesLocation; + field protected java.util.HashMap features; + field protected java.util.ArrayList parserClasses; + field protected java.util.ArrayList serializerClasses; + } + + public abstract interface XmlSerializer { + method public abstract org.xmlpull.v1.XmlSerializer attribute(java.lang.String, java.lang.String, java.lang.String) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException; + method public abstract void cdsect(java.lang.String) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException; + method public abstract void comment(java.lang.String) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException; + method public abstract void docdecl(java.lang.String) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException; + method public abstract void endDocument() throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException; + method public abstract org.xmlpull.v1.XmlSerializer endTag(java.lang.String, java.lang.String) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException; + method public abstract void entityRef(java.lang.String) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException; + method public abstract void flush() throws java.io.IOException; + method public abstract int getDepth(); + method public abstract boolean getFeature(java.lang.String); + method public abstract java.lang.String getName(); + method public abstract java.lang.String getNamespace(); + method public abstract java.lang.String getPrefix(java.lang.String, boolean) throws java.lang.IllegalArgumentException; + method public abstract java.lang.Object getProperty(java.lang.String); + method public abstract void ignorableWhitespace(java.lang.String) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException; + method public abstract void processingInstruction(java.lang.String) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException; + method public abstract void setFeature(java.lang.String, boolean) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException; + method public abstract void setOutput(java.io.OutputStream, java.lang.String) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException; + method public abstract void setOutput(java.io.Writer) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException; + method public abstract void setPrefix(java.lang.String, java.lang.String) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException; + method public abstract void setProperty(java.lang.String, java.lang.Object) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException; + method public abstract void startDocument(java.lang.String, java.lang.Boolean) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException; + method public abstract org.xmlpull.v1.XmlSerializer startTag(java.lang.String, java.lang.String) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException; + method public abstract org.xmlpull.v1.XmlSerializer text(java.lang.String) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException; + method public abstract org.xmlpull.v1.XmlSerializer text(char[], int, int) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException; + } + +} + +package org.xmlpull.v1.sax2 { + + public class Driver implements org.xml.sax.Attributes org.xml.sax.Locator org.xml.sax.XMLReader { + ctor public Driver() throws org.xmlpull.v1.XmlPullParserException; + ctor public Driver(org.xmlpull.v1.XmlPullParser) throws org.xmlpull.v1.XmlPullParserException; + method public int getColumnNumber(); + method public org.xml.sax.ContentHandler getContentHandler(); + method public org.xml.sax.DTDHandler getDTDHandler(); + method public org.xml.sax.EntityResolver getEntityResolver(); + method public org.xml.sax.ErrorHandler getErrorHandler(); + method public boolean getFeature(java.lang.String) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException; + method public int getIndex(java.lang.String, java.lang.String); + method public int getIndex(java.lang.String); + method public int getLength(); + method public int getLineNumber(); + method public java.lang.String getLocalName(int); + method public java.lang.Object getProperty(java.lang.String) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException; + method public java.lang.String getPublicId(); + method public java.lang.String getQName(int); + method public java.lang.String getSystemId(); + method public java.lang.String getType(int); + method public java.lang.String getType(java.lang.String, java.lang.String); + method public java.lang.String getType(java.lang.String); + method public java.lang.String getURI(int); + method public java.lang.String getValue(int); + method public java.lang.String getValue(java.lang.String, java.lang.String); + method public java.lang.String getValue(java.lang.String); + method public void parse(org.xml.sax.InputSource) throws java.io.IOException, org.xml.sax.SAXException; + method public void parse(java.lang.String) throws java.io.IOException, org.xml.sax.SAXException; + method public void parseSubTree(org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xml.sax.SAXException; + method public void setContentHandler(org.xml.sax.ContentHandler); + method public void setDTDHandler(org.xml.sax.DTDHandler); + method public void setEntityResolver(org.xml.sax.EntityResolver); + method public void setErrorHandler(org.xml.sax.ErrorHandler); + method public void setFeature(java.lang.String, boolean) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException; + method public void setProperty(java.lang.String, java.lang.Object) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException; + method protected void startElement(java.lang.String, java.lang.String, java.lang.String) throws org.xml.sax.SAXException; + field protected static final java.lang.String APACHE_DYNAMIC_VALIDATION_FEATURE = "http://apache.org/xml/features/validation/dynamic"; + field protected static final java.lang.String APACHE_SCHEMA_VALIDATION_FEATURE = "http://apache.org/xml/features/validation/schema"; + field protected static final java.lang.String DECLARATION_HANDLER_PROPERTY = "http://xml.org/sax/properties/declaration-handler"; + field protected static final java.lang.String LEXICAL_HANDLER_PROPERTY = "http://xml.org/sax/properties/lexical-handler"; + field protected static final java.lang.String NAMESPACES_FEATURE = "http://xml.org/sax/features/namespaces"; + field protected static final java.lang.String NAMESPACE_PREFIXES_FEATURE = "http://xml.org/sax/features/namespace-prefixes"; + field protected static final java.lang.String VALIDATION_FEATURE = "http://xml.org/sax/features/validation"; + field protected org.xml.sax.ContentHandler contentHandler; + field protected org.xml.sax.ErrorHandler errorHandler; + field protected org.xmlpull.v1.XmlPullParser pp; + field protected java.lang.String systemId; + } + +} + diff --git a/api/system-removed.txt b/api/system-removed.txt new file mode 100644 index 0000000000000000000000000000000000000000..1b69ee8229f6779ad84d469a2d0118b8c3239a06 --- /dev/null +++ b/api/system-removed.txt @@ -0,0 +1,66 @@ +package android.media { + + public class AudioFormat { + ctor public AudioFormat(); + } + +} + +package android.os { + + public final class PowerManager { + method public void goToSleep(long); + method public deprecated void userActivity(long, boolean); + method public void wakeUp(long); + } + + public class UserManager { + method public android.graphics.drawable.Drawable getBadgedDrawableForUser(android.graphics.drawable.Drawable, android.os.UserHandle, android.graphics.Rect, int); + method public android.graphics.drawable.Drawable getBadgedIconForUser(android.graphics.drawable.Drawable, android.os.UserHandle); + method public java.lang.CharSequence getBadgedLabelForUser(java.lang.CharSequence, android.os.UserHandle); + } + +} + +package android.text.format { + + public class DateFormat { + field public static final deprecated char AM_PM = 97; // 0x0061 'a' + field public static final deprecated char CAPITAL_AM_PM = 65; // 0x0041 'A' + field public static final deprecated char DATE = 100; // 0x0064 'd' + field public static final deprecated char DAY = 69; // 0x0045 'E' + field public static final deprecated char HOUR = 104; // 0x0068 'h' + field public static final deprecated char HOUR_OF_DAY = 107; // 0x006b 'k' + field public static final deprecated char MINUTE = 109; // 0x006d 'm' + field public static final deprecated char MONTH = 77; // 0x004d 'M' + field public static final deprecated char QUOTE = 39; // 0x0027 '\'' + field public static final deprecated char SECONDS = 115; // 0x0073 's' + field public static final deprecated char STANDALONE_MONTH = 76; // 0x004c 'L' + field public static final deprecated char TIME_ZONE = 122; // 0x007a 'z' + field public static final deprecated char YEAR = 121; // 0x0079 'y' + } + +} + +package android.view { + + public class View implements android.view.accessibility.AccessibilityEventSource android.graphics.drawable.Drawable.Callback android.view.KeyEvent.Callback { + method protected void initializeFadingEdge(android.content.res.TypedArray); + method protected void initializeScrollbars(android.content.res.TypedArray); + } + + public static class WindowManager.LayoutParams extends android.view.ViewGroup.LayoutParams implements android.os.Parcelable { + field public static final int TYPE_KEYGUARD = 2004; // 0x7d4 + } + +} + +package android.widget { + + public class TextView extends android.view.View implements android.view.ViewTreeObserver.OnPreDrawListener { + method public static int getTextColor(android.content.Context, android.content.res.TypedArray, int); + method public static android.content.res.ColorStateList getTextColors(android.content.Context, android.content.res.TypedArray); + } + +} + diff --git a/cmds/am/src/com/android/commands/am/Am.java b/cmds/am/src/com/android/commands/am/Am.java index ba11a815d5f491497e683df68b01c19670b25ad5..2ea1d4d4f1d425412cda5505b0e8ab8dd83d965d 100644 --- a/cmds/am/src/com/android/commands/am/Am.java +++ b/cmds/am/src/com/android/commands/am/Am.java @@ -47,6 +47,7 @@ import android.os.Bundle; import android.os.IBinder; import android.os.ParcelFileDescriptor; import android.os.RemoteException; +import android.os.SELinux; import android.os.ServiceManager; import android.os.SystemClock; import android.os.SystemProperties; @@ -55,12 +56,9 @@ import android.text.TextUtils; import android.util.AndroidException; import android.util.ArrayMap; import android.view.IWindowManager; -import android.view.View; import com.android.internal.os.BaseCommand; -import dalvik.system.VMRuntime; - import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; @@ -127,6 +125,7 @@ public class Am extends BaseCommand { " am screen-compat [on|off] \n" + " am to-uri [INTENT]\n" + " am to-intent-uri [INTENT]\n" + + " am to-app-uri [INTENT]\n" + " am switch-user \n" + " am start-user \n" + " am stop-user \n" + @@ -229,6 +228,8 @@ public class Am extends BaseCommand { "\n" + "am to-intent-uri: print the given Intent specification as an intent: URI.\n" + "\n" + + "am to-app-uri: print the given Intent specification as an android-app: URI.\n" + + "\n" + "am switch-user: switch to put USER_ID in the foreground, starting\n" + " execution of that user if it is currently stopped.\n" + "\n" + @@ -270,7 +271,7 @@ public class Am extends BaseCommand { " [--efa [, [,] [-f ]\n" + + " [-n ] [-p ] [-f ]\n" + " [--grant-read-uri-permission] [--grant-write-uri-permission]\n" + " [--grant-persistable-uri-permission] [--grant-prefix-uri-permission]\n" + " [--debug-log-resolution] [--exclude-stopped-packages]\n" + @@ -337,9 +338,11 @@ public class Am extends BaseCommand { } else if (op.equals("screen-compat")) { runScreenCompat(); } else if (op.equals("to-uri")) { - runToUri(false); + runToUri(0); } else if (op.equals("to-intent-uri")) { - runToUri(true); + runToUri(Intent.URI_INTENT_SCHEME); + } else if (op.equals("to-app-uri")) { + runToUri(Intent.URI_ANDROID_APP_SCHEME); } else if (op.equals("switch-user")) { runSwitchUser(); } else if (op.equals("start-user")) { @@ -417,7 +420,7 @@ public class Am extends BaseCommand { } else if (opt.equals("--ei")) { String key = nextArgRequired(); String value = nextArgRequired(); - intent.putExtra(key, Integer.valueOf(value)); + intent.putExtra(key, Integer.decode(value)); } else if (opt.equals("--eu")) { String key = nextArgRequired(); String value = nextArgRequired(); @@ -434,7 +437,7 @@ public class Am extends BaseCommand { String[] strings = value.split(","); int[] list = new int[strings.length]; for (int i = 0; i < strings.length; i++) { - list[i] = Integer.valueOf(strings[i]); + list[i] = Integer.decode(strings[i]); } intent.putExtra(key, list); } else if (opt.equals("--el")) { @@ -477,8 +480,23 @@ public class Am extends BaseCommand { hasIntentInfo = true; } else if (opt.equals("--ez")) { String key = nextArgRequired(); - String value = nextArgRequired(); - intent.putExtra(key, Boolean.valueOf(value)); + String value = nextArgRequired().toLowerCase(); + // Boolean.valueOf() results in false for anything that is not "true", which is + // error-prone in shell commands + boolean arg; + if ("true".equals(value) || "t".equals(value)) { + arg = true; + } else if ("false".equals(value) || "f".equals(value)) { + arg = false; + } else { + try { + arg = Integer.decode(value) != 0; + } catch (NumberFormatException ex) { + throw new IllegalArgumentException("Invalid boolean value: " + value); + } + } + + intent.putExtra(key, arg); } else if (opt.equals("-n")) { String str = nextArgRequired(); ComponentName cn = ComponentName.unflattenFromString(str); @@ -487,6 +505,12 @@ public class Am extends BaseCommand { if (intent == baseIntent) { hasIntentInfo = true; } + } else if (opt.equals("-p")) { + String str = nextArgRequired(); + intent.setPackage(str); + if (intent == baseIntent) { + hasIntentInfo = true; + } } else if (opt.equals("-f")) { String str = nextArgRequired(); intent.setFlags(Integer.decode(str).intValue()); @@ -592,7 +616,8 @@ public class Am extends BaseCommand { } else if (arg.indexOf(':') >= 0) { // The argument is a URI. Fully parse it, and use that result // to fill in any data not specified so far. - baseIntent = Intent.parseUri(arg, Intent.URI_INTENT_SCHEME); + baseIntent = Intent.parseUri(arg, Intent.URI_INTENT_SCHEME + | Intent.URI_ANDROID_APP_SCHEME | Intent.URI_ALLOW_UNSAFE); } else if (arg.indexOf('/') >= 0) { // The argument is a component name. Build an Intent to launch // it. @@ -717,13 +742,14 @@ public class Am extends BaseCommand { if (mProfileFile != null) { try { - fd = ParcelFileDescriptor.open( + fd = openForSystemServer( new File(mProfileFile), ParcelFileDescriptor.MODE_CREATE | ParcelFileDescriptor.MODE_TRUNCATE | ParcelFileDescriptor.MODE_READ_WRITE); } catch (FileNotFoundException e) { System.err.println("Error: Unable to open file: " + mProfileFile); + System.err.println("Consider using a file under /data/local/tmp/"); return; } profilerInfo = new ProfilerInfo(mProfileFile, fd, mSamplingInterval, mAutoStop); @@ -1029,13 +1055,14 @@ public class Am extends BaseCommand { if (start) { profileFile = nextArgRequired(); try { - fd = ParcelFileDescriptor.open( + fd = openForSystemServer( new File(profileFile), ParcelFileDescriptor.MODE_CREATE | ParcelFileDescriptor.MODE_TRUNCATE | ParcelFileDescriptor.MODE_READ_WRITE); } catch (FileNotFoundException e) { System.err.println("Error: Unable to open file: " + profileFile); + System.err.println("Consider using a file under /data/local/tmp/"); return; } profilerInfo = new ProfilerInfo(profileFile, fd, 0, false); @@ -1089,12 +1116,13 @@ public class Am extends BaseCommand { try { File file = new File(heapFile); file.delete(); - fd = ParcelFileDescriptor.open(file, + fd = openForSystemServer(file, ParcelFileDescriptor.MODE_CREATE | ParcelFileDescriptor.MODE_TRUNCATE | ParcelFileDescriptor.MODE_READ_WRITE); } catch (FileNotFoundException e) { System.err.println("Error: Unable to open file: " + heapFile); + System.err.println("Consider using a file under /data/local/tmp/"); return; } @@ -1534,9 +1562,9 @@ public class Am extends BaseCommand { } while (packageName != null); } - private void runToUri(boolean intentScheme) throws Exception { + private void runToUri(int flags) throws Exception { Intent intent = makeIntent(UserHandle.USER_CURRENT); - System.out.println(intent.toUri(intentScheme ? Intent.URI_INTENT_SCHEME : 0)); + System.out.println(intent.toUri(flags)); } private class IntentReceiver extends IIntentReceiver.Stub { @@ -1831,4 +1859,18 @@ public class Am extends BaseCommand { } catch (RemoteException e) { } } + + /** + * Open the given file for sending into the system process. This verifies + * with SELinux that the system will have access to the file. + */ + private static ParcelFileDescriptor openForSystemServer(File file, int mode) + throws FileNotFoundException { + final ParcelFileDescriptor fd = ParcelFileDescriptor.open(file, mode); + final String tcon = SELinux.getFileContext(file.getAbsolutePath()); + if (!SELinux.checkSELinuxAccess("u:r:system_server:s0", tcon, "file", "read")) { + throw new FileNotFoundException("System server has no access to file context " + tcon); + } + return fd; + } } diff --git a/cmds/appops/src/com/android/commands/appops/AppOpsCommand.java b/cmds/appops/src/com/android/commands/appops/AppOpsCommand.java index c414f58300c3367e9499e005f76d1f808008b155..3ec63b429a28e8b100b10ce19f9556e3e39918e0 100644 --- a/cmds/appops/src/com/android/commands/appops/AppOpsCommand.java +++ b/cmds/appops/src/com/android/commands/appops/AppOpsCommand.java @@ -24,10 +24,12 @@ import android.content.pm.IPackageManager; import android.os.ServiceManager; import android.os.UserHandle; +import android.util.TimeUtils; import com.android.internal.app.IAppOpsService; import com.android.internal.os.BaseCommand; import java.io.PrintStream; +import java.util.List; /** * This class is a command line utility for manipulating AppOps permissions. @@ -40,15 +42,19 @@ public class AppOpsCommand extends BaseCommand { @Override public void onShowUsage(PrintStream out) { - out.println("usage: adb shell appops set " - + " [--user ]\n" + out.println("usage: appops set [--user ] \n" + + " appops get [--user ] []\n" + + " appops reset [--user ] []\n" + " an Android package name.\n" + " an AppOps operation.\n" + + " one of allow, ignore, deny, or default\n" + " the user id under which the package is installed. If --user is not\n" + " specified, the current user is assumed.\n"); } private static final String COMMAND_SET = "set"; + private static final String COMMAND_GET = "get"; + private static final String COMMAND_RESET = "reset"; @Override public void onRun() throws Exception { @@ -58,8 +64,17 @@ public class AppOpsCommand extends BaseCommand { runSet(); break; + case COMMAND_GET: + runGet(); + break; + + case COMMAND_RESET: + runReset(); + break; + default: - throw new IllegalArgumentException("Unknown command '" + command + "'."); + System.err.println("Error: Unknown command: '" + command + "'."); + break; } } @@ -71,6 +86,23 @@ public class AppOpsCommand extends BaseCommand { private static final String MODE_IGNORE = "ignore"; private static final String MODE_DEFAULT = "default"; + private int strOpToOp(String op) { + try { + return AppOpsManager.strOpToOp(op); + } catch (IllegalArgumentException e) { + } + try { + return Integer.parseInt(op); + } catch (NumberFormatException e) { + } + try { + return AppOpsManager.strDebugOpToOp(op); + } catch (IllegalArgumentException e) { + System.err.println("Error: " + e.getMessage()); + return -1; + } + } + private void runSet() throws Exception { String packageName = null; String op = null; @@ -87,20 +119,27 @@ public class AppOpsCommand extends BaseCommand { } else if (mode == null) { mode = argument; } else { - throw new IllegalArgumentException("Unsupported argument: " + argument); + System.err.println("Error: Unsupported argument: " + argument); + return; } } } if (packageName == null) { - throw new IllegalArgumentException("Package name not specified."); + System.err.println("Error: Package name not specified."); + return; } else if (op == null) { - throw new IllegalArgumentException("Operation not specified."); + System.err.println("Error: Operation not specified."); + return; } else if (mode == null) { - throw new IllegalArgumentException("Mode not specified."); + System.err.println("Error: Mode not specified."); + return; } - final int opInt = AppOpsManager.strOpToOp(op); + final int opInt = strOpToOp(op); + if (opInt < 0) { + return; + } final int modeInt; switch (mode) { case MODE_ALLOW: @@ -116,7 +155,8 @@ public class AppOpsCommand extends BaseCommand { modeInt = AppOpsManager.MODE_DEFAULT; break; default: - throw new IllegalArgumentException("Mode is invalid."); + System.err.println("Error: Mode " + mode + " is not valid,"); + return; } // Parsing complete, let's execute the command. @@ -130,8 +170,155 @@ public class AppOpsCommand extends BaseCommand { ServiceManager.getService(Context.APP_OPS_SERVICE)); final int uid = pm.getPackageUid(packageName, userId); if (uid < 0) { - throw new Exception("No UID for " + packageName + " for user " + userId); + System.err.println("Error: No UID for " + packageName + " in user " + userId); + return; } appOpsService.setMode(opInt, uid, packageName, modeInt); } + + private void runGet() throws Exception { + String packageName = null; + String op = null; + int userId = UserHandle.USER_CURRENT; + for (String argument; (argument = nextArg()) != null;) { + if (ARGUMENT_USER.equals(argument)) { + userId = Integer.parseInt(nextArgRequired()); + } else { + if (packageName == null) { + packageName = argument; + } else if (op == null) { + op = argument; + } else { + System.err.println("Error: Unsupported argument: " + argument); + return; + } + } + } + + if (packageName == null) { + System.err.println("Error: Package name not specified."); + return; + } + + final int opInt = op != null ? strOpToOp(op) : 0; + + // Parsing complete, let's execute the command. + + if (userId == UserHandle.USER_CURRENT) { + userId = ActivityManager.getCurrentUser(); + } + + final IPackageManager pm = ActivityThread.getPackageManager(); + final IAppOpsService appOpsService = IAppOpsService.Stub.asInterface( + ServiceManager.getService(Context.APP_OPS_SERVICE)); + final int uid = pm.getPackageUid(packageName, userId); + if (uid < 0) { + System.err.println("Error: No UID for " + packageName + " in user " + userId); + return; + } + List ops = appOpsService.getOpsForPackage(uid, packageName, + op != null ? new int[] {opInt} : null); + if (ops == null || ops.size() <= 0) { + System.out.println("No operations."); + return; + } + final long now = System.currentTimeMillis(); + for (int i=0; i entries = ops.get(i).getOps(); + for (int j=0; j= 0) { + if (arg.indexOf('.') >= 0 || arg.equals("android")) { // it's a package name doRestorePackage(arg); } else { diff --git a/cmds/content/src/com/android/commands/content/Content.java b/cmds/content/src/com/android/commands/content/Content.java index 948c9a2c6d8b192ae1e032b3f5e16ad0f2d7a17a..bd34a9c2ed4b569a0b1f30a295667fc2e5a2d3d0 100644 --- a/cmds/content/src/com/android/commands/content/Content.java +++ b/cmds/content/src/com/android/commands/content/Content.java @@ -501,7 +501,7 @@ public class Content { @Override public void onExecute(IContentProvider provider) throws Exception { - final ParcelFileDescriptor fd = provider.openFile(null, mUri, "r", null); + final ParcelFileDescriptor fd = provider.openFile(null, mUri, "r", null, null); copy(new FileInputStream(fd.getFileDescriptor()), System.out); } diff --git a/cmds/dpm/src/com/android/commands/dpm/Dpm.java b/cmds/dpm/src/com/android/commands/dpm/Dpm.java index 3b9a7857f6608f1c4eabf22a9830518f4c4af0e9..781fb965e08a00f7d111b4d6b54befbfb3f0978a 100644 --- a/cmds/dpm/src/com/android/commands/dpm/Dpm.java +++ b/cmds/dpm/src/com/android/commands/dpm/Dpm.java @@ -38,18 +38,25 @@ public final class Dpm extends BaseCommand { (new Dpm()).run(args); } + private static final String COMMAND_SET_ACTIVE_ADMIN = "set-active-admin"; private static final String COMMAND_SET_DEVICE_OWNER = "set-device-owner"; private static final String COMMAND_SET_PROFILE_OWNER = "set-profile-owner"; private IDevicePolicyManager mDevicePolicyManager; + private int mUserId = UserHandle.USER_OWNER; + private ComponentName mComponent = null; @Override public void onShowUsage(PrintStream out) { out.println( "usage: dpm [subcommand] [options]\n" + + "usage: dpm set-active-admin [ --user ] \n" + "usage: dpm set-device-owner \n" + "usage: dpm set-profile-owner \n" + "\n" + + "dpm set-active-admin: Sets the given component as active admin" + + " for an existing user.\n" + + "\n" + "dpm set-device-owner: Sets the given component as active admin, and its\n" + " package as device owner.\n" + "\n" + @@ -68,6 +75,9 @@ public final class Dpm extends BaseCommand { String command = nextArgRequired(); switch (command) { + case COMMAND_SET_ACTIVE_ADMIN: + runSetActiveAdmin(); + break; case COMMAND_SET_DEVICE_OWNER: runSetDeviceOwner(); break; @@ -79,6 +89,22 @@ public final class Dpm extends BaseCommand { } } + private void parseArgs(boolean canHaveUser) { + String nextArg = nextArgRequired(); + if (canHaveUser && "--user".equals(nextArg)) { + mUserId = parseInt(nextArgRequired()); + nextArg = nextArgRequired(); + } + mComponent = parseComponentName(nextArg); + } + + private void runSetActiveAdmin() throws RemoteException { + parseArgs(true); + mDevicePolicyManager.setActiveAdmin(mComponent, true /*refreshing*/, mUserId); + + System.out.println("Success: Active admin set to component " + mComponent.toShortString()); + } + private void runSetDeviceOwner() throws RemoteException { ComponentName component = parseComponentName(nextArgRequired()); mDevicePolicyManager.setActiveAdmin(component, true /*refreshing*/, UserHandle.USER_OWNER); @@ -99,6 +125,7 @@ public final class Dpm extends BaseCommand { } private void runSetProfileOwner() throws RemoteException { + // To be refactored later to use parseArgs(boolean). Currently in use by existing tests. ComponentName component = parseComponentName(nextArgRequired()); int userId = parseInt(nextArgRequired()); mDevicePolicyManager.setActiveAdmin(component, true /*refreshing*/, userId); diff --git a/cmds/pm/src/com/android/commands/pm/Pm.java b/cmds/pm/src/com/android/commands/pm/Pm.java index 5249065b2f36d60b68f9f99b79375158c3ed4518..7a01701f8dda7b1b0cfbf9daec7323a0a376612f 100644 --- a/cmds/pm/src/com/android/commands/pm/Pm.java +++ b/cmds/pm/src/com/android/commands/pm/Pm.java @@ -96,8 +96,9 @@ public final class Pm { "Error: Could not access the Package Manager. Is the system running?"; public static void main(String[] args) { + int exitCode = 1; try { - new Pm().run(args); + exitCode = new Pm().run(args); } catch (Exception e) { Log.e(TAG, "Error", e); System.err.println("Error: " + e); @@ -105,20 +106,20 @@ public final class Pm { System.err.println(PM_NOT_RUNNING_ERR); } } + System.exit(exitCode); } - public void run(String[] args) throws IOException, RemoteException { + public int run(String[] args) throws IOException, RemoteException { boolean validCommand = false; if (args.length < 1) { - showUsage(); - return; + return showUsage(); } mUm = IUserManager.Stub.asInterface(ServiceManager.getService("user")); mPm = IPackageManager.Stub.asInterface(ServiceManager.getService("package")); if (mPm == null) { System.err.println(PM_NOT_RUNNING_ERR); - return; + return 1; } mInstaller = mPm.getPackageInstaller(); @@ -127,155 +128,129 @@ public final class Pm { mNextArg = 1; if ("list".equals(op)) { - runList(); - return; + return runList(); } if ("path".equals(op)) { - runPath(); - return; + return runPath(); } if ("dump".equals(op)) { - runDump(); - return; + return runDump(); } if ("install".equals(op)) { - runInstall(); - return; + return runInstall(); } if ("install-create".equals(op)) { - runInstallCreate(); - return; + return runInstallCreate(); } if ("install-write".equals(op)) { - runInstallWrite(); - return; + return runInstallWrite(); } if ("install-commit".equals(op)) { - runInstallCommit(); - return; + return runInstallCommit(); } if ("install-abandon".equals(op) || "install-destroy".equals(op)) { - runInstallAbandon(); - return; + return runInstallAbandon(); } if ("set-installer".equals(op)) { - runSetInstaller(); - return; + return runSetInstaller(); } if ("uninstall".equals(op)) { - runUninstall(); - return; + return runUninstall(); } if ("clear".equals(op)) { - runClear(); - return; + return runClear(); } if ("enable".equals(op)) { - runSetEnabledSetting(PackageManager.COMPONENT_ENABLED_STATE_ENABLED); - return; + return runSetEnabledSetting(PackageManager.COMPONENT_ENABLED_STATE_ENABLED); } if ("disable".equals(op)) { - runSetEnabledSetting(PackageManager.COMPONENT_ENABLED_STATE_DISABLED); - return; + return runSetEnabledSetting(PackageManager.COMPONENT_ENABLED_STATE_DISABLED); } if ("disable-user".equals(op)) { - runSetEnabledSetting(PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER); - return; + return runSetEnabledSetting(PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER); } if ("disable-until-used".equals(op)) { - runSetEnabledSetting(PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED); - return; + return runSetEnabledSetting(PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED); } if ("hide".equals(op)) { - runSetHiddenSetting(true); - return; + return runSetHiddenSetting(true); } if ("unhide".equals(op)) { - runSetHiddenSetting(false); - return; + return runSetHiddenSetting(false); } if ("grant".equals(op)) { - runGrantRevokePermission(true); - return; + return runGrantRevokePermission(true); } if ("revoke".equals(op)) { - runGrantRevokePermission(false); - return; + return runGrantRevokePermission(false); } if ("set-permission-enforced".equals(op)) { - runSetPermissionEnforced(); - return; + return runSetPermissionEnforced(); } if ("set-install-location".equals(op)) { - runSetInstallLocation(); - return; + return runSetInstallLocation(); } if ("get-install-location".equals(op)) { - runGetInstallLocation(); - return; + return runGetInstallLocation(); } if ("trim-caches".equals(op)) { - runTrimCaches(); - return; + return runTrimCaches(); } if ("create-user".equals(op)) { - runCreateUser(); - return; + return runCreateUser(); } if ("remove-user".equals(op)) { - runRemoveUser(); - return; + return runRemoveUser(); } if ("get-max-users".equals(op)) { - runGetMaxUsers(); - return; + return runGetMaxUsers(); } if ("force-dex-opt".equals(op)) { - runForceDexOpt(); - return; + return runForceDexOpt(); } try { if (args.length == 1) { if (args[0].equalsIgnoreCase("-l")) { validCommand = true; - runListPackages(false); + return runListPackages(false); } else if (args[0].equalsIgnoreCase("-lf")){ validCommand = true; - runListPackages(true); + return runListPackages(true); } } else if (args.length == 2) { if (args[0].equalsIgnoreCase("-p")) { validCommand = true; - displayPackageFilePath(args[1]); + return displayPackageFilePath(args[1]); } } + return 1; } finally { if (validCommand == false) { if (op != null) { @@ -296,35 +271,36 @@ public final class Pm { * pm list libraries * pm list instrumentation */ - private void runList() { + private int runList() { String type = nextArg(); if (type == null) { System.err.println("Error: didn't specify type of data to list"); - return; + return 1; } if ("package".equals(type) || "packages".equals(type)) { - runListPackages(false); + return runListPackages(false); } else if ("permission-groups".equals(type)) { - runListPermissionGroups(); + return runListPermissionGroups(); } else if ("permissions".equals(type)) { - runListPermissions(); + return runListPermissions(); } else if ("features".equals(type)) { - runListFeatures(); + return runListFeatures(); } else if ("libraries".equals(type)) { - runListLibraries(); + return runListLibraries(); } else if ("instrumentation".equals(type)) { - runListInstrumentation(); + return runListInstrumentation(); } else if ("users".equals(type)) { - runListUsers(); + return runListUsers(); } else { System.err.println("Error: unknown list type '" + type + "'"); + return 1; } } /** * Lists all the installed packages. */ - private void runListPackages(boolean showApplicationPackage) { + private int runListPackages(boolean showApplicationPackage) { int getFlags = 0; boolean listDisabled = false, listEnabled = false; boolean listSystem = false, listThirdParty = false; @@ -355,12 +331,12 @@ public final class Pm { getFlags |= PackageManager.GET_UNINSTALLED_PACKAGES; } else { System.err.println("Error: Unknown option: " + opt); - return; + return 1; } } } catch (RuntimeException ex) { System.err.println("Error: " + ex.toString()); - return; + return 1; } String filter = nextArg(); @@ -393,9 +369,11 @@ public final class Pm { System.out.println(); } } + return 0; } catch (RemoteException e) { System.err.println(e.toString()); System.err.println(PM_NOT_RUNNING_ERR); + return 1; } } @@ -411,7 +389,7 @@ public final class Pm { * * pm list features */ - private void runListFeatures() { + private int runListFeatures() { try { List list = new ArrayList(); FeatureInfo[] rawList = mPm.getSystemAvailableFeatures(); @@ -438,9 +416,11 @@ public final class Pm { else System.out.println("reqGlEsVersion=0x" + Integer.toHexString(fi.reqGlEsVersion)); } + return 0; } catch (RemoteException e) { System.err.println(e.toString()); System.err.println(PM_NOT_RUNNING_ERR); + return 1; } } @@ -449,7 +429,7 @@ public final class Pm { * * pm list libraries */ - private void runListLibraries() { + private int runListLibraries() { try { List list = new ArrayList(); String[] rawList = mPm.getSystemSharedLibraryNames(); @@ -474,9 +454,11 @@ public final class Pm { System.out.print("library:"); System.out.println(lib); } + return 0; } catch (RemoteException e) { System.err.println(e.toString()); System.err.println(PM_NOT_RUNNING_ERR); + return 1; } } @@ -485,7 +467,7 @@ public final class Pm { * * pm list instrumentation [package] [-f] */ - private void runListInstrumentation() { + private int runListInstrumentation() { int flags = 0; // flags != 0 is only used to request meta-data boolean showPackage = false; String targetPackage = null; @@ -499,12 +481,12 @@ public final class Pm { targetPackage = opt; } else { System.err.println("Error: Unknown option: " + opt); - return; + return 1; } } } catch (RuntimeException ex) { System.err.println("Error: " + ex.toString()); - return; + return 1; } try { @@ -531,16 +513,18 @@ public final class Pm { System.out.print(ii.targetPackage); System.out.println(")"); } + return 0; } catch (RemoteException e) { System.err.println(e.toString()); System.err.println(PM_NOT_RUNNING_ERR); + return 1; } } /** * Lists all the known permission groups. */ - private void runListPermissionGroups() { + private int runListPermissionGroups() { try { List pgs = mPm.getAllPermissionGroups(0); @@ -550,9 +534,11 @@ public final class Pm { System.out.print("permission group:"); System.out.println(pgi.name); } + return 0; } catch (RemoteException e) { System.err.println(e.toString()); System.err.println(PM_NOT_RUNNING_ERR); + return 1; } } @@ -575,7 +561,7 @@ public final class Pm { /** * Lists all the permissions in a group. */ - private void runListPermissions() { + private int runListPermissions() { try { boolean labels = false; boolean groups = false; @@ -598,7 +584,7 @@ public final class Pm { dangerousOnly = true; } else { System.err.println("Error: Unknown option: " + opt); - return; + return 1; } } @@ -640,9 +626,11 @@ public final class Pm { doListPermissions(groupList, groups, labels, summary, -10000, 10000); } + return 0; } catch (RemoteException e) { System.err.println(e.toString()); System.err.println(PM_NOT_RUNNING_ERR); + return 1; } } @@ -742,22 +730,23 @@ public final class Pm { } } - private void runPath() { + private int runPath() { String pkg = nextArg(); if (pkg == null) { System.err.println("Error: no package specified"); - return; + return 1; } - displayPackageFilePath(pkg); + return displayPackageFilePath(pkg); } - private void runDump() { + private int runDump() { String pkg = nextArg(); if (pkg == null) { System.err.println("Error: no package specified"); - return; + return 1; } ActivityManager.dumpPackageStateStatic(FileDescriptor.out, pkg); + return 0; } class LocalPackageInstallObserver extends PackageInstallObserver { @@ -825,31 +814,34 @@ public final class Pm { return Integer.toString(result); } - private void runSetInstallLocation() { + private int runSetInstallLocation() { int loc; String arg = nextArg(); if (arg == null) { System.err.println("Error: no install location specified."); - return; + return 1; } try { loc = Integer.parseInt(arg); } catch (NumberFormatException e) { System.err.println("Error: install location has to be a number."); - return; + return 1; } try { if (!mPm.setInstallLocation(loc)) { System.err.println("Error: install location has to be a number."); + return 1; } + return 0; } catch (RemoteException e) { System.err.println(e.toString()); System.err.println(PM_NOT_RUNNING_ERR); + return 1; } } - private void runGetInstallLocation() { + private int runGetInstallLocation() { try { int loc = mPm.getInstallLocation(); String locStr = "invalid"; @@ -861,13 +853,15 @@ public final class Pm { locStr = "external"; } System.out.println(loc + "[" + locStr + "]"); + return 0; } catch (RemoteException e) { System.err.println(e.toString()); System.err.println(PM_NOT_RUNNING_ERR); + return 1; } } - private void runInstall() { + private int runInstall() { int installFlags = 0; int userId = UserHandle.USER_ALL; String installerPackageName = null; @@ -887,7 +881,7 @@ public final class Pm { installerPackageName = nextOptionData(); if (installerPackageName == null) { System.err.println("Error: no value specified for -i"); - return; + return 1; } } else if (opt.equals("-t")) { installFlags |= PackageManager.INSTALL_ALLOW_TEST; @@ -903,13 +897,13 @@ public final class Pm { originatingUriString = nextOptionData(); if (originatingUriString == null) { System.err.println("Error: must supply argument for --originating-uri"); - return; + return 1; } } else if (opt.equals("--referrer")) { referrer = nextOptionData(); if (referrer == null) { System.err.println("Error: must supply argument for --referrer"); - return; + return 1; } } else if (opt.equals("--abi")) { abi = checkAbiArgument(nextOptionData()); @@ -917,7 +911,7 @@ public final class Pm { userId = Integer.parseInt(nextOptionData()); } else { System.err.println("Error: Unknown option: " + opt); - return; + return 1; } } @@ -947,7 +941,7 @@ public final class Pm { System.err.println("\tpkg: " + apkFilePath); if (apkFilePath == null) { System.err.println("Error: no package specified"); - return; + return 1; } // Populate verificationURI, optionally present @@ -976,19 +970,22 @@ public final class Pm { } if (obs.result == PackageManager.INSTALL_SUCCEEDED) { System.out.println("Success"); + return 0; } else { System.err.println("Failure [" + installFailureToString(obs) + "]"); + return 1; } } } catch (RemoteException e) { System.err.println(e.toString()); System.err.println(PM_NOT_RUNNING_ERR); + return 1; } } - private void runInstallCreate() throws RemoteException { + private int runInstallCreate() throws RemoteException { int userId = UserHandle.USER_ALL; String installerPackageName = null; @@ -1043,9 +1040,10 @@ public final class Pm { // NOTE: adb depends on parsing this string System.out.println("Success: created install session [" + sessionId + "]"); + return 0; } - private void runInstallWrite() throws IOException, RemoteException { + private int runInstallWrite() throws IOException, RemoteException { long sizeBytes = -1; String opt; @@ -1100,6 +1098,7 @@ public final class Pm { session.fsync(out); System.out.println("Success: streamed " + total + " bytes"); + return 0; } finally { IoUtils.closeQuietly(out); IoUtils.closeQuietly(in); @@ -1107,7 +1106,7 @@ public final class Pm { } } - private void runInstallCommit() throws RemoteException { + private int runInstallCommit() throws RemoteException { final int sessionId = Integer.parseInt(nextArg()); PackageInstaller.Session session = null; @@ -1122,18 +1121,19 @@ public final class Pm { PackageInstaller.STATUS_FAILURE); if (status == PackageInstaller.STATUS_SUCCESS) { System.out.println("Success"); + return 0; } else { Log.e(TAG, "Failure details: " + result.getExtras()); - System.out.println("Failure [" + System.err.println("Failure [" + result.getStringExtra(PackageInstaller.EXTRA_STATUS_MESSAGE) + "]"); - return; + return 1; } } finally { IoUtils.closeQuietly(session); } } - private void runInstallAbandon() throws RemoteException { + private int runInstallAbandon() throws RemoteException { final int sessionId = Integer.parseInt(nextArg()); PackageInstaller.Session session = null; @@ -1141,12 +1141,13 @@ public final class Pm { session = new PackageInstaller.Session(mInstaller.openSession(sessionId)); session.abandon(); System.out.println("Success"); + return 0; } finally { IoUtils.closeQuietly(session); } } - private void runSetInstaller() throws RemoteException { + private int runSetInstaller() throws RemoteException { final String targetPackage = nextArg(); final String installerPackageName = nextArg(); @@ -1157,9 +1158,10 @@ public final class Pm { mPm.setInstallerPackageName(targetPackage, installerPackageName); System.out.println("Success"); + return 0; } - public void runCreateUser() { + public int runCreateUser() { String name; int userId = -1; int flags = 0; @@ -1170,7 +1172,7 @@ public final class Pm { if (optionData == null || !isNumber(optionData)) { System.err.println("Error: no USER_ID specified"); showUsage(); - return; + return 1; } else { userId = Integer.parseInt(optionData); } @@ -1179,13 +1181,13 @@ public final class Pm { } else { System.err.println("Error: unknown option " + opt); showUsage(); - return; + return 1; } } String arg = nextArg(); if (arg == null) { System.err.println("Error: no user name specified."); - return; + return 1; } name = arg; try { @@ -1197,75 +1199,85 @@ public final class Pm { } if (info != null) { System.out.println("Success: created user id " + info.id); + return 1; } else { System.err.println("Error: couldn't create User."); + return 1; } } catch (RemoteException e) { System.err.println(e.toString()); System.err.println(PM_NOT_RUNNING_ERR); + return 1; } - } - public void runRemoveUser() { + public int runRemoveUser() { int userId; String arg = nextArg(); if (arg == null) { System.err.println("Error: no user id specified."); - return; + return 1; } try { userId = Integer.parseInt(arg); } catch (NumberFormatException e) { System.err.println("Error: user id '" + arg + "' is not a number."); - return; + return 1; } try { if (mUm.removeUser(userId)) { System.out.println("Success: removed user"); + return 0; } else { System.err.println("Error: couldn't remove user id " + userId); + return 1; } } catch (RemoteException e) { System.err.println(e.toString()); System.err.println(PM_NOT_RUNNING_ERR); + return 1; } } - public void runListUsers() { + public int runListUsers() { try { IActivityManager am = ActivityManagerNative.getDefault(); List users = mUm.getUsers(false); if (users == null) { System.err.println("Error: couldn't get users"); + return 1; } else { System.out.println("Users:"); for (int i = 0; i < users.size(); i++) { String running = am.isUserRunning(users.get(i).id, false) ? " running" : ""; System.out.println("\t" + users.get(i).toString() + running); } + return 0; } } catch (RemoteException e) { System.err.println(e.toString()); System.err.println(PM_NOT_RUNNING_ERR); + return 1; } } - public void runGetMaxUsers() { + public int runGetMaxUsers() { System.out.println("Maximum supported users: " + UserManager.getMaxSupportedUsers()); + return 0; } - public void runForceDexOpt() { + public int runForceDexOpt() { final String packageName = nextArg(); try { mPm.forceDexOpt(packageName); + return 0; } catch (RemoteException e) { throw e.rethrowAsRuntimeException(); } } - private void runUninstall() throws RemoteException { + private int runUninstall() throws RemoteException { int flags = 0; int userId = UserHandle.USER_ALL; @@ -1280,11 +1292,11 @@ public final class Pm { } else { showUsage(); System.err.println("Error: Invalid user: " + param); - return; + return 1; } } else { System.err.println("Error: Unknown option: " + opt); - return; + return 1; } } @@ -1292,7 +1304,7 @@ public final class Pm { if (pkg == null) { System.err.println("Error: no package specified"); showUsage(); - return; + return 1; } if (userId == UserHandle.USER_ALL) { @@ -1305,11 +1317,11 @@ public final class Pm { } catch (RemoteException e) { System.err.println(e.toString()); System.err.println(PM_NOT_RUNNING_ERR); - return; + return 1; } if (info == null) { System.err.println("Failure - not installed for " + userId); - return; + return 1; } final boolean isSystem = (info.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0; @@ -1329,10 +1341,12 @@ public final class Pm { PackageInstaller.STATUS_FAILURE); if (status == PackageInstaller.STATUS_SUCCESS) { System.out.println("Success"); + return 0; } else { Log.e(TAG, "Failure details: " + result.getExtras()); - System.out.println("Failure [" + System.err.println("Failure [" + result.getStringExtra(PackageInstaller.EXTRA_STATUS_MESSAGE) + "]"); + return 1; } } @@ -1350,7 +1364,7 @@ public final class Pm { } } - private void runClear() { + private int runClear() { int userId = 0; String option = nextOption(); if (option != null && option.equals("--user")) { @@ -1358,7 +1372,7 @@ public final class Pm { if (optionData == null || !isNumber(optionData)) { System.err.println("Error: no USER_ID specified"); showUsage(); - return; + return 1; } else { userId = Integer.parseInt(optionData); } @@ -1368,7 +1382,7 @@ public final class Pm { if (pkg == null) { System.err.println("Error: no package specified"); showUsage(); - return; + return 1; } ClearDataObserver obs = new ClearDataObserver(); @@ -1384,13 +1398,16 @@ public final class Pm { } if (obs.result) { - System.err.println("Success"); + System.out.println("Success"); + return 0; } else { System.err.println("Failed"); + return 1; } } catch (RemoteException e) { System.err.println(e.toString()); System.err.println(PM_NOT_RUNNING_ERR); + return 1; } } @@ -1419,7 +1436,7 @@ public final class Pm { return true; } - private void runSetEnabledSetting(int state) { + private int runSetEnabledSetting(int state) { int userId = 0; String option = nextOption(); if (option != null && option.equals("--user")) { @@ -1427,7 +1444,7 @@ public final class Pm { if (optionData == null || !isNumber(optionData)) { System.err.println("Error: no USER_ID specified"); showUsage(); - return; + return 1; } else { userId = Integer.parseInt(optionData); } @@ -1437,34 +1454,38 @@ public final class Pm { if (pkg == null) { System.err.println("Error: no package or component specified"); showUsage(); - return; + return 1; } ComponentName cn = ComponentName.unflattenFromString(pkg); if (cn == null) { try { mPm.setApplicationEnabledSetting(pkg, state, 0, userId, "shell:" + android.os.Process.myUid()); - System.err.println("Package " + pkg + " new state: " + System.out.println("Package " + pkg + " new state: " + enabledSettingToString( mPm.getApplicationEnabledSetting(pkg, userId))); + return 0; } catch (RemoteException e) { System.err.println(e.toString()); System.err.println(PM_NOT_RUNNING_ERR); + return 1; } } else { try { mPm.setComponentEnabledSetting(cn, state, 0, userId); - System.err.println("Component " + cn.toShortString() + " new state: " + System.out.println("Component " + cn.toShortString() + " new state: " + enabledSettingToString( mPm.getComponentEnabledSetting(cn, userId))); + return 0; } catch (RemoteException e) { System.err.println(e.toString()); System.err.println(PM_NOT_RUNNING_ERR); + return 1; } } } - private void runSetHiddenSetting(boolean state) { + private int runSetHiddenSetting(boolean state) { int userId = 0; String option = nextOption(); if (option != null && option.equals("--user")) { @@ -1472,7 +1493,7 @@ public final class Pm { if (optionData == null || !isNumber(optionData)) { System.err.println("Error: no USER_ID specified"); showUsage(); - return; + return 1; } else { userId = Integer.parseInt(optionData); } @@ -1482,30 +1503,32 @@ public final class Pm { if (pkg == null) { System.err.println("Error: no package or component specified"); showUsage(); - return; + return 1; } try { mPm.setApplicationHiddenSettingAsUser(pkg, state, userId); - System.err.println("Package " + pkg + " new hidden state: " + System.out.println("Package " + pkg + " new hidden state: " + mPm.getApplicationHiddenSettingAsUser(pkg, userId)); + return 0; } catch (RemoteException e) { System.err.println(e.toString()); System.err.println(PM_NOT_RUNNING_ERR); + return 1; } } - private void runGrantRevokePermission(boolean grant) { + private int runGrantRevokePermission(boolean grant) { String pkg = nextArg(); if (pkg == null) { System.err.println("Error: no package specified"); showUsage(); - return; + return 1; } String perm = nextArg(); if (perm == null) { System.err.println("Error: no permission specified"); showUsage(); - return; + return 1; } try { if (grant) { @@ -1513,41 +1536,49 @@ public final class Pm { } else { mPm.revokePermission(pkg, perm); } + return 0; } catch (RemoteException e) { System.err.println(e.toString()); System.err.println(PM_NOT_RUNNING_ERR); + return 1; } catch (IllegalArgumentException e) { System.err.println("Bad argument: " + e.toString()); showUsage(); + return 1; } catch (SecurityException e) { System.err.println("Operation not allowed: " + e.toString()); + return 1; } } - private void runSetPermissionEnforced() { + private int runSetPermissionEnforced() { final String permission = nextArg(); if (permission == null) { System.err.println("Error: no permission specified"); showUsage(); - return; + return 1; } final String enforcedRaw = nextArg(); if (enforcedRaw == null) { System.err.println("Error: no enforcement specified"); showUsage(); - return; + return 1; } final boolean enforced = Boolean.parseBoolean(enforcedRaw); try { mPm.setPermissionEnforced(permission, enforced); + return 0; } catch (RemoteException e) { System.err.println(e.toString()); System.err.println(PM_NOT_RUNNING_ERR); + return 1; } catch (IllegalArgumentException e) { System.err.println("Bad argument: " + e.toString()); showUsage(); + return 1; } catch (SecurityException e) { System.err.println("Operation not allowed: " + e.toString()); + return 1; } } @@ -1566,12 +1597,12 @@ public final class Pm { } - private void runTrimCaches() { + private int runTrimCaches() { String size = nextArg(); if (size == null) { System.err.println("Error: no size specified"); showUsage(); - return; + return 1; } int len = size.length(); long multiplier = 1; @@ -1586,7 +1617,7 @@ public final class Pm { } else { System.err.println("Invalid suffix: " + c); showUsage(); - return; + return 1; } size = size.substring(0, len-1); } @@ -1596,7 +1627,7 @@ public final class Pm { } catch (NumberFormatException e) { System.err.println("Error: expected number at: " + size); showUsage(); - return; + return 1; } ClearDataObserver obs = new ClearDataObserver(); try { @@ -1609,14 +1640,18 @@ public final class Pm { } } } + return 0; } catch (RemoteException e) { System.err.println(e.toString()); System.err.println(PM_NOT_RUNNING_ERR); + return 1; } catch (IllegalArgumentException e) { System.err.println("Bad argument: " + e.toString()); showUsage(); + return 1; } catch (SecurityException e) { System.err.println("Operation not allowed: " + e.toString()); + return 1; } } @@ -1624,7 +1659,7 @@ public final class Pm { * Displays the package file for a package. * @param pckg */ - private void displayPackageFilePath(String pckg) { + private int displayPackageFilePath(String pckg) { try { PackageInfo info = mPm.getPackageInfo(pckg, 0, 0); if (info != null && info.applicationInfo != null) { @@ -1636,11 +1671,13 @@ public final class Pm { System.out.println(splitSourceDir); } } + return 0; } } catch (RemoteException e) { System.err.println(e.toString()); System.err.println(PM_NOT_RUNNING_ERR); } + return 1; } private Resources getResources(PackageItemInfo pii) { @@ -1755,7 +1792,7 @@ public final class Pm { return arg; } - private static void showUsage() { + private static int showUsage() { System.err.println("usage: pm list packages [-f] [-d] [-e] [-s] [-3] [-i] [-u] [--user USER_ID] [FILTER]"); System.err.println(" pm list permission-groups"); System.err.println(" pm list permissions [-g] [-f] [-d] [-u] [GROUP]"); @@ -1876,5 +1913,6 @@ public final class Pm { System.err.println("pm remove-user: remove the user with the given USER_IDENTIFIER,"); System.err.println(" deleting all data associated with that user"); System.err.println(""); + return 1; } } diff --git a/cmds/uiautomator/Android.mk b/cmds/uiautomator/Android.mk new file mode 100644 index 0000000000000000000000000000000000000000..53913051e3a968aac621ef88b4d7121fbbd211cf --- /dev/null +++ b/cmds/uiautomator/Android.mk @@ -0,0 +1,25 @@ +# +# Copyright (C) 2012 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# don't build uiautomator in unbundled env +ifndef TARGET_BUILD_APPS +include $(call all-subdir-makefiles) +else +ifneq ($(filter uiautomator,$(TARGET_BUILD_APPS)),) +# used by the platform apps build. +include $(call all-subdir-makefiles) +endif +endif diff --git a/cmds/uiautomator/MODULE_LICENSE_APACHE2 b/cmds/uiautomator/MODULE_LICENSE_APACHE2 new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/cmds/uiautomator/api/16.txt b/cmds/uiautomator/api/16.txt new file mode 100644 index 0000000000000000000000000000000000000000..f3b0eb767672ae6382ed92edbb38d2943190c733 --- /dev/null +++ b/cmds/uiautomator/api/16.txt @@ -0,0 +1,174 @@ +package com.android.uiautomator.core { + + public class UiCollection extends com.android.uiautomator.core.UiObject { + ctor public UiCollection(com.android.uiautomator.core.UiSelector); + method public com.android.uiautomator.core.UiObject getChildByDescription(com.android.uiautomator.core.UiSelector, java.lang.String) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public com.android.uiautomator.core.UiObject getChildByInstance(com.android.uiautomator.core.UiSelector, int) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public com.android.uiautomator.core.UiObject getChildByText(com.android.uiautomator.core.UiSelector, java.lang.String) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public int getChildCount(com.android.uiautomator.core.UiSelector); + } + + public class UiDevice { + method public void clearLastTraversedText(); + method public boolean click(int, int); + method public void dumpWindowHierarchy(java.lang.String); + method public void freezeRotation() throws android.os.RemoteException; + method public java.lang.String getCurrentActivityName(); + method public java.lang.String getCurrentPackageName(); + method public int getDisplayHeight(); + method public int getDisplayWidth(); + method public static com.android.uiautomator.core.UiDevice getInstance(); + method public java.lang.String getLastTraversedText(); + method public boolean hasAnyWatcherTriggered(); + method public boolean hasWatcherTriggered(java.lang.String); + method public boolean isScreenOn() throws android.os.RemoteException; + method public boolean pressBack(); + method public boolean pressDPadCenter(); + method public boolean pressDPadDown(); + method public boolean pressDPadLeft(); + method public boolean pressDPadRight(); + method public boolean pressDPadUp(); + method public boolean pressDelete(); + method public boolean pressEnter(); + method public boolean pressHome(); + method public boolean pressKeyCode(int); + method public boolean pressKeyCode(int, int); + method public boolean pressMenu(); + method public boolean pressRecentApps() throws android.os.RemoteException; + method public boolean pressSearch(); + method public void registerWatcher(java.lang.String, com.android.uiautomator.core.UiWatcher); + method public void removeWatcher(java.lang.String); + method public void resetWatcherTriggers(); + method public void runWatchers(); + method public void sleep() throws android.os.RemoteException; + method public boolean swipe(int, int, int, int, int); + method public boolean swipe(android.graphics.Point[], int); + method public void unfreezeRotation() throws android.os.RemoteException; + method public void waitForIdle(); + method public void waitForIdle(long); + method public boolean waitForWindowUpdate(java.lang.String, long); + method public void wakeUp() throws android.os.RemoteException; + } + + public class UiObject { + ctor public UiObject(com.android.uiautomator.core.UiSelector); + method public void clearTextField() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean click() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean clickAndWaitForNewWindow() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean clickAndWaitForNewWindow(long) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean clickBottomRight() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean clickTopLeft() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean exists(); + method protected android.view.accessibility.AccessibilityNodeInfo findAccessibilityNodeInfo(long); + method public android.graphics.Rect getBounds() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public com.android.uiautomator.core.UiObject getChild(com.android.uiautomator.core.UiSelector) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public int getChildCount() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public java.lang.String getContentDescription() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public com.android.uiautomator.core.UiObject getFromParent(com.android.uiautomator.core.UiSelector) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public java.lang.String getPackageName() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public final com.android.uiautomator.core.UiSelector getSelector(); + method public java.lang.String getText() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean isCheckable() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean isChecked() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean isClickable() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean isEnabled() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean isFocusable() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean isFocused() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean isLongClickable() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean isScrollable() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean isSelected() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean longClick() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean longClickBottomRight() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean longClickTopLeft() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean setText(java.lang.String) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean swipeDown(int) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean swipeLeft(int) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean swipeRight(int) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean swipeUp(int) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean waitForExists(long); + method public boolean waitUntilGone(long); + field protected static final int SWIPE_MARGIN_LIMIT = 5; // 0x5 + field protected static final long WAIT_FOR_SELECTOR_POLL = 1000L; // 0x3e8L + field protected static final long WAIT_FOR_SELECTOR_TIMEOUT = 10000L; // 0x2710L + field protected static final long WAIT_FOR_WINDOW_TMEOUT = 5500L; // 0x157cL + } + + public class UiObjectNotFoundException extends java.lang.Exception { + ctor public UiObjectNotFoundException(java.lang.String); + ctor public UiObjectNotFoundException(java.lang.String, java.lang.Throwable); + ctor public UiObjectNotFoundException(java.lang.Throwable); + } + + public class UiScrollable extends com.android.uiautomator.core.UiCollection { + ctor public UiScrollable(com.android.uiautomator.core.UiSelector); + method protected boolean exists(com.android.uiautomator.core.UiSelector); + method public boolean flingBackward(); + method public boolean flingForward(); + method public boolean flingToBeginning(int); + method public boolean flingToEnd(int); + method public com.android.uiautomator.core.UiObject getChildByDescription(com.android.uiautomator.core.UiSelector, java.lang.String, boolean) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public com.android.uiautomator.core.UiObject getChildByText(com.android.uiautomator.core.UiSelector, java.lang.String, boolean) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public int getMaxSearchSwipes(); + method public double getSwipeDeadZonePercentage(); + method public boolean scrollBackward(); + method public boolean scrollBackward(int); + method public boolean scrollDescriptionIntoView(java.lang.String); + method public boolean scrollForward(); + method public boolean scrollForward(int); + method public boolean scrollIntoView(com.android.uiautomator.core.UiSelector); + method public boolean scrollTextIntoView(java.lang.String); + method public boolean scrollToBeginning(int, int); + method public boolean scrollToBeginning(int); + method public boolean scrollToEnd(int, int); + method public boolean scrollToEnd(int); + method public void setAsHorizontalList(); + method public void setAsVerticalList(); + method public void setMaxSearchSwipes(int); + method public void setSwipeDeadZonePercentage(double); + } + + public class UiSelector { + ctor public UiSelector(); + method public com.android.uiautomator.core.UiSelector checked(boolean); + method public com.android.uiautomator.core.UiSelector childSelector(com.android.uiautomator.core.UiSelector); + method public com.android.uiautomator.core.UiSelector className(java.lang.String); + method public com.android.uiautomator.core.UiSelector clickable(boolean); + method public com.android.uiautomator.core.UiSelector description(java.lang.String); + method public com.android.uiautomator.core.UiSelector descriptionContains(java.lang.String); + method public com.android.uiautomator.core.UiSelector descriptionStartsWith(java.lang.String); + method public com.android.uiautomator.core.UiSelector enabled(boolean); + method public com.android.uiautomator.core.UiSelector focusable(boolean); + method public com.android.uiautomator.core.UiSelector focused(boolean); + method public com.android.uiautomator.core.UiSelector fromParent(com.android.uiautomator.core.UiSelector); + method public com.android.uiautomator.core.UiSelector index(int); + method public com.android.uiautomator.core.UiSelector instance(int); + method public com.android.uiautomator.core.UiSelector packageName(java.lang.String); + method public com.android.uiautomator.core.UiSelector scrollable(boolean); + method public com.android.uiautomator.core.UiSelector selected(boolean); + method public com.android.uiautomator.core.UiSelector text(java.lang.String); + method public com.android.uiautomator.core.UiSelector textContains(java.lang.String); + method public com.android.uiautomator.core.UiSelector textStartsWith(java.lang.String); + } + + public abstract interface UiWatcher { + method public abstract boolean checkForCondition(); + } + +} + +package com.android.uiautomator.testrunner { + + public abstract interface IAutomationSupport { + method public abstract void sendStatus(int, android.os.Bundle); + } + + public class UiAutomatorTestCase extends junit.framework.TestCase { + ctor public UiAutomatorTestCase(); + method public com.android.uiautomator.testrunner.IAutomationSupport getAutomationSupport(); + method public android.os.Bundle getParams(); + method public com.android.uiautomator.core.UiDevice getUiDevice(); + method public void sleep(long); + } + +} + diff --git a/cmds/uiautomator/api/17.txt b/cmds/uiautomator/api/17.txt new file mode 100644 index 0000000000000000000000000000000000000000..a1d80c4a0322c4de749b9f57c81c7ce37a596c61 --- /dev/null +++ b/cmds/uiautomator/api/17.txt @@ -0,0 +1,192 @@ +package com.android.uiautomator.core { + + public class UiCollection extends com.android.uiautomator.core.UiObject { + ctor public UiCollection(com.android.uiautomator.core.UiSelector); + method public com.android.uiautomator.core.UiObject getChildByDescription(com.android.uiautomator.core.UiSelector, java.lang.String) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public com.android.uiautomator.core.UiObject getChildByInstance(com.android.uiautomator.core.UiSelector, int) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public com.android.uiautomator.core.UiObject getChildByText(com.android.uiautomator.core.UiSelector, java.lang.String) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public int getChildCount(com.android.uiautomator.core.UiSelector); + } + + public class UiDevice { + method public void clearLastTraversedText(); + method public boolean click(int, int); + method public void dumpWindowHierarchy(java.lang.String); + method public void freezeRotation() throws android.os.RemoteException; + method public deprecated java.lang.String getCurrentActivityName(); + method public java.lang.String getCurrentPackageName(); + method public int getDisplayHeight(); + method public int getDisplayRotation(); + method public int getDisplayWidth(); + method public static com.android.uiautomator.core.UiDevice getInstance(); + method public java.lang.String getLastTraversedText(); + method public java.lang.String getProductName(); + method public boolean hasAnyWatcherTriggered(); + method public boolean hasWatcherTriggered(java.lang.String); + method public boolean isNaturalOrientation(); + method public boolean isScreenOn() throws android.os.RemoteException; + method public boolean pressBack(); + method public boolean pressDPadCenter(); + method public boolean pressDPadDown(); + method public boolean pressDPadLeft(); + method public boolean pressDPadRight(); + method public boolean pressDPadUp(); + method public boolean pressDelete(); + method public boolean pressEnter(); + method public boolean pressHome(); + method public boolean pressKeyCode(int); + method public boolean pressKeyCode(int, int); + method public boolean pressMenu(); + method public boolean pressRecentApps() throws android.os.RemoteException; + method public boolean pressSearch(); + method public void registerWatcher(java.lang.String, com.android.uiautomator.core.UiWatcher); + method public void removeWatcher(java.lang.String); + method public void resetWatcherTriggers(); + method public void runWatchers(); + method public void setOrientationLeft() throws android.os.RemoteException; + method public void setOrientationNatural() throws android.os.RemoteException; + method public void setOrientationRight() throws android.os.RemoteException; + method public void sleep() throws android.os.RemoteException; + method public boolean swipe(int, int, int, int, int); + method public boolean swipe(android.graphics.Point[], int); + method public boolean takeScreenshot(java.io.File); + method public boolean takeScreenshot(java.io.File, float, int); + method public void unfreezeRotation() throws android.os.RemoteException; + method public void waitForIdle(); + method public void waitForIdle(long); + method public boolean waitForWindowUpdate(java.lang.String, long); + method public void wakeUp() throws android.os.RemoteException; + } + + public class UiObject { + ctor public UiObject(com.android.uiautomator.core.UiSelector); + method public void clearTextField() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean click() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean clickAndWaitForNewWindow() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean clickAndWaitForNewWindow(long) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean clickBottomRight() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean clickTopLeft() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean exists(); + method protected android.view.accessibility.AccessibilityNodeInfo findAccessibilityNodeInfo(long); + method public android.graphics.Rect getBounds() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public com.android.uiautomator.core.UiObject getChild(com.android.uiautomator.core.UiSelector) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public int getChildCount() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public java.lang.String getContentDescription() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public com.android.uiautomator.core.UiObject getFromParent(com.android.uiautomator.core.UiSelector) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public java.lang.String getPackageName() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public final com.android.uiautomator.core.UiSelector getSelector(); + method public java.lang.String getText() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public android.graphics.Rect getVisibleBounds() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean isCheckable() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean isChecked() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean isClickable() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean isEnabled() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean isFocusable() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean isFocused() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean isLongClickable() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean isScrollable() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean isSelected() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean longClick() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean longClickBottomRight() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean longClickTopLeft() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean setText(java.lang.String) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean swipeDown(int) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean swipeLeft(int) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean swipeRight(int) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean swipeUp(int) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean waitForExists(long); + method public boolean waitUntilGone(long); + field protected static final int SWIPE_MARGIN_LIMIT = 5; // 0x5 + field protected static final long WAIT_FOR_EVENT_TMEOUT = 3000L; // 0xbb8L + field protected static final long WAIT_FOR_SELECTOR_POLL = 1000L; // 0x3e8L + field protected static final long WAIT_FOR_SELECTOR_TIMEOUT = 10000L; // 0x2710L + field protected static final long WAIT_FOR_WINDOW_TMEOUT = 5500L; // 0x157cL + } + + public class UiObjectNotFoundException extends java.lang.Exception { + ctor public UiObjectNotFoundException(java.lang.String); + ctor public UiObjectNotFoundException(java.lang.String, java.lang.Throwable); + ctor public UiObjectNotFoundException(java.lang.Throwable); + } + + public class UiScrollable extends com.android.uiautomator.core.UiCollection { + ctor public UiScrollable(com.android.uiautomator.core.UiSelector); + method protected boolean exists(com.android.uiautomator.core.UiSelector); + method public boolean flingBackward() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean flingForward() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean flingToBeginning(int) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean flingToEnd(int) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public com.android.uiautomator.core.UiObject getChildByDescription(com.android.uiautomator.core.UiSelector, java.lang.String, boolean) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public com.android.uiautomator.core.UiObject getChildByText(com.android.uiautomator.core.UiSelector, java.lang.String, boolean) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public int getMaxSearchSwipes(); + method public double getSwipeDeadZonePercentage(); + method public boolean scrollBackward() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean scrollBackward(int) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean scrollDescriptionIntoView(java.lang.String) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean scrollForward() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean scrollForward(int) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean scrollIntoView(com.android.uiautomator.core.UiObject) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean scrollIntoView(com.android.uiautomator.core.UiSelector) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean scrollTextIntoView(java.lang.String) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean scrollToBeginning(int, int) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean scrollToBeginning(int) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean scrollToEnd(int, int) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean scrollToEnd(int) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public com.android.uiautomator.core.UiScrollable setAsHorizontalList(); + method public com.android.uiautomator.core.UiScrollable setAsVerticalList(); + method public com.android.uiautomator.core.UiScrollable setMaxSearchSwipes(int); + method public com.android.uiautomator.core.UiScrollable setSwipeDeadZonePercentage(double); + } + + public class UiSelector { + ctor public UiSelector(); + method public com.android.uiautomator.core.UiSelector checked(boolean); + method public com.android.uiautomator.core.UiSelector childSelector(com.android.uiautomator.core.UiSelector); + method public com.android.uiautomator.core.UiSelector className(java.lang.String); + method public com.android.uiautomator.core.UiSelector className(java.lang.Class); + method public com.android.uiautomator.core.UiSelector classNameMatches(java.lang.String); + method public com.android.uiautomator.core.UiSelector clickable(boolean); + method protected com.android.uiautomator.core.UiSelector cloneSelector(); + method public com.android.uiautomator.core.UiSelector description(java.lang.String); + method public com.android.uiautomator.core.UiSelector descriptionContains(java.lang.String); + method public com.android.uiautomator.core.UiSelector descriptionMatches(java.lang.String); + method public com.android.uiautomator.core.UiSelector descriptionStartsWith(java.lang.String); + method public com.android.uiautomator.core.UiSelector enabled(boolean); + method public com.android.uiautomator.core.UiSelector focusable(boolean); + method public com.android.uiautomator.core.UiSelector focused(boolean); + method public com.android.uiautomator.core.UiSelector fromParent(com.android.uiautomator.core.UiSelector); + method public com.android.uiautomator.core.UiSelector index(int); + method public com.android.uiautomator.core.UiSelector instance(int); + method public com.android.uiautomator.core.UiSelector longClickable(boolean); + method public com.android.uiautomator.core.UiSelector packageName(java.lang.String); + method public com.android.uiautomator.core.UiSelector packageNameMatches(java.lang.String); + method public com.android.uiautomator.core.UiSelector scrollable(boolean); + method public com.android.uiautomator.core.UiSelector selected(boolean); + method public com.android.uiautomator.core.UiSelector text(java.lang.String); + method public com.android.uiautomator.core.UiSelector textContains(java.lang.String); + method public com.android.uiautomator.core.UiSelector textMatches(java.lang.String); + method public com.android.uiautomator.core.UiSelector textStartsWith(java.lang.String); + } + + public abstract interface UiWatcher { + method public abstract boolean checkForCondition(); + } + +} + +package com.android.uiautomator.testrunner { + + public abstract interface IAutomationSupport { + method public abstract void sendStatus(int, android.os.Bundle); + } + + public class UiAutomatorTestCase extends junit.framework.TestCase { + ctor public UiAutomatorTestCase(); + method public com.android.uiautomator.testrunner.IAutomationSupport getAutomationSupport(); + method public android.os.Bundle getParams(); + method public com.android.uiautomator.core.UiDevice getUiDevice(); + method public void sleep(long); + } + +} + diff --git a/cmds/uiautomator/api/current.txt b/cmds/uiautomator/api/current.txt new file mode 100644 index 0000000000000000000000000000000000000000..7eeecf5d09fa9632311304c98dc4ba1b7d41c849 --- /dev/null +++ b/cmds/uiautomator/api/current.txt @@ -0,0 +1,222 @@ +package com.android.uiautomator.core { + + public final class Configurator { + method public long getActionAcknowledgmentTimeout(); + method public static com.android.uiautomator.core.Configurator getInstance(); + method public long getKeyInjectionDelay(); + method public long getScrollAcknowledgmentTimeout(); + method public long getWaitForIdleTimeout(); + method public long getWaitForSelectorTimeout(); + method public com.android.uiautomator.core.Configurator setActionAcknowledgmentTimeout(long); + method public com.android.uiautomator.core.Configurator setKeyInjectionDelay(long); + method public com.android.uiautomator.core.Configurator setScrollAcknowledgmentTimeout(long); + method public com.android.uiautomator.core.Configurator setWaitForIdleTimeout(long); + method public com.android.uiautomator.core.Configurator setWaitForSelectorTimeout(long); + } + + public class UiCollection extends com.android.uiautomator.core.UiObject { + ctor public UiCollection(com.android.uiautomator.core.UiSelector); + method public com.android.uiautomator.core.UiObject getChildByDescription(com.android.uiautomator.core.UiSelector, java.lang.String) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public com.android.uiautomator.core.UiObject getChildByInstance(com.android.uiautomator.core.UiSelector, int) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public com.android.uiautomator.core.UiObject getChildByText(com.android.uiautomator.core.UiSelector, java.lang.String) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public int getChildCount(com.android.uiautomator.core.UiSelector); + } + + public class UiDevice { + method public void clearLastTraversedText(); + method public boolean click(int, int); + method public boolean drag(int, int, int, int, int); + method public void dumpWindowHierarchy(java.lang.String); + method public void freezeRotation() throws android.os.RemoteException; + method public deprecated java.lang.String getCurrentActivityName(); + method public java.lang.String getCurrentPackageName(); + method public int getDisplayHeight(); + method public int getDisplayRotation(); + method public android.graphics.Point getDisplaySizeDp(); + method public int getDisplayWidth(); + method public static com.android.uiautomator.core.UiDevice getInstance(); + method public java.lang.String getLastTraversedText(); + method public java.lang.String getProductName(); + method public boolean hasAnyWatcherTriggered(); + method public boolean hasWatcherTriggered(java.lang.String); + method public boolean isNaturalOrientation(); + method public boolean isScreenOn() throws android.os.RemoteException; + method public boolean openNotification(); + method public boolean openQuickSettings(); + method public boolean pressBack(); + method public boolean pressDPadCenter(); + method public boolean pressDPadDown(); + method public boolean pressDPadLeft(); + method public boolean pressDPadRight(); + method public boolean pressDPadUp(); + method public boolean pressDelete(); + method public boolean pressEnter(); + method public boolean pressHome(); + method public boolean pressKeyCode(int); + method public boolean pressKeyCode(int, int); + method public boolean pressMenu(); + method public boolean pressRecentApps() throws android.os.RemoteException; + method public boolean pressSearch(); + method public void registerWatcher(java.lang.String, com.android.uiautomator.core.UiWatcher); + method public void removeWatcher(java.lang.String); + method public void resetWatcherTriggers(); + method public void runWatchers(); + method public void setCompressedLayoutHeirarchy(boolean); + method public void setOrientationLeft() throws android.os.RemoteException; + method public void setOrientationNatural() throws android.os.RemoteException; + method public void setOrientationRight() throws android.os.RemoteException; + method public void sleep() throws android.os.RemoteException; + method public boolean swipe(int, int, int, int, int); + method public boolean swipe(android.graphics.Point[], int); + method public boolean takeScreenshot(java.io.File); + method public boolean takeScreenshot(java.io.File, float, int); + method public void unfreezeRotation() throws android.os.RemoteException; + method public void waitForIdle(); + method public void waitForIdle(long); + method public boolean waitForWindowUpdate(java.lang.String, long); + method public void wakeUp() throws android.os.RemoteException; + } + + public class UiObject { + ctor public UiObject(com.android.uiautomator.core.UiSelector); + method public void clearTextField() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean click() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean clickAndWaitForNewWindow() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean clickAndWaitForNewWindow(long) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean clickBottomRight() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean clickTopLeft() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean dragTo(com.android.uiautomator.core.UiObject, int) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean dragTo(int, int, int) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean exists(); + method protected android.view.accessibility.AccessibilityNodeInfo findAccessibilityNodeInfo(long); + method public android.graphics.Rect getBounds() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public com.android.uiautomator.core.UiObject getChild(com.android.uiautomator.core.UiSelector) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public int getChildCount() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public java.lang.String getClassName() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public java.lang.String getContentDescription() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public com.android.uiautomator.core.UiObject getFromParent(com.android.uiautomator.core.UiSelector) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public java.lang.String getPackageName() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public final com.android.uiautomator.core.UiSelector getSelector(); + method public java.lang.String getText() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public android.graphics.Rect getVisibleBounds() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean isCheckable() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean isChecked() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean isClickable() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean isEnabled() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean isFocusable() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean isFocused() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean isLongClickable() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean isScrollable() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean isSelected() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean longClick() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean longClickBottomRight() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean longClickTopLeft() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean performMultiPointerGesture(android.view.MotionEvent.PointerCoords...); + method public boolean performTwoPointerGesture(android.graphics.Point, android.graphics.Point, android.graphics.Point, android.graphics.Point, int); + method public boolean pinchIn(int, int) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean pinchOut(int, int) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean setText(java.lang.String) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean swipeDown(int) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean swipeLeft(int) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean swipeRight(int) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean swipeUp(int) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean waitForExists(long); + method public boolean waitUntilGone(long); + field protected static final int FINGER_TOUCH_HALF_WIDTH = 20; // 0x14 + field protected static final int SWIPE_MARGIN_LIMIT = 5; // 0x5 + field protected static final deprecated long WAIT_FOR_EVENT_TMEOUT = 3000L; // 0xbb8L + field protected static final long WAIT_FOR_SELECTOR_POLL = 1000L; // 0x3e8L + field protected static final deprecated long WAIT_FOR_SELECTOR_TIMEOUT = 10000L; // 0x2710L + field protected static final long WAIT_FOR_WINDOW_TMEOUT = 5500L; // 0x157cL + } + + public class UiObjectNotFoundException extends java.lang.Exception { + ctor public UiObjectNotFoundException(java.lang.String); + ctor public UiObjectNotFoundException(java.lang.String, java.lang.Throwable); + ctor public UiObjectNotFoundException(java.lang.Throwable); + } + + public class UiScrollable extends com.android.uiautomator.core.UiCollection { + ctor public UiScrollable(com.android.uiautomator.core.UiSelector); + method protected boolean exists(com.android.uiautomator.core.UiSelector); + method public boolean flingBackward() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean flingForward() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean flingToBeginning(int) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean flingToEnd(int) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public com.android.uiautomator.core.UiObject getChildByDescription(com.android.uiautomator.core.UiSelector, java.lang.String, boolean) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public com.android.uiautomator.core.UiObject getChildByText(com.android.uiautomator.core.UiSelector, java.lang.String, boolean) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public int getMaxSearchSwipes(); + method public double getSwipeDeadZonePercentage(); + method public boolean scrollBackward() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean scrollBackward(int) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean scrollDescriptionIntoView(java.lang.String) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean scrollForward() throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean scrollForward(int) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean scrollIntoView(com.android.uiautomator.core.UiObject) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean scrollIntoView(com.android.uiautomator.core.UiSelector) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean scrollTextIntoView(java.lang.String) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean scrollToBeginning(int, int) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean scrollToBeginning(int) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean scrollToEnd(int, int) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public boolean scrollToEnd(int) throws com.android.uiautomator.core.UiObjectNotFoundException; + method public com.android.uiautomator.core.UiScrollable setAsHorizontalList(); + method public com.android.uiautomator.core.UiScrollable setAsVerticalList(); + method public com.android.uiautomator.core.UiScrollable setMaxSearchSwipes(int); + method public com.android.uiautomator.core.UiScrollable setSwipeDeadZonePercentage(double); + } + + public class UiSelector { + ctor public UiSelector(); + method public com.android.uiautomator.core.UiSelector checkable(boolean); + method public com.android.uiautomator.core.UiSelector checked(boolean); + method public com.android.uiautomator.core.UiSelector childSelector(com.android.uiautomator.core.UiSelector); + method public com.android.uiautomator.core.UiSelector className(java.lang.String); + method public com.android.uiautomator.core.UiSelector className(java.lang.Class); + method public com.android.uiautomator.core.UiSelector classNameMatches(java.lang.String); + method public com.android.uiautomator.core.UiSelector clickable(boolean); + method protected com.android.uiautomator.core.UiSelector cloneSelector(); + method public com.android.uiautomator.core.UiSelector description(java.lang.String); + method public com.android.uiautomator.core.UiSelector descriptionContains(java.lang.String); + method public com.android.uiautomator.core.UiSelector descriptionMatches(java.lang.String); + method public com.android.uiautomator.core.UiSelector descriptionStartsWith(java.lang.String); + method public com.android.uiautomator.core.UiSelector enabled(boolean); + method public com.android.uiautomator.core.UiSelector focusable(boolean); + method public com.android.uiautomator.core.UiSelector focused(boolean); + method public com.android.uiautomator.core.UiSelector fromParent(com.android.uiautomator.core.UiSelector); + method public com.android.uiautomator.core.UiSelector index(int); + method public com.android.uiautomator.core.UiSelector instance(int); + method public com.android.uiautomator.core.UiSelector longClickable(boolean); + method public com.android.uiautomator.core.UiSelector packageName(java.lang.String); + method public com.android.uiautomator.core.UiSelector packageNameMatches(java.lang.String); + method public com.android.uiautomator.core.UiSelector resourceId(java.lang.String); + method public com.android.uiautomator.core.UiSelector resourceIdMatches(java.lang.String); + method public com.android.uiautomator.core.UiSelector scrollable(boolean); + method public com.android.uiautomator.core.UiSelector selected(boolean); + method public com.android.uiautomator.core.UiSelector text(java.lang.String); + method public com.android.uiautomator.core.UiSelector textContains(java.lang.String); + method public com.android.uiautomator.core.UiSelector textMatches(java.lang.String); + method public com.android.uiautomator.core.UiSelector textStartsWith(java.lang.String); + } + + public abstract interface UiWatcher { + method public abstract boolean checkForCondition(); + } + +} + +package com.android.uiautomator.testrunner { + + public abstract interface IAutomationSupport { + method public abstract void sendStatus(int, android.os.Bundle); + } + + public class UiAutomatorTestCase extends junit.framework.TestCase { + ctor public UiAutomatorTestCase(); + method public com.android.uiautomator.testrunner.IAutomationSupport getAutomationSupport(); + method public android.os.Bundle getParams(); + method public com.android.uiautomator.core.UiDevice getUiDevice(); + method public void sleep(long); + } + +} + diff --git a/cmds/uiautomator/api/removed.txt b/cmds/uiautomator/api/removed.txt new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/cmds/uiautomator/cmds/Android.mk b/cmds/uiautomator/cmds/Android.mk new file mode 100644 index 0000000000000000000000000000000000000000..c141484d81d53d0700e550c4b8968d2add1a51dd --- /dev/null +++ b/cmds/uiautomator/cmds/Android.mk @@ -0,0 +1,17 @@ +# +# Copyright (C) 2012 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +include $(call all-subdir-makefiles) diff --git a/cmds/uiautomator/cmds/uiautomator/Android.mk b/cmds/uiautomator/cmds/uiautomator/Android.mk new file mode 100644 index 0000000000000000000000000000000000000000..5c91b525b6ea2d1c92e724df399f2d3230bd0c0b --- /dev/null +++ b/cmds/uiautomator/cmds/uiautomator/Android.mk @@ -0,0 +1,33 @@ +# +# Copyright (C) 2012 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +LOCAL_PATH:= $(call my-dir) + +include $(CLEAR_VARS) +LOCAL_MODULE_TAGS := optional +LOCAL_SRC_FILES := $(call all-java-files-under, src) +LOCAL_STATIC_JAVA_LIBRARIES := uiautomator.core +LOCAL_MODULE := uiautomator + +include $(BUILD_JAVA_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := uiautomator +LOCAL_SRC_FILES := uiautomator +LOCAL_MODULE_CLASS := EXECUTABLES +LOCAL_MODULE_TAGS := optional + +include $(BUILD_PREBUILT) diff --git a/cmds/uiautomator/cmds/uiautomator/src/com/android/commands/uiautomator/DumpCommand.java b/cmds/uiautomator/cmds/uiautomator/src/com/android/commands/uiautomator/DumpCommand.java new file mode 100644 index 0000000000000000000000000000000000000000..c35f7fc3fcc8acb1250a53c9d61fdc7aaae624d9 --- /dev/null +++ b/cmds/uiautomator/cmds/uiautomator/src/com/android/commands/uiautomator/DumpCommand.java @@ -0,0 +1,109 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.commands.uiautomator; + +import android.app.UiAutomation; +import android.graphics.Point; +import android.hardware.display.DisplayManagerGlobal; +import android.os.Environment; +import android.view.Display; +import android.view.accessibility.AccessibilityNodeInfo; + +import com.android.commands.uiautomator.Launcher.Command; +import com.android.uiautomator.core.AccessibilityNodeInfoDumper; +import com.android.uiautomator.core.UiAutomationShellWrapper; + +import java.io.File; +import java.util.concurrent.TimeoutException; + +/** + * Implementation of the dump subcommand + * + * This creates an XML dump of current UI hierarchy + */ +public class DumpCommand extends Command { + + private static final File DEFAULT_DUMP_FILE = new File( + Environment.getLegacyExternalStorageDirectory(), "window_dump.xml"); + + public DumpCommand() { + super("dump"); + } + + @Override + public String shortHelp() { + return "creates an XML dump of current UI hierarchy"; + } + + @Override + public String detailedOptions() { + return " dump [--verbose][file]\n" + + " [--compressed]: dumps compressed layout information.\n" + + " [file]: the location where the dumped XML should be stored, default is\n " + + DEFAULT_DUMP_FILE.getAbsolutePath() + "\n"; + } + + @Override + public void run(String[] args) { + File dumpFile = DEFAULT_DUMP_FILE; + boolean verboseMode = true; + + for (String arg : args) { + if (arg.equals("--compressed")) + verboseMode = false; + else if (!arg.startsWith("-")) { + dumpFile = new File(arg); + } + } + + UiAutomationShellWrapper automationWrapper = new UiAutomationShellWrapper(); + automationWrapper.connect(); + if (verboseMode) { + // default + automationWrapper.setCompressedLayoutHierarchy(false); + } else { + automationWrapper.setCompressedLayoutHierarchy(true); + } + + // It appears that the bridge needs time to be ready. Making calls to the + // bridge immediately after connecting seems to cause exceptions. So let's also + // do a wait for idle in case the app is busy. + try { + UiAutomation uiAutomation = automationWrapper.getUiAutomation(); + uiAutomation.waitForIdle(1000, 1000 * 10); + AccessibilityNodeInfo info = uiAutomation.getRootInActiveWindow(); + if (info == null) { + System.err.println("ERROR: null root node returned by UiTestAutomationBridge."); + return; + } + + Display display = + DisplayManagerGlobal.getInstance().getRealDisplay(Display.DEFAULT_DISPLAY); + int rotation = display.getRotation(); + Point size = new Point(); + display.getSize(size); + AccessibilityNodeInfoDumper.dumpWindowToFile(info, dumpFile, rotation, size.x, size.y); + } catch (TimeoutException re) { + System.err.println("ERROR: could not get idle state."); + return; + } finally { + automationWrapper.disconnect(); + } + System.out.println( + String.format("UI hierchary dumped to: %s", dumpFile.getAbsolutePath())); + } +} diff --git a/cmds/uiautomator/cmds/uiautomator/src/com/android/commands/uiautomator/EventsCommand.java b/cmds/uiautomator/cmds/uiautomator/src/com/android/commands/uiautomator/EventsCommand.java new file mode 100644 index 0000000000000000000000000000000000000000..ce55f189d3e8a98ac3c20dabad90fc26b7e8aa04 --- /dev/null +++ b/cmds/uiautomator/cmds/uiautomator/src/com/android/commands/uiautomator/EventsCommand.java @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.commands.uiautomator; + +import android.app.UiAutomation.OnAccessibilityEventListener; +import android.view.accessibility.AccessibilityEvent; + +import com.android.commands.uiautomator.Launcher.Command; +import com.android.uiautomator.core.UiAutomationShellWrapper; + +import java.text.SimpleDateFormat; +import java.util.Date; + +/** + * Implementation of the events subcommand + * + * Prints out accessibility events until process is stopped. + */ +public class EventsCommand extends Command { + + private Object mQuitLock = new Object(); + + public EventsCommand() { + super("events"); + } + + @Override + public String shortHelp() { + return "prints out accessibility events until terminated"; + } + + @Override + public String detailedOptions() { + return null; + } + + @Override + public void run(String[] args) { + UiAutomationShellWrapper automationWrapper = new UiAutomationShellWrapper(); + automationWrapper.connect(); + automationWrapper.getUiAutomation().setOnAccessibilityEventListener( + new OnAccessibilityEventListener() { + @Override + public void onAccessibilityEvent(AccessibilityEvent event) { + SimpleDateFormat formatter = new SimpleDateFormat("MM-dd HH:mm:ss.SSS"); + System.out.println(String.format("%s %s", + formatter.format(new Date()), event.toString())); + } + }); + // there's really no way to stop, essentially we just block indefinitely here and wait + // for user to press Ctrl+C + synchronized (mQuitLock) { + try { + mQuitLock.wait(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + automationWrapper.disconnect(); + } +} diff --git a/cmds/uiautomator/cmds/uiautomator/src/com/android/commands/uiautomator/Launcher.java b/cmds/uiautomator/cmds/uiautomator/src/com/android/commands/uiautomator/Launcher.java new file mode 100644 index 0000000000000000000000000000000000000000..bc1d94884fc2de197cbb4620ebdffabd3ff60b5a --- /dev/null +++ b/cmds/uiautomator/cmds/uiautomator/src/com/android/commands/uiautomator/Launcher.java @@ -0,0 +1,135 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.commands.uiautomator; + +import android.os.Process; + +import java.util.Arrays; + +/** + * Entry point into the uiautomator command line + * + * This class maintains the list of sub commands, and redirect the control into it based on the + * command line arguments. It also prints out help arguments for each sub commands. + * + * To add a new sub command, implement {@link Command} and add an instance into COMMANDS array + */ +public class Launcher { + + /** + * A simple abstraction class for supporting generic sub commands + */ + public static abstract class Command { + private String mName; + + public Command(String name) { + mName = name; + } + + /** + * Returns the name of the sub command + * @return + */ + public String name() { + return mName; + } + + /** + * Returns a one-liner of the function of this command + * @return + */ + public abstract String shortHelp(); + + /** + * Returns a detailed explanation of the command usage + * + * Usage may have multiple lines, indentation of 4 spaces recommended. + * @return + */ + public abstract String detailedOptions(); + + /** + * Starts the command with the provided arguments + * @param args + */ + public abstract void run(String args[]); + } + + public static void main(String[] args) { + // show a meaningful process name in `ps` + Process.setArgV0("uiautomator"); + if (args.length >= 1) { + Command command = findCommand(args[0]); + if (command != null) { + String[] args2 = {}; + if (args.length > 1) { + // consume the first arg + args2 = Arrays.copyOfRange(args, 1, args.length); + } + command.run(args2); + return; + } + } + HELP_COMMAND.run(args); + } + + private static Command findCommand(String name) { + for (Command command : COMMANDS) { + if (command.name().equals(name)) { + return command; + } + } + return null; + } + + private static Command HELP_COMMAND = new Command("help") { + @Override + public void run(String[] args) { + System.err.println("Usage: uiautomator [options]\n"); + System.err.println("Available subcommands:\n"); + for (Command command : COMMANDS) { + String shortHelp = command.shortHelp(); + String detailedOptions = command.detailedOptions(); + if (shortHelp == null) { + shortHelp = ""; + } + if (detailedOptions == null) { + detailedOptions = ""; + } + System.err.println(String.format("%s: %s", command.name(), shortHelp)); + System.err.println(detailedOptions); + } + } + + @Override + public String detailedOptions() { + return null; + } + + @Override + public String shortHelp() { + return "displays help message"; + } + }; + + private static Command[] COMMANDS = new Command[] { + HELP_COMMAND, + new RunTestCommand(), + new DumpCommand(), + new EventsCommand(), + }; +} \ No newline at end of file diff --git a/cmds/uiautomator/cmds/uiautomator/src/com/android/commands/uiautomator/RunTestCommand.java b/cmds/uiautomator/cmds/uiautomator/src/com/android/commands/uiautomator/RunTestCommand.java new file mode 100644 index 0000000000000000000000000000000000000000..65611ab85d14af9db7d47de392e4567ad4a5b439 --- /dev/null +++ b/cmds/uiautomator/cmds/uiautomator/src/com/android/commands/uiautomator/RunTestCommand.java @@ -0,0 +1,258 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.commands.uiautomator; + +import android.os.Bundle; +import android.util.Log; + +import com.android.commands.uiautomator.Launcher.Command; +import com.android.uiautomator.testrunner.UiAutomatorTestRunner; + +import dalvik.system.DexFile; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.List; + +/** + * Implementation of the runtest sub command + * + */ +public class RunTestCommand extends Command { + private static final String LOGTAG = RunTestCommand.class.getSimpleName(); + + private static final String OUTPUT_SIMPLE = "simple"; + private static final String OUTPUT_FORMAT_KEY = "outputFormat"; + private static final String CLASS_PARAM = "class"; + private static final String JARS_PARAM = "jars"; + private static final String DEBUG_PARAM = "debug"; + private static final String RUNNER_PARAM = "runner"; + private static final String CLASS_SEPARATOR = ","; + private static final String JARS_SEPARATOR = ":"; + private static final int ARG_OK = 0; + private static final int ARG_FAIL_INCOMPLETE_E = -1; + private static final int ARG_FAIL_INCOMPLETE_C = -2; + private static final int ARG_FAIL_NO_CLASS = -3; + private static final int ARG_FAIL_RUNNER = -4; + private static final int ARG_FAIL_UNSUPPORTED = -99; + + private final Bundle mParams = new Bundle(); + private final List mTestClasses = new ArrayList(); + private boolean mDebug; + private boolean mMonkey = false; + private String mRunnerClassName; + private UiAutomatorTestRunner mRunner; + + public RunTestCommand() { + super("runtest"); + } + + @Override + public void run(String[] args) { + int ret = parseArgs(args); + switch (ret) { + case ARG_FAIL_INCOMPLETE_C: + System.err.println("Incomplete '-c' parameter."); + System.exit(ARG_FAIL_INCOMPLETE_C); + break; + case ARG_FAIL_INCOMPLETE_E: + System.err.println("Incomplete '-e' parameter."); + System.exit(ARG_FAIL_INCOMPLETE_E); + break; + case ARG_FAIL_UNSUPPORTED: + System.err.println("Unsupported standalone parameter."); + System.exit(ARG_FAIL_UNSUPPORTED); + break; + default: + break; + } + if (mTestClasses.isEmpty()) { + addTestClassesFromJars(); + if (mTestClasses.isEmpty()) { + System.err.println("No test classes found."); + System.exit(ARG_FAIL_NO_CLASS); + } + } + getRunner().run(mTestClasses, mParams, mDebug, mMonkey); + } + + private int parseArgs(String[] args) { + // we are parsing for these parameters: + // -e + // key-value pairs + // special ones are: + // key is "class", parameter is passed onto JUnit as class name to run + // key is "debug", parameter will determine whether to wait for debugger + // to attach + // -c + // -s turns on the simple output format + // equivalent to -e class , i.e. passed onto JUnit + for (int i = 0; i < args.length; i++) { + if (args[i].equals("-e")) { + if (i + 2 < args.length) { + String key = args[++i]; + String value = args[++i]; + if (CLASS_PARAM.equals(key)) { + addTestClasses(value); + } else if (DEBUG_PARAM.equals(key)) { + mDebug = "true".equals(value) || "1".equals(value); + } else if (RUNNER_PARAM.equals(key)) { + mRunnerClassName = value; + } else { + mParams.putString(key, value); + } + } else { + return ARG_FAIL_INCOMPLETE_E; + } + } else if (args[i].equals("-c")) { + if (i + 1 < args.length) { + addTestClasses(args[++i]); + } else { + return ARG_FAIL_INCOMPLETE_C; + } + } else if (args[i].equals("--monkey")) { + mMonkey = true; + } else if (args[i].equals("-s")) { + mParams.putString(OUTPUT_FORMAT_KEY, OUTPUT_SIMPLE); + } else { + return ARG_FAIL_UNSUPPORTED; + } + } + return ARG_OK; + } + + protected UiAutomatorTestRunner getRunner() { + if (mRunner != null) { + return mRunner; + } + + if (mRunnerClassName == null) { + mRunner = new UiAutomatorTestRunner(); + return mRunner; + } + // use reflection to get the runner + Object o = null; + try { + Class clazz = Class.forName(mRunnerClassName); + o = clazz.newInstance(); + } catch (ClassNotFoundException cnfe) { + System.err.println("Cannot find runner: " + mRunnerClassName); + System.exit(ARG_FAIL_RUNNER); + } catch (InstantiationException ie) { + System.err.println("Cannot instantiate runner: " + mRunnerClassName); + System.exit(ARG_FAIL_RUNNER); + } catch (IllegalAccessException iae) { + System.err.println("Constructor of runner " + mRunnerClassName + " is not accessibile"); + System.exit(ARG_FAIL_RUNNER); + } + try { + UiAutomatorTestRunner runner = (UiAutomatorTestRunner)o; + mRunner = runner; + return runner; + } catch (ClassCastException cce) { + System.err.println("Specified runner is not subclass of " + + UiAutomatorTestRunner.class.getSimpleName()); + System.exit(ARG_FAIL_RUNNER); + } + // won't reach here + return null; + } + + /** + * Add test classes from a potentially comma separated list + * @param classes + */ + private void addTestClasses(String classes) { + String[] classArray = classes.split(CLASS_SEPARATOR); + for (String clazz : classArray) { + mTestClasses.add(clazz); + } + } + + /** + * Add test classes from jars passed on the command line. Use this if nothing was explicitly + * specified on the command line. + */ + private void addTestClassesFromJars() { + String jars = mParams.getString(JARS_PARAM); + if (jars == null) return; + + String[] jarFileNames = jars.split(JARS_SEPARATOR); + for (String fileName : jarFileNames) { + fileName = fileName.trim(); + if (fileName.isEmpty()) continue; + try { + DexFile dexFile = new DexFile(fileName); + for(Enumeration e = dexFile.entries(); e.hasMoreElements();) { + String className = e.nextElement(); + if (isTestClass(className)) { + mTestClasses.add(className); + } + } + dexFile.close(); + } catch (IOException e) { + Log.w(LOGTAG, String.format("Could not read %s: %s", fileName, e.getMessage())); + } + } + } + + /** + * Tries to determine if a given class is a test class. A test class has to inherit from + * UiAutomator test case and it must be a top-level class. + * @param className + * @return + */ + private boolean isTestClass(String className) { + try { + Class clazz = this.getClass().getClassLoader().loadClass(className); + if (clazz.getEnclosingClass() != null) return false; + return getRunner().getTestCaseFilter().accept(clazz); + } catch (ClassNotFoundException e) { + return false; + } + } + + @Override + public String detailedOptions() { + return " runtest [options]\n" + + " : < -c | -e class >\n" + + " : a list of jar files containing test classes and dependencies. If\n" + + " the path is relative, it's assumed to be under /data/local/tmp. Use\n" + + " absolute path if the file is elsewhere. Multiple files can be\n" + + " specified, separated by space.\n" + + " : a list of test class names to run, separated by comma. To\n" + + " a single method, use TestClass#testMethod format. The -e or -c option\n" + + " may be repeated. This option is not required and if not provided then\n" + + " all the tests in provided jars will be run automatically.\n" + + " options:\n" + + " --nohup: trap SIG_HUP, so test won't terminate even if parent process\n" + + " is terminated, e.g. USB is disconnected.\n" + + " -e debug [true|false]: wait for debugger to connect before starting.\n" + + " -e runner [CLASS]: use specified test runner class instead. If\n" + + " unspecified, framework default runner will be used.\n" + + " -e : other name-value pairs to be passed to test classes.\n" + + " May be repeated.\n" + + " -e outputFormat simple | -s: enabled less verbose JUnit style output.\n"; + } + + @Override + public String shortHelp() { + return "executes UI automation tests"; + } + +} diff --git a/cmds/uiautomator/cmds/uiautomator/uiautomator b/cmds/uiautomator/cmds/uiautomator/uiautomator new file mode 100755 index 0000000000000000000000000000000000000000..fe2c73579882ba8252bf035bc2d731c2eb599944 --- /dev/null +++ b/cmds/uiautomator/cmds/uiautomator/uiautomator @@ -0,0 +1,123 @@ +# +# Copyright (C) 2012 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# Script to start "uiautomator" on the device +# +# The script does a couple of things: +# * Use an alternative dalvik cache when running as non-root. Jar file needs +# to be dexopt'd to run in Dalvik. For plain jar files, this is done at first +# use. shell user does not have write permission to default system Dalvik +# cache so we redirect to an alternative cache +# * special processing for subcommand 'runtest': +# * '--nohup' allows process continue to run even if parent process that +# started it has already terminated. We parse for this parameter and set +# signal trap. This is useful for testing with USB disconnected +# * all jar files that the test classes resides in, or dependent on are +# provided on command line and exported to CLASSPATH environment variable +# before starting the Java code. This offloads the task of class loading +# and resolving of cross jar class dependency to Dalvik +# * all other subcommand or options are directly passed into Java code for +# further parsing + +export run_base=/data/local/tmp +export base=/system + +# if not running as root, trick dalvik into using an alternative dex cache +if [ ${USER_ID} -ne 0 ]; then + tmp_cache=${run_base}/dalvik-cache + + if [ ! -d ${tmp_cache} ]; then + mkdir -p ${tmp_cache} + fi + + export ANDROID_DATA=${run_base} +fi + +# take first parameter as the command +cmd=${1} + +if [ -z "${1}" ]; then + cmd="help" +fi + +# strip the command parameter +if [ -n "${1}" ]; then + shift +fi + +CLASSPATH=/system/framework/android.test.runner.jar:${base}/framework/uiautomator.jar + +# eventually args will be what get passed down to Java code +args= +# we also pass the list of jar files, so we can extract class names for tests +# if they are not explicitly specified +jars= + +# special case pre-processing for 'runtest' command +if [ "${cmd}" == "runtest" ]; then + # first parse the jar paths + while [ true ]; do + if [ -z "${1}" ] && [ -z "${jars}" ]; then + echo "Error: more parameters expected for runtest; please see usage for details" + cmd="help" + break + fi + if [ -z "${1}" ]; then + break + fi + jar=${1} + if [ "${1:0:1}" = "-" ]; then + # we are done with jars, starting with parameters now + break + fi + # if relative path, append the default path prefix + if [ "${1:0:1}" != "/" ]; then + jar=${run_base}/${1} + fi + # about to add the file to class path, check if it's valid + if [ ! -f ${jar} ]; then + echo "Error: ${jar} does not exist" + # force to print help message + cmd="help" + break + fi + jars=${jars}:${jar} + # done processing current arg, moving on + shift + done + # look for --nohup: if found, consume it and trap SIG_HUP, otherwise just + # append the arg to args + while [ -n "${1}" ]; do + if [ "${1}" = "--nohup" ]; then + trap "" HUP + shift + else + args="${args} ${1}" + shift + fi + done +else + # if cmd is not 'runtest', just take the rest of the args + args=${@} +fi + +args="${cmd} ${args}" +if [ -n "${jars}" ]; then + args="${args} -e jars ${jars}" +fi + +CLASSPATH=${CLASSPATH}:${jars} +export CLASSPATH +exec app_process ${base}/bin com.android.commands.uiautomator.Launcher ${args} diff --git a/cmds/uiautomator/instrumentation/Android.mk b/cmds/uiautomator/instrumentation/Android.mk new file mode 100644 index 0000000000000000000000000000000000000000..0c93b4c7b970a443da64d0c9b57690581a3a2a6d --- /dev/null +++ b/cmds/uiautomator/instrumentation/Android.mk @@ -0,0 +1,29 @@ +# +# Copyright (C) 2012 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +LOCAL_PATH:= $(call my-dir) + +include $(CLEAR_VARS) + +LOCAL_MODULE_TAGS := tests +LOCAL_SRC_FILES := $(call all-java-files-under, testrunner-src) \ + $(call all-java-files-under, ../library/core-src) +LOCAL_JAVA_LIBRARIES := android.test.runner +LOCAL_MODULE := uiautomator-instrumentation +# TODO: change this to 18 when it's available +LOCAL_SDK_VERSION := current + +include $(BUILD_STATIC_JAVA_LIBRARY) diff --git a/cmds/uiautomator/instrumentation/testrunner-src/com/android/uiautomator/core/InstrumentationUiAutomatorBridge.java b/cmds/uiautomator/instrumentation/testrunner-src/com/android/uiautomator/core/InstrumentationUiAutomatorBridge.java new file mode 100644 index 0000000000000000000000000000000000000000..1d4fb93d5a5ab4e3b600e8a62d0dbaa76939080b --- /dev/null +++ b/cmds/uiautomator/instrumentation/testrunner-src/com/android/uiautomator/core/InstrumentationUiAutomatorBridge.java @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2013 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.uiautomator.core; + +import android.app.Service; +import android.app.UiAutomation; +import android.content.Context; +import android.os.PowerManager; +import android.view.Display; +import android.view.ViewConfiguration; +import android.view.WindowManager; + +/** + * @hide + */ +public class InstrumentationUiAutomatorBridge extends UiAutomatorBridge { + + private final Context mContext; + + public InstrumentationUiAutomatorBridge(Context context, UiAutomation uiAutomation) { + super(uiAutomation); + mContext = context; + } + + public Display getDefaultDisplay() { + WindowManager windowManager = (WindowManager) + mContext.getSystemService(Service.WINDOW_SERVICE); + return windowManager.getDefaultDisplay(); + } + + @Override + public int getRotation() { + return getDefaultDisplay().getRotation(); + } + + @Override + public boolean isScreenOn() { + PowerManager pm = (PowerManager) + mContext.getSystemService(Service.POWER_SERVICE); + return pm.isScreenOn(); + } + + public long getSystemLongPressTime() { + return ViewConfiguration.getLongPressTimeout(); + } +} diff --git a/cmds/uiautomator/instrumentation/testrunner-src/com/android/uiautomator/testrunner/IAutomationSupport.java b/cmds/uiautomator/instrumentation/testrunner-src/com/android/uiautomator/testrunner/IAutomationSupport.java new file mode 100644 index 0000000000000000000000000000000000000000..f0c60d2840c2c3510ca0805fda8932b5054f4dc0 --- /dev/null +++ b/cmds/uiautomator/instrumentation/testrunner-src/com/android/uiautomator/testrunner/IAutomationSupport.java @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.uiautomator.testrunner; + +import android.os.Bundle; + +/** + * Provides auxiliary support for running test cases + * + * @since API Level 16 + */ +public interface IAutomationSupport { + + /** + * Allows the running test cases to send out interim status + * + * @param resultCode + * @param status status report, consisting of key value pairs + * @since API Level 16 + */ + public void sendStatus(int resultCode, Bundle status); + +} diff --git a/cmds/uiautomator/instrumentation/testrunner-src/com/android/uiautomator/testrunner/InstrumentationAutomationSupport.java b/cmds/uiautomator/instrumentation/testrunner-src/com/android/uiautomator/testrunner/InstrumentationAutomationSupport.java new file mode 100644 index 0000000000000000000000000000000000000000..a70586e0b3864733b43595985aad961b93da6b87 --- /dev/null +++ b/cmds/uiautomator/instrumentation/testrunner-src/com/android/uiautomator/testrunner/InstrumentationAutomationSupport.java @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2013 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.uiautomator.testrunner; + +import android.app.Instrumentation; +import android.os.Bundle; + +/** + * A wrapper around {@link Instrumentation} to provide sendStatus function + * + * Provided for backwards compatibility purpose. New code should use + * {@link Instrumentation#sendStatus(int, Bundle)} instead. + * + */ +class InstrumentationAutomationSupport implements IAutomationSupport { + + private Instrumentation mInstrumentation; + + InstrumentationAutomationSupport(Instrumentation instrumentation) { + mInstrumentation = instrumentation; + } + + @Override + public void sendStatus(int resultCode, Bundle status) { + mInstrumentation.sendStatus(resultCode, status); + } +} diff --git a/cmds/uiautomator/instrumentation/testrunner-src/com/android/uiautomator/testrunner/UiAutomatorInstrumentationTestRunner.java b/cmds/uiautomator/instrumentation/testrunner-src/com/android/uiautomator/testrunner/UiAutomatorInstrumentationTestRunner.java new file mode 100644 index 0000000000000000000000000000000000000000..ae763f28cad5633c0684ef763026f1b9209010f1 --- /dev/null +++ b/cmds/uiautomator/instrumentation/testrunner-src/com/android/uiautomator/testrunner/UiAutomatorInstrumentationTestRunner.java @@ -0,0 +1,78 @@ +/* + * Copyright (C) 2013 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.uiautomator.testrunner; + +import android.test.AndroidTestRunner; +import android.test.InstrumentationTestRunner; + +import com.android.uiautomator.core.Tracer; + +import junit.framework.AssertionFailedError; +import junit.framework.Test; +import junit.framework.TestListener; + +/** + * Test runner for {@link UiAutomatorTestCase}s. Such tests are executed + * on the device and have access to an applications context. + */ +public class UiAutomatorInstrumentationTestRunner extends InstrumentationTestRunner { + + @Override + public void onStart() { + // process runner arguments before test starts + String traceType = getArguments().getString("traceOutputMode"); + if(traceType != null) { + Tracer.Mode mode = Tracer.Mode.valueOf(Tracer.Mode.class, traceType); + if (mode == Tracer.Mode.FILE || mode == Tracer.Mode.ALL) { + String filename = getArguments().getString("traceLogFilename"); + if (filename == null) { + throw new RuntimeException("Name of log file not specified. " + + "Please specify it using traceLogFilename parameter"); + } + Tracer.getInstance().setOutputFilename(filename); + } + Tracer.getInstance().setOutputMode(mode); + } + super.onStart(); + } + + @Override + protected AndroidTestRunner getAndroidTestRunner() { + AndroidTestRunner testRunner = super.getAndroidTestRunner(); + testRunner.addTestListener(new TestListener() { + @Override + public void startTest(Test test) { + if (test instanceof UiAutomatorTestCase) { + ((UiAutomatorTestCase)test).initialize(getArguments()); + } + } + + @Override + public void endTest(Test test) { + } + + @Override + public void addFailure(Test test, AssertionFailedError e) { + } + + @Override + public void addError(Test test, Throwable t) { + } + }); + return testRunner; + } +} diff --git a/cmds/uiautomator/instrumentation/testrunner-src/com/android/uiautomator/testrunner/UiAutomatorTestCase.java b/cmds/uiautomator/instrumentation/testrunner-src/com/android/uiautomator/testrunner/UiAutomatorTestCase.java new file mode 100644 index 0000000000000000000000000000000000000000..b5f21c9291543867e2f4bf0e137772e5467fd220 --- /dev/null +++ b/cmds/uiautomator/instrumentation/testrunner-src/com/android/uiautomator/testrunner/UiAutomatorTestCase.java @@ -0,0 +1,101 @@ +/* + * Copyright (C) 2013 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.uiautomator.testrunner; + +import android.app.Instrumentation; +import android.os.Bundle; +import android.os.SystemClock; +import android.test.InstrumentationTestCase; + +import com.android.uiautomator.core.InstrumentationUiAutomatorBridge; +import com.android.uiautomator.core.UiDevice; + +/** + * UI Automator test case that is executed on the device. + */ +public class UiAutomatorTestCase extends InstrumentationTestCase { + + private Bundle mParams; + private IAutomationSupport mAutomationSupport; + + /** + * Get current instance of {@link UiDevice}. Works similar to calling the static + * {@link UiDevice#getInstance()} from anywhere in the test classes. + * @since API Level 16 + */ + public UiDevice getUiDevice() { + return UiDevice.getInstance(); + } + + /** + * Get command line parameters. On the command line when passing -e key value + * pairs, the {@link Bundle} will have the key value pairs conveniently available to the + * tests. + * @since API Level 16 + */ + public Bundle getParams() { + return mParams; + } + + void setAutomationSupport(IAutomationSupport automationSupport) { + mAutomationSupport = automationSupport; + } + + /** + * Provides support for running tests to report interim status + * + * @return IAutomationSupport + * @since API Level 16 + * @deprecated Use {@link Instrumentation#sendStatus(int, Bundle)} instead + */ + public IAutomationSupport getAutomationSupport() { + if (mAutomationSupport == null) { + mAutomationSupport = new InstrumentationAutomationSupport(getInstrumentation()); + } + return mAutomationSupport; + } + + /** + * Initializes this test case. + * + * @param params Instrumentation arguments. + */ + void initialize(Bundle params) { + mParams = params; + + // check if this is a monkey test mode + String monkeyVal = mParams.getString("monkey"); + if (monkeyVal != null) { + // only if the monkey key is specified, we alter the state of monkey + // else we should leave things as they are. + getInstrumentation().getUiAutomation().setRunAsMonkey(Boolean.valueOf(monkeyVal)); + } + + UiDevice.getInstance().initialize(new InstrumentationUiAutomatorBridge( + getInstrumentation().getContext(), + getInstrumentation().getUiAutomation())); + } + + /** + * Calls {@link SystemClock#sleep(long)} to sleep + * @param ms is in milliseconds. + * @since API Level 16 + */ + public void sleep(long ms) { + SystemClock.sleep(ms); + } +} diff --git a/cmds/uiautomator/library/Android.mk b/cmds/uiautomator/library/Android.mk new file mode 100644 index 0000000000000000000000000000000000000000..7cc0884e2bac4af3b10f70294dd9a0963e6d485d --- /dev/null +++ b/cmds/uiautomator/library/Android.mk @@ -0,0 +1,132 @@ +# +# Copyright (C) 2012 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +LOCAL_PATH:= $(call my-dir) + +uiautomator.core_src_files := $(call all-java-files-under, core-src) \ + $(call all-java-files-under, testrunner-src) +uiautomator.core_java_libraries := android.test.runner core-junit + +uiautomator_internal_api_file := $(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/uiautomator_api.txt +uiautomator_internal_removed_api_file := \ + $(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/uiautomator_removed_api.txt + +############################################### +include $(CLEAR_VARS) +LOCAL_SRC_FILES := $(uiautomator.core_src_files) +LOCAL_MODULE := uiautomator.core +LOCAL_JAVA_LIBRARIES := android.test.runner +include $(BUILD_STATIC_JAVA_LIBRARY) + +############################################### +# Generate the stub source files +include $(CLEAR_VARS) +LOCAL_SRC_FILES := $(uiautomator.core_src_files) +LOCAL_JAVA_LIBRARIES := $(uiautomator.core_java_libraries) +LOCAL_MODULE_CLASS := JAVA_LIBRARIES +LOCAL_DROIDDOC_SOURCE_PATH := $(LOCAL_PATH)/core-src \ + $(LOCAL_PATH)/testrunner-src +LOCAL_DROIDDOC_HTML_DIR := + +LOCAL_DROIDDOC_OPTIONS:= \ + -stubs $(TARGET_OUT_COMMON_INTERMEDIATES)/JAVA_LIBRARIES/android_uiautomator_intermediates/src \ + -stubpackages com.android.uiautomator.core:com.android.uiautomator.testrunner \ + -api $(uiautomator_internal_api_file) \ + -removedApi $(uiautomator_internal_removed_api_file) + +LOCAL_DROIDDOC_CUSTOM_TEMPLATE_DIR := build/tools/droiddoc/templates-sdk +LOCAL_UNINSTALLABLE_MODULE := true + +LOCAL_MODULE := uiautomator-stubs + +include $(BUILD_DROIDDOC) +uiautomator_stubs_stamp := $(full_target) +$(uiautomator_internal_api_file) : $(full_target) + +############################################### +# Build the stub source files into a jar. +include $(CLEAR_VARS) +LOCAL_MODULE := android_uiautomator +LOCAL_JAVA_LIBRARIES := $(uiautomator.core_java_libraries) +LOCAL_SOURCE_FILES_ALL_GENERATED := true +include $(BUILD_STATIC_JAVA_LIBRARY) +# Make sure to run droiddoc first to generate the stub source files. +$(full_classes_compiled_jar) : $(uiautomator_stubs_stamp) +uiautomator_stubs_jar := $(full_classes_compiled_jar) + +############################################### +# API check +# Please refer to build/core/tasks/apicheck.mk. +uiautomator_api_dir := frameworks/base/cmds/uiautomator/api +last_released_sdk_version := $(lastword $(call numerically_sort, \ + $(filter-out current, \ + $(patsubst $(uiautomator_api_dir)/%.txt,%, $(wildcard $(uiautomator_api_dir)/*.txt)) \ + ))) + +checkapi_last_error_level_flags := \ + -hide 2 -hide 3 -hide 4 -hide 5 -hide 6 -hide 24 -hide 25 \ + -error 7 -error 8 -error 9 -error 10 -error 11 -error 12 -error 13 -error 14 -error 15 \ + -error 16 -error 17 -error 18 + +# Check that the API we're building hasn't broken the last-released SDK version. +$(eval $(call check-api, \ + uiautomator-checkapi-last, \ + $(uiautomator_api_dir)/$(last_released_sdk_version).txt, \ + $(uiautomator_internal_api_file), \ + $(uiautomator_api_dir)/removed.txt, \ + $(uiautomator_internal_removed_api_file), \ + $(checkapi_last_error_level_flags), \ + cat $(LOCAL_PATH)/apicheck_msg_last.txt, \ + $(uiautomator_stubs_jar), \ + $(uiautomator_stubs_stamp))) + +checkapi_current_error_level_flags := \ + -error 2 -error 3 -error 4 -error 5 -error 6 \ + -error 7 -error 8 -error 9 -error 10 -error 11 -error 12 -error 13 -error 14 -error 15 \ + -error 16 -error 17 -error 18 -error 19 -error 20 -error 21 -error 23 -error 24 \ + -error 25 + +# Check that the API we're building hasn't changed from the not-yet-released +# SDK version. +$(eval $(call check-api, \ + uiautomator-checkapi-current, \ + $(uiautomator_api_dir)/current.txt, \ + $(uiautomator_internal_api_file), \ + $(uiautomator_api_dir)/removed.txt, \ + $(uiautomator_internal_removed_api_file), \ + $(checkapi_current_error_level_flags), \ + cat $(LOCAL_PATH)/apicheck_msg_current.txt, \ + $(uiautomator_stubs_jar), \ + $(uiautomator_stubs_stamp))) + +.PHONY: update-uiautomator-api +update-uiautomator-api: PRIVATE_API_DIR := $(uiautomator_api_dir) +update-uiautomator-api: PRIVATE_REMOVED_API_FILE := $(uiautomator_internal_removed_api_file) +update-uiautomator-api: $(uiautomator_internal_api_file) | $(ACP) + @echo Copying uiautomator current.txt + $(hide) $(ACP) $< $(PRIVATE_API_DIR)/current.txt + @echo Copying uiautomator removed.txt + $(hide) $(ACP) $(PRIVATE_REMOVED_API_FILE) $(PRIVATE_API_DIR)/removed.txt +############################################### +# clean up temp vars +uiautomator.core_src_files := +uiautomator.core_java_libraries := +uiautomator_stubs_stamp := +uiautomator_internal_api_file := +uiautomator_stubs_jar := +uiautomator_api_dir := +checkapi_last_error_level_flags := +checkapi_current_error_level_flags := diff --git a/cmds/uiautomator/library/apicheck_msg_current.txt b/cmds/uiautomator/library/apicheck_msg_current.txt new file mode 100644 index 0000000000000000000000000000000000000000..989248d78fec1d58c9fb6630455b2b9605ebbb79 --- /dev/null +++ b/cmds/uiautomator/library/apicheck_msg_current.txt @@ -0,0 +1,17 @@ + +****************************** +You have tried to change the API from what has been previously approved. + +To make these errors go away, you have two choices: + 1) You can add "@hide" javadoc comments to the methods, etc. listed in the + errors above. + + 2) You can update current.txt by executing the following command: + make update-uiautomator-api + + To submit the revised current.txt to the main Android repository, + you will need approval. +****************************** + + + diff --git a/cmds/uiautomator/library/apicheck_msg_last.txt b/cmds/uiautomator/library/apicheck_msg_last.txt new file mode 100644 index 0000000000000000000000000000000000000000..2993157b165d79e11f1b3526bdf20e71339b3db2 --- /dev/null +++ b/cmds/uiautomator/library/apicheck_msg_last.txt @@ -0,0 +1,7 @@ + +****************************** +You have tried to change the API from what has been previously released in +an SDK. Please fix the errors listed above. +****************************** + + diff --git a/cmds/uiautomator/library/core-src/com/android/uiautomator/core/AccessibilityNodeInfoDumper.java b/cmds/uiautomator/library/core-src/com/android/uiautomator/core/AccessibilityNodeInfoDumper.java new file mode 100644 index 0000000000000000000000000000000000000000..63c51e84d74a27c2a12d4410dace3f8fd4cab193 --- /dev/null +++ b/cmds/uiautomator/library/core-src/com/android/uiautomator/core/AccessibilityNodeInfoDumper.java @@ -0,0 +1,250 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.uiautomator.core; + +import android.os.Environment; +import android.os.SystemClock; +import android.util.Log; +import android.util.Xml; +import android.view.accessibility.AccessibilityNodeInfo; + +import org.xmlpull.v1.XmlSerializer; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.StringWriter; + +/** + * + * @hide + */ +public class AccessibilityNodeInfoDumper { + + private static final String LOGTAG = AccessibilityNodeInfoDumper.class.getSimpleName(); + private static final String[] NAF_EXCLUDED_CLASSES = new String[] { + android.widget.GridView.class.getName(), android.widget.GridLayout.class.getName(), + android.widget.ListView.class.getName(), android.widget.TableLayout.class.getName() + }; + + /** + * Using {@link AccessibilityNodeInfo} this method will walk the layout hierarchy + * and generates an xml dump into the /data/local/window_dump.xml + * @param root The root accessibility node. + * @param rotation The rotaion of current display + * @param width The pixel width of current display + * @param height The pixel height of current display + */ + public static void dumpWindowToFile(AccessibilityNodeInfo root, int rotation, + int width, int height) { + File baseDir = new File(Environment.getDataDirectory(), "local"); + if (!baseDir.exists()) { + baseDir.mkdir(); + baseDir.setExecutable(true, false); + baseDir.setWritable(true, false); + baseDir.setReadable(true, false); + } + dumpWindowToFile(root, + new File(new File(Environment.getDataDirectory(), "local"), "window_dump.xml"), + rotation, width, height); + } + + /** + * Using {@link AccessibilityNodeInfo} this method will walk the layout hierarchy + * and generates an xml dump to the location specified by dumpFile + * @param root The root accessibility node. + * @param dumpFile The file to dump to. + * @param rotation The rotaion of current display + * @param width The pixel width of current display + * @param height The pixel height of current display + */ + public static void dumpWindowToFile(AccessibilityNodeInfo root, File dumpFile, int rotation, + int width, int height) { + if (root == null) { + return; + } + final long startTime = SystemClock.uptimeMillis(); + try { + FileWriter writer = new FileWriter(dumpFile); + XmlSerializer serializer = Xml.newSerializer(); + StringWriter stringWriter = new StringWriter(); + serializer.setOutput(stringWriter); + serializer.startDocument("UTF-8", true); + serializer.startTag("", "hierarchy"); + serializer.attribute("", "rotation", Integer.toString(rotation)); + dumpNodeRec(root, serializer, 0, width, height); + serializer.endTag("", "hierarchy"); + serializer.endDocument(); + writer.write(stringWriter.toString()); + writer.close(); + } catch (IOException e) { + Log.e(LOGTAG, "failed to dump window to file", e); + } + final long endTime = SystemClock.uptimeMillis(); + Log.w(LOGTAG, "Fetch time: " + (endTime - startTime) + "ms"); + } + + private static void dumpNodeRec(AccessibilityNodeInfo node, XmlSerializer serializer,int index, + int width, int height) throws IOException { + serializer.startTag("", "node"); + if (!nafExcludedClass(node) && !nafCheck(node)) + serializer.attribute("", "NAF", Boolean.toString(true)); + serializer.attribute("", "index", Integer.toString(index)); + serializer.attribute("", "text", safeCharSeqToString(node.getText())); + serializer.attribute("", "resource-id", safeCharSeqToString(node.getViewIdResourceName())); + serializer.attribute("", "class", safeCharSeqToString(node.getClassName())); + serializer.attribute("", "package", safeCharSeqToString(node.getPackageName())); + serializer.attribute("", "content-desc", safeCharSeqToString(node.getContentDescription())); + serializer.attribute("", "checkable", Boolean.toString(node.isCheckable())); + serializer.attribute("", "checked", Boolean.toString(node.isChecked())); + serializer.attribute("", "clickable", Boolean.toString(node.isClickable())); + serializer.attribute("", "enabled", Boolean.toString(node.isEnabled())); + serializer.attribute("", "focusable", Boolean.toString(node.isFocusable())); + serializer.attribute("", "focused", Boolean.toString(node.isFocused())); + serializer.attribute("", "scrollable", Boolean.toString(node.isScrollable())); + serializer.attribute("", "long-clickable", Boolean.toString(node.isLongClickable())); + serializer.attribute("", "password", Boolean.toString(node.isPassword())); + serializer.attribute("", "selected", Boolean.toString(node.isSelected())); + serializer.attribute("", "bounds", AccessibilityNodeInfoHelper.getVisibleBoundsInScreen( + node, width, height).toShortString()); + int count = node.getChildCount(); + for (int i = 0; i < count; i++) { + AccessibilityNodeInfo child = node.getChild(i); + if (child != null) { + if (child.isVisibleToUser()) { + dumpNodeRec(child, serializer, i, width, height); + child.recycle(); + } else { + Log.i(LOGTAG, String.format("Skipping invisible child: %s", child.toString())); + } + } else { + Log.i(LOGTAG, String.format("Null child %d/%d, parent: %s", + i, count, node.toString())); + } + } + serializer.endTag("", "node"); + } + + /** + * The list of classes to exclude my not be complete. We're attempting to + * only reduce noise from standard layout classes that may be falsely + * configured to accept clicks and are also enabled. + * + * @param node + * @return true if node is excluded. + */ + private static boolean nafExcludedClass(AccessibilityNodeInfo node) { + String className = safeCharSeqToString(node.getClassName()); + for(String excludedClassName : NAF_EXCLUDED_CLASSES) { + if(className.endsWith(excludedClassName)) + return true; + } + return false; + } + + /** + * We're looking for UI controls that are enabled, clickable but have no + * text nor content-description. Such controls configuration indicate an + * interactive control is present in the UI and is most likely not + * accessibility friendly. We refer to such controls here as NAF controls + * (Not Accessibility Friendly) + * + * @param node + * @return false if a node fails the check, true if all is OK + */ + private static boolean nafCheck(AccessibilityNodeInfo node) { + boolean isNaf = node.isClickable() && node.isEnabled() + && safeCharSeqToString(node.getContentDescription()).isEmpty() + && safeCharSeqToString(node.getText()).isEmpty(); + + if (!isNaf) + return true; + + // check children since sometimes the containing element is clickable + // and NAF but a child's text or description is available. Will assume + // such layout as fine. + return childNafCheck(node); + } + + /** + * This should be used when it's already determined that the node is NAF and + * a further check of its children is in order. A node maybe a container + * such as LinerLayout and may be set to be clickable but have no text or + * content description but it is counting on one of its children to fulfill + * the requirement for being accessibility friendly by having one or more of + * its children fill the text or content-description. Such a combination is + * considered by this dumper as acceptable for accessibility. + * + * @param node + * @return false if node fails the check. + */ + private static boolean childNafCheck(AccessibilityNodeInfo node) { + int childCount = node.getChildCount(); + for (int x = 0; x < childCount; x++) { + AccessibilityNodeInfo childNode = node.getChild(x); + + if (!safeCharSeqToString(childNode.getContentDescription()).isEmpty() + || !safeCharSeqToString(childNode.getText()).isEmpty()) + return true; + + if (childNafCheck(childNode)) + return true; + } + return false; + } + + private static String safeCharSeqToString(CharSequence cs) { + if (cs == null) + return ""; + else { + return stripInvalidXMLChars(cs); + } + } + + private static String stripInvalidXMLChars(CharSequence cs) { + StringBuffer ret = new StringBuffer(); + char ch; + /* http://www.w3.org/TR/xml11/#charsets + [#x1-#x8], [#xB-#xC], [#xE-#x1F], [#x7F-#x84], [#x86-#x9F], [#xFDD0-#xFDDF], + [#x1FFFE-#x1FFFF], [#x2FFFE-#x2FFFF], [#x3FFFE-#x3FFFF], + [#x4FFFE-#x4FFFF], [#x5FFFE-#x5FFFF], [#x6FFFE-#x6FFFF], + [#x7FFFE-#x7FFFF], [#x8FFFE-#x8FFFF], [#x9FFFE-#x9FFFF], + [#xAFFFE-#xAFFFF], [#xBFFFE-#xBFFFF], [#xCFFFE-#xCFFFF], + [#xDFFFE-#xDFFFF], [#xEFFFE-#xEFFFF], [#xFFFFE-#xFFFFF], + [#x10FFFE-#x10FFFF]. + */ + for (int i = 0; i < cs.length(); i++) { + ch = cs.charAt(i); + + if((ch >= 0x1 && ch <= 0x8) || (ch >= 0xB && ch <= 0xC) || (ch >= 0xE && ch <= 0x1F) || + (ch >= 0x7F && ch <= 0x84) || (ch >= 0x86 && ch <= 0x9f) || + (ch >= 0xFDD0 && ch <= 0xFDDF) || (ch >= 0x1FFFE && ch <= 0x1FFFF) || + (ch >= 0x2FFFE && ch <= 0x2FFFF) || (ch >= 0x3FFFE && ch <= 0x3FFFF) || + (ch >= 0x4FFFE && ch <= 0x4FFFF) || (ch >= 0x5FFFE && ch <= 0x5FFFF) || + (ch >= 0x6FFFE && ch <= 0x6FFFF) || (ch >= 0x7FFFE && ch <= 0x7FFFF) || + (ch >= 0x8FFFE && ch <= 0x8FFFF) || (ch >= 0x9FFFE && ch <= 0x9FFFF) || + (ch >= 0xAFFFE && ch <= 0xAFFFF) || (ch >= 0xBFFFE && ch <= 0xBFFFF) || + (ch >= 0xCFFFE && ch <= 0xCFFFF) || (ch >= 0xDFFFE && ch <= 0xDFFFF) || + (ch >= 0xEFFFE && ch <= 0xEFFFF) || (ch >= 0xFFFFE && ch <= 0xFFFFF) || + (ch >= 0x10FFFE && ch <= 0x10FFFF)) + ret.append("."); + else + ret.append(ch); + } + return ret.toString(); + } +} diff --git a/cmds/uiautomator/library/core-src/com/android/uiautomator/core/AccessibilityNodeInfoHelper.java b/cmds/uiautomator/library/core-src/com/android/uiautomator/core/AccessibilityNodeInfoHelper.java new file mode 100644 index 0000000000000000000000000000000000000000..54835e352b893db0d92a36a7638788236cdb8050 --- /dev/null +++ b/cmds/uiautomator/library/core-src/com/android/uiautomator/core/AccessibilityNodeInfoHelper.java @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.uiautomator.core; + +import android.graphics.Rect; +import android.view.accessibility.AccessibilityNodeInfo; + +/** + * This class contains static helper methods to work with + * {@link AccessibilityNodeInfo} + */ +class AccessibilityNodeInfoHelper { + + /** + * Returns the node's bounds clipped to the size of the display + * + * @param node + * @param width pixel width of the display + * @param height pixel height of the display + * @return null if node is null, else a Rect containing visible bounds + */ + static Rect getVisibleBoundsInScreen(AccessibilityNodeInfo node, int width, int height) { + if (node == null) { + return null; + } + // targeted node's bounds + Rect nodeRect = new Rect(); + node.getBoundsInScreen(nodeRect); + + Rect displayRect = new Rect(); + displayRect.top = 0; + displayRect.left = 0; + displayRect.right = width; + displayRect.bottom = height; + + nodeRect.intersect(displayRect); + return nodeRect; + } +} diff --git a/cmds/uiautomator/library/core-src/com/android/uiautomator/core/Configurator.java b/cmds/uiautomator/library/core-src/com/android/uiautomator/core/Configurator.java new file mode 100644 index 0000000000000000000000000000000000000000..249f4046c7b8690ebeae9d507f80fa265f74ab66 --- /dev/null +++ b/cmds/uiautomator/library/core-src/com/android/uiautomator/core/Configurator.java @@ -0,0 +1,224 @@ +/* + * Copyright (C) 2013 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.uiautomator.core; + +/** + * Allows you to set key parameters for running uiautomator tests. The new + * settings take effect immediately and can be changed any time during a test run. + * + * To modify parameters using Configurator, first obtain an instance by calling + * {@link #getInstance()}. As a best practice, make sure you always save + * the original value of any parameter that you are modifying. After running your + * tests with the modified parameters, make sure to also restore + * the original parameter values, otherwise this will impact other tests cases. + * @since API Level 18 + */ +public final class Configurator { + private long mWaitForIdleTimeout = 10 * 1000; + private long mWaitForSelector = 10 * 1000; + private long mWaitForActionAcknowledgment = 3 * 1000; + + // The events for a scroll typically complete even before touchUp occurs. + // This short timeout to make sure we get the very last in cases where the above isn't true. + private long mScrollEventWaitTimeout = 200; // ms + + // Default is inject as fast as we can + private long mKeyInjectionDelay = 0; // ms + + // reference to self + private static Configurator sConfigurator; + + private Configurator() { + /* hide constructor */ + } + + /** + * Retrieves a singleton instance of Configurator. + * + * @return Configurator instance + * @since API Level 18 + */ + public static Configurator getInstance() { + if (sConfigurator == null) { + sConfigurator = new Configurator(); + } + return sConfigurator; + } + + /** + * Sets the timeout for waiting for the user interface to go into an idle + * state before starting a uiautomator action. + * + * By default, all core uiautomator objects except {@link UiDevice} will perform + * this wait before starting to search for the widget specified by the + * object's {@link UiSelector}. Once the idle state is detected or the + * timeout elapses (whichever occurs first), the object will start to wait + * for the selector to find a match. + * See {@link #setWaitForSelectorTimeout(long)} + * + * @param timeout Timeout value in milliseconds + * @return self + * @since API Level 18 + */ + public Configurator setWaitForIdleTimeout(long timeout) { + mWaitForIdleTimeout = timeout; + return this; + } + + /** + * Gets the current timeout used for waiting for the user interface to go + * into an idle state. + * + * By default, all core uiautomator objects except {@link UiDevice} will perform + * this wait before starting to search for the widget specified by the + * object's {@link UiSelector}. Once the idle state is detected or the + * timeout elapses (whichever occurs first), the object will start to wait + * for the selector to find a match. + * See {@link #setWaitForSelectorTimeout(long)} + * + * @return Current timeout value in milliseconds + * @since API Level 18 + */ + public long getWaitForIdleTimeout() { + return mWaitForIdleTimeout; + } + + /** + * Sets the timeout for waiting for a widget to become visible in the user + * interface so that it can be matched by a selector. + * + * Because user interface content is dynamic, sometimes a widget may not + * be visible immediately and won't be detected by a selector. This timeout + * allows the uiautomator framework to wait for a match to be found, up until + * the timeout elapses. + * + * @param timeout Timeout value in milliseconds. + * @return self + * @since API Level 18 + */ + public Configurator setWaitForSelectorTimeout(long timeout) { + mWaitForSelector = timeout; + return this; + } + + /** + * Gets the current timeout for waiting for a widget to become visible in + * the user interface so that it can be matched by a selector. + * + * Because user interface content is dynamic, sometimes a widget may not + * be visible immediately and won't be detected by a selector. This timeout + * allows the uiautomator framework to wait for a match to be found, up until + * the timeout elapses. + * + * @return Current timeout value in milliseconds + * @since API Level 18 + */ + public long getWaitForSelectorTimeout() { + return mWaitForSelector; + } + + /** + * Sets the timeout for waiting for an acknowledgement of an + * uiautomtor scroll swipe action. + * + * The acknowledgment is an AccessibilityEvent, + * corresponding to the scroll action, that lets the framework determine if + * the scroll action was successful. Generally, this timeout should not be modified. + * See {@link UiScrollable} + * + * @param timeout Timeout value in milliseconds + * @return self + * @since API Level 18 + */ + public Configurator setScrollAcknowledgmentTimeout(long timeout) { + mScrollEventWaitTimeout = timeout; + return this; + } + + /** + * Gets the timeout for waiting for an acknowledgement of an + * uiautomtor scroll swipe action. + * + * The acknowledgment is an AccessibilityEvent, + * corresponding to the scroll action, that lets the framework determine if + * the scroll action was successful. Generally, this timeout should not be modified. + * See {@link UiScrollable} + * + * @return current timeout in milliseconds + * @since API Level 18 + */ + public long getScrollAcknowledgmentTimeout() { + return mScrollEventWaitTimeout; + } + + /** + * Sets the timeout for waiting for an acknowledgment of generic uiautomator + * actions, such as clicks, text setting, and menu presses. + * + * The acknowledgment is an AccessibilityEvent, + * corresponding to an action, that lets the framework determine if the + * action was successful. Generally, this timeout should not be modified. + * See {@link UiObject} + * + * @param timeout Timeout value in milliseconds + * @return self + * @since API Level 18 + */ + public Configurator setActionAcknowledgmentTimeout(long timeout) { + mWaitForActionAcknowledgment = timeout; + return this; + } + + /** + * Gets the current timeout for waiting for an acknowledgment of generic + * uiautomator actions, such as clicks, text setting, and menu presses. + * + * The acknowledgment is an AccessibilityEvent, + * corresponding to an action, that lets the framework determine if the + * action was successful. Generally, this timeout should not be modified. + * See {@link UiObject} + * + * @return current timeout in milliseconds + * @since API Level 18 + */ + public long getActionAcknowledgmentTimeout() { + return mWaitForActionAcknowledgment; + } + + /** + * Sets a delay between key presses when injecting text input. + * See {@link UiObject#setText(String)} + * + * @param delay Delay value in milliseconds + * @return self + * @since API Level 18 + */ + public Configurator setKeyInjectionDelay(long delay) { + mKeyInjectionDelay = delay; + return this; + } + + /** + * Gets the current delay between key presses when injecting text input. + * See {@link UiObject#setText(String)} + * + * @return current delay in milliseconds + * @since API Level 18 + */ + public long getKeyInjectionDelay() { + return mKeyInjectionDelay; + } +} diff --git a/cmds/uiautomator/library/core-src/com/android/uiautomator/core/InteractionController.java b/cmds/uiautomator/library/core-src/com/android/uiautomator/core/InteractionController.java new file mode 100644 index 0000000000000000000000000000000000000000..73e46f1775c2cecf66e27811cc4d4a152e592c20 --- /dev/null +++ b/cmds/uiautomator/library/core-src/com/android/uiautomator/core/InteractionController.java @@ -0,0 +1,795 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.uiautomator.core; + +import android.accessibilityservice.AccessibilityService; +import android.app.UiAutomation; +import android.app.UiAutomation.AccessibilityEventFilter; +import android.graphics.Point; +import android.os.RemoteException; +import android.os.SystemClock; +import android.util.Log; +import android.view.InputDevice; +import android.view.InputEvent; +import android.view.KeyCharacterMap; +import android.view.KeyEvent; +import android.view.MotionEvent; +import android.view.MotionEvent.PointerCoords; +import android.view.MotionEvent.PointerProperties; +import android.view.accessibility.AccessibilityEvent; + +import com.android.internal.util.Predicate; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.TimeoutException; + +/** + * The InteractionProvider is responsible for injecting user events such as touch events + * (includes swipes) and text key events into the system. To do so, all it needs to know about + * are coordinates of the touch events and text for the text input events. + * The InteractionController performs no synchronization. It will fire touch and text input events + * as fast as it receives them. All idle synchronization is performed prior to querying the + * hierarchy. See {@link QueryController} + */ +class InteractionController { + + private static final String LOG_TAG = InteractionController.class.getSimpleName(); + + private static final boolean DEBUG = Log.isLoggable(LOG_TAG, Log.DEBUG); + + private final KeyCharacterMap mKeyCharacterMap = + KeyCharacterMap.load(KeyCharacterMap.VIRTUAL_KEYBOARD); + + private final UiAutomatorBridge mUiAutomatorBridge; + + private static final long REGULAR_CLICK_LENGTH = 100; + + private long mDownTime; + + // Inserted after each motion event injection. + private static final int MOTION_EVENT_INJECTION_DELAY_MILLIS = 5; + + public InteractionController(UiAutomatorBridge bridge) { + mUiAutomatorBridge = bridge; + } + + /** + * Predicate for waiting for any of the events specified in the mask + */ + class WaitForAnyEventPredicate implements AccessibilityEventFilter { + int mMask; + WaitForAnyEventPredicate(int mask) { + mMask = mask; + } + @Override + public boolean accept(AccessibilityEvent t) { + // check current event in the list + if ((t.getEventType() & mMask) != 0) { + return true; + } + + // no match yet + return false; + } + } + + /** + * Predicate for waiting for all the events specified in the mask and populating + * a ctor passed list with matching events. User of this Predicate must recycle + * all populated events in the events list. + */ + class EventCollectingPredicate implements AccessibilityEventFilter { + int mMask; + List mEventsList; + + EventCollectingPredicate(int mask, List events) { + mMask = mask; + mEventsList = events; + } + + @Override + public boolean accept(AccessibilityEvent t) { + // check current event in the list + if ((t.getEventType() & mMask) != 0) { + // For the events you need, always store a copy when returning false from + // predicates since the original will automatically be recycled after the call. + mEventsList.add(AccessibilityEvent.obtain(t)); + } + + // get more + return false; + } + } + + /** + * Predicate for waiting for every event specified in the mask to be matched at least once + */ + class WaitForAllEventPredicate implements AccessibilityEventFilter { + int mMask; + WaitForAllEventPredicate(int mask) { + mMask = mask; + } + + @Override + public boolean accept(AccessibilityEvent t) { + // check current event in the list + if ((t.getEventType() & mMask) != 0) { + // remove from mask since this condition is satisfied + mMask &= ~t.getEventType(); + + // Since we're waiting for all events to be matched at least once + if (mMask != 0) + return false; + + // all matched + return true; + } + + // no match yet + return false; + } + } + + /** + * Helper used by methods to perform actions and wait for any accessibility events and return + * predicated on predefined filter. + * + * @param command + * @param filter + * @param timeout + * @return + */ + private AccessibilityEvent runAndWaitForEvents(Runnable command, + AccessibilityEventFilter filter, long timeout) { + + try { + return mUiAutomatorBridge.executeCommandAndWaitForAccessibilityEvent(command, filter, + timeout); + } catch (TimeoutException e) { + Log.w(LOG_TAG, "runAndwaitForEvent timedout waiting for events"); + return null; + } catch (Exception e) { + Log.e(LOG_TAG, "exception from executeCommandAndWaitForAccessibilityEvent", e); + return null; + } + } + + /** + * Send keys and blocks until the first specified accessibility event. + * + * Most key presses will cause some UI change to occur. If the device is busy, this will + * block until the device begins to process the key press at which point the call returns + * and normal wait for idle processing may begin. If no events are detected for the + * timeout period specified, the call will return anyway with false. + * + * @param keyCode + * @param metaState + * @param eventType + * @param timeout + * @return true if events is received, otherwise false. + */ + public boolean sendKeyAndWaitForEvent(final int keyCode, final int metaState, + final int eventType, long timeout) { + Runnable command = new Runnable() { + @Override + public void run() { + final long eventTime = SystemClock.uptimeMillis(); + KeyEvent downEvent = new KeyEvent(eventTime, eventTime, KeyEvent.ACTION_DOWN, + keyCode, 0, metaState, KeyCharacterMap.VIRTUAL_KEYBOARD, 0, 0, + InputDevice.SOURCE_KEYBOARD); + if (injectEventSync(downEvent)) { + KeyEvent upEvent = new KeyEvent(eventTime, eventTime, KeyEvent.ACTION_UP, + keyCode, 0, metaState, KeyCharacterMap.VIRTUAL_KEYBOARD, 0, 0, + InputDevice.SOURCE_KEYBOARD); + injectEventSync(upEvent); + } + } + }; + + return runAndWaitForEvents(command, new WaitForAnyEventPredicate(eventType), timeout) + != null; + } + + /** + * Clicks at coordinates without waiting for device idle. This may be used for operations + * that require stressing the target. + * @param x + * @param y + * @return true if the click executed successfully + */ + public boolean clickNoSync(int x, int y) { + Log.d(LOG_TAG, "clickNoSync (" + x + ", " + y + ")"); + + if (touchDown(x, y)) { + SystemClock.sleep(REGULAR_CLICK_LENGTH); + if (touchUp(x, y)) + return true; + } + return false; + } + + /** + * Click at coordinates and blocks until either accessibility event TYPE_WINDOW_CONTENT_CHANGED + * or TYPE_VIEW_SELECTED are received. + * + * @param x + * @param y + * @param timeout waiting for event + * @return true if events are received, else false if timeout. + */ + public boolean clickAndSync(final int x, final int y, long timeout) { + + String logString = String.format("clickAndSync(%d, %d)", x, y); + Log.d(LOG_TAG, logString); + + return runAndWaitForEvents(clickRunnable(x, y), new WaitForAnyEventPredicate( + AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED | + AccessibilityEvent.TYPE_VIEW_SELECTED), timeout) != null; + } + + /** + * Clicks at coordinates and waits for for a TYPE_WINDOW_STATE_CHANGED event followed + * by TYPE_WINDOW_CONTENT_CHANGED. If timeout occurs waiting for TYPE_WINDOW_STATE_CHANGED, + * no further waits will be performed and the function returns. + * @param x + * @param y + * @param timeout waiting for event + * @return true if both events occurred in the expected order + */ + public boolean clickAndWaitForNewWindow(final int x, final int y, long timeout) { + String logString = String.format("clickAndWaitForNewWindow(%d, %d)", x, y); + Log.d(LOG_TAG, logString); + + return runAndWaitForEvents(clickRunnable(x, y), new WaitForAllEventPredicate( + AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED | + AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED), timeout) != null; + } + + /** + * Returns a Runnable for use in {@link #runAndWaitForEvents(Runnable, Predicate, long) to + * perform a click. + * + * @param x coordinate + * @param y coordinate + * @return Runnable + */ + private Runnable clickRunnable(final int x, final int y) { + return new Runnable() { + @Override + public void run() { + if(touchDown(x, y)) { + SystemClock.sleep(REGULAR_CLICK_LENGTH); + touchUp(x, y); + } + } + }; + } + + /** + * Touches down for a long press at the specified coordinates. + * + * @param x + * @param y + * @return true if successful. + */ + public boolean longTapNoSync(int x, int y) { + if (DEBUG) { + Log.d(LOG_TAG, "longTapNoSync (" + x + ", " + y + ")"); + } + + if (touchDown(x, y)) { + SystemClock.sleep(mUiAutomatorBridge.getSystemLongPressTime()); + if(touchUp(x, y)) { + return true; + } + } + return false; + } + + private boolean touchDown(int x, int y) { + if (DEBUG) { + Log.d(LOG_TAG, "touchDown (" + x + ", " + y + ")"); + } + mDownTime = SystemClock.uptimeMillis(); + MotionEvent event = MotionEvent.obtain( + mDownTime, mDownTime, MotionEvent.ACTION_DOWN, x, y, 1); + event.setSource(InputDevice.SOURCE_TOUCHSCREEN); + return injectEventSync(event); + } + + private boolean touchUp(int x, int y) { + if (DEBUG) { + Log.d(LOG_TAG, "touchUp (" + x + ", " + y + ")"); + } + final long eventTime = SystemClock.uptimeMillis(); + MotionEvent event = MotionEvent.obtain( + mDownTime, eventTime, MotionEvent.ACTION_UP, x, y, 1); + event.setSource(InputDevice.SOURCE_TOUCHSCREEN); + mDownTime = 0; + return injectEventSync(event); + } + + private boolean touchMove(int x, int y) { + if (DEBUG) { + Log.d(LOG_TAG, "touchMove (" + x + ", " + y + ")"); + } + final long eventTime = SystemClock.uptimeMillis(); + MotionEvent event = MotionEvent.obtain( + mDownTime, eventTime, MotionEvent.ACTION_MOVE, x, y, 1); + event.setSource(InputDevice.SOURCE_TOUCHSCREEN); + return injectEventSync(event); + } + + /** + * Handle swipes in any direction where the result is a scroll event. This call blocks + * until the UI has fired a scroll event or timeout. + * @param downX + * @param downY + * @param upX + * @param upY + * @param steps + * @return true if we are not at the beginning or end of the scrollable view. + */ + public boolean scrollSwipe(final int downX, final int downY, final int upX, final int upY, + final int steps) { + Log.d(LOG_TAG, "scrollSwipe (" + downX + ", " + downY + ", " + upX + ", " + + upY + ", " + steps +")"); + + Runnable command = new Runnable() { + @Override + public void run() { + swipe(downX, downY, upX, upY, steps); + } + }; + + // Collect all accessibility events generated during the swipe command and get the + // last event + ArrayList events = new ArrayList(); + runAndWaitForEvents(command, + new EventCollectingPredicate(AccessibilityEvent.TYPE_VIEW_SCROLLED, events), + Configurator.getInstance().getScrollAcknowledgmentTimeout()); + + AccessibilityEvent event = getLastMatchingEvent(events, + AccessibilityEvent.TYPE_VIEW_SCROLLED); + + if (event == null) { + // end of scroll since no new scroll events received + recycleAccessibilityEvents(events); + return false; + } + + // AdapterViews have indices we can use to check for the beginning. + boolean foundEnd = false; + if (event.getFromIndex() != -1 && event.getToIndex() != -1 && event.getItemCount() != -1) { + foundEnd = event.getFromIndex() == 0 || + (event.getItemCount() - 1) == event.getToIndex(); + Log.d(LOG_TAG, "scrollSwipe reached scroll end: " + foundEnd); + } else if (event.getScrollX() != -1 && event.getScrollY() != -1) { + // Determine if we are scrolling vertically or horizontally. + if (downX == upX) { + // Vertical + foundEnd = event.getScrollY() == 0 || + event.getScrollY() == event.getMaxScrollY(); + Log.d(LOG_TAG, "Vertical scrollSwipe reached scroll end: " + foundEnd); + } else if (downY == upY) { + // Horizontal + foundEnd = event.getScrollX() == 0 || + event.getScrollX() == event.getMaxScrollX(); + Log.d(LOG_TAG, "Horizontal scrollSwipe reached scroll end: " + foundEnd); + } + } + recycleAccessibilityEvents(events); + return !foundEnd; + } + + private AccessibilityEvent getLastMatchingEvent(List events, int type) { + for (int x = events.size(); x > 0; x--) { + AccessibilityEvent event = events.get(x - 1); + if (event.getEventType() == type) + return event; + } + return null; + } + + private void recycleAccessibilityEvents(List events) { + for (AccessibilityEvent event : events) + event.recycle(); + events.clear(); + } + + /** + * Handle swipes in any direction. + * @param downX + * @param downY + * @param upX + * @param upY + * @param steps + * @return true if the swipe executed successfully + */ + public boolean swipe(int downX, int downY, int upX, int upY, int steps) { + return swipe(downX, downY, upX, upY, steps, false /*drag*/); + } + + /** + * Handle swipes/drags in any direction. + * @param downX + * @param downY + * @param upX + * @param upY + * @param steps + * @param drag when true, the swipe becomes a drag swipe + * @return true if the swipe executed successfully + */ + public boolean swipe(int downX, int downY, int upX, int upY, int steps, boolean drag) { + boolean ret = false; + int swipeSteps = steps; + double xStep = 0; + double yStep = 0; + + // avoid a divide by zero + if(swipeSteps == 0) + swipeSteps = 1; + + xStep = ((double)(upX - downX)) / swipeSteps; + yStep = ((double)(upY - downY)) / swipeSteps; + + // first touch starts exactly at the point requested + ret = touchDown(downX, downY); + if (drag) + SystemClock.sleep(mUiAutomatorBridge.getSystemLongPressTime()); + for(int i = 1; i < swipeSteps; i++) { + ret &= touchMove(downX + (int)(xStep * i), downY + (int)(yStep * i)); + if(ret == false) + break; + // set some known constant delay between steps as without it this + // become completely dependent on the speed of the system and results + // may vary on different devices. This guarantees at minimum we have + // a preset delay. + SystemClock.sleep(MOTION_EVENT_INJECTION_DELAY_MILLIS); + } + if (drag) + SystemClock.sleep(REGULAR_CLICK_LENGTH); + ret &= touchUp(upX, upY); + return(ret); + } + + /** + * Performs a swipe between points in the Point array. + * @param segments is Point array containing at least one Point object + * @param segmentSteps steps to inject between two Points + * @return true on success + */ + public boolean swipe(Point[] segments, int segmentSteps) { + boolean ret = false; + int swipeSteps = segmentSteps; + double xStep = 0; + double yStep = 0; + + // avoid a divide by zero + if(segmentSteps == 0) + segmentSteps = 1; + + // must have some points + if(segments.length == 0) + return false; + + // first touch starts exactly at the point requested + ret = touchDown(segments[0].x, segments[0].y); + for(int seg = 0; seg < segments.length; seg++) { + if(seg + 1 < segments.length) { + + xStep = ((double)(segments[seg+1].x - segments[seg].x)) / segmentSteps; + yStep = ((double)(segments[seg+1].y - segments[seg].y)) / segmentSteps; + + for(int i = 1; i < swipeSteps; i++) { + ret &= touchMove(segments[seg].x + (int)(xStep * i), + segments[seg].y + (int)(yStep * i)); + if(ret == false) + break; + // set some known constant delay between steps as without it this + // become completely dependent on the speed of the system and results + // may vary on different devices. This guarantees at minimum we have + // a preset delay. + SystemClock.sleep(MOTION_EVENT_INJECTION_DELAY_MILLIS); + } + } + } + ret &= touchUp(segments[segments.length - 1].x, segments[segments.length -1].y); + return(ret); + } + + + public boolean sendText(String text) { + if (DEBUG) { + Log.d(LOG_TAG, "sendText (" + text + ")"); + } + + KeyEvent[] events = mKeyCharacterMap.getEvents(text.toCharArray()); + + if (events != null) { + long keyDelay = Configurator.getInstance().getKeyInjectionDelay(); + for (KeyEvent event2 : events) { + // We have to change the time of an event before injecting it because + // all KeyEvents returned by KeyCharacterMap.getEvents() have the same + // time stamp and the system rejects too old events. Hence, it is + // possible for an event to become stale before it is injected if it + // takes too long to inject the preceding ones. + KeyEvent event = KeyEvent.changeTimeRepeat(event2, + SystemClock.uptimeMillis(), 0); + if (!injectEventSync(event)) { + return false; + } + SystemClock.sleep(keyDelay); + } + } + return true; + } + + public boolean sendKey(int keyCode, int metaState) { + if (DEBUG) { + Log.d(LOG_TAG, "sendKey (" + keyCode + ", " + metaState + ")"); + } + + final long eventTime = SystemClock.uptimeMillis(); + KeyEvent downEvent = new KeyEvent(eventTime, eventTime, KeyEvent.ACTION_DOWN, + keyCode, 0, metaState, KeyCharacterMap.VIRTUAL_KEYBOARD, 0, 0, + InputDevice.SOURCE_KEYBOARD); + if (injectEventSync(downEvent)) { + KeyEvent upEvent = new KeyEvent(eventTime, eventTime, KeyEvent.ACTION_UP, + keyCode, 0, metaState, KeyCharacterMap.VIRTUAL_KEYBOARD, 0, 0, + InputDevice.SOURCE_KEYBOARD); + if(injectEventSync(upEvent)) { + return true; + } + } + return false; + } + + /** + * Rotates right and also freezes rotation in that position by + * disabling the sensors. If you want to un-freeze the rotation + * and re-enable the sensors see {@link #unfreezeRotation()}. Note + * that doing so may cause the screen contents to rotate + * depending on the current physical position of the test device. + * @throws RemoteException + */ + public void setRotationRight() { + mUiAutomatorBridge.setRotation(UiAutomation.ROTATION_FREEZE_270); + } + + /** + * Rotates left and also freezes rotation in that position by + * disabling the sensors. If you want to un-freeze the rotation + * and re-enable the sensors see {@link #unfreezeRotation()}. Note + * that doing so may cause the screen contents to rotate + * depending on the current physical position of the test device. + * @throws RemoteException + */ + public void setRotationLeft() { + mUiAutomatorBridge.setRotation(UiAutomation.ROTATION_FREEZE_90); + } + + /** + * Rotates up and also freezes rotation in that position by + * disabling the sensors. If you want to un-freeze the rotation + * and re-enable the sensors see {@link #unfreezeRotation()}. Note + * that doing so may cause the screen contents to rotate + * depending on the current physical position of the test device. + * @throws RemoteException + */ + public void setRotationNatural() { + mUiAutomatorBridge.setRotation(UiAutomation.ROTATION_FREEZE_0); + } + + /** + * Disables the sensors and freezes the device rotation at its + * current rotation state. + * @throws RemoteException + */ + public void freezeRotation() { + mUiAutomatorBridge.setRotation(UiAutomation.ROTATION_FREEZE_CURRENT); + } + + /** + * Re-enables the sensors and un-freezes the device rotation + * allowing its contents to rotate with the device physical rotation. + * @throws RemoteException + */ + public void unfreezeRotation() { + mUiAutomatorBridge.setRotation(UiAutomation.ROTATION_UNFREEZE); + } + + /** + * This method simply presses the power button if the screen is OFF else + * it does nothing if the screen is already ON. + * @return true if the device was asleep else false + * @throws RemoteException + */ + public boolean wakeDevice() throws RemoteException { + if(!isScreenOn()) { + sendKey(KeyEvent.KEYCODE_POWER, 0); + return true; + } + return false; + } + + /** + * This method simply presses the power button if the screen is ON else + * it does nothing if the screen is already OFF. + * @return true if the device was awake else false + * @throws RemoteException + */ + public boolean sleepDevice() throws RemoteException { + if(isScreenOn()) { + this.sendKey(KeyEvent.KEYCODE_POWER, 0); + return true; + } + return false; + } + + /** + * Checks the power manager if the screen is ON + * @return true if the screen is ON else false + * @throws RemoteException + */ + public boolean isScreenOn() throws RemoteException { + return mUiAutomatorBridge.isScreenOn(); + } + + private boolean injectEventSync(InputEvent event) { + return mUiAutomatorBridge.injectInputEvent(event, true); + } + + private int getPointerAction(int motionEnvent, int index) { + return motionEnvent + (index << MotionEvent.ACTION_POINTER_INDEX_SHIFT); + } + + /** + * Performs a multi-touch gesture + * + * Takes a series of touch coordinates for at least 2 pointers. Each pointer must have + * all of its touch steps defined in an array of {@link PointerCoords}. By having the ability + * to specify the touch points along the path of a pointer, the caller is able to specify + * complex gestures like circles, irregular shapes etc, where each pointer may take a + * different path. + * + * To create a single point on a pointer's touch path + * + * PointerCoords p = new PointerCoords(); + * p.x = stepX; + * p.y = stepY; + * p.pressure = 1; + * p.size = 1; + * + * @param touches each array of {@link PointerCoords} constitute a single pointer's touch path. + * Multiple {@link PointerCoords} arrays constitute multiple pointers, each with its own + * path. Each {@link PointerCoords} in an array constitute a point on a pointer's path. + * @return true if all points on all paths are injected successfully, false + * otherwise + * @since API Level 18 + */ + public boolean performMultiPointerGesture(PointerCoords[] ... touches) { + boolean ret = true; + if (touches.length < 2) { + throw new IllegalArgumentException("Must provide coordinates for at least 2 pointers"); + } + + // Get the pointer with the max steps to inject. + int maxSteps = 0; + for (int x = 0; x < touches.length; x++) + maxSteps = (maxSteps < touches[x].length) ? touches[x].length : maxSteps; + + // specify the properties for each pointer as finger touch + PointerProperties[] properties = new PointerProperties[touches.length]; + PointerCoords[] pointerCoords = new PointerCoords[touches.length]; + for (int x = 0; x < touches.length; x++) { + PointerProperties prop = new PointerProperties(); + prop.id = x; + prop.toolType = MotionEvent.TOOL_TYPE_FINGER; + properties[x] = prop; + + // for each pointer set the first coordinates for touch down + pointerCoords[x] = touches[x][0]; + } + + // Touch down all pointers + long downTime = SystemClock.uptimeMillis(); + MotionEvent event; + event = MotionEvent.obtain(downTime, SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN, 1, + properties, pointerCoords, 0, 0, 1, 1, 0, 0, InputDevice.SOURCE_TOUCHSCREEN, 0); + ret &= injectEventSync(event); + + for (int x = 1; x < touches.length; x++) { + event = MotionEvent.obtain(downTime, SystemClock.uptimeMillis(), + getPointerAction(MotionEvent.ACTION_POINTER_DOWN, x), x + 1, properties, + pointerCoords, 0, 0, 1, 1, 0, 0, InputDevice.SOURCE_TOUCHSCREEN, 0); + ret &= injectEventSync(event); + } + + // Move all pointers + for (int i = 1; i < maxSteps - 1; i++) { + // for each pointer + for (int x = 0; x < touches.length; x++) { + // check if it has coordinates to move + if (touches[x].length > i) + pointerCoords[x] = touches[x][i]; + else + pointerCoords[x] = touches[x][touches[x].length - 1]; + } + + event = MotionEvent.obtain(downTime, SystemClock.uptimeMillis(), + MotionEvent.ACTION_MOVE, touches.length, properties, pointerCoords, 0, 0, 1, 1, + 0, 0, InputDevice.SOURCE_TOUCHSCREEN, 0); + + ret &= injectEventSync(event); + SystemClock.sleep(MOTION_EVENT_INJECTION_DELAY_MILLIS); + } + + // For each pointer get the last coordinates + for (int x = 0; x < touches.length; x++) + pointerCoords[x] = touches[x][touches[x].length - 1]; + + // touch up + for (int x = 1; x < touches.length; x++) { + event = MotionEvent.obtain(downTime, SystemClock.uptimeMillis(), + getPointerAction(MotionEvent.ACTION_POINTER_UP, x), x + 1, properties, + pointerCoords, 0, 0, 1, 1, 0, 0, InputDevice.SOURCE_TOUCHSCREEN, 0); + ret &= injectEventSync(event); + } + + Log.i(LOG_TAG, "x " + pointerCoords[0].x); + // first to touch down is last up + event = MotionEvent.obtain(downTime, SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, 1, + properties, pointerCoords, 0, 0, 1, 1, 0, 0, InputDevice.SOURCE_TOUCHSCREEN, 0); + ret &= injectEventSync(event); + return ret; + } + + /** + * Simulates a short press on the Recent Apps button. + * + * @return true if successful, else return false + * @since API Level 18 + */ + public boolean toggleRecentApps() { + return mUiAutomatorBridge.performGlobalAction( + AccessibilityService.GLOBAL_ACTION_RECENTS); + } + + /** + * Opens the notification shade + * + * @return true if successful, else return false + * @since API Level 18 + */ + public boolean openNotification() { + return mUiAutomatorBridge.performGlobalAction( + AccessibilityService.GLOBAL_ACTION_NOTIFICATIONS); + } + + /** + * Opens the quick settings shade + * + * @return true if successful, else return false + * @since API Level 18 + */ + public boolean openQuickSettings() { + return mUiAutomatorBridge.performGlobalAction( + AccessibilityService.GLOBAL_ACTION_QUICK_SETTINGS); + } +} diff --git a/cmds/uiautomator/library/core-src/com/android/uiautomator/core/QueryController.java b/cmds/uiautomator/library/core-src/com/android/uiautomator/core/QueryController.java new file mode 100644 index 0000000000000000000000000000000000000000..693152875fb401f6bacee03e72e47d368996dee6 --- /dev/null +++ b/cmds/uiautomator/library/core-src/com/android/uiautomator/core/QueryController.java @@ -0,0 +1,521 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.uiautomator.core; + +import android.app.UiAutomation.OnAccessibilityEventListener; +import android.os.SystemClock; +import android.util.Log; +import android.view.accessibility.AccessibilityEvent; +import android.view.accessibility.AccessibilityNodeInfo; + + +/** + * The QueryController main purpose is to translate a {@link UiSelector} selectors to + * {@link AccessibilityNodeInfo}. This is all this controller does. + */ +class QueryController { + + private static final String LOG_TAG = QueryController.class.getSimpleName(); + + private static final boolean DEBUG = Log.isLoggable(LOG_TAG, Log.DEBUG); + private static final boolean VERBOSE = Log.isLoggable(LOG_TAG, Log.VERBOSE); + + private final UiAutomatorBridge mUiAutomatorBridge; + + private final Object mLock = new Object(); + + private String mLastActivityName = null; + + // During a pattern selector search, the recursive pattern search + // methods will track their counts and indexes here. + private int mPatternCounter = 0; + private int mPatternIndexer = 0; + + // These help show each selector's search context as it relates to the previous sub selector + // matched. When a compound selector fails, it is hard to tell which part of it is failing. + // Seeing how a selector is being parsed and which sub selector failed within a long list + // of compound selectors is very helpful. + private int mLogIndent = 0; + private int mLogParentIndent = 0; + + private String mLastTraversedText = ""; + + public QueryController(UiAutomatorBridge bridge) { + mUiAutomatorBridge = bridge; + bridge.setOnAccessibilityEventListener(new OnAccessibilityEventListener() { + @Override + public void onAccessibilityEvent(AccessibilityEvent event) { + synchronized (mLock) { + switch(event.getEventType()) { + case AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED: + // don't trust event.getText(), check for nulls + if (event.getText() != null && event.getText().size() > 0) { + if(event.getText().get(0) != null) + mLastActivityName = event.getText().get(0).toString(); + } + break; + case AccessibilityEvent.TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY: + // don't trust event.getText(), check for nulls + if (event.getText() != null && event.getText().size() > 0) + if(event.getText().get(0) != null) + mLastTraversedText = event.getText().get(0).toString(); + if (DEBUG) + Log.d(LOG_TAG, "Last text selection reported: " + + mLastTraversedText); + break; + } + mLock.notifyAll(); + } + } + }); + } + + /** + * Returns the last text selection reported by accessibility + * event TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY. One way to cause + * this event is using a DPad arrows to focus on UI elements. + */ + public String getLastTraversedText() { + mUiAutomatorBridge.waitForIdle(); + synchronized (mLock) { + if (mLastTraversedText.length() > 0) { + return mLastTraversedText; + } + } + return null; + } + + /** + * Clears the last text selection value saved from the TYPE_VIEW_TEXT_SELECTION_CHANGED + * event + */ + public void clearLastTraversedText() { + mUiAutomatorBridge.waitForIdle(); + synchronized (mLock) { + mLastTraversedText = ""; + } + } + + private void initializeNewSearch() { + mPatternCounter = 0; + mPatternIndexer = 0; + mLogIndent = 0; + mLogParentIndent = 0; + } + + /** + * Counts the instances of the selector group. The selector must be in the following + * format: [container_selector, PATTERN=[INSTANCE=x, PATTERN=[the_pattern]] + * where the container_selector is used to find the containment region to search for patterns + * and the INSTANCE=x is the instance of the_pattern to return. + * @param selector + * @return number of pattern matches. Returns 0 for all other cases. + */ + public int getPatternCount(UiSelector selector) { + findAccessibilityNodeInfo(selector, true /*counting*/); + return mPatternCounter; + } + + /** + * Main search method for translating By selectors to AccessibilityInfoNodes + * @param selector + * @return AccessibilityNodeInfo + */ + public AccessibilityNodeInfo findAccessibilityNodeInfo(UiSelector selector) { + return findAccessibilityNodeInfo(selector, false); + } + + protected AccessibilityNodeInfo findAccessibilityNodeInfo(UiSelector selector, + boolean isCounting) { + mUiAutomatorBridge.waitForIdle(); + initializeNewSearch(); + + if (DEBUG) + Log.d(LOG_TAG, "Searching: " + selector); + + synchronized (mLock) { + AccessibilityNodeInfo rootNode = getRootNode(); + if (rootNode == null) { + Log.e(LOG_TAG, "Cannot proceed when root node is null. Aborted search"); + return null; + } + + // Copy so that we don't modify the original's sub selectors + UiSelector uiSelector = new UiSelector(selector); + return translateCompoundSelector(uiSelector, rootNode, isCounting); + } + } + + /** + * Gets the root node from accessibility and if it fails to get one it will + * retry every 250ms for up to 1000ms. + * @return null if no root node is obtained + */ + protected AccessibilityNodeInfo getRootNode() { + final int maxRetry = 4; + final long waitInterval = 250; + AccessibilityNodeInfo rootNode = null; + for(int x = 0; x < maxRetry; x++) { + rootNode = mUiAutomatorBridge.getRootInActiveWindow(); + if (rootNode != null) { + return rootNode; + } + if(x < maxRetry - 1) { + Log.e(LOG_TAG, "Got null root node from accessibility - Retrying..."); + SystemClock.sleep(waitInterval); + } + } + return rootNode; + } + + /** + * A compoundSelector encapsulate both Regular and Pattern selectors. The formats follows: + *

+ * regular_selector = By[attributes... CHILD=By[attributes... CHILD=By[....]]] + *
+ * pattern_selector = ...CONTAINER=By[..] PATTERN=By[instance=x PATTERN=[regular_selector] + *
+ * compound_selector = [regular_selector [pattern_selector]] + *

+ * regular_selectors are the most common form of selectors and the search for them + * is straightforward. On the other hand pattern_selectors requires search to be + * performed as in regular_selector but where regular_selector search returns immediately + * upon a successful match, the search for pattern_selector continues until the + * requested matched _instance_ of that pattern is matched. + *

+ * Counting UI objects requires using pattern_selectors. The counting search is the same + * as a pattern_search however we're not looking to match an instance of the pattern but + * rather continuously walking the accessibility node hierarchy while counting matched + * patterns, until the end of the tree. + *

+ * If both present, order of parsing begins with CONTAINER followed by PATTERN then the + * top most selector is processed as regular_selector within the context of the previous + * CONTAINER and its PATTERN information. If neither is present then the top selector is + * directly treated as regular_selector. So the presence of a CONTAINER and PATTERN within + * a selector simply dictates that the selector matching will be constraint to the sub tree + * node where the CONTAINER and its child PATTERN have identified. + * @param selector + * @param fromNode + * @param isCounting + * @return AccessibilityNodeInfo + */ + private AccessibilityNodeInfo translateCompoundSelector(UiSelector selector, + AccessibilityNodeInfo fromNode, boolean isCounting) { + + // Start translating compound selectors by translating the regular_selector first + // The regular_selector is then used as a container for any optional pattern_selectors + // that may or may not be specified. + if(selector.hasContainerSelector()) + // nested pattern selectors + if(selector.getContainerSelector().hasContainerSelector()) { + fromNode = translateCompoundSelector( + selector.getContainerSelector(), fromNode, false); + initializeNewSearch(); + } else + fromNode = translateReqularSelector(selector.getContainerSelector(), fromNode); + else + fromNode = translateReqularSelector(selector, fromNode); + + if(fromNode == null) { + if (DEBUG) + Log.d(LOG_TAG, "Container selector not found: " + selector.dumpToString(false)); + return null; + } + + if(selector.hasPatternSelector()) { + fromNode = translatePatternSelector(selector.getPatternSelector(), + fromNode, isCounting); + + if (isCounting) { + Log.i(LOG_TAG, String.format( + "Counted %d instances of: %s", mPatternCounter, selector)); + return null; + } else { + if(fromNode == null) { + if (DEBUG) + Log.d(LOG_TAG, "Pattern selector not found: " + + selector.dumpToString(false)); + return null; + } + } + } + + // translate any additions to the selector that may have been added by tests + // with getChild(By selector) after a container and pattern selectors + if(selector.hasContainerSelector() || selector.hasPatternSelector()) { + if(selector.hasChildSelector() || selector.hasParentSelector()) + fromNode = translateReqularSelector(selector, fromNode); + } + + if(fromNode == null) { + if (DEBUG) + Log.d(LOG_TAG, "Object Not Found for selector " + selector); + return null; + } + Log.i(LOG_TAG, String.format("Matched selector: %s <<==>> [%s]", selector, fromNode)); + return fromNode; + } + + /** + * Used by the {@link #translateCompoundSelector(UiSelector, AccessibilityNodeInfo, boolean)} + * to translate the regular_selector portion. It has the following format: + *

+ * regular_selector = By[attributes... CHILD=By[attributes... CHILD=By[....]]]
+ *

+ * regular_selectors are the most common form of selectors and the search for them + * is straightforward. This method will only look for CHILD or PARENT sub selectors. + *

+ * @param selector + * @param fromNode + * @return AccessibilityNodeInfo if found else null + */ + private AccessibilityNodeInfo translateReqularSelector(UiSelector selector, + AccessibilityNodeInfo fromNode) { + + return findNodeRegularRecursive(selector, fromNode, 0); + } + + private AccessibilityNodeInfo findNodeRegularRecursive(UiSelector subSelector, + AccessibilityNodeInfo fromNode, int index) { + + if (subSelector.isMatchFor(fromNode, index)) { + if (DEBUG) { + Log.d(LOG_TAG, formatLog(String.format("%s", + subSelector.dumpToString(false)))); + } + if(subSelector.isLeaf()) { + return fromNode; + } + if(subSelector.hasChildSelector()) { + mLogIndent++; // next selector + subSelector = subSelector.getChildSelector(); + if(subSelector == null) { + Log.e(LOG_TAG, "Error: A child selector without content"); + return null; // there is an implementation fault + } + } else if(subSelector.hasParentSelector()) { + mLogIndent++; // next selector + subSelector = subSelector.getParentSelector(); + if(subSelector == null) { + Log.e(LOG_TAG, "Error: A parent selector without content"); + return null; // there is an implementation fault + } + // the selector requested we start at this level from + // the parent node from the one we just matched + fromNode = fromNode.getParent(); + if(fromNode == null) + return null; + } + } + + int childCount = fromNode.getChildCount(); + boolean hasNullChild = false; + for (int i = 0; i < childCount; i++) { + AccessibilityNodeInfo childNode = fromNode.getChild(i); + if (childNode == null) { + Log.w(LOG_TAG, String.format( + "AccessibilityNodeInfo returned a null child (%d of %d)", i, childCount)); + if (!hasNullChild) { + Log.w(LOG_TAG, String.format("parent = %s", fromNode.toString())); + } + hasNullChild = true; + continue; + } + if (!childNode.isVisibleToUser()) { + if (VERBOSE) + Log.v(LOG_TAG, + String.format("Skipping invisible child: %s", childNode.toString())); + continue; + } + AccessibilityNodeInfo retNode = findNodeRegularRecursive(subSelector, childNode, i); + if (retNode != null) { + return retNode; + } + } + return null; + } + + /** + * Used by the {@link #translateCompoundSelector(UiSelector, AccessibilityNodeInfo, boolean)} + * to translate the pattern_selector portion. It has the following format: + *

+ * pattern_selector = ... PATTERN=By[instance=x PATTERN=[regular_selector]]
+ *

+ * pattern_selectors requires search to be performed as regular_selector but where + * regular_selector search returns immediately upon a successful match, the search for + * pattern_selector continues until the requested matched instance of that pattern is + * encountered. + *

+ * Counting UI objects requires using pattern_selectors. The counting search is the same + * as a pattern_search however we're not looking to match an instance of the pattern but + * rather continuously walking the accessibility node hierarchy while counting patterns + * until the end of the tree. + * @param subSelector + * @param fromNode + * @param isCounting + * @return null of node is not found or if counting mode is true. + * See {@link #translateCompoundSelector(UiSelector, AccessibilityNodeInfo, boolean)} + */ + private AccessibilityNodeInfo translatePatternSelector(UiSelector subSelector, + AccessibilityNodeInfo fromNode, boolean isCounting) { + + if(subSelector.hasPatternSelector()) { + // Since pattern_selectors are also the type of selectors used when counting, + // we check if this is a counting run or an indexing run + if(isCounting) + //since we're counting, we reset the indexer so to terminates the search when + // the end of tree is reached. The count will be in mPatternCount + mPatternIndexer = -1; + else + // terminates the search once we match the pattern's instance + mPatternIndexer = subSelector.getInstance(); + + // A pattern is wrapped in a PATTERN[instance=x PATTERN[the_pattern]] + subSelector = subSelector.getPatternSelector(); + if(subSelector == null) { + Log.e(LOG_TAG, "Pattern portion of the selector is null or not defined"); + return null; // there is an implementation fault + } + // save the current indent level as parent indent before pattern searches + // begin under the current tree position. + mLogParentIndent = ++mLogIndent; + return findNodePatternRecursive(subSelector, fromNode, 0, subSelector); + } + + Log.e(LOG_TAG, "Selector must have a pattern selector defined"); // implementation fault? + return null; + } + + private AccessibilityNodeInfo findNodePatternRecursive( + UiSelector subSelector, AccessibilityNodeInfo fromNode, int index, + UiSelector originalPattern) { + + if (subSelector.isMatchFor(fromNode, index)) { + if(subSelector.isLeaf()) { + if(mPatternIndexer == 0) { + if (DEBUG) + Log.d(LOG_TAG, formatLog( + String.format("%s", subSelector.dumpToString(false)))); + return fromNode; + } else { + if (DEBUG) + Log.d(LOG_TAG, formatLog( + String.format("%s", subSelector.dumpToString(false)))); + mPatternCounter++; //count the pattern matched + mPatternIndexer--; //decrement until zero for the instance requested + + // At a leaf selector within a group and still not instance matched + // then reset the selector to continue search from current position + // in the accessibility tree for the next pattern match up until the + // pattern index hits 0. + subSelector = originalPattern; + // starting over with next pattern search so reset to parent level + mLogIndent = mLogParentIndent; + } + } else { + if (DEBUG) + Log.d(LOG_TAG, formatLog( + String.format("%s", subSelector.dumpToString(false)))); + + if(subSelector.hasChildSelector()) { + mLogIndent++; // next selector + subSelector = subSelector.getChildSelector(); + if(subSelector == null) { + Log.e(LOG_TAG, "Error: A child selector without content"); + return null; + } + } else if(subSelector.hasParentSelector()) { + mLogIndent++; // next selector + subSelector = subSelector.getParentSelector(); + if(subSelector == null) { + Log.e(LOG_TAG, "Error: A parent selector without content"); + return null; + } + fromNode = fromNode.getParent(); + if(fromNode == null) + return null; + } + } + } + + int childCount = fromNode.getChildCount(); + boolean hasNullChild = false; + for (int i = 0; i < childCount; i++) { + AccessibilityNodeInfo childNode = fromNode.getChild(i); + if (childNode == null) { + Log.w(LOG_TAG, String.format( + "AccessibilityNodeInfo returned a null child (%d of %d)", i, childCount)); + if (!hasNullChild) { + Log.w(LOG_TAG, String.format("parent = %s", fromNode.toString())); + } + hasNullChild = true; + continue; + } + if (!childNode.isVisibleToUser()) { + if (DEBUG) + Log.d(LOG_TAG, + String.format("Skipping invisible child: %s", childNode.toString())); + continue; + } + AccessibilityNodeInfo retNode = findNodePatternRecursive( + subSelector, childNode, i, originalPattern); + if (retNode != null) { + return retNode; + } + } + return null; + } + + public AccessibilityNodeInfo getAccessibilityRootNode() { + return mUiAutomatorBridge.getRootInActiveWindow(); + } + + /** + * Last activity to report accessibility events. + * @deprecated The results returned should be considered unreliable + * @return String name of activity + */ + @Deprecated + public String getCurrentActivityName() { + mUiAutomatorBridge.waitForIdle(); + synchronized (mLock) { + return mLastActivityName; + } + } + + /** + * Last package to report accessibility events + * @return String name of package + */ + public String getCurrentPackageName() { + mUiAutomatorBridge.waitForIdle(); + AccessibilityNodeInfo rootNode = getRootNode(); + if (rootNode == null) + return null; + return rootNode.getPackageName() != null ? rootNode.getPackageName().toString() : null; + } + + private String formatLog(String str) { + StringBuilder l = new StringBuilder(); + for(int space = 0; space < mLogIndent; space++) + l.append(". . "); + if(mLogIndent > 0) + l.append(String.format(". . [%d]: %s", mPatternCounter, str)); + else + l.append(String.format(". . [%d]: %s", mPatternCounter, str)); + return l.toString(); + } +} diff --git a/cmds/uiautomator/library/core-src/com/android/uiautomator/core/Tracer.java b/cmds/uiautomator/library/core-src/com/android/uiautomator/core/Tracer.java new file mode 100644 index 0000000000000000000000000000000000000000..d574fc064f7facc68cdf446ef2dfaabeae7c9831 --- /dev/null +++ b/cmds/uiautomator/library/core-src/com/android/uiautomator/core/Tracer.java @@ -0,0 +1,285 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.uiautomator.core; + +import android.util.Log; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.PrintWriter; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Date; +import java.util.List; +import java.util.Locale; + +/** + * Class that creates traces of the calls to the UiAutomator API and outputs the + * traces either to logcat or a logfile. Each public method in the UiAutomator + * that needs to be traced should include a call to Tracer.trace in the + * beginning. Tracing is turned off by defualt and needs to be enabled + * explicitly. + * @hide + */ +public class Tracer { + private static final String UNKNOWN_METHOD_STRING = "(unknown method)"; + private static final String UIAUTOMATOR_PACKAGE = "com.android.uiautomator.core"; + private static final int CALLER_LOCATION = 6; + private static final int METHOD_TO_TRACE_LOCATION = 5; + private static final int MIN_STACK_TRACE_LENGTH = 7; + + /** + * Enum that determines where the trace output goes. It can go to either + * logcat, log file or both. + */ + public enum Mode { + NONE, + FILE, + LOGCAT, + ALL + } + + private interface TracerSink { + public void log(String message); + + public void close(); + } + + private class FileSink implements TracerSink { + private PrintWriter mOut; + private SimpleDateFormat mDateFormat; + + public FileSink(File file) throws FileNotFoundException { + mOut = new PrintWriter(file); + mDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US); + } + + public void log(String message) { + mOut.printf("%s %s\n", mDateFormat.format(new Date()), message); + } + + public void close() { + mOut.close(); + } + } + + private class LogcatSink implements TracerSink { + + private static final String LOGCAT_TAG = "UiAutomatorTrace"; + + public void log(String message) { + Log.i(LOGCAT_TAG, message); + } + + public void close() { + // nothing is needed + } + } + + private Mode mCurrentMode = Mode.NONE; + private List mSinks = new ArrayList(); + private File mOutputFile; + + private static Tracer mInstance = null; + + /** + * Returns a reference to an instance of the tracer. Useful to set the + * parameters before the trace is collected. + * + * @return + */ + public static Tracer getInstance() { + if (mInstance == null) { + mInstance = new Tracer(); + } + return mInstance; + } + + /** + * Sets where the trace output will go. Can be either be logcat or a file or + * both. Setting this to NONE will turn off tracing. + * + * @param mode + */ + public void setOutputMode(Mode mode) { + closeSinks(); + mCurrentMode = mode; + try { + switch (mode) { + case FILE: + if (mOutputFile == null) { + throw new IllegalArgumentException("Please provide a filename before " + + "attempting write trace to a file"); + } + mSinks.add(new FileSink(mOutputFile)); + break; + case LOGCAT: + mSinks.add(new LogcatSink()); + break; + case ALL: + mSinks.add(new LogcatSink()); + if (mOutputFile == null) { + throw new IllegalArgumentException("Please provide a filename before " + + "attempting write trace to a file"); + } + mSinks.add(new FileSink(mOutputFile)); + break; + default: + break; + } + } catch (FileNotFoundException e) { + Log.w("Tracer", "Could not open log file: " + e.getMessage()); + } + } + + private void closeSinks() { + for (TracerSink sink : mSinks) { + sink.close(); + } + mSinks.clear(); + } + + /** + * Sets the name of the log file where tracing output will be written if the + * tracer is set to write to a file. + * + * @param filename name of the log file. + */ + public void setOutputFilename(String filename) { + mOutputFile = new File(filename); + } + + private void doTrace(Object[] arguments) { + if (mCurrentMode == Mode.NONE) { + return; + } + + String caller = getCaller(); + if (caller == null) { + return; + } + + log(String.format("%s (%s)", caller, join(", ", arguments))); + } + + private void log(String message) { + for (TracerSink sink : mSinks) { + sink.log(message); + } + } + + /** + * Queries whether the tracing is enabled. + * @return true if tracing is enabled, false otherwise. + */ + public boolean isTracingEnabled() { + return mCurrentMode != Mode.NONE; + } + + /** + * Public methods in the UiAutomator should call this function to generate a + * trace. The trace will include the method thats is being called, it's + * arguments and where in the user's code the method is called from. If a + * public method is called internally from UIAutomator then this will not + * output a trace entry. Only calls from outise the UiAutomator package will + * produce output. + * + * Special note about array arguments. You can safely pass arrays of reference types + * to this function. Like String[] or Integer[]. The trace function will print their + * contents by calling toString() on each of the elements. This will not work for + * array of primitive types like int[] or float[]. Before passing them to this function + * convert them to arrays of reference types manually. Example: convert int[] to Integer[]. + * + * @param arguments arguments of the method being traced. + */ + public static void trace(Object... arguments) { + Tracer.getInstance().doTrace(arguments); + } + + private static String join(String separator, Object[] strings) { + if (strings.length == 0) + return ""; + + StringBuilder builder = new StringBuilder(objectToString(strings[0])); + for (int i = 1; i < strings.length; i++) { + builder.append(separator); + builder.append(objectToString(strings[i])); + } + return builder.toString(); + } + + /** + * Special toString method to handle arrays. If the argument is a normal object then this will + * return normal output of obj.toString(). If the argument is an array this will return a + * string representation of the elements of the array. + * + * This method will not work for arrays of primitive types. Arrays of primitive types are + * expected to be converted manually by the caller. If the array is not converter then + * this function will only output "[...]" instead of the contents of the array. + * + * @param obj object to convert to a string + * @return String representation of the object. + */ + private static String objectToString(Object obj) { + if (obj.getClass().isArray()) { + if (obj instanceof Object[]) { + return Arrays.deepToString((Object[])obj); + } else { + return "[...]"; + } + } else { + return obj.toString(); + } + } + + /** + * This method outputs which UiAutomator method was called and where in the + * user code it was called from. If it can't deside which method is called + * it will output "(unknown method)". If the method was called from inside + * the UiAutomator then it returns null. + * + * @return name of the method called and where it was called from. Null if + * method was called from inside UiAutomator. + */ + private static String getCaller() { + StackTraceElement stackTrace[] = Thread.currentThread().getStackTrace(); + if (stackTrace.length < MIN_STACK_TRACE_LENGTH) { + return UNKNOWN_METHOD_STRING; + } + + StackTraceElement caller = stackTrace[METHOD_TO_TRACE_LOCATION]; + StackTraceElement previousCaller = stackTrace[CALLER_LOCATION]; + + if (previousCaller.getClassName().startsWith(UIAUTOMATOR_PACKAGE)) { + return null; + } + + int indexOfDot = caller.getClassName().lastIndexOf('.'); + if (indexOfDot < 0) { + indexOfDot = 0; + } + + if (indexOfDot + 1 >= caller.getClassName().length()) { + return UNKNOWN_METHOD_STRING; + } + + String shortClassName = caller.getClassName().substring(indexOfDot + 1); + return String.format("%s.%s from %s() at %s:%d", shortClassName, caller.getMethodName(), + previousCaller.getMethodName(), previousCaller.getFileName(), + previousCaller.getLineNumber()); + } +} diff --git a/cmds/uiautomator/library/core-src/com/android/uiautomator/core/UiAutomatorBridge.java b/cmds/uiautomator/library/core-src/com/android/uiautomator/core/UiAutomatorBridge.java new file mode 100644 index 0000000000000000000000000000000000000000..bc5bc8ee356460e1c0950f1bde3cca87928e758b --- /dev/null +++ b/cmds/uiautomator/library/core-src/com/android/uiautomator/core/UiAutomatorBridge.java @@ -0,0 +1,143 @@ +package com.android.uiautomator.core; + +import android.accessibilityservice.AccessibilityServiceInfo; +import android.app.UiAutomation; +import android.app.UiAutomation.AccessibilityEventFilter; +import android.app.UiAutomation.OnAccessibilityEventListener; +import android.graphics.Bitmap; +import android.util.Log; +import android.view.Display; +import android.view.InputEvent; +import android.view.accessibility.AccessibilityEvent; +import android.view.accessibility.AccessibilityNodeInfo; + +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.concurrent.TimeoutException; + +/** + * @hide + */ +public abstract class UiAutomatorBridge { + + private static final String LOG_TAG = UiAutomatorBridge.class.getSimpleName(); + + /** + * This value has the greatest bearing on the appearance of test execution speeds. + * This value is used as the minimum time to wait before considering the UI idle after + * each action. + */ + private static final long QUIET_TIME_TO_BE_CONSIDERD_IDLE_STATE = 500;//ms + + /** + * This is the maximum time the automation will wait for the UI to go idle. Execution + * will resume normally anyway. This is to prevent waiting forever on display updates + * that may be related to spinning wheels or progress updates of sorts etc... + */ + private static final long TOTAL_TIME_TO_WAIT_FOR_IDLE_STATE = 1000 * 10;//ms + + private final UiAutomation mUiAutomation; + + private final InteractionController mInteractionController; + + private final QueryController mQueryController; + + UiAutomatorBridge(UiAutomation uiAutomation) { + mUiAutomation = uiAutomation; + mInteractionController = new InteractionController(this); + mQueryController = new QueryController(this); + } + + InteractionController getInteractionController() { + return mInteractionController; + } + + QueryController getQueryController() { + return mQueryController; + } + + public void setOnAccessibilityEventListener(OnAccessibilityEventListener listener) { + mUiAutomation.setOnAccessibilityEventListener(listener); + } + + public AccessibilityNodeInfo getRootInActiveWindow() { + return mUiAutomation.getRootInActiveWindow(); + } + + public boolean injectInputEvent(InputEvent event, boolean sync) { + return mUiAutomation.injectInputEvent(event, sync); + } + + public boolean setRotation(int rotation) { + return mUiAutomation.setRotation(rotation); + } + + public void setCompressedLayoutHierarchy(boolean compressed) { + AccessibilityServiceInfo info = mUiAutomation.getServiceInfo(); + if (compressed) + info.flags &= ~AccessibilityServiceInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS; + else + info.flags |= AccessibilityServiceInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS; + mUiAutomation.setServiceInfo(info); + } + + public abstract int getRotation(); + + public abstract boolean isScreenOn(); + + public void waitForIdle() { + waitForIdle(TOTAL_TIME_TO_WAIT_FOR_IDLE_STATE); + } + + public void waitForIdle(long timeout) { + try { + mUiAutomation.waitForIdle(QUIET_TIME_TO_BE_CONSIDERD_IDLE_STATE, timeout); + } catch (TimeoutException te) { + Log.w(LOG_TAG, "Could not detect idle state.", te); + } + } + + public AccessibilityEvent executeCommandAndWaitForAccessibilityEvent(Runnable command, + AccessibilityEventFilter filter, long timeoutMillis) throws TimeoutException { + return mUiAutomation.executeAndWaitForEvent(command, + filter, timeoutMillis); + } + + public boolean takeScreenshot(File storePath, int quality) { + Bitmap screenshot = mUiAutomation.takeScreenshot(); + if (screenshot == null) { + return false; + } + BufferedOutputStream bos = null; + try { + bos = new BufferedOutputStream(new FileOutputStream(storePath)); + if (bos != null) { + screenshot.compress(Bitmap.CompressFormat.PNG, quality, bos); + bos.flush(); + } + } catch (IOException ioe) { + Log.e(LOG_TAG, "failed to save screen shot to file", ioe); + return false; + } finally { + if (bos != null) { + try { + bos.close(); + } catch (IOException ioe) { + /* ignore */ + } + } + screenshot.recycle(); + } + return true; + } + + public boolean performGlobalAction(int action) { + return mUiAutomation.performGlobalAction(action); + } + + public abstract Display getDefaultDisplay(); + + public abstract long getSystemLongPressTime(); +} diff --git a/cmds/uiautomator/library/core-src/com/android/uiautomator/core/UiCollection.java b/cmds/uiautomator/library/core-src/com/android/uiautomator/core/UiCollection.java new file mode 100644 index 0000000000000000000000000000000000000000..e15beb2fb74fc8616a35dc610af31bbad1caa674 --- /dev/null +++ b/cmds/uiautomator/library/core-src/com/android/uiautomator/core/UiCollection.java @@ -0,0 +1,145 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.uiautomator.core; + +/** + * Used to enumerate a container's UI elements for the purpose of counting, + * or targeting a sub elements by a child's text or description. + * @since API Level 16 + */ +public class UiCollection extends UiObject { + + /** + * Constructs an instance as described by the selector + * + * @param selector + * @since API Level 16 + */ + public UiCollection(UiSelector selector) { + super(selector); + } + + /** + * Searches for child UI element within the constraints of this UiCollection {@link UiSelector} + * selector. + * + * It looks for any child matching the childPattern argument that has + * a child UI element anywhere within its sub hierarchy that has content-description text. + * The returned UiObject will point at the childPattern instance that matched the + * search and not at the identifying child element that matched the content description.

+ * + * @param childPattern {@link UiSelector} selector of the child pattern to match and return + * @param text String of the identifying child contents of of the childPattern + * @return {@link UiObject} pointing at and instance of childPattern + * @throws UiObjectNotFoundException + * @since API Level 16 + */ + public UiObject getChildByDescription(UiSelector childPattern, String text) + throws UiObjectNotFoundException { + Tracer.trace(childPattern, text); + if (text != null) { + int count = getChildCount(childPattern); + for (int x = 0; x < count; x++) { + UiObject row = getChildByInstance(childPattern, x); + String nodeDesc = row.getContentDescription(); + if(nodeDesc != null && nodeDesc.contains(text)) { + return row; + } + UiObject item = row.getChild(new UiSelector().descriptionContains(text)); + if (item.exists()) { + return row; + } + } + } + throw new UiObjectNotFoundException("for description= \"" + text + "\""); + } + + /** + * Searches for child UI element within the constraints of this UiCollection {@link UiSelector} + * selector. + * + * It looks for any child matching the childPattern argument that has + * a child UI element anywhere within its sub hierarchy that is at the instance + * specified. The operation is performed only on the visible items and no scrolling is performed + * in this case. + * + * @param childPattern {@link UiSelector} selector of the child pattern to match and return + * @param instance int the desired matched instance of this childPattern + * @return {@link UiObject} pointing at and instance of childPattern + * @since API Level 16 + */ + public UiObject getChildByInstance(UiSelector childPattern, int instance) + throws UiObjectNotFoundException { + Tracer.trace(childPattern, instance); + UiSelector patternSelector = UiSelector.patternBuilder(getSelector(), + UiSelector.patternBuilder(childPattern).instance(instance)); + return new UiObject(patternSelector); + } + + /** + * Searches for child UI element within the constraints of this UiCollection {@link UiSelector} + * selector. + * + * It looks for any child matching the childPattern argument that has + * a child UI element anywhere within its sub hierarchy that has text attribute = + * text. The returned UiObject will point at the childPattern + * instance that matched the search and not at the identifying child element that matched the + * text attribute.

+ * + * @param childPattern {@link UiSelector} selector of the child pattern to match and return + * @param text String of the identifying child contents of of the childPattern + * @return {@link UiObject} pointing at and instance of childPattern + * @throws UiObjectNotFoundException + * @since API Level 16 + */ + public UiObject getChildByText(UiSelector childPattern, String text) + throws UiObjectNotFoundException { + Tracer.trace(childPattern, text); + if (text != null) { + int count = getChildCount(childPattern); + for (int x = 0; x < count; x++) { + UiObject row = getChildByInstance(childPattern, x); + String nodeText = row.getText(); + if(text.equals(nodeText)) { + return row; + } + UiObject item = row.getChild(new UiSelector().text(text)); + if (item.exists()) { + return row; + } + } + } + throw new UiObjectNotFoundException("for text= \"" + text + "\""); + } + + /** + * Counts child UI element instances matching the childPattern + * argument. The method returns the number of matching UI elements that are + * currently visible. The count does not include items of a scrollable list + * that are off-screen. + * + * @param childPattern a {@link UiSelector} that represents the matching child UI + * elements to count + * @return the number of matched childPattern under the current {@link UiCollection} + * @since API Level 16 + */ + public int getChildCount(UiSelector childPattern) { + Tracer.trace(childPattern); + UiSelector patternSelector = + UiSelector.patternBuilder(getSelector(), UiSelector.patternBuilder(childPattern)); + return getQueryController().getPatternCount(patternSelector); + } +} diff --git a/cmds/uiautomator/library/core-src/com/android/uiautomator/core/UiDevice.java b/cmds/uiautomator/library/core-src/com/android/uiautomator/core/UiDevice.java new file mode 100644 index 0000000000000000000000000000000000000000..a930eb444a08b18b0c8fff89f2adc1a819b7b54f --- /dev/null +++ b/cmds/uiautomator/library/core-src/com/android/uiautomator/core/UiDevice.java @@ -0,0 +1,851 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.uiautomator.core; + +import android.app.UiAutomation; +import android.app.UiAutomation.AccessibilityEventFilter; +import android.graphics.Point; +import android.os.Build; +import android.os.Environment; +import android.os.RemoteException; +import android.os.SystemClock; +import android.util.DisplayMetrics; +import android.util.Log; +import android.view.Display; +import android.view.KeyEvent; +import android.view.Surface; +import android.view.accessibility.AccessibilityEvent; +import android.view.accessibility.AccessibilityNodeInfo; + +import java.io.File; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.concurrent.TimeoutException; + +/** + * UiDevice provides access to state information about the device. + * You can also use this class to simulate user actions on the device, + * such as pressing the d-pad or pressing the Home and Menu buttons. + * @since API Level 16 + */ +public class UiDevice { + private static final String LOG_TAG = UiDevice.class.getSimpleName(); + + // Sometimes HOME and BACK key presses will generate no events if already on + // home page or there is nothing to go back to, Set low timeouts. + private static final long KEY_PRESS_EVENT_TIMEOUT = 1 * 1000; + + // store for registered UiWatchers + private final HashMap mWatchers = new HashMap(); + private final List mWatchersTriggers = new ArrayList(); + + // remember if we're executing in the context of a UiWatcher + private boolean mInWatcherContext = false; + + // provides access the {@link QueryController} and {@link InteractionController} + private UiAutomatorBridge mUiAutomationBridge; + + // reference to self + private static UiDevice sDevice; + + private UiDevice() { + /* hide constructor */ + } + + /** + * @hide + */ + public void initialize(UiAutomatorBridge uiAutomatorBridge) { + mUiAutomationBridge = uiAutomatorBridge; + } + + boolean isInWatcherContext() { + return mInWatcherContext; + } + + /** + * Provides access the {@link QueryController} and {@link InteractionController} + * @return {@link ShellUiAutomatorBridge} + */ + UiAutomatorBridge getAutomatorBridge() { + if (mUiAutomationBridge == null) { + throw new RuntimeException("UiDevice not initialized"); + } + return mUiAutomationBridge; + } + + /** + * Enables or disables layout hierarchy compression. + * + * If compression is enabled, the layout hierarchy derived from the Acessibility + * framework will only contain nodes that are important for uiautomator + * testing. Any unnecessary surrounding layout nodes that make viewing + * and searching the hierarchy inefficient are removed. + * + * @param compressed true to enable compression; else, false to disable + * @since API Level 18 + */ + public void setCompressedLayoutHeirarchy(boolean compressed) { + getAutomatorBridge().setCompressedLayoutHierarchy(compressed); + } + + /** + * Retrieves a singleton instance of UiDevice + * + * @return UiDevice instance + * @since API Level 16 + */ + public static UiDevice getInstance() { + if (sDevice == null) { + sDevice = new UiDevice(); + } + return sDevice; + } + + /** + * Returns the display size in dp (device-independent pixel) + * + * The returned display size is adjusted per screen rotation. Also this will return the actual + * size of the screen, rather than adjusted per system decorations (like status bar). + * + * @return a Point containing the display size in dp + */ + public Point getDisplaySizeDp() { + Tracer.trace(); + Display display = getAutomatorBridge().getDefaultDisplay(); + Point p = new Point(); + display.getRealSize(p); + DisplayMetrics metrics = new DisplayMetrics(); + display.getRealMetrics(metrics); + float dpx = p.x / metrics.density; + float dpy = p.y / metrics.density; + p.x = Math.round(dpx); + p.y = Math.round(dpy); + return p; + } + + /** + * Retrieves the product name of the device. + * + * This method provides information on what type of device the test is running on. This value is + * the same as returned by invoking #adb shell getprop ro.product.name. + * + * @return product name of the device + * @since API Level 17 + */ + public String getProductName() { + Tracer.trace(); + return Build.PRODUCT; + } + + /** + * Retrieves the text from the last UI traversal event received. + * + * You can use this method to read the contents in a WebView container + * because the accessibility framework fires events + * as each text is highlighted. You can write a test to perform + * directional arrow presses to focus on different elements inside a WebView, + * and call this method to get the text from each traversed element. + * If you are testing a view container that can return a reference to a + * Document Object Model (DOM) object, your test should use the view's + * DOM instead. + * + * @return text of the last traversal event, else return an empty string + * @since API Level 16 + */ + public String getLastTraversedText() { + Tracer.trace(); + return getAutomatorBridge().getQueryController().getLastTraversedText(); + } + + /** + * Clears the text from the last UI traversal event. + * See {@link #getLastTraversedText()}. + * @since API Level 16 + */ + public void clearLastTraversedText() { + Tracer.trace(); + getAutomatorBridge().getQueryController().clearLastTraversedText(); + } + + /** + * Simulates a short press on the MENU button. + * @return true if successful, else return false + * @since API Level 16 + */ + public boolean pressMenu() { + Tracer.trace(); + waitForIdle(); + return getAutomatorBridge().getInteractionController().sendKeyAndWaitForEvent( + KeyEvent.KEYCODE_MENU, 0, AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED, + KEY_PRESS_EVENT_TIMEOUT); + } + + /** + * Simulates a short press on the BACK button. + * @return true if successful, else return false + * @since API Level 16 + */ + public boolean pressBack() { + Tracer.trace(); + waitForIdle(); + return getAutomatorBridge().getInteractionController().sendKeyAndWaitForEvent( + KeyEvent.KEYCODE_BACK, 0, AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED, + KEY_PRESS_EVENT_TIMEOUT); + } + + /** + * Simulates a short press on the HOME button. + * @return true if successful, else return false + * @since API Level 16 + */ + public boolean pressHome() { + Tracer.trace(); + waitForIdle(); + return getAutomatorBridge().getInteractionController().sendKeyAndWaitForEvent( + KeyEvent.KEYCODE_HOME, 0, AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED, + KEY_PRESS_EVENT_TIMEOUT); + } + + /** + * Simulates a short press on the SEARCH button. + * @return true if successful, else return false + * @since API Level 16 + */ + public boolean pressSearch() { + Tracer.trace(); + return pressKeyCode(KeyEvent.KEYCODE_SEARCH); + } + + /** + * Simulates a short press on the CENTER button. + * @return true if successful, else return false + * @since API Level 16 + */ + public boolean pressDPadCenter() { + Tracer.trace(); + return pressKeyCode(KeyEvent.KEYCODE_DPAD_CENTER); + } + + /** + * Simulates a short press on the DOWN button. + * @return true if successful, else return false + * @since API Level 16 + */ + public boolean pressDPadDown() { + Tracer.trace(); + return pressKeyCode(KeyEvent.KEYCODE_DPAD_DOWN); + } + + /** + * Simulates a short press on the UP button. + * @return true if successful, else return false + * @since API Level 16 + */ + public boolean pressDPadUp() { + Tracer.trace(); + return pressKeyCode(KeyEvent.KEYCODE_DPAD_UP); + } + + /** + * Simulates a short press on the LEFT button. + * @return true if successful, else return false + * @since API Level 16 + */ + public boolean pressDPadLeft() { + Tracer.trace(); + return pressKeyCode(KeyEvent.KEYCODE_DPAD_LEFT); + } + + /** + * Simulates a short press on the RIGHT button. + * @return true if successful, else return false + * @since API Level 16 + */ + public boolean pressDPadRight() { + Tracer.trace(); + return pressKeyCode(KeyEvent.KEYCODE_DPAD_RIGHT); + } + + /** + * Simulates a short press on the DELETE key. + * @return true if successful, else return false + * @since API Level 16 + */ + public boolean pressDelete() { + Tracer.trace(); + return pressKeyCode(KeyEvent.KEYCODE_DEL); + } + + /** + * Simulates a short press on the ENTER key. + * @return true if successful, else return false + * @since API Level 16 + */ + public boolean pressEnter() { + Tracer.trace(); + return pressKeyCode(KeyEvent.KEYCODE_ENTER); + } + + /** + * Simulates a short press using a key code. + * + * See {@link KeyEvent} + * @return true if successful, else return false + * @since API Level 16 + */ + public boolean pressKeyCode(int keyCode) { + Tracer.trace(keyCode); + waitForIdle(); + return getAutomatorBridge().getInteractionController().sendKey(keyCode, 0); + } + + /** + * Simulates a short press using a key code. + * + * See {@link KeyEvent}. + * @param keyCode the key code of the event. + * @param metaState an integer in which each bit set to 1 represents a pressed meta key + * @return true if successful, else return false + * @since API Level 16 + */ + public boolean pressKeyCode(int keyCode, int metaState) { + Tracer.trace(keyCode, metaState); + waitForIdle(); + return getAutomatorBridge().getInteractionController().sendKey(keyCode, metaState); + } + + /** + * Simulates a short press on the Recent Apps button. + * + * @return true if successful, else return false + * @throws RemoteException + * @since API Level 16 + */ + public boolean pressRecentApps() throws RemoteException { + Tracer.trace(); + waitForIdle(); + return getAutomatorBridge().getInteractionController().toggleRecentApps(); + } + + /** + * Opens the notification shade. + * + * @return true if successful, else return false + * @since API Level 18 + */ + public boolean openNotification() { + Tracer.trace(); + waitForIdle(); + return getAutomatorBridge().getInteractionController().openNotification(); + } + + /** + * Opens the Quick Settings shade. + * + * @return true if successful, else return false + * @since API Level 18 + */ + public boolean openQuickSettings() { + Tracer.trace(); + waitForIdle(); + return getAutomatorBridge().getInteractionController().openQuickSettings(); + } + + /** + * Gets the width of the display, in pixels. The width and height details + * are reported based on the current orientation of the display. + * @return width in pixels or zero on failure + * @since API Level 16 + */ + public int getDisplayWidth() { + Tracer.trace(); + Display display = getAutomatorBridge().getDefaultDisplay(); + Point p = new Point(); + display.getSize(p); + return p.x; + } + + /** + * Gets the height of the display, in pixels. The size is adjusted based + * on the current orientation of the display. + * @return height in pixels or zero on failure + * @since API Level 16 + */ + public int getDisplayHeight() { + Tracer.trace(); + Display display = getAutomatorBridge().getDefaultDisplay(); + Point p = new Point(); + display.getSize(p); + return p.y; + } + + /** + * Perform a click at arbitrary coordinates specified by the user + * + * @param x coordinate + * @param y coordinate + * @return true if the click succeeded else false + * @since API Level 16 + */ + public boolean click(int x, int y) { + Tracer.trace(x, y); + if (x >= getDisplayWidth() || y >= getDisplayHeight()) { + return (false); + } + return getAutomatorBridge().getInteractionController().clickNoSync(x, y); + } + + /** + * Performs a swipe from one coordinate to another using the number of steps + * to determine smoothness and speed. Each step execution is throttled to 5ms + * per step. So for a 100 steps, the swipe will take about 1/2 second to complete. + * + * @param startX + * @param startY + * @param endX + * @param endY + * @param steps is the number of move steps sent to the system + * @return false if the operation fails or the coordinates are invalid + * @since API Level 16 + */ + public boolean swipe(int startX, int startY, int endX, int endY, int steps) { + Tracer.trace(startX, startY, endX, endY, steps); + return getAutomatorBridge().getInteractionController() + .swipe(startX, startY, endX, endY, steps); + } + + /** + * Performs a swipe from one coordinate to another coordinate. You can control + * the smoothness and speed of the swipe by specifying the number of steps. + * Each step execution is throttled to 5 milliseconds per step, so for a 100 + * steps, the swipe will take around 0.5 seconds to complete. + * + * @param startX X-axis value for the starting coordinate + * @param startY Y-axis value for the starting coordinate + * @param endX X-axis value for the ending coordinate + * @param endY Y-axis value for the ending coordinate + * @param steps is the number of steps for the swipe action + * @return true if swipe is performed, false if the operation fails + * or the coordinates are invalid + * @since API Level 18 + */ + public boolean drag(int startX, int startY, int endX, int endY, int steps) { + Tracer.trace(startX, startY, endX, endY, steps); + return getAutomatorBridge().getInteractionController() + .swipe(startX, startY, endX, endY, steps, true); + } + + /** + * Performs a swipe between points in the Point array. Each step execution is throttled + * to 5ms per step. So for a 100 steps, the swipe will take about 1/2 second to complete + * + * @param segments is Point array containing at least one Point object + * @param segmentSteps steps to inject between two Points + * @return true on success + * @since API Level 16 + */ + public boolean swipe(Point[] segments, int segmentSteps) { + Tracer.trace(segments, segmentSteps); + return getAutomatorBridge().getInteractionController().swipe(segments, segmentSteps); + } + + /** + * Waits for the current application to idle. + * Default wait timeout is 10 seconds + * @since API Level 16 + */ + public void waitForIdle() { + Tracer.trace(); + waitForIdle(Configurator.getInstance().getWaitForIdleTimeout()); + } + + /** + * Waits for the current application to idle. + * @param timeout in milliseconds + * @since API Level 16 + */ + public void waitForIdle(long timeout) { + Tracer.trace(timeout); + getAutomatorBridge().waitForIdle(timeout); + } + + /** + * Retrieves the last activity to report accessibility events. + * @deprecated The results returned should be considered unreliable + * @return String name of activity + * @since API Level 16 + */ + @Deprecated + public String getCurrentActivityName() { + Tracer.trace(); + return getAutomatorBridge().getQueryController().getCurrentActivityName(); + } + + /** + * Retrieves the name of the last package to report accessibility events. + * @return String name of package + * @since API Level 16 + */ + public String getCurrentPackageName() { + Tracer.trace(); + return getAutomatorBridge().getQueryController().getCurrentPackageName(); + } + + /** + * Registers a {@link UiWatcher} to run automatically when the testing framework is unable to + * find a match using a {@link UiSelector}. See {@link #runWatchers()} + * + * @param name to register the UiWatcher + * @param watcher {@link UiWatcher} + * @since API Level 16 + */ + public void registerWatcher(String name, UiWatcher watcher) { + Tracer.trace(name, watcher); + if (mInWatcherContext) { + throw new IllegalStateException("Cannot register new watcher from within another"); + } + mWatchers.put(name, watcher); + } + + /** + * Removes a previously registered {@link UiWatcher}. + * + * See {@link #registerWatcher(String, UiWatcher)} + * @param name used to register the UiWatcher + * @since API Level 16 + */ + public void removeWatcher(String name) { + Tracer.trace(name); + if (mInWatcherContext) { + throw new IllegalStateException("Cannot remove a watcher from within another"); + } + mWatchers.remove(name); + } + + /** + * This method forces all registered watchers to run. + * See {@link #registerWatcher(String, UiWatcher)} + * @since API Level 16 + */ + public void runWatchers() { + Tracer.trace(); + if (mInWatcherContext) { + return; + } + + for (String watcherName : mWatchers.keySet()) { + UiWatcher watcher = mWatchers.get(watcherName); + if (watcher != null) { + try { + mInWatcherContext = true; + if (watcher.checkForCondition()) { + setWatcherTriggered(watcherName); + } + } catch (Exception e) { + Log.e(LOG_TAG, "Exceuting watcher: " + watcherName, e); + } finally { + mInWatcherContext = false; + } + } + } + } + + /** + * Resets a {@link UiWatcher} that has been triggered. + * If a UiWatcher runs and its {@link UiWatcher#checkForCondition()} call + * returned true, then the UiWatcher is considered triggered. + * See {@link #registerWatcher(String, UiWatcher)} + * @since API Level 16 + */ + public void resetWatcherTriggers() { + Tracer.trace(); + mWatchersTriggers.clear(); + } + + /** + * Checks if a specific registered {@link UiWatcher} has triggered. + * See {@link #registerWatcher(String, UiWatcher)}. If a UiWatcher runs and its + * {@link UiWatcher#checkForCondition()} call returned true, then + * the UiWatcher is considered triggered. This is helpful if a watcher is detecting errors + * from ANR or crash dialogs and the test needs to know if a UiWatcher has been triggered. + * + * @param watcherName + * @return true if triggered else false + * @since API Level 16 + */ + public boolean hasWatcherTriggered(String watcherName) { + Tracer.trace(watcherName); + return mWatchersTriggers.contains(watcherName); + } + + /** + * Checks if any registered {@link UiWatcher} have triggered. + * + * See {@link #registerWatcher(String, UiWatcher)} + * See {@link #hasWatcherTriggered(String)} + * @since API Level 16 + */ + public boolean hasAnyWatcherTriggered() { + Tracer.trace(); + return mWatchersTriggers.size() > 0; + } + + /** + * Used internally by this class to set a {@link UiWatcher} state as triggered. + * @param watcherName + */ + private void setWatcherTriggered(String watcherName) { + Tracer.trace(watcherName); + if (!hasWatcherTriggered(watcherName)) { + mWatchersTriggers.add(watcherName); + } + } + + /** + * Check if the device is in its natural orientation. This is determined by checking if the + * orientation is at 0 or 180 degrees. + * @return true if it is in natural orientation + * @since API Level 17 + */ + public boolean isNaturalOrientation() { + Tracer.trace(); + waitForIdle(); + int ret = getAutomatorBridge().getRotation(); + return ret == UiAutomation.ROTATION_FREEZE_0 || + ret == UiAutomation.ROTATION_FREEZE_180; + } + + /** + * Returns the current rotation of the display, as defined in {@link Surface} + * @since API Level 17 + */ + public int getDisplayRotation() { + Tracer.trace(); + waitForIdle(); + return getAutomatorBridge().getRotation(); + } + + /** + * Disables the sensors and freezes the device rotation at its + * current rotation state. + * @throws RemoteException + * @since API Level 16 + */ + public void freezeRotation() throws RemoteException { + Tracer.trace(); + getAutomatorBridge().getInteractionController().freezeRotation(); + } + + /** + * Re-enables the sensors and un-freezes the device rotation allowing its contents + * to rotate with the device physical rotation. During a test execution, it is best to + * keep the device frozen in a specific orientation until the test case execution has completed. + * @throws RemoteException + */ + public void unfreezeRotation() throws RemoteException { + Tracer.trace(); + getAutomatorBridge().getInteractionController().unfreezeRotation(); + } + + /** + * Simulates orienting the device to the left and also freezes rotation + * by disabling the sensors. + * + * If you want to un-freeze the rotation and re-enable the sensors + * see {@link #unfreezeRotation()}. + * @throws RemoteException + * @since API Level 17 + */ + public void setOrientationLeft() throws RemoteException { + Tracer.trace(); + getAutomatorBridge().getInteractionController().setRotationLeft(); + waitForIdle(); // we don't need to check for idle on entry for this. We'll sync on exit + } + + /** + * Simulates orienting the device to the right and also freezes rotation + * by disabling the sensors. + * + * If you want to un-freeze the rotation and re-enable the sensors + * see {@link #unfreezeRotation()}. + * @throws RemoteException + * @since API Level 17 + */ + public void setOrientationRight() throws RemoteException { + Tracer.trace(); + getAutomatorBridge().getInteractionController().setRotationRight(); + waitForIdle(); // we don't need to check for idle on entry for this. We'll sync on exit + } + + /** + * Simulates orienting the device into its natural orientation and also freezes rotation + * by disabling the sensors. + * + * If you want to un-freeze the rotation and re-enable the sensors + * see {@link #unfreezeRotation()}. + * @throws RemoteException + * @since API Level 17 + */ + public void setOrientationNatural() throws RemoteException { + Tracer.trace(); + getAutomatorBridge().getInteractionController().setRotationNatural(); + waitForIdle(); // we don't need to check for idle on entry for this. We'll sync on exit + } + + /** + * This method simulates pressing the power button if the screen is OFF else + * it does nothing if the screen is already ON. + * + * If the screen was OFF and it just got turned ON, this method will insert a 500ms delay + * to allow the device time to wake up and accept input. + * @throws RemoteException + * @since API Level 16 + */ + public void wakeUp() throws RemoteException { + Tracer.trace(); + if(getAutomatorBridge().getInteractionController().wakeDevice()) { + // sync delay to allow the window manager to start accepting input + // after the device is awakened. + SystemClock.sleep(500); + } + } + + /** + * Checks the power manager if the screen is ON. + * + * @return true if the screen is ON else false + * @throws RemoteException + * @since API Level 16 + */ + public boolean isScreenOn() throws RemoteException { + Tracer.trace(); + return getAutomatorBridge().getInteractionController().isScreenOn(); + } + + /** + * This method simply presses the power button if the screen is ON else + * it does nothing if the screen is already OFF. + * + * @throws RemoteException + * @since API Level 16 + */ + public void sleep() throws RemoteException { + Tracer.trace(); + getAutomatorBridge().getInteractionController().sleepDevice(); + } + + /** + * Helper method used for debugging to dump the current window's layout hierarchy. + * The file root location is /data/local/tmp + * + * @param fileName + * @since API Level 16 + */ + public void dumpWindowHierarchy(String fileName) { + Tracer.trace(fileName); + AccessibilityNodeInfo root = + getAutomatorBridge().getQueryController().getAccessibilityRootNode(); + if(root != null) { + Display display = getAutomatorBridge().getDefaultDisplay(); + Point size = new Point(); + display.getSize(size); + AccessibilityNodeInfoDumper.dumpWindowToFile(root, + new File(new File(Environment.getDataDirectory(), "local/tmp"), fileName), + display.getRotation(), size.x, size.y); + } + } + + /** + * Waits for a window content update event to occur. + * + * If a package name for the window is specified, but the current window + * does not have the same package name, the function returns immediately. + * + * @param packageName the specified window package name (can be null). + * If null, a window update from any front-end window will end the wait + * @param timeout the timeout for the wait + * + * @return true if a window update occurred, false if timeout has elapsed or if the current + * window does not have the specified package name + * @since API Level 16 + */ + public boolean waitForWindowUpdate(final String packageName, long timeout) { + Tracer.trace(packageName, timeout); + if (packageName != null) { + if (!packageName.equals(getCurrentPackageName())) { + return false; + } + } + Runnable emptyRunnable = new Runnable() { + @Override + public void run() { + } + }; + AccessibilityEventFilter checkWindowUpdate = new AccessibilityEventFilter() { + @Override + public boolean accept(AccessibilityEvent t) { + if (t.getEventType() == AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED) { + return packageName == null || packageName.equals(t.getPackageName()); + } + return false; + } + }; + try { + getAutomatorBridge().executeCommandAndWaitForAccessibilityEvent( + emptyRunnable, checkWindowUpdate, timeout); + } catch (TimeoutException e) { + return false; + } catch (Exception e) { + Log.e(LOG_TAG, "waitForWindowUpdate: general exception from bridge", e); + return false; + } + return true; + } + + /** + * Take a screenshot of current window and store it as PNG + * + * Default scale of 1.0f (original size) and 90% quality is used + * The screenshot is adjusted per screen rotation + * + * @param storePath where the PNG should be written to + * @return true if screen shot is created successfully, false otherwise + * @since API Level 17 + */ + public boolean takeScreenshot(File storePath) { + Tracer.trace(storePath); + return takeScreenshot(storePath, 1.0f, 90); + } + + /** + * Take a screenshot of current window and store it as PNG + * + * The screenshot is adjusted per screen rotation + * + * @param storePath where the PNG should be written to + * @param scale scale the screenshot down if needed; 1.0f for original size + * @param quality quality of the PNG compression; range: 0-100 + * @return true if screen shot is created successfully, false otherwise + * @since API Level 17 + */ + public boolean takeScreenshot(File storePath, float scale, int quality) { + Tracer.trace(storePath, scale, quality); + return getAutomatorBridge().takeScreenshot(storePath, quality); + } +} diff --git a/cmds/uiautomator/library/core-src/com/android/uiautomator/core/UiObject.java b/cmds/uiautomator/library/core-src/com/android/uiautomator/core/UiObject.java new file mode 100644 index 0000000000000000000000000000000000000000..4bb99cd4b6665423ff39c46614dd9a3cc76e6b2e --- /dev/null +++ b/cmds/uiautomator/library/core-src/com/android/uiautomator/core/UiObject.java @@ -0,0 +1,1083 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.uiautomator.core; + +import android.graphics.Point; +import android.graphics.Rect; +import android.os.SystemClock; +import android.util.Log; +import android.view.KeyEvent; +import android.view.MotionEvent.PointerCoords; +import android.view.accessibility.AccessibilityNodeInfo; + +/** + * A UiObject is a representation of a view. It is not in any way directly bound to a + * view as an object reference. A UiObject contains information to help it + * locate a matching view at runtime based on the {@link UiSelector} properties specified in + * its constructor. Once you create an instance of a UiObject, it can + * be reused for different views that match the selector criteria. + * @since API Level 16 + */ +public class UiObject { + private static final String LOG_TAG = UiObject.class.getSimpleName(); + /** + * @since API Level 16 + * @deprecated use {@link Configurator#setWaitForSelectorTimeout(long)} + **/ + @Deprecated + protected static final long WAIT_FOR_SELECTOR_TIMEOUT = 10 * 1000; + /** + * @since API Level 16 + **/ + protected static final long WAIT_FOR_SELECTOR_POLL = 1000; + // set a default timeout to 5.5s, since ANR threshold is 5s + /** + * @since API Level 16 + **/ + protected static final long WAIT_FOR_WINDOW_TMEOUT = 5500; + /** + * @since API Level 16 + **/ + protected static final int SWIPE_MARGIN_LIMIT = 5; + /** + * @since API Level 17 + * @deprecated use {@link Configurator#setScrollAcknowledgmentTimeout(long)} + **/ + @Deprecated + protected static final long WAIT_FOR_EVENT_TMEOUT = 3 * 1000; + /** + * @since API Level 18 + **/ + protected static final int FINGER_TOUCH_HALF_WIDTH = 20; + + private final UiSelector mSelector; + + private final Configurator mConfig = Configurator.getInstance(); + + /** + * Constructs a UiObject to represent a view that matches the specified + * selector criteria. + * @param selector + * @since API Level 16 + */ + public UiObject(UiSelector selector) { + mSelector = selector; + } + + /** + * Debugging helper. A test can dump the properties of a selector as a string + * to its logs if needed. getSelector().toString(); + * + * @return {@link UiSelector} + * @since API Level 16 + */ + public final UiSelector getSelector() { + Tracer.trace(); + return new UiSelector(mSelector); + } + + /** + * Retrieves the {@link QueryController} to translate a {@link UiSelector} selector + * into an {@link AccessibilityNodeInfo}. + * + * @return {@link QueryController} + */ + QueryController getQueryController() { + return UiDevice.getInstance().getAutomatorBridge().getQueryController(); + } + + /** + * Retrieves the {@link InteractionController} to perform finger actions such as tapping, + * swiping, or entering text. + * + * @return {@link InteractionController} + */ + InteractionController getInteractionController() { + return UiDevice.getInstance().getAutomatorBridge().getInteractionController(); + } + + /** + * Creates a new UiObject for a child view that is under the present UiObject. + * + * @param selector for child view to match + * @return a new UiObject representing the child view + * @since API Level 16 + */ + public UiObject getChild(UiSelector selector) throws UiObjectNotFoundException { + Tracer.trace(selector); + return new UiObject(getSelector().childSelector(selector)); + } + + /** + * Creates a new UiObject for a sibling view or a child of the sibling view, + * relative to the present UiObject. + * + * @param selector for a sibling view or children of the sibling view + * @return a new UiObject representing the matched view + * @throws UiObjectNotFoundException + * @since API Level 16 + */ + public UiObject getFromParent(UiSelector selector) throws UiObjectNotFoundException { + Tracer.trace(selector); + return new UiObject(getSelector().fromParent(selector)); + } + + /** + * Counts the child views immediately under the present UiObject. + * + * @return the count of child views. + * @throws UiObjectNotFoundException + * @since API Level 16 + */ + public int getChildCount() throws UiObjectNotFoundException { + Tracer.trace(); + AccessibilityNodeInfo node = findAccessibilityNodeInfo(mConfig.getWaitForSelectorTimeout()); + if(node == null) { + throw new UiObjectNotFoundException(getSelector().toString()); + } + return node.getChildCount(); + } + + /** + * Finds a matching UI element in the accessibility hierarchy, by + * using the selector for this UiObject. + * + * @param timeout in milliseconds + * @return AccessibilityNodeInfo if found else null + * @since API Level 16 + */ + protected AccessibilityNodeInfo findAccessibilityNodeInfo(long timeout) { + AccessibilityNodeInfo node = null; + long startMills = SystemClock.uptimeMillis(); + long currentMills = 0; + while (currentMills <= timeout) { + node = getQueryController().findAccessibilityNodeInfo(getSelector()); + if (node != null) { + break; + } else { + // does nothing if we're reentering another runWatchers() + UiDevice.getInstance().runWatchers(); + } + currentMills = SystemClock.uptimeMillis() - startMills; + if(timeout > 0) { + SystemClock.sleep(WAIT_FOR_SELECTOR_POLL); + } + } + return node; + } + + /** + * Drags this object to a destination UiObject. + * The number of steps specified in your input parameter can influence the + * drag speed, and varying speeds may impact the results. Consider + * evaluating different speeds when using this method in your tests. + * + * @param destObj the destination UiObject. + * @param steps usually 40 steps. You can increase or decrease the steps to change the speed. + * @return true if successful + * @throws UiObjectNotFoundException + * @since API Level 18 + */ + public boolean dragTo(UiObject destObj, int steps) throws UiObjectNotFoundException { + Rect srcRect = getVisibleBounds(); + Rect dstRect = destObj.getVisibleBounds(); + return getInteractionController().swipe(srcRect.centerX(), srcRect.centerY(), + dstRect.centerX(), dstRect.centerY(), steps, true); + } + + /** + * Drags this object to arbitrary coordinates. + * The number of steps specified in your input parameter can influence the + * drag speed, and varying speeds may impact the results. Consider + * evaluating different speeds when using this method in your tests. + * + * @param destX the X-axis coordinate. + * @param destY the Y-axis coordinate. + * @param steps usually 40 steps. You can increase or decrease the steps to change the speed. + * @return true if successful + * @throws UiObjectNotFoundException + * @since API Level 18 + */ + public boolean dragTo(int destX, int destY, int steps) throws UiObjectNotFoundException { + Rect srcRect = getVisibleBounds(); + return getInteractionController().swipe(srcRect.centerX(), srcRect.centerY(), destX, destY, + steps, true); + } + + /** + * Performs the swipe up action on the UiObject. + * See also: + *
    + *
  • {@link UiScrollable#scrollToBeginning(int)}
  • + *
  • {@link UiScrollable#scrollToEnd(int)}
  • + *
  • {@link UiScrollable#scrollBackward()}
  • + *
  • {@link UiScrollable#scrollForward()}
  • + *
+ * + * @param steps indicates the number of injected move steps into the system. Steps are + * injected about 5ms apart. So a 100 steps may take about 1/2 second to complete. + * @return true of successful + * @throws UiObjectNotFoundException + * @since API Level 16 + */ + public boolean swipeUp(int steps) throws UiObjectNotFoundException { + Tracer.trace(steps); + Rect rect = getVisibleBounds(); + if(rect.height() <= SWIPE_MARGIN_LIMIT * 2) + return false; // too small to swipe + return getInteractionController().swipe(rect.centerX(), + rect.bottom - SWIPE_MARGIN_LIMIT, rect.centerX(), rect.top + SWIPE_MARGIN_LIMIT, + steps); + } + + /** + * Performs the swipe down action on the UiObject. + * The swipe gesture can be performed over any surface. The targeted + * UI element does not need to be scrollable. + * See also: + *
    + *
  • {@link UiScrollable#scrollToBeginning(int)}
  • + *
  • {@link UiScrollable#scrollToEnd(int)}
  • + *
  • {@link UiScrollable#scrollBackward()}
  • + *
  • {@link UiScrollable#scrollForward()}
  • + *
+ * + * @param steps indicates the number of injected move steps into the system. Steps are + * injected about 5ms apart. So a 100 steps may take about 1/2 second to complete. + * @return true if successful + * @throws UiObjectNotFoundException + * @since API Level 16 + */ + public boolean swipeDown(int steps) throws UiObjectNotFoundException { + Tracer.trace(steps); + Rect rect = getVisibleBounds(); + if(rect.height() <= SWIPE_MARGIN_LIMIT * 2) + return false; // too small to swipe + return getInteractionController().swipe(rect.centerX(), + rect.top + SWIPE_MARGIN_LIMIT, rect.centerX(), + rect.bottom - SWIPE_MARGIN_LIMIT, steps); + } + + /** + * Performs the swipe left action on the UiObject. + * The swipe gesture can be performed over any surface. The targeted + * UI element does not need to be scrollable. + * See also: + *
    + *
  • {@link UiScrollable#scrollToBeginning(int)}
  • + *
  • {@link UiScrollable#scrollToEnd(int)}
  • + *
  • {@link UiScrollable#scrollBackward()}
  • + *
  • {@link UiScrollable#scrollForward()}
  • + *
+ * + * @param steps indicates the number of injected move steps into the system. Steps are + * injected about 5ms apart. So a 100 steps may take about 1/2 second to complete. + * @return true if successful + * @throws UiObjectNotFoundException + * @since API Level 16 + */ + public boolean swipeLeft(int steps) throws UiObjectNotFoundException { + Tracer.trace(steps); + Rect rect = getVisibleBounds(); + if(rect.width() <= SWIPE_MARGIN_LIMIT * 2) + return false; // too small to swipe + return getInteractionController().swipe(rect.right - SWIPE_MARGIN_LIMIT, + rect.centerY(), rect.left + SWIPE_MARGIN_LIMIT, rect.centerY(), steps); + } + + /** + * Performs the swipe right action on the UiObject. + * The swipe gesture can be performed over any surface. The targeted + * UI element does not need to be scrollable. + * See also: + *
    + *
  • {@link UiScrollable#scrollToBeginning(int)}
  • + *
  • {@link UiScrollable#scrollToEnd(int)}
  • + *
  • {@link UiScrollable#scrollBackward()}
  • + *
  • {@link UiScrollable#scrollForward()}
  • + *
+ * + * @param steps indicates the number of injected move steps into the system. Steps are + * injected about 5ms apart. So a 100 steps may take about 1/2 second to complete. + * @return true if successful + * @throws UiObjectNotFoundException + * @since API Level 16 + */ + public boolean swipeRight(int steps) throws UiObjectNotFoundException { + Tracer.trace(steps); + Rect rect = getVisibleBounds(); + if(rect.width() <= SWIPE_MARGIN_LIMIT * 2) + return false; // too small to swipe + return getInteractionController().swipe(rect.left + SWIPE_MARGIN_LIMIT, + rect.centerY(), rect.right - SWIPE_MARGIN_LIMIT, rect.centerY(), steps); + } + + /** + * Finds the visible bounds of a partially visible UI element + * + * @param node + * @return null if node is null, else a Rect containing visible bounds + */ + private Rect getVisibleBounds(AccessibilityNodeInfo node) { + if (node == null) { + return null; + } + + // targeted node's bounds + int w = UiDevice.getInstance().getDisplayWidth(); + int h = UiDevice.getInstance().getDisplayHeight(); + Rect nodeRect = AccessibilityNodeInfoHelper.getVisibleBoundsInScreen(node, w, h); + + // is the targeted node within a scrollable container? + AccessibilityNodeInfo scrollableParentNode = getScrollableParent(node); + if(scrollableParentNode == null) { + // nothing to adjust for so return the node's Rect as is + return nodeRect; + } + + // Scrollable parent's visible bounds + Rect parentRect = AccessibilityNodeInfoHelper + .getVisibleBoundsInScreen(scrollableParentNode, w, h); + // adjust for partial clipping of targeted by parent node if required + nodeRect.intersect(parentRect); + return nodeRect; + } + + /** + * Walks up the layout hierarchy to find a scrollable parent. A scrollable parent + * indicates that this node might be in a container where it is partially + * visible due to scrolling. In this case, its clickable center might not be visible and + * the click coordinates should be adjusted. + * + * @param node + * @return The accessibility node info. + */ + private AccessibilityNodeInfo getScrollableParent(AccessibilityNodeInfo node) { + AccessibilityNodeInfo parent = node; + while(parent != null) { + parent = parent.getParent(); + if (parent != null && parent.isScrollable()) { + return parent; + } + } + return null; + } + + /** + * Performs a click at the center of the visible bounds of the UI element represented + * by this UiObject. + * + * @return true id successful else false + * @throws UiObjectNotFoundException + * @since API Level 16 + */ + public boolean click() throws UiObjectNotFoundException { + Tracer.trace(); + AccessibilityNodeInfo node = findAccessibilityNodeInfo(mConfig.getWaitForSelectorTimeout()); + if(node == null) { + throw new UiObjectNotFoundException(getSelector().toString()); + } + Rect rect = getVisibleBounds(node); + return getInteractionController().clickAndSync(rect.centerX(), rect.centerY(), + mConfig.getActionAcknowledgmentTimeout()); + } + + /** + * Waits for window transitions that would typically take longer than the + * usual default timeouts. + * See {@link #clickAndWaitForNewWindow(long)} + * + * @return true if the event was triggered, else false + * @throws UiObjectNotFoundException + * @since API Level 16 + */ + public boolean clickAndWaitForNewWindow() throws UiObjectNotFoundException { + Tracer.trace(); + return clickAndWaitForNewWindow(WAIT_FOR_WINDOW_TMEOUT); + } + + /** + * Performs a click at the center of the visible bounds of the UI element represented + * by this UiObject and waits for window transitions. + * + * This method differ from {@link UiObject#click()} only in that this method waits for a + * a new window transition as a result of the click. Some examples of a window transition: + *
  • launching a new activity
  • + *
  • bringing up a pop-up menu
  • + *
  • bringing up a dialog
  • + * + * @param timeout timeout before giving up on waiting for a new window + * @return true if the event was triggered, else false + * @throws UiObjectNotFoundException + * @since API Level 16 + */ + public boolean clickAndWaitForNewWindow(long timeout) throws UiObjectNotFoundException { + Tracer.trace(timeout); + AccessibilityNodeInfo node = findAccessibilityNodeInfo(mConfig.getWaitForSelectorTimeout()); + if(node == null) { + throw new UiObjectNotFoundException(getSelector().toString()); + } + Rect rect = getVisibleBounds(node); + return getInteractionController().clickAndWaitForNewWindow(rect.centerX(), rect.centerY(), + mConfig.getActionAcknowledgmentTimeout()); + } + + /** + * Clicks the top and left corner of the UI element + * + * @return true on success + * @throws UiObjectNotFoundException + * @since API Level 16 + */ + public boolean clickTopLeft() throws UiObjectNotFoundException { + Tracer.trace(); + AccessibilityNodeInfo node = findAccessibilityNodeInfo(mConfig.getWaitForSelectorTimeout()); + if(node == null) { + throw new UiObjectNotFoundException(getSelector().toString()); + } + Rect rect = getVisibleBounds(node); + return getInteractionController().clickNoSync(rect.left + 5, rect.top + 5); + } + + /** + * Long clicks bottom and right corner of the UI element + * + * @return true if operation was successful + * @throws UiObjectNotFoundException + * @since API Level 16 + */ + public boolean longClickBottomRight() throws UiObjectNotFoundException { + Tracer.trace(); + AccessibilityNodeInfo node = findAccessibilityNodeInfo(mConfig.getWaitForSelectorTimeout()); + if(node == null) { + throw new UiObjectNotFoundException(getSelector().toString()); + } + Rect rect = getVisibleBounds(node); + return getInteractionController().longTapNoSync(rect.right - 5, rect.bottom - 5); + } + + /** + * Clicks the bottom and right corner of the UI element + * + * @return true on success + * @throws UiObjectNotFoundException + * @since API Level 16 + */ + public boolean clickBottomRight() throws UiObjectNotFoundException { + Tracer.trace(); + AccessibilityNodeInfo node = findAccessibilityNodeInfo(mConfig.getWaitForSelectorTimeout()); + if(node == null) { + throw new UiObjectNotFoundException(getSelector().toString()); + } + Rect rect = getVisibleBounds(node); + return getInteractionController().clickNoSync(rect.right - 5, rect.bottom - 5); + } + + /** + * Long clicks the center of the visible bounds of the UI element + * + * @return true if operation was successful + * @throws UiObjectNotFoundException + * @since API Level 16 + */ + public boolean longClick() throws UiObjectNotFoundException { + Tracer.trace(); + AccessibilityNodeInfo node = findAccessibilityNodeInfo(mConfig.getWaitForSelectorTimeout()); + if(node == null) { + throw new UiObjectNotFoundException(getSelector().toString()); + } + Rect rect = getVisibleBounds(node); + return getInteractionController().longTapNoSync(rect.centerX(), rect.centerY()); + } + + /** + * Long clicks on the top and left corner of the UI element + * + * @return true if operation was successful + * @throws UiObjectNotFoundException + * @since API Level 16 + */ + public boolean longClickTopLeft() throws UiObjectNotFoundException { + Tracer.trace(); + AccessibilityNodeInfo node = findAccessibilityNodeInfo(mConfig.getWaitForSelectorTimeout()); + if(node == null) { + throw new UiObjectNotFoundException(getSelector().toString()); + } + Rect rect = getVisibleBounds(node); + return getInteractionController().longTapNoSync(rect.left + 5, rect.top + 5); + } + + /** + * Reads the text property of the UI element + * + * @return text value of the current node represented by this UiObject + * @throws UiObjectNotFoundException if no match could be found + * @since API Level 16 + */ + public String getText() throws UiObjectNotFoundException { + Tracer.trace(); + AccessibilityNodeInfo node = findAccessibilityNodeInfo(mConfig.getWaitForSelectorTimeout()); + if(node == null) { + throw new UiObjectNotFoundException(getSelector().toString()); + } + String retVal = safeStringReturn(node.getText()); + Log.d(LOG_TAG, String.format("getText() = %s", retVal)); + return retVal; + } + + /** + * Retrieves the className property of the UI element. + * + * @return class name of the current node represented by this UiObject + * @throws UiObjectNotFoundException if no match was found + * @since API Level 18 + */ + public String getClassName() throws UiObjectNotFoundException { + Tracer.trace(); + AccessibilityNodeInfo node = findAccessibilityNodeInfo(mConfig.getWaitForSelectorTimeout()); + if(node == null) { + throw new UiObjectNotFoundException(getSelector().toString()); + } + String retVal = safeStringReturn(node.getClassName()); + Log.d(LOG_TAG, String.format("getClassName() = %s", retVal)); + return retVal; + } + + /** + * Reads the content_desc property of the UI element + * + * @return value of node attribute "content_desc" + * @throws UiObjectNotFoundException + * @since API Level 16 + */ + public String getContentDescription() throws UiObjectNotFoundException { + Tracer.trace(); + AccessibilityNodeInfo node = findAccessibilityNodeInfo(mConfig.getWaitForSelectorTimeout()); + if(node == null) { + throw new UiObjectNotFoundException(getSelector().toString()); + } + return safeStringReturn(node.getContentDescription()); + } + + /** + * Sets the text in an editable field, after clearing the field's content. + * + * The {@link UiSelector} selector of this object must reference a UI element that is editable. + * + * When you call this method, the method first simulates a {@link #click()} on + * editable field to set focus. The method then clears the field's contents + * and injects your specified text into the field. + * + * If you want to capture the original contents of the field, call {@link #getText()} first. + * You can then modify the text and use this method to update the field. + * + * @param text string to set + * @return true if operation is successful + * @throws UiObjectNotFoundException + * @since API Level 16 + */ + public boolean setText(String text) throws UiObjectNotFoundException { + Tracer.trace(text); + clearTextField(); + return getInteractionController().sendText(text); + } + + /** + * Clears the existing text contents in an editable field. + * + * The {@link UiSelector} of this object must reference a UI element that is editable. + * + * When you call this method, the method first sets focus at the start edge of the field. + * The method then simulates a long-press to select the existing text, and deletes the + * selected text. + * + * If a "Select-All" option is displayed, the method will automatically attempt to use it + * to ensure full text selection. + * + * Note that it is possible that not all the text in the field is selected; for example, + * if the text contains separators such as spaces, slashes, at symbol etc. + * Also, not all editable fields support the long-press functionality. + * + * @throws UiObjectNotFoundException + * @since API Level 16 + */ + public void clearTextField() throws UiObjectNotFoundException { + Tracer.trace(); + // long click left + center + AccessibilityNodeInfo node = findAccessibilityNodeInfo(mConfig.getWaitForSelectorTimeout()); + if(node == null) { + throw new UiObjectNotFoundException(getSelector().toString()); + } + Rect rect = getVisibleBounds(node); + getInteractionController().longTapNoSync(rect.left + 20, rect.centerY()); + // check if the edit menu is open + UiObject selectAll = new UiObject(new UiSelector().descriptionContains("Select all")); + if(selectAll.waitForExists(50)) + selectAll.click(); + // wait for the selection + SystemClock.sleep(250); + // delete it + getInteractionController().sendKey(KeyEvent.KEYCODE_DEL, 0); + } + + /** + * Check if the UI element's checked property is currently true + * + * @return true if it is else false + * @since API Level 16 + */ + public boolean isChecked() throws UiObjectNotFoundException { + Tracer.trace(); + AccessibilityNodeInfo node = findAccessibilityNodeInfo(mConfig.getWaitForSelectorTimeout()); + if(node == null) { + throw new UiObjectNotFoundException(getSelector().toString()); + } + return node.isChecked(); + } + + /** + * Checks if the UI element's selected property is currently true. + * + * @return true if it is else false + * @throws UiObjectNotFoundException + * @since API Level 16 + */ + public boolean isSelected() throws UiObjectNotFoundException { + Tracer.trace(); + AccessibilityNodeInfo node = findAccessibilityNodeInfo(mConfig.getWaitForSelectorTimeout()); + if(node == null) { + throw new UiObjectNotFoundException(getSelector().toString()); + } + return node.isSelected(); + } + + /** + * Checks if the UI element's checkable property is currently true. + * + * @return true if it is else false + * @throws UiObjectNotFoundException + * @since API Level 16 + */ + public boolean isCheckable() throws UiObjectNotFoundException { + Tracer.trace(); + AccessibilityNodeInfo node = findAccessibilityNodeInfo(mConfig.getWaitForSelectorTimeout()); + if(node == null) { + throw new UiObjectNotFoundException(getSelector().toString()); + } + return node.isCheckable(); + } + + /** + * Checks if the UI element's enabled property is currently true. + * + * @return true if it is else false + * @throws UiObjectNotFoundException + * @since API Level 16 + */ + public boolean isEnabled() throws UiObjectNotFoundException { + Tracer.trace(); + AccessibilityNodeInfo node = findAccessibilityNodeInfo(mConfig.getWaitForSelectorTimeout()); + if(node == null) { + throw new UiObjectNotFoundException(getSelector().toString()); + } + return node.isEnabled(); + } + + /** + * Checks if the UI element's clickable property is currently true. + * + * @return true if it is else false + * @throws UiObjectNotFoundException + * @since API Level 16 + */ + public boolean isClickable() throws UiObjectNotFoundException { + Tracer.trace(); + AccessibilityNodeInfo node = findAccessibilityNodeInfo(mConfig.getWaitForSelectorTimeout()); + if(node == null) { + throw new UiObjectNotFoundException(getSelector().toString()); + } + return node.isClickable(); + } + + /** + * Check if the UI element's focused property is currently true + * + * @return true if it is else false + * @throws UiObjectNotFoundException + * @since API Level 16 + */ + public boolean isFocused() throws UiObjectNotFoundException { + Tracer.trace(); + AccessibilityNodeInfo node = findAccessibilityNodeInfo(mConfig.getWaitForSelectorTimeout()); + if(node == null) { + throw new UiObjectNotFoundException(getSelector().toString()); + } + return node.isFocused(); + } + + /** + * Check if the UI element's focusable property is currently true. + * + * @return true if it is else false + * @throws UiObjectNotFoundException + * @since API Level 16 + */ + public boolean isFocusable() throws UiObjectNotFoundException { + Tracer.trace(); + AccessibilityNodeInfo node = findAccessibilityNodeInfo(mConfig.getWaitForSelectorTimeout()); + if(node == null) { + throw new UiObjectNotFoundException(getSelector().toString()); + } + return node.isFocusable(); + } + + /** + * Check if the view's scrollable property is currently true + * + * @return true if it is else false + * @throws UiObjectNotFoundException + * @since API Level 16 + */ + public boolean isScrollable() throws UiObjectNotFoundException { + Tracer.trace(); + AccessibilityNodeInfo node = findAccessibilityNodeInfo(mConfig.getWaitForSelectorTimeout()); + if(node == null) { + throw new UiObjectNotFoundException(getSelector().toString()); + } + return node.isScrollable(); + } + + /** + * Check if the view's long-clickable property is currently true + * + * @return true if it is else false + * @throws UiObjectNotFoundException + * @since API Level 16 + */ + public boolean isLongClickable() throws UiObjectNotFoundException { + Tracer.trace(); + AccessibilityNodeInfo node = findAccessibilityNodeInfo(mConfig.getWaitForSelectorTimeout()); + if(node == null) { + throw new UiObjectNotFoundException(getSelector().toString()); + } + return node.isLongClickable(); + } + + /** + * Reads the view's package property + * + * @return true if it is else false + * @throws UiObjectNotFoundException + * @since API Level 16 + */ + public String getPackageName() throws UiObjectNotFoundException { + Tracer.trace(); + AccessibilityNodeInfo node = findAccessibilityNodeInfo(mConfig.getWaitForSelectorTimeout()); + if(node == null) { + throw new UiObjectNotFoundException(getSelector().toString()); + } + return safeStringReturn(node.getPackageName()); + } + + /** + * Returns the visible bounds of the view. + * + * If a portion of the view is visible, only the bounds of the visible portion are + * reported. + * + * @return Rect + * @throws UiObjectNotFoundException + * @see {@link #getBounds()} + * @since API Level 17 + */ + public Rect getVisibleBounds() throws UiObjectNotFoundException { + Tracer.trace(); + AccessibilityNodeInfo node = findAccessibilityNodeInfo(mConfig.getWaitForSelectorTimeout()); + if(node == null) { + throw new UiObjectNotFoundException(getSelector().toString()); + } + return getVisibleBounds(node); + } + + /** + * Returns the view's bounds property. See {@link #getVisibleBounds()} + * + * @return Rect + * @throws UiObjectNotFoundException + * @since API Level 16 + */ + public Rect getBounds() throws UiObjectNotFoundException { + Tracer.trace(); + AccessibilityNodeInfo node = findAccessibilityNodeInfo(mConfig.getWaitForSelectorTimeout()); + if(node == null) { + throw new UiObjectNotFoundException(getSelector().toString()); + } + Rect nodeRect = new Rect(); + node.getBoundsInScreen(nodeRect); + + return nodeRect; + } + + /** + * Waits a specified length of time for a view to become visible. + * + * This method waits until the view becomes visible on the display, or + * until the timeout has elapsed. You can use this method in situations where + * the content that you want to select is not immediately displayed. + * + * @param timeout the amount of time to wait (in milliseconds) + * @return true if the view is displayed, else false if timeout elapsed while waiting + * @since API Level 16 + */ + public boolean waitForExists(long timeout) { + Tracer.trace(timeout); + if(findAccessibilityNodeInfo(timeout) != null) { + return true; + } + return false; + } + + /** + * Waits a specified length of time for a view to become undetectable. + * + * This method waits until a view is no longer matchable, or until the + * timeout has elapsed. + * + * A view becomes undetectable when the {@link UiSelector} of the object is + * unable to find a match because the element has either changed its state or is no + * longer displayed. + * + * You can use this method when attempting to wait for some long operation + * to compete, such as downloading a large file or connecting to a remote server. + * + * @param timeout time to wait (in milliseconds) + * @return true if the element is gone before timeout elapsed, else false if timeout elapsed + * but a matching element is still found. + * @since API Level 16 + */ + public boolean waitUntilGone(long timeout) { + Tracer.trace(timeout); + long startMills = SystemClock.uptimeMillis(); + long currentMills = 0; + while (currentMills <= timeout) { + if(findAccessibilityNodeInfo(0) == null) + return true; + currentMills = SystemClock.uptimeMillis() - startMills; + if(timeout > 0) + SystemClock.sleep(WAIT_FOR_SELECTOR_POLL); + } + return false; + } + + /** + * Check if view exists. + * + * This methods performs a {@link #waitForExists(long)} with zero timeout. This + * basically returns immediately whether the view represented by this UiObject + * exists or not. If you need to wait longer for this view, then see + * {@link #waitForExists(long)}. + * + * @return true if the view represented by this UiObject does exist + * @since API Level 16 + */ + public boolean exists() { + Tracer.trace(); + return waitForExists(0); + } + + private String safeStringReturn(CharSequence cs) { + if(cs == null) + return ""; + return cs.toString(); + } + + /** + * Performs a two-pointer gesture, where each pointer moves diagonally + * opposite across the other, from the center out towards the edges of the + * this UiObject. + * @param percent percentage of the object's diagonal length for the pinch gesture + * @param steps the number of steps for the gesture. Steps are injected + * about 5 milliseconds apart, so 100 steps may take around 0.5 seconds to complete. + * @return true if all touch events for this gesture are injected successfully, + * false otherwise + * @throws UiObjectNotFoundException + * @since API Level 18 + */ + public boolean pinchOut(int percent, int steps) throws UiObjectNotFoundException { + // make value between 1 and 100 + percent = (percent < 0) ? 1 : (percent > 100) ? 100 : percent; + float percentage = percent / 100f; + + AccessibilityNodeInfo node = findAccessibilityNodeInfo(mConfig.getWaitForSelectorTimeout()); + if (node == null) { + throw new UiObjectNotFoundException(getSelector().toString()); + } + + Rect rect = getVisibleBounds(node); + if (rect.width() <= FINGER_TOUCH_HALF_WIDTH * 2) + throw new IllegalStateException("Object width is too small for operation"); + + // start from the same point at the center of the control + Point startPoint1 = new Point(rect.centerX() - FINGER_TOUCH_HALF_WIDTH, rect.centerY()); + Point startPoint2 = new Point(rect.centerX() + FINGER_TOUCH_HALF_WIDTH, rect.centerY()); + + // End at the top-left and bottom-right corners of the control + Point endPoint1 = new Point(rect.centerX() - (int)((rect.width()/2) * percentage), + rect.centerY()); + Point endPoint2 = new Point(rect.centerX() + (int)((rect.width()/2) * percentage), + rect.centerY()); + + return performTwoPointerGesture(startPoint1, startPoint2, endPoint1, endPoint2, steps); + } + + /** + * Performs a two-pointer gesture, where each pointer moves diagonally + * toward the other, from the edges to the center of this UiObject . + * @param percent percentage of the object's diagonal length for the pinch gesture + * @param steps the number of steps for the gesture. Steps are injected + * about 5 milliseconds apart, so 100 steps may take around 0.5 seconds to complete. + * @return true if all touch events for this gesture are injected successfully, + * false otherwise + * @throws UiObjectNotFoundException + * @since API Level 18 + */ + public boolean pinchIn(int percent, int steps) throws UiObjectNotFoundException { + // make value between 1 and 100 + percent = (percent < 0) ? 0 : (percent > 100) ? 100 : percent; + float percentage = percent / 100f; + + AccessibilityNodeInfo node = findAccessibilityNodeInfo(mConfig.getWaitForSelectorTimeout()); + if (node == null) { + throw new UiObjectNotFoundException(getSelector().toString()); + } + + Rect rect = getVisibleBounds(node); + if (rect.width() <= FINGER_TOUCH_HALF_WIDTH * 2) + throw new IllegalStateException("Object width is too small for operation"); + + Point startPoint1 = new Point(rect.centerX() - (int)((rect.width()/2) * percentage), + rect.centerY()); + Point startPoint2 = new Point(rect.centerX() + (int)((rect.width()/2) * percentage), + rect.centerY()); + + Point endPoint1 = new Point(rect.centerX() - FINGER_TOUCH_HALF_WIDTH, rect.centerY()); + Point endPoint2 = new Point(rect.centerX() + FINGER_TOUCH_HALF_WIDTH, rect.centerY()); + + return performTwoPointerGesture(startPoint1, startPoint2, endPoint1, endPoint2, steps); + } + + /** + * Generates a two-pointer gesture with arbitrary starting and ending points. + * + * @param startPoint1 start point of pointer 1 + * @param startPoint2 start point of pointer 2 + * @param endPoint1 end point of pointer 1 + * @param endPoint2 end point of pointer 2 + * @param steps the number of steps for the gesture. Steps are injected + * about 5 milliseconds apart, so 100 steps may take around 0.5 seconds to complete. + * @return true if all touch events for this gesture are injected successfully, + * false otherwise + * @since API Level 18 + */ + public boolean performTwoPointerGesture(Point startPoint1, Point startPoint2, Point endPoint1, + Point endPoint2, int steps) { + + // avoid a divide by zero + if(steps == 0) + steps = 1; + + final float stepX1 = (endPoint1.x - startPoint1.x) / steps; + final float stepY1 = (endPoint1.y - startPoint1.y) / steps; + final float stepX2 = (endPoint2.x - startPoint2.x) / steps; + final float stepY2 = (endPoint2.y - startPoint2.y) / steps; + + int eventX1, eventY1, eventX2, eventY2; + eventX1 = startPoint1.x; + eventY1 = startPoint1.y; + eventX2 = startPoint2.x; + eventY2 = startPoint2.y; + + // allocate for steps plus first down and last up + PointerCoords[] points1 = new PointerCoords[steps + 2]; + PointerCoords[] points2 = new PointerCoords[steps + 2]; + + // Include the first and last touch downs in the arrays of steps + for (int i = 0; i < steps + 1; i++) { + PointerCoords p1 = new PointerCoords(); + p1.x = eventX1; + p1.y = eventY1; + p1.pressure = 1; + p1.size = 1; + points1[i] = p1; + + PointerCoords p2 = new PointerCoords(); + p2.x = eventX2; + p2.y = eventY2; + p2.pressure = 1; + p2.size = 1; + points2[i] = p2; + + eventX1 += stepX1; + eventY1 += stepY1; + eventX2 += stepX2; + eventY2 += stepY2; + } + + // ending pointers coordinates + PointerCoords p1 = new PointerCoords(); + p1.x = endPoint1.x; + p1.y = endPoint1.y; + p1.pressure = 1; + p1.size = 1; + points1[steps + 1] = p1; + + PointerCoords p2 = new PointerCoords(); + p2.x = endPoint2.x; + p2.y = endPoint2.y; + p2.pressure = 1; + p2.size = 1; + points2[steps + 1] = p2; + + return performMultiPointerGesture(points1, points2); + } + + /** + * Performs a multi-touch gesture. You must specify touch coordinates for + * at least 2 pointers. Each pointer must have all of its touch steps + * defined in an array of {@link PointerCoords}. You can use this method to + * specify complex gestures, like circles and irregular shapes, where each + * pointer may take a different path. + * + * To create a single point on a pointer's touch path: + * + * PointerCoords p = new PointerCoords(); + * p.x = stepX; + * p.y = stepY; + * p.pressure = 1; + * p.size = 1; + * + * @param touches represents the pointers' paths. Each {@link PointerCoords} + * array represents a different pointer. Each {@link PointerCoords} in an + * array element represents a touch point on a pointer's path. + * @return true if all touch events for this gesture are injected successfully, + * false otherwise + * @since API Level 18 + */ + public boolean performMultiPointerGesture(PointerCoords[] ...touches) { + return getInteractionController().performMultiPointerGesture(touches); + } +} diff --git a/cmds/uiautomator/library/core-src/com/android/uiautomator/core/UiObjectNotFoundException.java b/cmds/uiautomator/library/core-src/com/android/uiautomator/core/UiObjectNotFoundException.java new file mode 100644 index 0000000000000000000000000000000000000000..fc0891bfbd276e4d5a0d7687c46a4fb3fc5f8137 --- /dev/null +++ b/cmds/uiautomator/library/core-src/com/android/uiautomator/core/UiObjectNotFoundException.java @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.uiautomator.core; + +/** + * Generated in test runs when a {@link UiSelector} selector could not be matched + * to any UI element displayed. + * @since API Level 16 + */ +public class UiObjectNotFoundException extends Exception { + + private static final long serialVersionUID = 1L; + + /** + * @since API Level 16 + **/ + public UiObjectNotFoundException(String msg) { + super(msg); + } + + /** + * @since API Level 16 + **/ + public UiObjectNotFoundException(String detailMessage, Throwable throwable) { + super(detailMessage, throwable); + } + + /** + * @since API Level 16 + **/ + public UiObjectNotFoundException(Throwable throwable) { + super(throwable); + } +} diff --git a/cmds/uiautomator/library/core-src/com/android/uiautomator/core/UiScrollable.java b/cmds/uiautomator/library/core-src/com/android/uiautomator/core/UiScrollable.java new file mode 100644 index 0000000000000000000000000000000000000000..a8d20c3fa7cc3c883cc219eb40d68bc635b1237a --- /dev/null +++ b/cmds/uiautomator/library/core-src/com/android/uiautomator/core/UiScrollable.java @@ -0,0 +1,665 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.uiautomator.core; + +import android.graphics.Rect; +import android.util.Log; +import android.view.accessibility.AccessibilityNodeInfo; + +/** + * UiScrollable is a {@link UiCollection} and provides support for searching + * for items in scrollable layout elements. This class can be used with + * horizontally or vertically scrollable controls. + * @since API Level 16 + */ +public class UiScrollable extends UiCollection { + private static final String LOG_TAG = UiScrollable.class.getSimpleName(); + + // More steps slows the swipe and prevents contents from being flung too far + private static final int SCROLL_STEPS = 55; + + private static final int FLING_STEPS = 5; + + // Restrict a swipe's starting and ending points inside a 10% margin of the target + private static final double DEFAULT_SWIPE_DEADZONE_PCT = 0.1; + + // Limits the number of swipes/scrolls performed during a search + private static int mMaxSearchSwipes = 30; + + // Used in ScrollForward() and ScrollBackward() to determine swipe direction + private boolean mIsVerticalList = true; + + private double mSwipeDeadZonePercentage = DEFAULT_SWIPE_DEADZONE_PCT; + + /** + * Constructor. + * + * @param container a {@link UiSelector} selector to identify the scrollable + * layout element. + * @since API Level 16 + */ + public UiScrollable(UiSelector container) { + // wrap the container selector with container so that QueryController can handle + // this type of enumeration search accordingly + super(container); + } + + /** + * Set the direction of swipes to be vertical when performing scroll actions. + * @return reference to itself + * @since API Level 16 + */ + public UiScrollable setAsVerticalList() { + Tracer.trace(); + mIsVerticalList = true; + return this; + } + + /** + * Set the direction of swipes to be horizontal when performing scroll actions. + * @return reference to itself + * @since API Level 16 + */ + public UiScrollable setAsHorizontalList() { + Tracer.trace(); + mIsVerticalList = false; + return this; + } + + /** + * Used privately when performing swipe searches to decide if an element has become + * visible or not. + * + * @param selector + * @return true if found else false + * @since API Level 16 + */ + protected boolean exists(UiSelector selector) { + if(getQueryController().findAccessibilityNodeInfo(selector) != null) { + return true; + } + return false; + } + + /** + * Searches for a child element in the present scrollable container. + * The search first looks for a child element that matches the selector + * you provided, then looks for the content-description in its children elements. + * If both search conditions are fulfilled, the method returns a {@ link UiObject} + * representing the element matching the selector (not the child element in its + * subhierarchy containing the content-description). By default, this method performs a + * scroll search. + * See {@link #getChildByDescription(UiSelector, String, boolean)} + * + * @param childPattern {@link UiSelector} for a child in a scollable layout element + * @param text Content-description to find in the children of + * the childPattern match + * @return {@link UiObject} representing the child element that matches the search conditions + * @throws UiObjectNotFoundException + * @since API Level 16 + */ + @Override + public UiObject getChildByDescription(UiSelector childPattern, String text) + throws UiObjectNotFoundException { + Tracer.trace(childPattern, text); + return getChildByDescription(childPattern, text, true); + } + + /** + * Searches for a child element in the present scrollable container. + * The search first looks for a child element that matches the selector + * you provided, then looks for the content-description in its children elements. + * If both search conditions are fulfilled, the method returns a {@ link UiObject} + * representing the element matching the selector (not the child element in its + * subhierarchy containing the content-description). + * + * @param childPattern {@link UiSelector} for a child in a scollable layout element + * @param text Content-description to find in the children of + * the childPattern match (may be a partial match) + * @param allowScrollSearch set to true if scrolling is allowed + * @return {@link UiObject} representing the child element that matches the search conditions + * @throws UiObjectNotFoundException + * @since API Level 16 + */ + public UiObject getChildByDescription(UiSelector childPattern, String text, + boolean allowScrollSearch) throws UiObjectNotFoundException { + Tracer.trace(childPattern, text, allowScrollSearch); + if (text != null) { + if (allowScrollSearch) { + scrollIntoView(new UiSelector().descriptionContains(text)); + } + return super.getChildByDescription(childPattern, text); + } + throw new UiObjectNotFoundException("for description= \"" + text + "\""); + } + + /** + * Searches for a child element in the present scrollable container that + * matches the selector you provided. The search is performed without + * scrolling and only on visible elements. + * + * @param childPattern {@link UiSelector} for a child in a scollable layout element + * @param instance int number representing the occurance of + * a childPattern match + * @return {@link UiObject} representing the child element that matches the search conditions + * @since API Level 16 + */ + @Override + public UiObject getChildByInstance(UiSelector childPattern, int instance) + throws UiObjectNotFoundException { + Tracer.trace(childPattern, instance); + UiSelector patternSelector = UiSelector.patternBuilder(getSelector(), + UiSelector.patternBuilder(childPattern).instance(instance)); + return new UiObject(patternSelector); + } + + /** + * Searches for a child element in the present scrollable + * container. The search first looks for a child element that matches the + * selector you provided, then looks for the text in its children elements. + * If both search conditions are fulfilled, the method returns a {@ link UiObject} + * representing the element matching the selector (not the child element in its + * subhierarchy containing the text). By default, this method performs a + * scroll search. + * See {@link #getChildByText(UiSelector, String, boolean)} + * + * @param childPattern {@link UiSelector} selector for a child in a scrollable layout element + * @param text String to find in the children of the childPattern match + * @return {@link UiObject} representing the child element that matches the search conditions + * @throws UiObjectNotFoundException + * @since API Level 16 + */ + @Override + public UiObject getChildByText(UiSelector childPattern, String text) + throws UiObjectNotFoundException { + Tracer.trace(childPattern, text); + return getChildByText(childPattern, text, true); + } + + /** + * Searches for a child element in the present scrollable container. The + * search first looks for a child element that matches the + * selector you provided, then looks for the text in its children elements. + * If both search conditions are fulfilled, the method returns a {@ link UiObject} + * representing the element matching the selector (not the child element in its + * subhierarchy containing the text). + * + * @param childPattern {@link UiSelector} selector for a child in a scrollable layout element + * @param text String to find in the children of the childPattern match + * @param allowScrollSearch set to true if scrolling is allowed + * @return {@link UiObject} representing the child element that matches the search conditions + * @throws UiObjectNotFoundException + * @since API Level 16 + */ + public UiObject getChildByText(UiSelector childPattern, String text, boolean allowScrollSearch) + throws UiObjectNotFoundException { + Tracer.trace(childPattern, text, allowScrollSearch); + if (text != null) { + if (allowScrollSearch) { + scrollIntoView(new UiSelector().text(text)); + } + return super.getChildByText(childPattern, text); + } + throw new UiObjectNotFoundException("for text= \"" + text + "\""); + } + + /** + * Performs a forward scroll action on the scrollable layout element until + * the content-description is found, or until swipe attempts have been exhausted. + * See {@link #setMaxSearchSwipes(int)} + * + * @param text content-description to find within the contents of this scrollable layout element. + * @return true if item is found; else, false + * @since API Level 16 + */ + public boolean scrollDescriptionIntoView(String text) throws UiObjectNotFoundException { + Tracer.trace(text); + return scrollIntoView(new UiSelector().description(text)); + } + + /** + * Perform a forward scroll action to move through the scrollable layout element until + * a visible item that matches the {@link UiObject} is found. + * + * @param obj {@link UiObject} + * @return true if the item was found and now is in view else false + * @since API Level 16 + */ + public boolean scrollIntoView(UiObject obj) throws UiObjectNotFoundException { + Tracer.trace(obj.getSelector()); + return scrollIntoView(obj.getSelector()); + } + + /** + * Perform a scroll forward action to move through the scrollable layout + * element until a visible item that matches the selector is found. + * + * See {@link #scrollDescriptionIntoView(String)} and {@link #scrollTextIntoView(String)}. + * + * @param selector {@link UiSelector} selector + * @return true if the item was found and now is in view; else, false + * @since API Level 16 + */ + public boolean scrollIntoView(UiSelector selector) throws UiObjectNotFoundException { + Tracer.trace(selector); + // if we happen to be on top of the text we want then return here + UiSelector childSelector = getSelector().childSelector(selector); + if (exists(childSelector)) { + return (true); + } else { + // we will need to reset the search from the beginning to start search + scrollToBeginning(mMaxSearchSwipes); + if (exists(childSelector)) { + return (true); + } + for (int x = 0; x < mMaxSearchSwipes; x++) { + boolean scrolled = scrollForward(); + if(exists(childSelector)) { + return true; + } + if (!scrolled) { + return false; + } + } + } + return false; + } + + /** + * Scrolls forward until the UiObject is fully visible in the scrollable container. + * Use this method to make sure that the child item's edges are not offscreen. + * + * @param childObject {@link UiObject} representing the child element + * @return true if the child element is already fully visible, or + * if the method scrolled successfully until the child became fully visible; + * otherwise, false if the attempt to scroll failed. + * @throws UiObjectNotFoundException + * @hide + */ + public boolean ensureFullyVisible(UiObject childObject) throws UiObjectNotFoundException { + Rect actual = childObject.getBounds(); + Rect visible = childObject.getVisibleBounds(); + if (visible.width() * visible.height() == actual.width() * actual.height()) { + // area match, item fully visible + return true; + } + boolean shouldSwipeForward = false; + if (mIsVerticalList) { + // if list is vertical, matching top edge implies obscured bottom edge + // so we need to scroll list forward + shouldSwipeForward = actual.top == visible.top; + } else { + // if list is horizontal, matching left edge implies obscured right edge, + // so we need to scroll list forward + shouldSwipeForward = actual.left == visible.left; + } + if (mIsVerticalList) { + if (shouldSwipeForward) { + return swipeUp(10); + } else { + return swipeDown(10); + } + } else { + if (shouldSwipeForward) { + return swipeLeft(10); + } else { + return swipeRight(10); + } + } + } + + /** + * Performs a forward scroll action on the scrollable layout element until + * the text you provided is visible, or until swipe attempts have been exhausted. + * See {@link #setMaxSearchSwipes(int)} + * + * @param text test to look for + * @return true if item is found; else, false + * @since API Level 16 + */ + public boolean scrollTextIntoView(String text) throws UiObjectNotFoundException { + Tracer.trace(text); + return scrollIntoView(new UiSelector().text(text)); + } + + /** + * Sets the maximum number of scrolls allowed when performing a + * scroll action in search of a child element. + * See {@link #getChildByDescription(UiSelector, String)} and + * {@link #getChildByText(UiSelector, String)}. + * + * @param swipes the number of search swipes to perform until giving up + * @return reference to itself + * @since API Level 16 + */ + public UiScrollable setMaxSearchSwipes(int swipes) { + Tracer.trace(swipes); + mMaxSearchSwipes = swipes; + return this; + } + + /** + * Gets the maximum number of scrolls allowed when performing a + * scroll action in search of a child element. + * See {@link #getChildByDescription(UiSelector, String)} and + * {@link #getChildByText(UiSelector, String)}. + * + * @return max the number of search swipes to perform until giving up + * @since API Level 16 + */ + public int getMaxSearchSwipes() { + Tracer.trace(); + return mMaxSearchSwipes; + } + + /** + * Performs a forward fling with the default number of fling steps (5). + * If the swipe direction is set to vertical, then the swipes will be + * performed from bottom to top. If the swipe + * direction is set to horizontal, then the swipes will be performed from + * right to left. Make sure to take into account devices configured with + * right-to-left languages like Arabic and Hebrew. + * + * @return true if scrolled, false if can't scroll anymore + * @since API Level 16 + */ + public boolean flingForward() throws UiObjectNotFoundException { + Tracer.trace(); + return scrollForward(FLING_STEPS); + } + + /** + * Performs a forward scroll with the default number of scroll steps (55). + * If the swipe direction is set to vertical, + * then the swipes will be performed from bottom to top. If the swipe + * direction is set to horizontal, then the swipes will be performed from + * right to left. Make sure to take into account devices configured with + * right-to-left languages like Arabic and Hebrew. + * + * @return true if scrolled, false if can't scroll anymore + * @since API Level 16 + */ + public boolean scrollForward() throws UiObjectNotFoundException { + Tracer.trace(); + return scrollForward(SCROLL_STEPS); + } + + /** + * Performs a forward scroll. If the swipe direction is set to vertical, + * then the swipes will be performed from bottom to top. If the swipe + * direction is set to horizontal, then the swipes will be performed from + * right to left. Make sure to take into account devices configured with + * right-to-left languages like Arabic and Hebrew. + * + * @param steps number of steps. Use this to control the speed of the scroll action + * @return true if scrolled, false if can't scroll anymore + * @since API Level 16 + */ + public boolean scrollForward(int steps) throws UiObjectNotFoundException { + Tracer.trace(steps); + Log.d(LOG_TAG, "scrollForward() on selector = " + getSelector()); + AccessibilityNodeInfo node = findAccessibilityNodeInfo(WAIT_FOR_SELECTOR_TIMEOUT); + if(node == null) { + throw new UiObjectNotFoundException(getSelector().toString()); + } + Rect rect = new Rect(); + node.getBoundsInScreen(rect); + + int downX = 0; + int downY = 0; + int upX = 0; + int upY = 0; + + // scrolling is by default assumed vertically unless the object is explicitly + // set otherwise by setAsHorizontalContainer() + if(mIsVerticalList) { + int swipeAreaAdjust = (int)(rect.height() * getSwipeDeadZonePercentage()); + // scroll vertically: swipe down -> up + downX = rect.centerX(); + downY = rect.bottom - swipeAreaAdjust; + upX = rect.centerX(); + upY = rect.top + swipeAreaAdjust; + } else { + int swipeAreaAdjust = (int)(rect.width() * getSwipeDeadZonePercentage()); + // scroll horizontally: swipe right -> left + // TODO: Assuming device is not in right to left language + downX = rect.right - swipeAreaAdjust; + downY = rect.centerY(); + upX = rect.left + swipeAreaAdjust; + upY = rect.centerY(); + } + return getInteractionController().scrollSwipe(downX, downY, upX, upY, steps); + } + + /** + * Performs a backwards fling action with the default number of fling + * steps (5). If the swipe direction is set to vertical, + * then the swipe will be performed from top to bottom. If the swipe + * direction is set to horizontal, then the swipes will be performed from + * left to right. Make sure to take into account devices configured with + * right-to-left languages like Arabic and Hebrew. + * + * @return true if scrolled, and false if can't scroll anymore + * @since API Level 16 + */ + public boolean flingBackward() throws UiObjectNotFoundException { + Tracer.trace(); + return scrollBackward(FLING_STEPS); + } + + /** + * Performs a backward scroll with the default number of scroll steps (55). + * If the swipe direction is set to vertical, + * then the swipes will be performed from top to bottom. If the swipe + * direction is set to horizontal, then the swipes will be performed from + * left to right. Make sure to take into account devices configured with + * right-to-left languages like Arabic and Hebrew. + * + * @return true if scrolled, and false if can't scroll anymore + * @since API Level 16 + */ + public boolean scrollBackward() throws UiObjectNotFoundException { + Tracer.trace(); + return scrollBackward(SCROLL_STEPS); + } + + /** + * Performs a backward scroll. If the swipe direction is set to vertical, + * then the swipes will be performed from top to bottom. If the swipe + * direction is set to horizontal, then the swipes will be performed from + * left to right. Make sure to take into account devices configured with + * right-to-left languages like Arabic and Hebrew. + * + * @param steps number of steps. Use this to control the speed of the scroll action. + * @return true if scrolled, false if can't scroll anymore + * @since API Level 16 + */ + public boolean scrollBackward(int steps) throws UiObjectNotFoundException { + Tracer.trace(steps); + Log.d(LOG_TAG, "scrollBackward() on selector = " + getSelector()); + AccessibilityNodeInfo node = findAccessibilityNodeInfo(WAIT_FOR_SELECTOR_TIMEOUT); + if (node == null) { + throw new UiObjectNotFoundException(getSelector().toString()); + } + Rect rect = new Rect(); + node.getBoundsInScreen(rect); + + int downX = 0; + int downY = 0; + int upX = 0; + int upY = 0; + + // scrolling is by default assumed vertically unless the object is explicitly + // set otherwise by setAsHorizontalContainer() + if(mIsVerticalList) { + int swipeAreaAdjust = (int)(rect.height() * getSwipeDeadZonePercentage()); + Log.d(LOG_TAG, "scrollToBegining() using vertical scroll"); + // scroll vertically: swipe up -> down + downX = rect.centerX(); + downY = rect.top + swipeAreaAdjust; + upX = rect.centerX(); + upY = rect.bottom - swipeAreaAdjust; + } else { + int swipeAreaAdjust = (int)(rect.width() * getSwipeDeadZonePercentage()); + Log.d(LOG_TAG, "scrollToBegining() using hotizontal scroll"); + // scroll horizontally: swipe left -> right + // TODO: Assuming device is not in right to left language + downX = rect.left + swipeAreaAdjust; + downY = rect.centerY(); + upX = rect.right - swipeAreaAdjust; + upY = rect.centerY(); + } + return getInteractionController().scrollSwipe(downX, downY, upX, upY, steps); + } + + /** + * Scrolls to the beginning of a scrollable layout element. The beginning + * can be at the top-most edge in the case of vertical controls, or the + * left-most edge for horizontal controls. Make sure to take into account + * devices configured with right-to-left languages like Arabic and Hebrew. + * + * @param steps use steps to control the speed, so that it may be a scroll, or fling + * @return true on scrolled else false + * @since API Level 16 + */ + public boolean scrollToBeginning(int maxSwipes, int steps) throws UiObjectNotFoundException { + Tracer.trace(maxSwipes, steps); + Log.d(LOG_TAG, "scrollToBeginning() on selector = " + getSelector()); + // protect against potential hanging and return after preset attempts + for(int x = 0; x < maxSwipes; x++) { + if(!scrollBackward(steps)) { + break; + } + } + return true; + } + + /** + * Scrolls to the beginning of a scrollable layout element. The beginning + * can be at the top-most edge in the case of vertical controls, or the + * left-most edge for horizontal controls. Make sure to take into account + * devices configured with right-to-left languages like Arabic and Hebrew. + * + * @param maxSwipes + * @return true on scrolled else false + * @since API Level 16 + */ + public boolean scrollToBeginning(int maxSwipes) throws UiObjectNotFoundException { + Tracer.trace(maxSwipes); + return scrollToBeginning(maxSwipes, SCROLL_STEPS); + } + + /** + * Performs a fling gesture to reach the beginning of a scrollable layout element. + * The beginning can be at the top-most edge in the case of vertical controls, or + * the left-most edge for horizontal controls. Make sure to take into + * account devices configured with right-to-left languages like Arabic and Hebrew. + * + * @param maxSwipes + * @return true on scrolled else false + * @since API Level 16 + */ + public boolean flingToBeginning(int maxSwipes) throws UiObjectNotFoundException { + Tracer.trace(maxSwipes); + return scrollToBeginning(maxSwipes, FLING_STEPS); + } + + /** + * Scrolls to the end of a scrollable layout element. The end can be at the + * bottom-most edge in the case of vertical controls, or the right-most edge for + * horizontal controls. Make sure to take into account devices configured with + * right-to-left languages like Arabic and Hebrew. + * + * @param steps use steps to control the speed, so that it may be a scroll, or fling + * @return true on scrolled else false + * @since API Level 16 + */ + public boolean scrollToEnd(int maxSwipes, int steps) throws UiObjectNotFoundException { + Tracer.trace(maxSwipes, steps); + // protect against potential hanging and return after preset attempts + for(int x = 0; x < maxSwipes; x++) { + if(!scrollForward(steps)) { + break; + } + } + return true; + } + + /** + * Scrolls to the end of a scrollable layout element. The end can be at the + * bottom-most edge in the case of vertical controls, or the right-most edge for + * horizontal controls. Make sure to take into account devices configured with + * right-to-left languages like Arabic and Hebrew. + * + * @param maxSwipes + * @return true on scrolled, else false + * @since API Level 16 + */ + public boolean scrollToEnd(int maxSwipes) throws UiObjectNotFoundException { + Tracer.trace(maxSwipes); + return scrollToEnd(maxSwipes, SCROLL_STEPS); + } + + /** + * Performs a fling gesture to reach the end of a scrollable layout element. + * The end can be at the bottom-most edge in the case of vertical controls, or + * the right-most edge for horizontal controls. Make sure to take into + * account devices configured with right-to-left languages like Arabic and Hebrew. + * + * @param maxSwipes + * @return true on scrolled, else false + * @since API Level 16 + */ + public boolean flingToEnd(int maxSwipes) throws UiObjectNotFoundException { + Tracer.trace(maxSwipes); + return scrollToEnd(maxSwipes, FLING_STEPS); + } + + /** + * Returns the percentage of a widget's size that's considered as a no-touch + * zone when swiping. The no-touch zone is set as a percentage of a widget's total + * width or height, denoting a margin around the swipable area of the widget. + * Swipes must start and end inside this margin. This is important when the + * widget being swiped may not respond to the swipe if started at a point + * too near to the edge. The default is 10% from either edge. + * + * @return a value between 0 and 1 + * @since API Level 16 + */ + public double getSwipeDeadZonePercentage() { + Tracer.trace(); + return mSwipeDeadZonePercentage; + } + + /** + * Sets the percentage of a widget's size that's considered as no-touch + * zone when swiping. + * The no-touch zone is set as percentage of a widget's total width or height, + * denoting a margin around the swipable area of the widget. Swipes must + * always start and end inside this margin. This is important when the + * widget being swiped may not respond to the swipe if started at a point + * too near to the edge. The default is 10% from either edge. + * + * @param swipeDeadZonePercentage is a value between 0 and 1 + * @return reference to itself + * @since API Level 16 + */ + public UiScrollable setSwipeDeadZonePercentage(double swipeDeadZonePercentage) { + Tracer.trace(swipeDeadZonePercentage); + mSwipeDeadZonePercentage = swipeDeadZonePercentage; + return this; + } +} diff --git a/cmds/uiautomator/library/core-src/com/android/uiautomator/core/UiSelector.java b/cmds/uiautomator/library/core-src/com/android/uiautomator/core/UiSelector.java new file mode 100644 index 0000000000000000000000000000000000000000..482a74d77493a0af6e0a8a875cd146add54f52eb --- /dev/null +++ b/cmds/uiautomator/library/core-src/com/android/uiautomator/core/UiSelector.java @@ -0,0 +1,1022 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.uiautomator.core; + +import android.util.SparseArray; +import android.view.accessibility.AccessibilityNodeInfo; + +import java.util.regex.Pattern; + +/** + * Specifies the elements in the layout hierarchy for tests to target, filtered + * by properties such as text value, content-description, class name, and state + * information. You can also target an element by its location in a layout + * hierarchy. + * @since API Level 16 + */ +public class UiSelector { + static final int SELECTOR_NIL = 0; + static final int SELECTOR_TEXT = 1; + static final int SELECTOR_START_TEXT = 2; + static final int SELECTOR_CONTAINS_TEXT = 3; + static final int SELECTOR_CLASS = 4; + static final int SELECTOR_DESCRIPTION = 5; + static final int SELECTOR_START_DESCRIPTION = 6; + static final int SELECTOR_CONTAINS_DESCRIPTION = 7; + static final int SELECTOR_INDEX = 8; + static final int SELECTOR_INSTANCE = 9; + static final int SELECTOR_ENABLED = 10; + static final int SELECTOR_FOCUSED = 11; + static final int SELECTOR_FOCUSABLE = 12; + static final int SELECTOR_SCROLLABLE = 13; + static final int SELECTOR_CLICKABLE = 14; + static final int SELECTOR_CHECKED = 15; + static final int SELECTOR_SELECTED = 16; + static final int SELECTOR_ID = 17; + static final int SELECTOR_PACKAGE_NAME = 18; + static final int SELECTOR_CHILD = 19; + static final int SELECTOR_CONTAINER = 20; + static final int SELECTOR_PATTERN = 21; + static final int SELECTOR_PARENT = 22; + static final int SELECTOR_COUNT = 23; + static final int SELECTOR_LONG_CLICKABLE = 24; + static final int SELECTOR_TEXT_REGEX = 25; + static final int SELECTOR_CLASS_REGEX = 26; + static final int SELECTOR_DESCRIPTION_REGEX = 27; + static final int SELECTOR_PACKAGE_NAME_REGEX = 28; + static final int SELECTOR_RESOURCE_ID = 29; + static final int SELECTOR_CHECKABLE = 30; + static final int SELECTOR_RESOURCE_ID_REGEX = 31; + + private SparseArray mSelectorAttributes = new SparseArray(); + + /** + * @since API Level 16 + */ + public UiSelector() { + } + + UiSelector(UiSelector selector) { + mSelectorAttributes = selector.cloneSelector().mSelectorAttributes; + } + + /** + * @since API Level 17 + */ + protected UiSelector cloneSelector() { + UiSelector ret = new UiSelector(); + ret.mSelectorAttributes = mSelectorAttributes.clone(); + if (hasChildSelector()) + ret.mSelectorAttributes.put(SELECTOR_CHILD, new UiSelector(getChildSelector())); + if (hasParentSelector()) + ret.mSelectorAttributes.put(SELECTOR_PARENT, new UiSelector(getParentSelector())); + if (hasPatternSelector()) + ret.mSelectorAttributes.put(SELECTOR_PATTERN, new UiSelector(getPatternSelector())); + return ret; + } + + static UiSelector patternBuilder(UiSelector selector) { + if (!selector.hasPatternSelector()) { + return new UiSelector().patternSelector(selector); + } + return selector; + } + + static UiSelector patternBuilder(UiSelector container, UiSelector pattern) { + return new UiSelector( + new UiSelector().containerSelector(container).patternSelector(pattern)); + } + + /** + * Set the search criteria to match the visible text displayed + * in a widget (for example, the text label to launch an app). + * + * The text for the element must match exactly with the string in your input + * argument. Matching is case-sensitive. + * + * @param text Value to match + * @return UiSelector with the specified search criteria + * @since API Level 16 + */ + public UiSelector text(String text) { + return buildSelector(SELECTOR_TEXT, text); + } + + /** + * Set the search criteria to match the visible text displayed in a layout + * element, using a regular expression. + * + * The text in the widget must match exactly with the string in your + * input argument. + * + * @param regex a regular expression + * @return UiSelector with the specified search criteria + * @since API Level 17 + */ + public UiSelector textMatches(String regex) { + return buildSelector(SELECTOR_TEXT_REGEX, Pattern.compile(regex)); + } + + /** + * Set the search criteria to match visible text in a widget that is + * prefixed by the text parameter. + * + * The matching is case-insensitive. + * + * @param text Value to match + * @return UiSelector with the specified search criteria + * @since API Level 16 + */ + public UiSelector textStartsWith(String text) { + return buildSelector(SELECTOR_START_TEXT, text); + } + + /** + * Set the search criteria to match the visible text in a widget + * where the visible text must contain the string in your input argument. + * + * The matching is case-sensitive. + * + * @param text Value to match + * @return UiSelector with the specified search criteria + * @since API Level 16 + */ + public UiSelector textContains(String text) { + return buildSelector(SELECTOR_CONTAINS_TEXT, text); + } + + /** + * Set the search criteria to match the class property + * for a widget (for example, "android.widget.Button"). + * + * @param className Value to match + * @return UiSelector with the specified search criteria + * @since API Level 16 + */ + public UiSelector className(String className) { + return buildSelector(SELECTOR_CLASS, className); + } + + /** + * Set the search criteria to match the class property + * for a widget, using a regular expression. + * + * @param regex a regular expression + * @return UiSelector with the specified search criteria + * @since API Level 17 + */ + public UiSelector classNameMatches(String regex) { + return buildSelector(SELECTOR_CLASS_REGEX, Pattern.compile(regex)); + } + + /** + * Set the search criteria to match the class property + * for a widget (for example, "android.widget.Button"). + * + * @param type type + * @return UiSelector with the specified search criteria + * @since API Level 17 + */ + public UiSelector className(Class type) { + return buildSelector(SELECTOR_CLASS, type.getName()); + } + + /** + * Set the search criteria to match the content-description + * property for a widget. + * + * The content-description is typically used + * by the Android Accessibility framework to + * provide an audio prompt for the widget when + * the widget is selected. The content-description + * for the widget must match exactly + * with the string in your input argument. + * + * Matching is case-sensitive. + * + * @param desc Value to match + * @return UiSelector with the specified search criteria + * @since API Level 16 + */ + public UiSelector description(String desc) { + return buildSelector(SELECTOR_DESCRIPTION, desc); + } + + /** + * Set the search criteria to match the content-description + * property for a widget. + * + * The content-description is typically used + * by the Android Accessibility framework to + * provide an audio prompt for the widget when + * the widget is selected. The content-description + * for the widget must match exactly + * with the string in your input argument. + * + * @param regex a regular expression + * @return UiSelector with the specified search criteria + * @since API Level 17 + */ + public UiSelector descriptionMatches(String regex) { + return buildSelector(SELECTOR_DESCRIPTION_REGEX, Pattern.compile(regex)); + } + + /** + * Set the search criteria to match the content-description + * property for a widget. + * + * The content-description is typically used + * by the Android Accessibility framework to + * provide an audio prompt for the widget when + * the widget is selected. The content-description + * for the widget must start + * with the string in your input argument. + * + * Matching is case-insensitive. + * + * @param desc Value to match + * @return UiSelector with the specified search criteria + * @since API Level 16 + */ + public UiSelector descriptionStartsWith(String desc) { + return buildSelector(SELECTOR_START_DESCRIPTION, desc); + } + + /** + * Set the search criteria to match the content-description + * property for a widget. + * + * The content-description is typically used + * by the Android Accessibility framework to + * provide an audio prompt for the widget when + * the widget is selected. The content-description + * for the widget must contain + * the string in your input argument. + * + * Matching is case-insensitive. + * + * @param desc Value to match + * @return UiSelector with the specified search criteria + * @since API Level 16 + */ + public UiSelector descriptionContains(String desc) { + return buildSelector(SELECTOR_CONTAINS_DESCRIPTION, desc); + } + + /** + * Set the search criteria to match the given resource ID. + * + * @param id Value to match + * @return UiSelector with the specified search criteria + * @since API Level 18 + */ + public UiSelector resourceId(String id) { + return buildSelector(SELECTOR_RESOURCE_ID, id); + } + + /** + * Set the search criteria to match the resource ID + * of the widget, using a regular expression. + * + * @param regex a regular expression + * @return UiSelector with the specified search criteria + * @since API Level 18 + */ + public UiSelector resourceIdMatches(String regex) { + return buildSelector(SELECTOR_RESOURCE_ID_REGEX, Pattern.compile(regex)); + } + + /** + * Set the search criteria to match the widget by its node + * index in the layout hierarchy. + * + * The index value must be 0 or greater. + * + * Using the index can be unreliable and should only + * be used as a last resort for matching. Instead, + * consider using the {@link #instance(int)} method. + * + * @param index Value to match + * @return UiSelector with the specified search criteria + * @since API Level 16 + */ + public UiSelector index(final int index) { + return buildSelector(SELECTOR_INDEX, index); + } + + /** + * Set the search criteria to match the + * widget by its instance number. + * + * The instance value must be 0 or greater, where + * the first instance is 0. + * + * For example, to simulate a user click on + * the third image that is enabled in a UI screen, you + * could specify a a search criteria where the instance is + * 2, the {@link #className(String)} matches the image + * widget class, and {@link #enabled(boolean)} is true. + * The code would look like this: + * + * new UiSelector().className("android.widget.ImageView") + * .enabled(true).instance(2); + * + * + * @param instance Value to match + * @return UiSelector with the specified search criteria + * @since API Level 16 + */ + public UiSelector instance(final int instance) { + return buildSelector(SELECTOR_INSTANCE, instance); + } + + /** + * Set the search criteria to match widgets that are enabled. + * + * Typically, using this search criteria alone is not useful. + * You should also include additional criteria, such as text, + * content-description, or the class name for a widget. + * + * If no other search criteria is specified, and there is more + * than one matching widget, the first widget in the tree + * is selected. + * + * @param val Value to match + * @return UiSelector with the specified search criteria + * @since API Level 16 + */ + public UiSelector enabled(boolean val) { + return buildSelector(SELECTOR_ENABLED, val); + } + + /** + * Set the search criteria to match widgets that have focus. + * + * Typically, using this search criteria alone is not useful. + * You should also include additional criteria, such as text, + * content-description, or the class name for a widget. + * + * If no other search criteria is specified, and there is more + * than one matching widget, the first widget in the tree + * is selected. + * + * @param val Value to match + * @return UiSelector with the specified search criteria + * @since API Level 16 + */ + public UiSelector focused(boolean val) { + return buildSelector(SELECTOR_FOCUSED, val); + } + + /** + * Set the search criteria to match widgets that are focusable. + * + * Typically, using this search criteria alone is not useful. + * You should also include additional criteria, such as text, + * content-description, or the class name for a widget. + * + * If no other search criteria is specified, and there is more + * than one matching widget, the first widget in the tree + * is selected. + * + * @param val Value to match + * @return UiSelector with the specified search criteria + * @since API Level 16 + */ + public UiSelector focusable(boolean val) { + return buildSelector(SELECTOR_FOCUSABLE, val); + } + + /** + * Set the search criteria to match widgets that are scrollable. + * + * Typically, using this search criteria alone is not useful. + * You should also include additional criteria, such as text, + * content-description, or the class name for a widget. + * + * If no other search criteria is specified, and there is more + * than one matching widget, the first widget in the tree + * is selected. + * + * @param val Value to match + * @return UiSelector with the specified search criteria + * @since API Level 16 + */ + public UiSelector scrollable(boolean val) { + return buildSelector(SELECTOR_SCROLLABLE, val); + } + + /** + * Set the search criteria to match widgets that + * are currently selected. + * + * Typically, using this search criteria alone is not useful. + * You should also include additional criteria, such as text, + * content-description, or the class name for a widget. + * + * If no other search criteria is specified, and there is more + * than one matching widget, the first widget in the tree + * is selected. + * + * @param val Value to match + * @return UiSelector with the specified search criteria + * @since API Level 16 + */ + public UiSelector selected(boolean val) { + return buildSelector(SELECTOR_SELECTED, val); + } + + /** + * Set the search criteria to match widgets that + * are currently checked (usually for checkboxes). + * + * Typically, using this search criteria alone is not useful. + * You should also include additional criteria, such as text, + * content-description, or the class name for a widget. + * + * If no other search criteria is specified, and there is more + * than one matching widget, the first widget in the tree + * is selected. + * + * @param val Value to match + * @return UiSelector with the specified search criteria + * @since API Level 16 + */ + public UiSelector checked(boolean val) { + return buildSelector(SELECTOR_CHECKED, val); + } + + /** + * Set the search criteria to match widgets that are clickable. + * + * Typically, using this search criteria alone is not useful. + * You should also include additional criteria, such as text, + * content-description, or the class name for a widget. + * + * If no other search criteria is specified, and there is more + * than one matching widget, the first widget in the tree + * is selected. + * + * @param val Value to match + * @return UiSelector with the specified search criteria + * @since API Level 16 + */ + public UiSelector clickable(boolean val) { + return buildSelector(SELECTOR_CLICKABLE, val); + } + + /** + * Set the search criteria to match widgets that are checkable. + * + * Typically, using this search criteria alone is not useful. + * You should also include additional criteria, such as text, + * content-description, or the class name for a widget. + * + * If no other search criteria is specified, and there is more + * than one matching widget, the first widget in the tree + * is selected. + * + * @param val Value to match + * @return UiSelector with the specified search criteria + * @since API Level 18 + */ + public UiSelector checkable(boolean val) { + return buildSelector(SELECTOR_CHECKABLE, val); + } + + /** + * Set the search criteria to match widgets that are long-clickable. + * + * Typically, using this search criteria alone is not useful. + * You should also include additional criteria, such as text, + * content-description, or the class name for a widget. + * + * If no other search criteria is specified, and there is more + * than one matching widget, the first widget in the tree + * is selected. + * + * @param val Value to match + * @return UiSelector with the specified search criteria + * @since API Level 17 + */ + public UiSelector longClickable(boolean val) { + return buildSelector(SELECTOR_LONG_CLICKABLE, val); + } + + /** + * Adds a child UiSelector criteria to this selector. + * + * Use this selector to narrow the search scope to + * child widgets under a specific parent widget. + * + * @param selector + * @return UiSelector with this added search criterion + * @since API Level 16 + */ + public UiSelector childSelector(UiSelector selector) { + return buildSelector(SELECTOR_CHILD, selector); + } + + private UiSelector patternSelector(UiSelector selector) { + return buildSelector(SELECTOR_PATTERN, selector); + } + + private UiSelector containerSelector(UiSelector selector) { + return buildSelector(SELECTOR_CONTAINER, selector); + } + + /** + * Adds a child UiSelector criteria to this selector which is used to + * start search from the parent widget. + * + * Use this selector to narrow the search scope to + * sibling widgets as well all child widgets under a parent. + * + * @param selector + * @return UiSelector with this added search criterion + * @since API Level 16 + */ + public UiSelector fromParent(UiSelector selector) { + return buildSelector(SELECTOR_PARENT, selector); + } + + /** + * Set the search criteria to match the package name + * of the application that contains the widget. + * + * @param name Value to match + * @return UiSelector with the specified search criteria + * @since API Level 16 + */ + public UiSelector packageName(String name) { + return buildSelector(SELECTOR_PACKAGE_NAME, name); + } + + /** + * Set the search criteria to match the package name + * of the application that contains the widget. + * + * @param regex a regular expression + * @return UiSelector with the specified search criteria + * @since API Level 17 + */ + public UiSelector packageNameMatches(String regex) { + return buildSelector(SELECTOR_PACKAGE_NAME_REGEX, Pattern.compile(regex)); + } + + /** + * Building a UiSelector always returns a new UiSelector and never modifies the + * existing UiSelector being used. + */ + private UiSelector buildSelector(int selectorId, Object selectorValue) { + UiSelector selector = new UiSelector(this); + if (selectorId == SELECTOR_CHILD || selectorId == SELECTOR_PARENT) + selector.getLastSubSelector().mSelectorAttributes.put(selectorId, selectorValue); + else + selector.mSelectorAttributes.put(selectorId, selectorValue); + return selector; + } + + /** + * Selectors may have a hierarchy defined by specifying child nodes to be matched. + * It is not necessary that every selector have more than one level. A selector + * can also be a single level referencing only one node. In such cases the return + * it null. + * + * @return a child selector if one exists. Else null if this selector does not + * reference child node. + */ + UiSelector getChildSelector() { + UiSelector selector = (UiSelector)mSelectorAttributes.get(UiSelector.SELECTOR_CHILD, null); + if (selector != null) + return new UiSelector(selector); + return null; + } + + UiSelector getPatternSelector() { + UiSelector selector = + (UiSelector)mSelectorAttributes.get(UiSelector.SELECTOR_PATTERN, null); + if (selector != null) + return new UiSelector(selector); + return null; + } + + UiSelector getContainerSelector() { + UiSelector selector = + (UiSelector)mSelectorAttributes.get(UiSelector.SELECTOR_CONTAINER, null); + if (selector != null) + return new UiSelector(selector); + return null; + } + + UiSelector getParentSelector() { + UiSelector selector = + (UiSelector) mSelectorAttributes.get(UiSelector.SELECTOR_PARENT, null); + if (selector != null) + return new UiSelector(selector); + return null; + } + + int getInstance() { + return getInt(UiSelector.SELECTOR_INSTANCE); + } + + String getString(int criterion) { + return (String) mSelectorAttributes.get(criterion, null); + } + + boolean getBoolean(int criterion) { + return (Boolean) mSelectorAttributes.get(criterion, false); + } + + int getInt(int criterion) { + return (Integer) mSelectorAttributes.get(criterion, 0); + } + + Pattern getPattern(int criterion) { + return (Pattern) mSelectorAttributes.get(criterion, null); + } + + boolean isMatchFor(AccessibilityNodeInfo node, int index) { + int size = mSelectorAttributes.size(); + for(int x = 0; x < size; x++) { + CharSequence s = null; + int criterion = mSelectorAttributes.keyAt(x); + switch(criterion) { + case UiSelector.SELECTOR_INDEX: + if (index != this.getInt(criterion)) + return false; + break; + case UiSelector.SELECTOR_CHECKED: + if (node.isChecked() != getBoolean(criterion)) { + return false; + } + break; + case UiSelector.SELECTOR_CLASS: + s = node.getClassName(); + if (s == null || !s.toString().contentEquals(getString(criterion))) { + return false; + } + break; + case UiSelector.SELECTOR_CLASS_REGEX: + s = node.getClassName(); + if (s == null || !getPattern(criterion).matcher(s).matches()) { + return false; + } + break; + case UiSelector.SELECTOR_CLICKABLE: + if (node.isClickable() != getBoolean(criterion)) { + return false; + } + break; + case UiSelector.SELECTOR_CHECKABLE: + if (node.isCheckable() != getBoolean(criterion)) { + return false; + } + break; + case UiSelector.SELECTOR_LONG_CLICKABLE: + if (node.isLongClickable() != getBoolean(criterion)) { + return false; + } + break; + case UiSelector.SELECTOR_CONTAINS_DESCRIPTION: + s = node.getContentDescription(); + if (s == null || !s.toString().toLowerCase() + .contains(getString(criterion).toLowerCase())) { + return false; + } + break; + case UiSelector.SELECTOR_START_DESCRIPTION: + s = node.getContentDescription(); + if (s == null || !s.toString().toLowerCase() + .startsWith(getString(criterion).toLowerCase())) { + return false; + } + break; + case UiSelector.SELECTOR_DESCRIPTION: + s = node.getContentDescription(); + if (s == null || !s.toString().contentEquals(getString(criterion))) { + return false; + } + break; + case UiSelector.SELECTOR_DESCRIPTION_REGEX: + s = node.getContentDescription(); + if (s == null || !getPattern(criterion).matcher(s).matches()) { + return false; + } + break; + case UiSelector.SELECTOR_CONTAINS_TEXT: + s = node.getText(); + if (s == null || !s.toString().toLowerCase() + .contains(getString(criterion).toLowerCase())) { + return false; + } + break; + case UiSelector.SELECTOR_START_TEXT: + s = node.getText(); + if (s == null || !s.toString().toLowerCase() + .startsWith(getString(criterion).toLowerCase())) { + return false; + } + break; + case UiSelector.SELECTOR_TEXT: + s = node.getText(); + if (s == null || !s.toString().contentEquals(getString(criterion))) { + return false; + } + break; + case UiSelector.SELECTOR_TEXT_REGEX: + s = node.getText(); + if (s == null || !getPattern(criterion).matcher(s).matches()) { + return false; + } + break; + case UiSelector.SELECTOR_ENABLED: + if (node.isEnabled() != getBoolean(criterion)) { + return false; + } + break; + case UiSelector.SELECTOR_FOCUSABLE: + if (node.isFocusable() != getBoolean(criterion)) { + return false; + } + break; + case UiSelector.SELECTOR_FOCUSED: + if (node.isFocused() != getBoolean(criterion)) { + return false; + } + break; + case UiSelector.SELECTOR_ID: + break; //TODO: do we need this for AccessibilityNodeInfo.id? + case UiSelector.SELECTOR_PACKAGE_NAME: + s = node.getPackageName(); + if (s == null || !s.toString().contentEquals(getString(criterion))) { + return false; + } + break; + case UiSelector.SELECTOR_PACKAGE_NAME_REGEX: + s = node.getPackageName(); + if (s == null || !getPattern(criterion).matcher(s).matches()) { + return false; + } + break; + case UiSelector.SELECTOR_SCROLLABLE: + if (node.isScrollable() != getBoolean(criterion)) { + return false; + } + break; + case UiSelector.SELECTOR_SELECTED: + if (node.isSelected() != getBoolean(criterion)) { + return false; + } + break; + case UiSelector.SELECTOR_RESOURCE_ID: + s = node.getViewIdResourceName(); + if (s == null || !s.toString().contentEquals(getString(criterion))) { + return false; + } + break; + case UiSelector.SELECTOR_RESOURCE_ID_REGEX: + s = node.getViewIdResourceName(); + if (s == null || !getPattern(criterion).matcher(s).matches()) { + return false; + } + break; + } + } + return matchOrUpdateInstance(); + } + + private boolean matchOrUpdateInstance() { + int currentSelectorCounter = 0; + int currentSelectorInstance = 0; + + // matched attributes - now check for matching instance number + if (mSelectorAttributes.indexOfKey(UiSelector.SELECTOR_INSTANCE) >= 0) { + currentSelectorInstance = + (Integer)mSelectorAttributes.get(UiSelector.SELECTOR_INSTANCE); + } + + // instance is required. Add count if not already counting + if (mSelectorAttributes.indexOfKey(UiSelector.SELECTOR_COUNT) >= 0) { + currentSelectorCounter = (Integer)mSelectorAttributes.get(UiSelector.SELECTOR_COUNT); + } + + // Verify + if (currentSelectorInstance == currentSelectorCounter) { + return true; + } + // Update count + if (currentSelectorInstance > currentSelectorCounter) { + mSelectorAttributes.put(UiSelector.SELECTOR_COUNT, ++currentSelectorCounter); + } + return false; + } + + /** + * Leaf selector indicates no more child or parent selectors + * are declared in the this selector. + * @return true if is leaf. + */ + boolean isLeaf() { + if (mSelectorAttributes.indexOfKey(UiSelector.SELECTOR_CHILD) < 0 && + mSelectorAttributes.indexOfKey(UiSelector.SELECTOR_PARENT) < 0) { + return true; + } + return false; + } + + boolean hasChildSelector() { + if (mSelectorAttributes.indexOfKey(UiSelector.SELECTOR_CHILD) < 0) { + return false; + } + return true; + } + + boolean hasPatternSelector() { + if (mSelectorAttributes.indexOfKey(UiSelector.SELECTOR_PATTERN) < 0) { + return false; + } + return true; + } + + boolean hasContainerSelector() { + if (mSelectorAttributes.indexOfKey(UiSelector.SELECTOR_CONTAINER) < 0) { + return false; + } + return true; + } + + boolean hasParentSelector() { + if (mSelectorAttributes.indexOfKey(UiSelector.SELECTOR_PARENT) < 0) { + return false; + } + return true; + } + + /** + * Returns the deepest selector in the chain of possible sub selectors. + * A chain of selector is created when either of {@link UiSelector#childSelector(UiSelector)} + * or {@link UiSelector#fromParent(UiSelector)} are used once or more in the construction of + * a selector. + * @return last UiSelector in chain + */ + private UiSelector getLastSubSelector() { + if (mSelectorAttributes.indexOfKey(UiSelector.SELECTOR_CHILD) >= 0) { + UiSelector child = (UiSelector)mSelectorAttributes.get(UiSelector.SELECTOR_CHILD); + if (child.getLastSubSelector() == null) { + return child; + } + return child.getLastSubSelector(); + } else if (mSelectorAttributes.indexOfKey(UiSelector.SELECTOR_PARENT) >= 0) { + UiSelector parent = (UiSelector)mSelectorAttributes.get(UiSelector.SELECTOR_PARENT); + if (parent.getLastSubSelector() == null) { + return parent; + } + return parent.getLastSubSelector(); + } + return this; + } + + @Override + public String toString() { + return dumpToString(true); + } + + String dumpToString(boolean all) { + StringBuilder builder = new StringBuilder(); + builder.append(UiSelector.class.getSimpleName() + "["); + final int criterionCount = mSelectorAttributes.size(); + for (int i = 0; i < criterionCount; i++) { + if (i > 0) { + builder.append(", "); + } + final int criterion = mSelectorAttributes.keyAt(i); + switch (criterion) { + case SELECTOR_TEXT: + builder.append("TEXT=").append(mSelectorAttributes.valueAt(i)); + break; + case SELECTOR_TEXT_REGEX: + builder.append("TEXT_REGEX=").append(mSelectorAttributes.valueAt(i)); + break; + case SELECTOR_START_TEXT: + builder.append("START_TEXT=").append(mSelectorAttributes.valueAt(i)); + break; + case SELECTOR_CONTAINS_TEXT: + builder.append("CONTAINS_TEXT=").append(mSelectorAttributes.valueAt(i)); + break; + case SELECTOR_CLASS: + builder.append("CLASS=").append(mSelectorAttributes.valueAt(i)); + break; + case SELECTOR_CLASS_REGEX: + builder.append("CLASS_REGEX=").append(mSelectorAttributes.valueAt(i)); + break; + case SELECTOR_DESCRIPTION: + builder.append("DESCRIPTION=").append(mSelectorAttributes.valueAt(i)); + break; + case SELECTOR_DESCRIPTION_REGEX: + builder.append("DESCRIPTION_REGEX=").append(mSelectorAttributes.valueAt(i)); + break; + case SELECTOR_START_DESCRIPTION: + builder.append("START_DESCRIPTION=").append(mSelectorAttributes.valueAt(i)); + break; + case SELECTOR_CONTAINS_DESCRIPTION: + builder.append("CONTAINS_DESCRIPTION=").append(mSelectorAttributes.valueAt(i)); + break; + case SELECTOR_INDEX: + builder.append("INDEX=").append(mSelectorAttributes.valueAt(i)); + break; + case SELECTOR_INSTANCE: + builder.append("INSTANCE=").append(mSelectorAttributes.valueAt(i)); + break; + case SELECTOR_ENABLED: + builder.append("ENABLED=").append(mSelectorAttributes.valueAt(i)); + break; + case SELECTOR_FOCUSED: + builder.append("FOCUSED=").append(mSelectorAttributes.valueAt(i)); + break; + case SELECTOR_FOCUSABLE: + builder.append("FOCUSABLE=").append(mSelectorAttributes.valueAt(i)); + break; + case SELECTOR_SCROLLABLE: + builder.append("SCROLLABLE=").append(mSelectorAttributes.valueAt(i)); + break; + case SELECTOR_CLICKABLE: + builder.append("CLICKABLE=").append(mSelectorAttributes.valueAt(i)); + break; + case SELECTOR_CHECKABLE: + builder.append("CHECKABLE=").append(mSelectorAttributes.valueAt(i)); + break; + case SELECTOR_LONG_CLICKABLE: + builder.append("LONG_CLICKABLE=").append(mSelectorAttributes.valueAt(i)); + break; + case SELECTOR_CHECKED: + builder.append("CHECKED=").append(mSelectorAttributes.valueAt(i)); + break; + case SELECTOR_SELECTED: + builder.append("SELECTED=").append(mSelectorAttributes.valueAt(i)); + break; + case SELECTOR_ID: + builder.append("ID=").append(mSelectorAttributes.valueAt(i)); + break; + case SELECTOR_CHILD: + if (all) + builder.append("CHILD=").append(mSelectorAttributes.valueAt(i)); + else + builder.append("CHILD[..]"); + break; + case SELECTOR_PATTERN: + if (all) + builder.append("PATTERN=").append(mSelectorAttributes.valueAt(i)); + else + builder.append("PATTERN[..]"); + break; + case SELECTOR_CONTAINER: + if (all) + builder.append("CONTAINER=").append(mSelectorAttributes.valueAt(i)); + else + builder.append("CONTAINER[..]"); + break; + case SELECTOR_PARENT: + if (all) + builder.append("PARENT=").append(mSelectorAttributes.valueAt(i)); + else + builder.append("PARENT[..]"); + break; + case SELECTOR_COUNT: + builder.append("COUNT=").append(mSelectorAttributes.valueAt(i)); + break; + case SELECTOR_PACKAGE_NAME: + builder.append("PACKAGE NAME=").append(mSelectorAttributes.valueAt(i)); + break; + case SELECTOR_PACKAGE_NAME_REGEX: + builder.append("PACKAGE_NAME_REGEX=").append(mSelectorAttributes.valueAt(i)); + break; + case SELECTOR_RESOURCE_ID: + builder.append("RESOURCE_ID=").append(mSelectorAttributes.valueAt(i)); + break; + case SELECTOR_RESOURCE_ID_REGEX: + builder.append("RESOURCE_ID_REGEX=").append(mSelectorAttributes.valueAt(i)); + break; + default: + builder.append("UNDEFINED="+criterion+" ").append(mSelectorAttributes.valueAt(i)); + } + } + builder.append("]"); + return builder.toString(); + } +} diff --git a/cmds/uiautomator/library/core-src/com/android/uiautomator/core/UiWatcher.java b/cmds/uiautomator/library/core-src/com/android/uiautomator/core/UiWatcher.java new file mode 100644 index 0000000000000000000000000000000000000000..5403e30fcadef8edbc3305ff57bd446f83049043 --- /dev/null +++ b/cmds/uiautomator/library/core-src/com/android/uiautomator/core/UiWatcher.java @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.uiautomator.core; + +/** + * See {@link UiDevice#registerWatcher(String, UiWatcher)} on how to register a + * a condition watcher to be called by the automation library. The automation library will + * invoke checkForCondition() only when a regular API call is in retry mode because it is unable + * to locate its selector yet. Only during this time, the watchers are invoked to check if there is + * something else unexpected on the screen. + * @since API Level 16 + */ +public interface UiWatcher { + + /** + * Custom handler that is automatically called when the testing framework is unable to + * find a match using the {@link UiSelector} + * + * When the framework is in the process of matching a {@link UiSelector} and it + * is unable to match any widget based on the specified criteria in the selector, + * the framework will perform retries for a predetermined time, waiting for the display + * to update and show the desired widget. While the framework is in this state, it will call + * registered watchers' checkForCondition(). This gives the registered watchers a chance + * to take a look at the display and see if there is a recognized condition that can be + * handled and in doing so allowing the current test to continue. + * + * An example usage would be to look for dialogs popped due to other background + * processes requesting user attention and have nothing to do with the application + * currently under test. + * + * @return true to indicate a matched condition or false for nothing was matched + * @since API Level 16 + */ + public boolean checkForCondition(); +} diff --git a/cmds/uiautomator/library/testrunner-src/com/android/uiautomator/core/ShellUiAutomatorBridge.java b/cmds/uiautomator/library/testrunner-src/com/android/uiautomator/core/ShellUiAutomatorBridge.java new file mode 100644 index 0000000000000000000000000000000000000000..c551482f36bf1a8c18074ebc245a86eda6430791 --- /dev/null +++ b/cmds/uiautomator/library/testrunner-src/com/android/uiautomator/core/ShellUiAutomatorBridge.java @@ -0,0 +1,122 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.uiautomator.core; + +import android.app.ActivityManagerNative; +import android.app.IActivityManager; +import android.app.IActivityManager.ContentProviderHolder; +import android.app.UiAutomation; +import android.content.Context; +import android.content.IContentProvider; +import android.database.Cursor; +import android.hardware.display.DisplayManagerGlobal; +import android.os.Binder; +import android.os.IBinder; +import android.os.IPowerManager; +import android.os.RemoteException; +import android.os.ServiceManager; +import android.os.UserHandle; +import android.provider.Settings; +import android.util.Log; +import android.view.Display; +import android.view.IWindowManager; + +/** + * @hide + */ +public class ShellUiAutomatorBridge extends UiAutomatorBridge { + + private static final String LOG_TAG = ShellUiAutomatorBridge.class.getSimpleName(); + + public ShellUiAutomatorBridge(UiAutomation uiAutomation) { + super(uiAutomation); + } + + public Display getDefaultDisplay() { + return DisplayManagerGlobal.getInstance().getRealDisplay(Display.DEFAULT_DISPLAY); + } + + public long getSystemLongPressTime() { + // Read the long press timeout setting. + long longPressTimeout = 0; + try { + IContentProvider provider = null; + Cursor cursor = null; + IActivityManager activityManager = ActivityManagerNative.getDefault(); + String providerName = Settings.Secure.CONTENT_URI.getAuthority(); + IBinder token = new Binder(); + try { + ContentProviderHolder holder = activityManager.getContentProviderExternal( + providerName, UserHandle.USER_OWNER, token); + if (holder == null) { + throw new IllegalStateException("Could not find provider: " + providerName); + } + provider = holder.provider; + cursor = provider.query(null, Settings.Secure.CONTENT_URI, + new String[] { + Settings.Secure.VALUE + }, "name=?", + new String[] { + Settings.Secure.LONG_PRESS_TIMEOUT + }, null, null); + if (cursor.moveToFirst()) { + longPressTimeout = cursor.getInt(0); + } + } finally { + if (cursor != null) { + cursor.close(); + } + if (provider != null) { + activityManager.removeContentProviderExternal(providerName, token); + } + } + } catch (RemoteException e) { + String message = "Error reading long press timeout setting."; + Log.e(LOG_TAG, message, e); + throw new RuntimeException(message, e); + } + return longPressTimeout; + } + + @Override + public int getRotation() { + IWindowManager wm = + IWindowManager.Stub.asInterface(ServiceManager.getService(Context.WINDOW_SERVICE)); + int ret = -1; + try { + ret = wm.getRotation(); + } catch (RemoteException e) { + Log.e(LOG_TAG, "Error getting screen rotation", e); + throw new RuntimeException(e); + } + return ret; + } + + @Override + public boolean isScreenOn() { + IPowerManager pm = + IPowerManager.Stub.asInterface(ServiceManager.getService(Context.POWER_SERVICE)); + boolean ret = false; + try { + ret = pm.isInteractive(); + } catch (RemoteException e) { + Log.e(LOG_TAG, "Error getting screen status", e); + throw new RuntimeException(e); + } + return ret; + } +} diff --git a/cmds/uiautomator/library/testrunner-src/com/android/uiautomator/core/UiAutomationShellWrapper.java b/cmds/uiautomator/library/testrunner-src/com/android/uiautomator/core/UiAutomationShellWrapper.java new file mode 100644 index 0000000000000000000000000000000000000000..1fa9bacc10cb5dc9c67a0864137ab5cd8ca616ae --- /dev/null +++ b/cmds/uiautomator/library/testrunner-src/com/android/uiautomator/core/UiAutomationShellWrapper.java @@ -0,0 +1,127 @@ +package com.android.uiautomator.core; + +import android.accessibilityservice.AccessibilityServiceInfo; +import android.app.ActivityManager; +import android.app.ActivityManagerNative; +import android.app.IActivityController; +import android.app.IActivityManager; +import android.app.UiAutomation; +import android.app.UiAutomationConnection; +import android.content.Intent; +import android.os.HandlerThread; +import android.os.RemoteException; + +/** + * @hide + */ +public class UiAutomationShellWrapper { + + private static final String HANDLER_THREAD_NAME = "UiAutomatorHandlerThread"; + + private final HandlerThread mHandlerThread = new HandlerThread(HANDLER_THREAD_NAME); + + private UiAutomation mUiAutomation; + + public void connect() { + if (mHandlerThread.isAlive()) { + throw new IllegalStateException("Already connected!"); + } + mHandlerThread.start(); + mUiAutomation = new UiAutomation(mHandlerThread.getLooper(), + new UiAutomationConnection()); + mUiAutomation.connect(); + } + + /** + * Enable or disable monkey test mode. + * + * Setting test as "monkey" indicates to some applications that a test framework is + * running as a "monkey" type. Such applications may choose not to perform actions that + * do submits so to avoid allowing monkey tests from doing harm or performing annoying + * actions such as dialing 911 or posting messages to public forums, etc. + * + * @param isSet True to set as monkey test. False to set as regular functional test (default). + * @see {@link ActivityManager#isUserAMonkey()} + */ + public void setRunAsMonkey(boolean isSet) { + IActivityManager am = ActivityManagerNative.getDefault(); + if (am == null) { + throw new RuntimeException("Can't manage monkey status; is the system running?"); + } + try { + if (isSet) { + am.setActivityController(new DummyActivityController()); + } else { + am.setActivityController(null); + } + } catch (RemoteException e) { + throw new RuntimeException(e); + } + } + + public void disconnect() { + if (!mHandlerThread.isAlive()) { + throw new IllegalStateException("Already disconnected!"); + } + mUiAutomation.disconnect(); + mHandlerThread.quit(); + } + + public UiAutomation getUiAutomation() { + return mUiAutomation; + } + + public void setCompressedLayoutHierarchy(boolean compressed) { + AccessibilityServiceInfo info = mUiAutomation.getServiceInfo(); + if (compressed) + info.flags &= ~AccessibilityServiceInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS; + else + info.flags |= AccessibilityServiceInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS; + mUiAutomation.setServiceInfo(info); + } + + /** + * Dummy, no interference, activity controller. + */ + private class DummyActivityController extends IActivityController.Stub { + @Override + public boolean activityStarting(Intent intent, String pkg) throws RemoteException { + /* do nothing and let activity proceed normally */ + return true; + } + + @Override + public boolean activityResuming(String pkg) throws RemoteException { + /* do nothing and let activity proceed normally */ + return true; + } + + @Override + public boolean appCrashed(String processName, int pid, String shortMsg, String longMsg, + long timeMillis, String stackTrace) throws RemoteException { + /* do nothing and let activity proceed normally */ + return true; + } + + @Override + public int appEarlyNotResponding(String processName, int pid, String annotation) + throws RemoteException { + /* do nothing and let activity proceed normally */ + return 0; + } + + @Override + public int appNotResponding(String processName, int pid, String processStats) + throws RemoteException { + /* do nothing and let activity proceed normally */ + return 0; + } + + @Override + public int systemNotResponding(String message) + throws RemoteException { + /* do nothing and let system proceed normally */ + return 0; + } + } +} diff --git a/cmds/uiautomator/library/testrunner-src/com/android/uiautomator/testrunner/IAutomationSupport.java b/cmds/uiautomator/library/testrunner-src/com/android/uiautomator/testrunner/IAutomationSupport.java new file mode 100644 index 0000000000000000000000000000000000000000..f0c60d2840c2c3510ca0805fda8932b5054f4dc0 --- /dev/null +++ b/cmds/uiautomator/library/testrunner-src/com/android/uiautomator/testrunner/IAutomationSupport.java @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.uiautomator.testrunner; + +import android.os.Bundle; + +/** + * Provides auxiliary support for running test cases + * + * @since API Level 16 + */ +public interface IAutomationSupport { + + /** + * Allows the running test cases to send out interim status + * + * @param resultCode + * @param status status report, consisting of key value pairs + * @since API Level 16 + */ + public void sendStatus(int resultCode, Bundle status); + +} diff --git a/cmds/uiautomator/library/testrunner-src/com/android/uiautomator/testrunner/TestCaseCollector.java b/cmds/uiautomator/library/testrunner-src/com/android/uiautomator/testrunner/TestCaseCollector.java new file mode 100644 index 0000000000000000000000000000000000000000..cda49f6cada7865d2e36039a1d2c30478a483faa --- /dev/null +++ b/cmds/uiautomator/library/testrunner-src/com/android/uiautomator/testrunner/TestCaseCollector.java @@ -0,0 +1,152 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.uiautomator.testrunner; + +import junit.framework.TestCase; + +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +/** + * A convenient class that encapsulates functions for adding test classes + * + * @hide + */ +public class TestCaseCollector { + + private ClassLoader mClassLoader; + private List mTestCases; + private TestCaseFilter mFilter; + + public TestCaseCollector(ClassLoader classLoader, TestCaseFilter filter) { + mClassLoader = classLoader; + mTestCases = new ArrayList(); + mFilter = filter; + } + + /** + * Adds classes to test by providing a list of class names in string + * + * The class name may be in "#" format + * + * @param classNames class must be subclass of {@link UiAutomatorTestCase} + * @throws ClassNotFoundException + */ + public void addTestClasses(List classNames) throws ClassNotFoundException { + for (String className : classNames) { + addTestClass(className); + } + } + + /** + * Adds class to test by providing class name in string. + * + * The class name may be in "#" format + * + * @param className classes must be subclass of {@link UiAutomatorTestCase} + * @throws ClassNotFoundException + */ + public void addTestClass(String className) throws ClassNotFoundException { + int hashPos = className.indexOf('#'); + String methodName = null; + if (hashPos != -1) { + methodName = className.substring(hashPos + 1); + className = className.substring(0, hashPos); + } + addTestClass(className, methodName); + } + + /** + * Adds class to test by providing class name and method name in separate strings + * + * @param className class must be subclass of {@link UiAutomatorTestCase} + * @param methodName may be null, in which case all "public void testNNN(void)" functions + * will be added + * @throws ClassNotFoundException + */ + public void addTestClass(String className, String methodName) throws ClassNotFoundException { + Class clazz = mClassLoader.loadClass(className); + if (methodName != null) { + addSingleTestMethod(clazz, methodName); + } else { + Method[] methods = clazz.getMethods(); + for (Method method : methods) { + if (mFilter.accept(method)) { + addSingleTestMethod(clazz, method.getName()); + } + } + } + } + + /** + * Gets the list of added test cases so far + * @return a list of {@link TestCase} + */ + public List getTestCases() { + return Collections.unmodifiableList(mTestCases); + } + + protected void addSingleTestMethod(Class clazz, String method) { + if (!(mFilter.accept(clazz))) { + throw new RuntimeException("Test class must be derived from UiAutomatorTestCase"); + } + try { + TestCase testCase = (TestCase) clazz.newInstance(); + testCase.setName(method); + mTestCases.add(testCase); + } catch (InstantiationException e) { + mTestCases.add(error(clazz, "InstantiationException: could not instantiate " + + "test class. Class: " + clazz.getName())); + } catch (IllegalAccessException e) { + mTestCases.add(error(clazz, "IllegalAccessException: could not instantiate " + + "test class. Class: " + clazz.getName())); + } + } + + private UiAutomatorTestCase error(Class clazz, final String message) { + UiAutomatorTestCase warning = new UiAutomatorTestCase() { + protected void runTest() { + fail(message); + } + }; + + warning.setName(clazz.getName()); + return warning; + } + + /** + * Determine if a class and its method should be accepted into test suite + * + */ + public interface TestCaseFilter { + + /** + * Determine that based on the method signature, if it can be accepted + * @param method + */ + public boolean accept(Method method); + + /** + * Determine that based on the class type, if it can be accepted + * @param clazz + * @return + */ + public boolean accept(Class clazz); + } +} diff --git a/cmds/uiautomator/library/testrunner-src/com/android/uiautomator/testrunner/UiAutomatorTestCase.java b/cmds/uiautomator/library/testrunner-src/com/android/uiautomator/testrunner/UiAutomatorTestCase.java new file mode 100644 index 0000000000000000000000000000000000000000..e7d961b4d9d2d3121e7c41186a269952bc26ef21 --- /dev/null +++ b/cmds/uiautomator/library/testrunner-src/com/android/uiautomator/testrunner/UiAutomatorTestCase.java @@ -0,0 +1,147 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.uiautomator.testrunner; + +import android.content.Context; +import android.os.Bundle; +import android.os.RemoteException; +import android.os.ServiceManager; +import android.os.SystemClock; +import android.view.inputmethod.InputMethodInfo; + +import com.android.internal.view.IInputMethodManager; +import com.android.uiautomator.core.UiDevice; + +import junit.framework.TestCase; + +import java.util.List; + +/** + * UI automation test should extend this class. This class provides access + * to the following: + * {@link UiDevice} instance + * {@link Bundle} for command line parameters. + * @since API Level 16 + */ +public class UiAutomatorTestCase extends TestCase { + + private static final String DISABLE_IME = "disable_ime"; + private static final String DUMMY_IME_PACKAGE = "com.android.testing.dummyime"; + private UiDevice mUiDevice; + private Bundle mParams; + private IAutomationSupport mAutomationSupport; + private boolean mShouldDisableIme = false; + + @Override + protected void setUp() throws Exception { + super.setUp(); + mShouldDisableIme = "true".equals(mParams.getString(DISABLE_IME)); + if (mShouldDisableIme) { + setDummyIme(); + } + } + + @Override + protected void tearDown() throws Exception { + if (mShouldDisableIme) { + restoreActiveIme(); + } + super.tearDown(); + } + + /** + * Get current instance of {@link UiDevice}. Works similar to calling the static + * {@link UiDevice#getInstance()} from anywhere in the test classes. + * @since API Level 16 + */ + public UiDevice getUiDevice() { + return mUiDevice; + } + + /** + * Get command line parameters. On the command line when passing -e key value + * pairs, the {@link Bundle} will have the key value pairs conveniently available to the + * tests. + * @since API Level 16 + */ + public Bundle getParams() { + return mParams; + } + + /** + * Provides support for running tests to report interim status + * + * @return IAutomationSupport + * @since API Level 16 + */ + public IAutomationSupport getAutomationSupport() { + return mAutomationSupport; + } + + /** + * package private + * @param uiDevice + */ + void setUiDevice(UiDevice uiDevice) { + mUiDevice = uiDevice; + } + + /** + * package private + * @param params + */ + void setParams(Bundle params) { + mParams = params; + } + + void setAutomationSupport(IAutomationSupport automationSupport) { + mAutomationSupport = automationSupport; + } + + /** + * Calls {@link SystemClock#sleep(long)} to sleep + * @param ms is in milliseconds. + * @since API Level 16 + */ + public void sleep(long ms) { + SystemClock.sleep(ms); + } + + private void setDummyIme() throws RemoteException { + IInputMethodManager im = IInputMethodManager.Stub.asInterface(ServiceManager + .getService(Context.INPUT_METHOD_SERVICE)); + List infos = im.getInputMethodList(); + String id = null; + for (InputMethodInfo info : infos) { + if (DUMMY_IME_PACKAGE.equals(info.getComponent().getPackageName())) { + id = info.getId(); + } + } + if (id == null) { + throw new RuntimeException(String.format( + "Required testing fixture missing: IME package (%s)", DUMMY_IME_PACKAGE)); + } + im.setInputMethod(null, id); + } + + private void restoreActiveIme() throws RemoteException { + // TODO: figure out a way to restore active IME + // Currently retrieving active IME requires querying secure settings provider, which is hard + // to do without a Context; so the caveat here is that to make the post test device usable, + // the active IME needs to be manually switched. + } +} diff --git a/cmds/uiautomator/library/testrunner-src/com/android/uiautomator/testrunner/UiAutomatorTestCaseFilter.java b/cmds/uiautomator/library/testrunner-src/com/android/uiautomator/testrunner/UiAutomatorTestCaseFilter.java new file mode 100644 index 0000000000000000000000000000000000000000..1de5a4d1ee96c891202863b317fa1be2a7678140 --- /dev/null +++ b/cmds/uiautomator/library/testrunner-src/com/android/uiautomator/testrunner/UiAutomatorTestCaseFilter.java @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.uiautomator.testrunner; + +import com.android.uiautomator.testrunner.TestCaseCollector.TestCaseFilter; + +import java.lang.reflect.Method; + +/** + * A {@link TestCaseFilter} that accepts testFoo methods and {@link UiAutomatorTestCase} classes + * + * @hide + */ +public class UiAutomatorTestCaseFilter implements TestCaseFilter { + + @Override + public boolean accept(Method method) { + return ((method.getParameterTypes().length == 0) && + (method.getName().startsWith("test")) && + (method.getReturnType().getSimpleName().equals("void"))); + } + + @Override + public boolean accept(Class clazz) { + return UiAutomatorTestCase.class.isAssignableFrom(clazz); + } + +} diff --git a/cmds/uiautomator/library/testrunner-src/com/android/uiautomator/testrunner/UiAutomatorTestRunner.java b/cmds/uiautomator/library/testrunner-src/com/android/uiautomator/testrunner/UiAutomatorTestRunner.java new file mode 100644 index 0000000000000000000000000000000000000000..ef167f90e33e6de42bcb87fca92342c32e7c197b --- /dev/null +++ b/cmds/uiautomator/library/testrunner-src/com/android/uiautomator/testrunner/UiAutomatorTestRunner.java @@ -0,0 +1,431 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.uiautomator.testrunner; + +import android.app.Activity; +import android.app.IInstrumentationWatcher; +import android.app.Instrumentation; +import android.content.ComponentName; +import android.os.Bundle; +import android.os.Debug; +import android.os.HandlerThread; +import android.os.IBinder; +import android.os.SystemClock; +import android.test.RepetitiveTest; +import android.util.Log; + +import com.android.uiautomator.core.ShellUiAutomatorBridge; +import com.android.uiautomator.core.Tracer; +import com.android.uiautomator.core.UiAutomationShellWrapper; +import com.android.uiautomator.core.UiDevice; + +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; +import java.lang.Thread.UncaughtExceptionHandler; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; + +import junit.framework.AssertionFailedError; +import junit.framework.Test; +import junit.framework.TestCase; +import junit.framework.TestListener; +import junit.framework.TestResult; +import junit.runner.BaseTestRunner; +import junit.textui.ResultPrinter; + +/** + * @hide + */ +public class UiAutomatorTestRunner { + + private static final String LOGTAG = UiAutomatorTestRunner.class.getSimpleName(); + private static final int EXIT_OK = 0; + private static final int EXIT_EXCEPTION = -1; + + private static final String HANDLER_THREAD_NAME = "UiAutomatorHandlerThread"; + + private boolean mDebug; + private boolean mMonkey; + private Bundle mParams = null; + private UiDevice mUiDevice; + private List mTestClasses = null; + private final FakeInstrumentationWatcher mWatcher = new FakeInstrumentationWatcher(); + private final IAutomationSupport mAutomationSupport = new IAutomationSupport() { + @Override + public void sendStatus(int resultCode, Bundle status) { + mWatcher.instrumentationStatus(null, resultCode, status); + } + }; + private final List mTestListeners = new ArrayList(); + + private HandlerThread mHandlerThread; + + public void run(List testClasses, Bundle params, boolean debug, boolean monkey) { + Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() { + @Override + public void uncaughtException(Thread thread, Throwable ex) { + Log.e(LOGTAG, "uncaught exception", ex); + Bundle results = new Bundle(); + results.putString("shortMsg", ex.getClass().getName()); + results.putString("longMsg", ex.getMessage()); + mWatcher.instrumentationFinished(null, 0, results); + // bailing on uncaught exception + System.exit(EXIT_EXCEPTION); + } + }); + + mTestClasses = testClasses; + mParams = params; + mDebug = debug; + mMonkey = monkey; + start(); + System.exit(EXIT_OK); + } + + /** + * Called after all test classes are in place, ready to test + */ + protected void start() { + TestCaseCollector collector = getTestCaseCollector(this.getClass().getClassLoader()); + try { + collector.addTestClasses(mTestClasses); + } catch (ClassNotFoundException e) { + // will be caught by uncaught handler + throw new RuntimeException(e.getMessage(), e); + } + if (mDebug) { + Debug.waitForDebugger(); + } + mHandlerThread = new HandlerThread(HANDLER_THREAD_NAME); + mHandlerThread.setDaemon(true); + mHandlerThread.start(); + UiAutomationShellWrapper automationWrapper = new UiAutomationShellWrapper(); + automationWrapper.connect(); + + long startTime = SystemClock.uptimeMillis(); + TestResult testRunResult = new TestResult(); + ResultReporter resultPrinter; + String outputFormat = mParams.getString("outputFormat"); + List testCases = collector.getTestCases(); + Bundle testRunOutput = new Bundle(); + if ("simple".equals(outputFormat)) { + resultPrinter = new SimpleResultPrinter(System.out, true); + } else { + resultPrinter = new WatcherResultPrinter(testCases.size()); + } + try { + automationWrapper.setRunAsMonkey(mMonkey); + mUiDevice = UiDevice.getInstance(); + mUiDevice.initialize(new ShellUiAutomatorBridge(automationWrapper.getUiAutomation())); + + String traceType = mParams.getString("traceOutputMode"); + if(traceType != null) { + Tracer.Mode mode = Tracer.Mode.valueOf(Tracer.Mode.class, traceType); + if (mode == Tracer.Mode.FILE || mode == Tracer.Mode.ALL) { + String filename = mParams.getString("traceLogFilename"); + if (filename == null) { + throw new RuntimeException("Name of log file not specified. " + + "Please specify it using traceLogFilename parameter"); + } + Tracer.getInstance().setOutputFilename(filename); + } + Tracer.getInstance().setOutputMode(mode); + } + + // add test listeners + testRunResult.addListener(resultPrinter); + // add all custom listeners + for (TestListener listener : mTestListeners) { + testRunResult.addListener(listener); + } + + // run tests for realz! + for (TestCase testCase : testCases) { + prepareTestCase(testCase); + testCase.run(testRunResult); + } + } catch (Throwable t) { + // catch all exceptions so a more verbose error message can be outputted + resultPrinter.printUnexpectedError(t); + testRunOutput.putString("shortMsg", t.getMessage()); + } finally { + long runTime = SystemClock.uptimeMillis() - startTime; + resultPrinter.print(testRunResult, runTime, testRunOutput); + automationWrapper.disconnect(); + automationWrapper.setRunAsMonkey(false); + mHandlerThread.quit(); + } + } + + // copy & pasted from com.android.commands.am.Am + private class FakeInstrumentationWatcher implements IInstrumentationWatcher { + + private final boolean mRawMode = true; + + @Override + public IBinder asBinder() { + throw new UnsupportedOperationException("I'm just a fake!"); + } + + @Override + public void instrumentationStatus(ComponentName name, int resultCode, Bundle results) { + synchronized (this) { + // pretty printer mode? + String pretty = null; + if (!mRawMode && results != null) { + pretty = results.getString(Instrumentation.REPORT_KEY_STREAMRESULT); + } + if (pretty != null) { + System.out.print(pretty); + } else { + if (results != null) { + for (String key : results.keySet()) { + System.out.println("INSTRUMENTATION_STATUS: " + key + "=" + + results.get(key)); + } + } + System.out.println("INSTRUMENTATION_STATUS_CODE: " + resultCode); + } + notifyAll(); + } + } + + @Override + public void instrumentationFinished(ComponentName name, int resultCode, Bundle results) { + synchronized (this) { + // pretty printer mode? + String pretty = null; + if (!mRawMode && results != null) { + pretty = results.getString(Instrumentation.REPORT_KEY_STREAMRESULT); + } + if (pretty != null) { + System.out.println(pretty); + } else { + if (results != null) { + for (String key : results.keySet()) { + System.out.println("INSTRUMENTATION_RESULT: " + key + "=" + + results.get(key)); + } + } + System.out.println("INSTRUMENTATION_CODE: " + resultCode); + } + notifyAll(); + } + } + } + + private interface ResultReporter extends TestListener { + public void print(TestResult result, long runTime, Bundle testOutput); + public void printUnexpectedError(Throwable t); + } + + // Copy & pasted from InstrumentationTestRunner.WatcherResultPrinter + private class WatcherResultPrinter implements ResultReporter { + + private static final String REPORT_KEY_NUM_TOTAL = "numtests"; + private static final String REPORT_KEY_NAME_CLASS = "class"; + private static final String REPORT_KEY_NUM_CURRENT = "current"; + private static final String REPORT_KEY_NAME_TEST = "test"; + private static final String REPORT_KEY_NUM_ITERATIONS = "numiterations"; + private static final String REPORT_VALUE_ID = "UiAutomatorTestRunner"; + private static final String REPORT_KEY_STACK = "stack"; + + private static final int REPORT_VALUE_RESULT_START = 1; + private static final int REPORT_VALUE_RESULT_ERROR = -1; + private static final int REPORT_VALUE_RESULT_FAILURE = -2; + + private final Bundle mResultTemplate; + Bundle mTestResult; + int mTestNum = 0; + int mTestResultCode = 0; + String mTestClass = null; + + private final SimpleResultPrinter mPrinter; + private final ByteArrayOutputStream mStream; + private final PrintStream mWriter; + + public WatcherResultPrinter(int numTests) { + mResultTemplate = new Bundle(); + mResultTemplate.putString(Instrumentation.REPORT_KEY_IDENTIFIER, REPORT_VALUE_ID); + mResultTemplate.putInt(REPORT_KEY_NUM_TOTAL, numTests); + + mStream = new ByteArrayOutputStream(); + mWriter = new PrintStream(mStream); + mPrinter = new SimpleResultPrinter(mWriter, false); + } + + /** + * send a status for the start of a each test, so long tests can be seen + * as "running" + */ + @Override + public void startTest(Test test) { + String testClass = test.getClass().getName(); + String testName = ((TestCase) test).getName(); + mTestResult = new Bundle(mResultTemplate); + mTestResult.putString(REPORT_KEY_NAME_CLASS, testClass); + mTestResult.putString(REPORT_KEY_NAME_TEST, testName); + mTestResult.putInt(REPORT_KEY_NUM_CURRENT, ++mTestNum); + // pretty printing + if (testClass != null && !testClass.equals(mTestClass)) { + mTestResult.putString(Instrumentation.REPORT_KEY_STREAMRESULT, + String.format("\n%s:", testClass)); + mTestClass = testClass; + } else { + mTestResult.putString(Instrumentation.REPORT_KEY_STREAMRESULT, ""); + } + + Method testMethod = null; + try { + testMethod = test.getClass().getMethod(testName); + // Report total number of iterations, if test is repetitive + if (testMethod.isAnnotationPresent(RepetitiveTest.class)) { + int numIterations = testMethod.getAnnotation(RepetitiveTest.class) + .numIterations(); + mTestResult.putInt(REPORT_KEY_NUM_ITERATIONS, numIterations); + } + } catch (NoSuchMethodException e) { + // ignore- the test with given name does not exist. Will be + // handled during test + // execution + } + + mAutomationSupport.sendStatus(REPORT_VALUE_RESULT_START, mTestResult); + mTestResultCode = 0; + + mPrinter.startTest(test); + } + + @Override + public void addError(Test test, Throwable t) { + mTestResult.putString(REPORT_KEY_STACK, BaseTestRunner.getFilteredTrace(t)); + mTestResultCode = REPORT_VALUE_RESULT_ERROR; + // pretty printing + mTestResult.putString(Instrumentation.REPORT_KEY_STREAMRESULT, + String.format("\nError in %s:\n%s", + ((TestCase)test).getName(), BaseTestRunner.getFilteredTrace(t))); + + mPrinter.addError(test, t); + } + + @Override + public void addFailure(Test test, AssertionFailedError t) { + mTestResult.putString(REPORT_KEY_STACK, BaseTestRunner.getFilteredTrace(t)); + mTestResultCode = REPORT_VALUE_RESULT_FAILURE; + // pretty printing + mTestResult.putString(Instrumentation.REPORT_KEY_STREAMRESULT, + String.format("\nFailure in %s:\n%s", + ((TestCase)test).getName(), BaseTestRunner.getFilteredTrace(t))); + + mPrinter.addFailure(test, t); + } + + @Override + public void endTest(Test test) { + if (mTestResultCode == 0) { + mTestResult.putString(Instrumentation.REPORT_KEY_STREAMRESULT, "."); + } + mAutomationSupport.sendStatus(mTestResultCode, mTestResult); + + mPrinter.endTest(test); + } + + @Override + public void print(TestResult result, long runTime, Bundle testOutput) { + mPrinter.print(result, runTime, testOutput); + testOutput.putString(Instrumentation.REPORT_KEY_STREAMRESULT, + String.format("\nTest results for %s=%s", + getClass().getSimpleName(), + mStream.toString())); + mWriter.close(); + mAutomationSupport.sendStatus(Activity.RESULT_OK, testOutput); + } + + @Override + public void printUnexpectedError(Throwable t) { + mWriter.println(String.format("Test run aborted due to unexpected exception: %s", + t.getMessage())); + t.printStackTrace(mWriter); + } + } + + /** + * Class that produces the same output as JUnit when running from command line. Can be + * used when default UiAutomator output is too verbose. + */ + private class SimpleResultPrinter extends ResultPrinter implements ResultReporter { + private final boolean mFullOutput; + public SimpleResultPrinter(PrintStream writer, boolean fullOutput) { + super(writer); + mFullOutput = fullOutput; + } + + @Override + public void print(TestResult result, long runTime, Bundle testOutput) { + printHeader(runTime); + if (mFullOutput) { + printErrors(result); + printFailures(result); + } + printFooter(result); + } + + @Override + public void printUnexpectedError(Throwable t) { + if (mFullOutput) { + getWriter().printf("Test run aborted due to unexpected exeption: %s", + t.getMessage()); + t.printStackTrace(getWriter()); + } + } + } + + protected TestCaseCollector getTestCaseCollector(ClassLoader classLoader) { + return new TestCaseCollector(classLoader, getTestCaseFilter()); + } + + /** + * Returns an object which determines if the class and its methods should be + * accepted into the test suite. + * @return + */ + public UiAutomatorTestCaseFilter getTestCaseFilter() { + return new UiAutomatorTestCaseFilter(); + } + + protected void addTestListener(TestListener listener) { + if (!mTestListeners.contains(listener)) { + mTestListeners.add(listener); + } + } + + protected void removeTestListener(TestListener listener) { + mTestListeners.remove(listener); + } + + /** + * subclass may override this method to perform further preparation + * + * @param testCase + */ + protected void prepareTestCase(TestCase testCase) { + ((UiAutomatorTestCase)testCase).setAutomationSupport(mAutomationSupport); + ((UiAutomatorTestCase)testCase).setUiDevice(mUiDevice); + ((UiAutomatorTestCase)testCase).setParams(mParams); + } +} diff --git a/core/java/android/accessibilityservice/AccessibilityService.java b/core/java/android/accessibilityservice/AccessibilityService.java index 13ceb4adfcdd025113537e48d31d2b260ba49870..3f1845a8fcc318d1fe74523a31c4e3993ff9b8d4 100644 --- a/core/java/android/accessibilityservice/AccessibilityService.java +++ b/core/java/android/accessibilityservice/AccessibilityService.java @@ -16,6 +16,7 @@ package android.accessibilityservice; +import android.annotation.NonNull; import android.app.Service; import android.content.Context; import android.content.Intent; @@ -25,12 +26,16 @@ import android.os.Message; import android.os.RemoteException; import android.util.Log; import android.view.KeyEvent; +import android.view.WindowManager; +import android.view.WindowManagerGlobal; +import android.view.WindowManagerImpl; import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityInteractionClient; import android.view.accessibility.AccessibilityNodeInfo; import android.view.accessibility.AccessibilityWindowInfo; import com.android.internal.os.HandlerCaller; +import com.android.internal.os.SomeArgs; import java.util.List; @@ -366,7 +371,7 @@ public abstract class AccessibilityService extends Service { public void onAccessibilityEvent(AccessibilityEvent event); public void onInterrupt(); public void onServiceConnected(); - public void onSetConnectionId(int connectionId); + public void init(int connectionId, IBinder windowToken); public boolean onGesture(int gestureId); public boolean onKeyEvent(KeyEvent event); } @@ -375,6 +380,10 @@ public abstract class AccessibilityService extends Service { private AccessibilityServiceInfo mInfo; + private IBinder mWindowToken; + + private WindowManager mWindowManager; + /** * Callback for {@link android.view.accessibility.AccessibilityEvent}s. * @@ -611,6 +620,23 @@ public abstract class AccessibilityService extends Service { } } + @Override + public Object getSystemService(@ServiceName @NonNull String name) { + if (getBaseContext() == null) { + throw new IllegalStateException( + "System services not available to Activities before onCreate()"); + } + + // Guarantee that we always return the same window manager instance. + if (WINDOW_SERVICE.equals(name)) { + if (mWindowManager == null) { + mWindowManager = (WindowManager) getBaseContext().getSystemService(name); + } + return mWindowManager; + } + return super.getSystemService(name); + } + /** * Implement to return the implementation of the internal accessibility * service interface. @@ -634,8 +660,14 @@ public abstract class AccessibilityService extends Service { } @Override - public void onSetConnectionId( int connectionId) { + public void init(int connectionId, IBinder windowToken) { mConnectionId = connectionId; + mWindowToken = windowToken; + + // The client may have already obtained the window manager, so + // update the default token on whatever manager we gave them. + final WindowManagerImpl wm = (WindowManagerImpl) getSystemService(WINDOW_SERVICE); + wm.setDefaultToken(windowToken); } @Override @@ -658,7 +690,7 @@ public abstract class AccessibilityService extends Service { */ public static class IAccessibilityServiceClientWrapper extends IAccessibilityServiceClient.Stub implements HandlerCaller.Callback { - private static final int DO_SET_SET_CONNECTION = 1; + private static final int DO_INIT = 1; private static final int DO_ON_INTERRUPT = 2; private static final int DO_ON_ACCESSIBILITY_EVENT = 3; private static final int DO_ON_GESTURE = 4; @@ -677,9 +709,10 @@ public abstract class AccessibilityService extends Service { mCaller = new HandlerCaller(context, looper, this, true /*asyncHandler*/); } - public void setConnection(IAccessibilityServiceConnection connection, int connectionId) { - Message message = mCaller.obtainMessageIO(DO_SET_SET_CONNECTION, connectionId, - connection); + public void init(IAccessibilityServiceConnection connection, int connectionId, + IBinder windowToken) { + Message message = mCaller.obtainMessageIOO(DO_INIT, connectionId, + connection, windowToken); mCaller.sendMessage(message); } @@ -730,20 +763,24 @@ public abstract class AccessibilityService extends Service { mCallback.onInterrupt(); } return; - case DO_SET_SET_CONNECTION: { + case DO_INIT: { mConnectionId = message.arg1; + SomeArgs args = (SomeArgs) message.obj; IAccessibilityServiceConnection connection = - (IAccessibilityServiceConnection) message.obj; + (IAccessibilityServiceConnection) args.arg1; + IBinder windowToken = (IBinder) args.arg2; + args.recycle(); if (connection != null) { AccessibilityInteractionClient.getInstance().addConnection(mConnectionId, connection); - mCallback.onSetConnectionId(mConnectionId); + mCallback.init(mConnectionId, windowToken); mCallback.onServiceConnected(); } else { AccessibilityInteractionClient.getInstance().removeConnection( mConnectionId); + mConnectionId = AccessibilityInteractionClient.NO_ID; AccessibilityInteractionClient.getInstance().clearCache(); - mCallback.onSetConnectionId(AccessibilityInteractionClient.NO_ID); + mCallback.init(AccessibilityInteractionClient.NO_ID, null); } } return; diff --git a/core/java/android/accessibilityservice/IAccessibilityServiceClient.aidl b/core/java/android/accessibilityservice/IAccessibilityServiceClient.aidl index 6ce0219b81f571a9af105e08e99e139369991a06..8b503ddad9471abd88392d020a278667b1f67d85 100644 --- a/core/java/android/accessibilityservice/IAccessibilityServiceClient.aidl +++ b/core/java/android/accessibilityservice/IAccessibilityServiceClient.aidl @@ -28,7 +28,7 @@ import android.view.KeyEvent; */ oneway interface IAccessibilityServiceClient { - void setConnection(in IAccessibilityServiceConnection connection, int connectionId); + void init(in IAccessibilityServiceConnection connection, int connectionId, IBinder windowToken); void onAccessibilityEvent(in AccessibilityEvent event); diff --git a/core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl b/core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl index 27a03b69706ab63f08919ee9bcbc54dd0b2bcc4c..5f7a17d33bd100fd8532edf4d7fae37534161b76 100644 --- a/core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl +++ b/core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl @@ -54,10 +54,6 @@ interface IAccessibilityServiceConnection { int action, in Bundle arguments, int interactionId, IAccessibilityInteractionConnectionCallback callback, long threadId); - boolean computeClickPointInScreen(int accessibilityWindowId, long accessibilityNodeId, - int interactionId, IAccessibilityInteractionConnectionCallback callback, - long threadId); - AccessibilityWindowInfo getWindow(int windowId); List getWindows(); diff --git a/core/java/android/accounts/AccountManager.java b/core/java/android/accounts/AccountManager.java index 09b484bab2ca70273487279069680ce7d250a4ed..6957435c92b8fb480661731293eb5738d4d7feb1 100644 --- a/core/java/android/accounts/AccountManager.java +++ b/core/java/android/accounts/AccountManager.java @@ -17,37 +17,37 @@ package android.accounts; import android.app.Activity; -import android.content.Intent; +import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; +import android.content.Intent; import android.content.IntentFilter; -import android.content.BroadcastReceiver; import android.content.res.Resources; import android.database.SQLException; +import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Looper; -import android.os.RemoteException; import android.os.Parcelable; -import android.os.Build; import android.os.Process; +import android.os.RemoteException; import android.os.UserHandle; -import android.util.Log; import android.text.TextUtils; +import android.util.Log; + +import com.android.internal.R; +import com.google.android.collect.Maps; import java.io.IOException; import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; import java.util.concurrent.Callable; import java.util.concurrent.CancellationException; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; -import java.util.concurrent.TimeoutException; import java.util.concurrent.TimeUnit; -import java.util.HashMap; -import java.util.Map; - -import com.android.internal.R; -import com.google.android.collect.Maps; +import java.util.concurrent.TimeoutException; /** * This class provides access to a centralized registry of the user's @@ -747,13 +747,17 @@ public class AccountManager { * null for the main thread * @return An {@link AccountManagerFuture} which resolves to a Boolean, * true if the account has been successfully removed + * @deprecated use + * {@link #removeAccount(Account, Activity, AccountManagerCallback, Handler)} + * instead */ + @Deprecated public AccountManagerFuture removeAccount(final Account account, AccountManagerCallback callback, Handler handler) { if (account == null) throw new IllegalArgumentException("account is null"); return new Future2Task(handler, callback) { public void doWork() throws RemoteException { - mService.removeAccount(mResponse, account); + mService.removeAccount(mResponse, account, false); } public Boolean bundleToResult(Bundle bundle) throws AuthenticatorException { if (!bundle.containsKey(KEY_BOOLEAN_RESULT)) { @@ -764,10 +768,61 @@ public class AccountManager { }.start(); } + /** + * Removes an account from the AccountManager. Does nothing if the account + * does not exist. Does not delete the account from the server. + * The authenticator may have its own policies preventing account + * deletion, in which case the account will not be deleted. + * + *

    This method may be called from any thread, but the returned + * {@link AccountManagerFuture} must not be used on the main thread. + * + *

    This method requires the caller to hold the permission + * {@link android.Manifest.permission#MANAGE_ACCOUNTS}. + * + * @param account The {@link Account} to remove + * @param activity The {@link Activity} context to use for launching a new + * authenticator-defined sub-Activity to prompt the user to delete an + * account; used only to call startActivity(); if null, the prompt + * will not be launched directly, but the {@link Intent} may be + * returned to the caller instead + * @param callback Callback to invoke when the request completes, + * null for no callback + * @param handler {@link Handler} identifying the callback thread, + * null for the main thread + * @return An {@link AccountManagerFuture} which resolves to a Bundle with + * {@link #KEY_BOOLEAN_RESULT} if activity was specified and an account + * was removed or if active. If no activity was specified, the returned + * Bundle contains only {@link #KEY_INTENT} with the {@link Intent} + * needed to launch the actual account removal process, if authenticator + * needs the activity launch. If an error occurred, + * {@link AccountManagerFuture#getResult()} throws: + *

      + *
    • {@link AuthenticatorException} if no authenticator was registered for + * this account type or the authenticator failed to respond + *
    • {@link OperationCanceledException} if the operation was canceled for + * any reason, including the user canceling the creation process or + * adding accounts (of this type) has been disabled by policy + *
    + */ + public AccountManagerFuture removeAccount(final Account account, + final Activity activity, AccountManagerCallback callback, Handler handler) { + if (account == null) throw new IllegalArgumentException("account is null"); + return new AmsTask(activity, handler, callback) { + public void doWork() throws RemoteException { + mService.removeAccount(mResponse, account, activity != null); + } + }.start(); + } + /** * @see #removeAccount(Account, AccountManagerCallback, Handler) * @hide + * @deprecated use + * {@link #removeAccountAsUser(Account, Activity, AccountManagerCallback, Handler)} + * instead */ + @Deprecated public AccountManagerFuture removeAccountAsUser(final Account account, AccountManagerCallback callback, Handler handler, final UserHandle userHandle) { @@ -775,7 +830,7 @@ public class AccountManager { if (userHandle == null) throw new IllegalArgumentException("userHandle is null"); return new Future2Task(handler, callback) { public void doWork() throws RemoteException { - mService.removeAccountAsUser(mResponse, account, userHandle.getIdentifier()); + mService.removeAccountAsUser(mResponse, account, false, userHandle.getIdentifier()); } public Boolean bundleToResult(Bundle bundle) throws AuthenticatorException { if (!bundle.containsKey(KEY_BOOLEAN_RESULT)) { @@ -786,6 +841,52 @@ public class AccountManager { }.start(); } + /** + * @see #removeAccount(Account, Activity, AccountManagerCallback, Handler) + * @hide + */ + public AccountManagerFuture removeAccountAsUser(final Account account, + final Activity activity, AccountManagerCallback callback, Handler handler, + final UserHandle userHandle) { + if (account == null) + throw new IllegalArgumentException("account is null"); + if (userHandle == null) + throw new IllegalArgumentException("userHandle is null"); + return new AmsTask(activity, handler, callback) { + public void doWork() throws RemoteException { + mService.removeAccountAsUser(mResponse, account, activity != null, + userHandle.getIdentifier()); + } + }.start(); + } + + /** + * Removes an account directly. Normally used by authenticators, not + * directly by applications. Does not delete the account from the server. + * The authenticator may have its own policies preventing account deletion, + * in which case the account will not be deleted. + *

    + * It is safe to call this method from the main thread. + *

    + * This method requires the caller to hold the permission + * {@link android.Manifest.permission#AUTHENTICATE_ACCOUNTS} and to have the + * same UID or signature as the account's authenticator. + * + * @param account The {@link Account} to delete. + * @return True if the account was successfully deleted, false if the + * account did not exist, the account is null, or another error + * occurs. + */ + public boolean removeAccountExplicitly(Account account) { + if (account == null) throw new IllegalArgumentException("account is null"); + try { + return mService.removeAccountExplicitly(account); + } catch (RemoteException e) { + // won't ever happen + throw new RuntimeException(e); + } + } + /** * Removes an auth token from the AccountManager's cache. Does nothing if * the auth token is not currently in the cache. Applications must call this @@ -1341,6 +1442,40 @@ public class AccountManager { } } + /** + * Copies an account from the primary user to another user. + * @param account the account to copy + * @param user the target user + * @param callback Callback to invoke when the request completes, + * null for no callback + * @param handler {@link Handler} identifying the callback thread, + * null for the main thread + * @return An {@link AccountManagerFuture} which resolves to a Boolean indicated wether it + * succeeded. + * @hide + */ + public AccountManagerFuture copyAccountToUser( + final Account account, final UserHandle user, + AccountManagerCallback callback, Handler handler) { + if (account == null) throw new IllegalArgumentException("account is null"); + if (user == null) throw new IllegalArgumentException("user is null"); + + return new Future2Task(handler, callback) { + @Override + public void doWork() throws RemoteException { + mService.copyAccountToUser( + mResponse, account, UserHandle.USER_OWNER, user.getIdentifier()); + } + @Override + public Boolean bundleToResult(Bundle bundle) throws AuthenticatorException { + if (!bundle.containsKey(KEY_BOOLEAN_RESULT)) { + throw new AuthenticatorException("no result in response"); + } + return bundle.getBoolean(KEY_BOOLEAN_RESULT); + } + }.start(); + } + /** * @hide * Removes the shared account. diff --git a/core/java/android/accounts/IAccountManager.aidl b/core/java/android/accounts/IAccountManager.aidl index a13378800047b452eb0eb2781c84520fc82396fe..aa41161b88534fcf515588848534b4711aac0024 100644 --- a/core/java/android/accounts/IAccountManager.aidl +++ b/core/java/android/accounts/IAccountManager.aidl @@ -37,8 +37,13 @@ interface IAccountManager { void hasFeatures(in IAccountManagerResponse response, in Account account, in String[] features); void getAccountsByFeatures(in IAccountManagerResponse response, String accountType, in String[] features); boolean addAccountExplicitly(in Account account, String password, in Bundle extras); - void removeAccount(in IAccountManagerResponse response, in Account account); - void removeAccountAsUser(in IAccountManagerResponse response, in Account account, int userId); + void removeAccount(in IAccountManagerResponse response, in Account account, + boolean expectActivityLaunch); + void removeAccountAsUser(in IAccountManagerResponse response, in Account account, + boolean expectActivityLaunch, int userId); + boolean removeAccountExplicitly(in Account account); + void copyAccountToUser(in IAccountManagerResponse response, in Account account, + int userFrom, int userTo); void invalidateAuthToken(String accountType, String authToken); String peekAuthToken(in Account account, String authTokenType); void setAuthToken(in Account account, String authTokenType, String authToken); diff --git a/core/java/android/animation/Animator.java b/core/java/android/animation/Animator.java index 3720c8191e7737a5d9f1f396f75ea78023100f41..da4870901db94349a5f3568abc24e1e70f4d3163 100644 --- a/core/java/android/animation/Animator.java +++ b/core/java/android/animation/Animator.java @@ -16,6 +16,8 @@ package android.animation; +import android.content.res.ConstantState; + import java.util.ArrayList; /** @@ -40,6 +42,18 @@ public abstract class Animator implements Cloneable { */ boolean mPaused = false; + /** + * A set of flags which identify the type of configuration changes that can affect this + * Animator. Used by the Animator cache. + */ + int mChangingConfigurations = 0; + + /** + * If this animator is inflated from a constant state, keep a reference to it so that + * ConstantState will not be garbage collected until this animator is collected + */ + private AnimatorConstantState mConstantState; + /** * Starts this animation. If the animation has a nonzero startDelay, the animation will start * running after that delay elapses. A non-delayed animation will have its initial @@ -295,25 +309,71 @@ public abstract class Animator implements Cloneable { } } + /** + * Return a mask of the configuration parameters for which this animator may change, requiring + * that it should be re-created from Resources. The default implementation returns whatever + * value was provided through setChangingConfigurations(int) or 0 by default. + * + * @return Returns a mask of the changing configuration parameters, as defined by + * {@link android.content.pm.ActivityInfo}. + * @see android.content.pm.ActivityInfo + * @hide + */ + public int getChangingConfigurations() { + return mChangingConfigurations; + } + + /** + * Set a mask of the configuration parameters for which this animator may change, requiring + * that it be re-created from resource. + * + * @param configs A mask of the changing configuration parameters, as + * defined by {@link android.content.pm.ActivityInfo}. + * + * @see android.content.pm.ActivityInfo + * @hide + */ + public void setChangingConfigurations(int configs) { + mChangingConfigurations = configs; + } + + /** + * Sets the changing configurations value to the union of the current changing configurations + * and the provided configs. + * This method is called while loading the animator. + * @hide + */ + public void appendChangingConfigurations(int configs) { + mChangingConfigurations |= configs; + } + + /** + * Return a {@link android.content.res.ConstantState} instance that holds the shared state of + * this Animator. + *

    + * This constant state is used to create new instances of this animator when needed, instead + * of re-loading it from resources. Default implementation creates a new + * {@link AnimatorConstantState}. You can override this method to provide your custom logic or + * return null if you don't want this animator to be cached. + * + * @return The ConfigurationBoundResourceCache.BaseConstantState associated to this Animator. + * @see android.content.res.ConstantState + * @see #clone() + * @hide + */ + public ConstantState createConstantState() { + return new AnimatorConstantState(this); + } + @Override public Animator clone() { try { final Animator anim = (Animator) super.clone(); if (mListeners != null) { - ArrayList oldListeners = mListeners; - anim.mListeners = new ArrayList(); - int numListeners = oldListeners.size(); - for (int i = 0; i < numListeners; ++i) { - anim.mListeners.add(oldListeners.get(i)); - } + anim.mListeners = new ArrayList(mListeners); } if (mPauseListeners != null) { - ArrayList oldListeners = mPauseListeners; - anim.mPauseListeners = new ArrayList(); - int numListeners = oldListeners.size(); - for (int i = 0; i < numListeners; ++i) { - anim.mPauseListeners.add(oldListeners.get(i)); - } + anim.mPauseListeners = new ArrayList(mPauseListeners); } return anim; } catch (CloneNotSupportedException e) { @@ -469,4 +529,35 @@ public abstract class Animator implements Cloneable { public void setAllowRunningAsynchronously(boolean mayRunAsync) { // It is up to subclasses to support this, if they can. } + + /** + * Creates a {@link ConstantState} which holds changing configurations information associated + * with the given Animator. + *

    + * When {@link #newInstance()} is called, default implementation clones the Animator. + */ + private static class AnimatorConstantState extends ConstantState { + + final Animator mAnimator; + int mChangingConf; + + public AnimatorConstantState(Animator animator) { + mAnimator = animator; + // ensure a reference back to here so that constante state is not gc'ed. + mAnimator.mConstantState = this; + mChangingConf = mAnimator.getChangingConfigurations(); + } + + @Override + public int getChangingConfigurations() { + return mChangingConf; + } + + @Override + public Animator newInstance() { + final Animator clone = mAnimator.clone(); + clone.mConstantState = this; + return clone; + } + } } diff --git a/core/java/android/animation/AnimatorInflater.java b/core/java/android/animation/AnimatorInflater.java index 25417edb6f6291b5d130c3ed317a8302d3c8b63c..688d7e42dd3664f0e75b2d8ebe92836921f1b683 100644 --- a/core/java/android/animation/AnimatorInflater.java +++ b/core/java/android/animation/AnimatorInflater.java @@ -16,6 +16,8 @@ package android.animation; import android.content.Context; +import android.content.res.ConfigurationBoundResourceCache; +import android.content.res.ConstantState; import android.content.res.Resources; import android.content.res.Resources.NotFoundException; import android.content.res.Resources.Theme; @@ -30,6 +32,8 @@ import android.util.TypedValue; import android.util.Xml; import android.view.InflateException; import android.view.animation.AnimationUtils; +import android.view.animation.BaseInterpolator; +import android.view.animation.Interpolator; import com.android.internal.R; @@ -67,6 +71,9 @@ public class AnimatorInflater { private static final boolean DBG_ANIMATOR_INFLATER = false; + // used to calculate changing configs for resource references + private static final TypedValue sTmpTypedValue = new TypedValue(); + /** * Loads an {@link Animator} object from a resource * @@ -98,11 +105,34 @@ public class AnimatorInflater { /** @hide */ public static Animator loadAnimator(Resources resources, Theme theme, int id, float pathErrorScale) throws NotFoundException { - + final ConfigurationBoundResourceCache animatorCache = resources + .getAnimatorCache(); + Animator animator = animatorCache.get(id, theme); + if (animator != null) { + if (DBG_ANIMATOR_INFLATER) { + Log.d(TAG, "loaded animator from cache, " + resources.getResourceName(id)); + } + return animator; + } else if (DBG_ANIMATOR_INFLATER) { + Log.d(TAG, "cache miss for animator " + resources.getResourceName(id)); + } XmlResourceParser parser = null; try { parser = resources.getAnimation(id); - return createAnimatorFromXml(resources, theme, parser, pathErrorScale); + animator = createAnimatorFromXml(resources, theme, parser, pathErrorScale); + if (animator != null) { + animator.appendChangingConfigurations(getChangingConfigs(resources, id)); + final ConstantState constantState = animator.createConstantState(); + if (constantState != null) { + if (DBG_ANIMATOR_INFLATER) { + Log.d(TAG, "caching animator for res " + resources.getResourceName(id)); + } + animatorCache.put(id, theme, constantState); + // create a new animator so that cached version is never used by the user + animator = constantState.newInstance(resources, theme); + } + } + return animator; } catch (XmlPullParserException ex) { Resources.NotFoundException rnf = new Resources.NotFoundException("Can't load animation resource ID #0x" + @@ -122,10 +152,29 @@ public class AnimatorInflater { public static StateListAnimator loadStateListAnimator(Context context, int id) throws NotFoundException { + final Resources resources = context.getResources(); + final ConfigurationBoundResourceCache cache = resources + .getStateListAnimatorCache(); + final Theme theme = context.getTheme(); + StateListAnimator animator = cache.get(id, theme); + if (animator != null) { + return animator; + } XmlResourceParser parser = null; try { - parser = context.getResources().getAnimation(id); - return createStateListAnimatorFromXml(context, parser, Xml.asAttributeSet(parser)); + parser = resources.getAnimation(id); + animator = createStateListAnimatorFromXml(context, parser, Xml.asAttributeSet(parser)); + if (animator != null) { + animator.appendChangingConfigurations(getChangingConfigs(resources, id)); + final ConstantState constantState = animator + .createConstantState(); + if (constantState != null) { + cache.put(id, theme, constantState); + // return a clone so that the animator in constant state is never used. + animator = constantState.newInstance(resources, theme); + } + } + return animator; } catch (XmlPullParserException ex) { Resources.NotFoundException rnf = new Resources.NotFoundException( @@ -172,14 +221,13 @@ public class AnimatorInflater { for (int i = 0; i < attributeCount; i++) { int attrName = attributeSet.getAttributeNameResource(i); if (attrName == R.attr.animation) { - animator = loadAnimator(context, - attributeSet.getAttributeResourceValue(i, 0)); + final int animId = attributeSet.getAttributeResourceValue(i, 0); + animator = loadAnimator(context, animId); } else { states[stateIndex++] = attributeSet.getAttributeBooleanValue(i, false) ? attrName : -attrName; } - } if (animator == null) { animator = createAnimatorFromXml(context.getResources(), @@ -192,7 +240,6 @@ public class AnimatorInflater { } stateListAnimator .addState(StateSet.trimStateSet(states, stateIndex), animator); - } break; } @@ -508,7 +555,6 @@ public class AnimatorInflater { private static Animator createAnimatorFromXml(Resources res, Theme theme, XmlPullParser parser, AttributeSet attrs, AnimatorSet parent, int sequenceOrdering, float pixelSize) throws XmlPullParserException, IOException { - Animator anim = null; ArrayList childAnims = null; @@ -537,8 +583,8 @@ public class AnimatorInflater { } else { a = res.obtainAttributes(attrs, R.styleable.AnimatorSet); } - int ordering = a.getInt(R.styleable.AnimatorSet_ordering, - TOGETHER); + anim.appendChangingConfigurations(a.getChangingConfigurations()); + int ordering = a.getInt(R.styleable.AnimatorSet_ordering, TOGETHER); createAnimatorFromXml(res, theme, parser, attrs, (AnimatorSet) anim, ordering, pixelSize); a.recycle(); @@ -565,7 +611,6 @@ public class AnimatorInflater { parent.playSequentially(animsArray); } } - return anim; } @@ -591,7 +636,6 @@ public class AnimatorInflater { private static ValueAnimator loadAnimator(Resources res, Theme theme, AttributeSet attrs, ValueAnimator anim, float pathErrorScale) throws NotFoundException { - TypedArray arrayAnimator = null; TypedArray arrayObjectAnimator = null; @@ -609,25 +653,37 @@ public class AnimatorInflater { } else { arrayObjectAnimator = res.obtainAttributes(attrs, R.styleable.PropertyAnimator); } + anim.appendChangingConfigurations(arrayObjectAnimator.getChangingConfigurations()); } if (anim == null) { anim = new ValueAnimator(); } + anim.appendChangingConfigurations(arrayAnimator.getChangingConfigurations()); parseAnimatorFromTypeArray(anim, arrayAnimator, arrayObjectAnimator, pathErrorScale); - final int resID = - arrayAnimator.getResourceId(R.styleable.Animator_interpolator, 0); + final int resID = arrayAnimator.getResourceId(R.styleable.Animator_interpolator, 0); if (resID > 0) { - anim.setInterpolator(AnimationUtils.loadInterpolator(res, theme, resID)); + final Interpolator interpolator = AnimationUtils.loadInterpolator(res, theme, resID); + if (interpolator instanceof BaseInterpolator) { + anim.appendChangingConfigurations( + ((BaseInterpolator) interpolator).getChangingConfiguration()); + } + anim.setInterpolator(interpolator); } arrayAnimator.recycle(); if (arrayObjectAnimator != null) { arrayObjectAnimator.recycle(); } - return anim; } + + private static int getChangingConfigs(Resources resources, int id) { + synchronized (sTmpTypedValue) { + resources.getValue(id, sTmpTypedValue, true); + return sTmpTypedValue.changingConfigurations; + } + } } diff --git a/core/java/android/animation/AnimatorSet.java b/core/java/android/animation/AnimatorSet.java index 0aa8fdd06e236c6b8ecb59a280a0f4a036863dd2..92762c33674f4bfac243b615893f2c068964c0be 100644 --- a/core/java/android/animation/AnimatorSet.java +++ b/core/java/android/animation/AnimatorSet.java @@ -240,6 +240,19 @@ public final class AnimatorSet extends Animator { } } + /** + * @hide + */ + @Override + public int getChangingConfigurations() { + int conf = super.getChangingConfigurations(); + final int nodeCount = mNodes.size(); + for (int i = 0; i < nodeCount; i ++) { + conf |= mNodes.get(i).animation.getChangingConfigurations(); + } + return conf; + } + /** * Sets the TimeInterpolator for all current {@link #getChildAnimations() child animations} * of this AnimatorSet. The default value is null, which means that no interpolator @@ -628,23 +641,25 @@ public final class AnimatorSet extends Animator { * manually, as we clone each Node (and its animation). The clone will then be sorted, * and will populate any appropriate lists, when it is started. */ + final int nodeCount = mNodes.size(); anim.mNeedsSort = true; anim.mTerminated = false; anim.mStarted = false; anim.mPlayingSet = new ArrayList(); anim.mNodeMap = new HashMap(); - anim.mNodes = new ArrayList(); - anim.mSortedNodes = new ArrayList(); + anim.mNodes = new ArrayList(nodeCount); + anim.mSortedNodes = new ArrayList(nodeCount); anim.mReversible = mReversible; anim.mSetListener = null; // Walk through the old nodes list, cloning each node and adding it to the new nodemap. // One problem is that the old node dependencies point to nodes in the old AnimatorSet. // We need to track the old/new nodes in order to reconstruct the dependencies in the clone. - HashMap nodeCloneMap = new HashMap(); // - for (Node node : mNodes) { + + for (int n = 0; n < nodeCount; n++) { + final Node node = mNodes.get(n); Node nodeClone = node.clone(); - nodeCloneMap.put(node, nodeClone); + node.mTmpClone = nodeClone; anim.mNodes.add(nodeClone); anim.mNodeMap.put(nodeClone.animation, nodeClone); // Clear out the dependencies in the clone; we'll set these up manually later @@ -652,40 +667,50 @@ public final class AnimatorSet extends Animator { nodeClone.tmpDependencies = null; nodeClone.nodeDependents = null; nodeClone.nodeDependencies = null; + // clear out any listeners that were set up by the AnimatorSet; these will // be set up when the clone's nodes are sorted - ArrayList cloneListeners = nodeClone.animation.getListeners(); + final ArrayList cloneListeners = nodeClone.animation.getListeners(); if (cloneListeners != null) { - ArrayList listenersToRemove = null; - for (AnimatorListener listener : cloneListeners) { + for (int i = cloneListeners.size() - 1; i >= 0; i--) { + final AnimatorListener listener = cloneListeners.get(i); if (listener instanceof AnimatorSetListener) { - if (listenersToRemove == null) { - listenersToRemove = new ArrayList(); - } - listenersToRemove.add(listener); - } - } - if (listenersToRemove != null) { - for (AnimatorListener listener : listenersToRemove) { - cloneListeners.remove(listener); + cloneListeners.remove(i); } } } } // Now that we've cloned all of the nodes, we're ready to walk through their // dependencies, mapping the old dependencies to the new nodes - for (Node node : mNodes) { - Node nodeClone = nodeCloneMap.get(node); + for (int n = 0; n < nodeCount; n++) { + final Node node = mNodes.get(n); + final Node clone = node.mTmpClone; if (node.dependencies != null) { - for (Dependency dependency : node.dependencies) { - Node clonedDependencyNode = nodeCloneMap.get(dependency.node); - Dependency cloneDependency = new Dependency(clonedDependencyNode, + clone.dependencies = new ArrayList(node.dependencies.size()); + final int depSize = node.dependencies.size(); + for (int i = 0; i < depSize; i ++) { + final Dependency dependency = node.dependencies.get(i); + Dependency cloneDependency = new Dependency(dependency.node.mTmpClone, dependency.rule); - nodeClone.addDependency(cloneDependency); + clone.dependencies.add(cloneDependency); + } + } + if (node.nodeDependents != null) { + clone.nodeDependents = new ArrayList(node.nodeDependents.size()); + for (Node dep : node.nodeDependents) { + clone.nodeDependents.add(dep.mTmpClone); + } + } + if (node.nodeDependencies != null) { + clone.nodeDependencies = new ArrayList(node.nodeDependencies.size()); + for (Node dep : node.nodeDependencies) { + clone.nodeDependencies.add(dep.mTmpClone); } } } - + for (int n = 0; n < nodeCount; n++) { + mNodes.get(n).mTmpClone = null; + } return anim; } @@ -1016,6 +1041,11 @@ public final class AnimatorSet extends Animator { */ public boolean done = false; + /** + * Temporary field to hold the clone in AnimatorSet#clone. Cleaned after clone is complete + */ + private Node mTmpClone = null; + /** * Constructs the Node with the animation that it encapsulates. A Node has no * dependencies by default; dependencies are added via the addDependency() diff --git a/core/java/android/animation/FloatKeyframeSet.java b/core/java/android/animation/FloatKeyframeSet.java index 12e5862930056ca116c38f2b52b9b223ccce6225..abac24671c875ed5c9c3e14485cb2232941f8f77 100644 --- a/core/java/android/animation/FloatKeyframeSet.java +++ b/core/java/android/animation/FloatKeyframeSet.java @@ -19,6 +19,7 @@ package android.animation; import android.animation.Keyframe.FloatKeyframe; import java.util.ArrayList; +import java.util.List; /** * This class holds a collection of FloatKeyframe objects and is called by ValueAnimator to calculate @@ -47,8 +48,8 @@ class FloatKeyframeSet extends KeyframeSet implements Keyframes.FloatKeyframes { @Override public FloatKeyframeSet clone() { - ArrayList keyframes = mKeyframes; - int numKeyframes = mKeyframes.size(); + final List keyframes = mKeyframes; + final int numKeyframes = mKeyframes.size(); FloatKeyframe[] newKeyframes = new FloatKeyframe[numKeyframes]; for (int i = 0; i < numKeyframes; ++i) { newKeyframes[i] = (FloatKeyframe) keyframes.get(i).clone(); diff --git a/core/java/android/animation/IntKeyframeSet.java b/core/java/android/animation/IntKeyframeSet.java index 7a5b0ece4bae46051283ef2212518c0604d9c76f..0ec5138922be2e4b60a8aab8bd0b99c80993d0a5 100644 --- a/core/java/android/animation/IntKeyframeSet.java +++ b/core/java/android/animation/IntKeyframeSet.java @@ -19,6 +19,7 @@ package android.animation; import android.animation.Keyframe.IntKeyframe; import java.util.ArrayList; +import java.util.List; /** * This class holds a collection of IntKeyframe objects and is called by ValueAnimator to calculate @@ -47,7 +48,7 @@ class IntKeyframeSet extends KeyframeSet implements Keyframes.IntKeyframes { @Override public IntKeyframeSet clone() { - ArrayList keyframes = mKeyframes; + List keyframes = mKeyframes; int numKeyframes = mKeyframes.size(); IntKeyframe[] newKeyframes = new IntKeyframe[numKeyframes]; for (int i = 0; i < numKeyframes; ++i) { diff --git a/core/java/android/animation/KeyframeSet.java b/core/java/android/animation/KeyframeSet.java index 8d15db2fbdf87cf1be02b736c2972908a7a9e5eb..0e99bff257ff96cff2d5f242f6e019aa796125f9 100644 --- a/core/java/android/animation/KeyframeSet.java +++ b/core/java/android/animation/KeyframeSet.java @@ -18,6 +18,8 @@ package android.animation; import java.util.ArrayList; import java.util.Arrays; +import java.util.List; + import android.animation.Keyframe.IntKeyframe; import android.animation.Keyframe.FloatKeyframe; import android.animation.Keyframe.ObjectKeyframe; @@ -36,16 +38,16 @@ class KeyframeSet implements Keyframes { Keyframe mFirstKeyframe; Keyframe mLastKeyframe; TimeInterpolator mInterpolator; // only used in the 2-keyframe case - ArrayList mKeyframes; // only used when there are not 2 keyframes + List mKeyframes; // only used when there are not 2 keyframes TypeEvaluator mEvaluator; public KeyframeSet(Keyframe... keyframes) { mNumKeyframes = keyframes.length; - mKeyframes = new ArrayList(); - mKeyframes.addAll(Arrays.asList(keyframes)); - mFirstKeyframe = mKeyframes.get(0); - mLastKeyframe = mKeyframes.get(mNumKeyframes - 1); + // immutable list + mKeyframes = Arrays.asList(keyframes); + mFirstKeyframe = keyframes[0]; + mLastKeyframe = keyframes[mNumKeyframes - 1]; mInterpolator = mLastKeyframe.getInterpolator(); } @@ -57,7 +59,7 @@ class KeyframeSet implements Keyframes { public void invalidateCache() { } - public ArrayList getKeyframes() { + public List getKeyframes() { return mKeyframes; } @@ -177,9 +179,9 @@ class KeyframeSet implements Keyframes { @Override public KeyframeSet clone() { - ArrayList keyframes = mKeyframes; + List keyframes = mKeyframes; int numKeyframes = mKeyframes.size(); - Keyframe[] newKeyframes = new Keyframe[numKeyframes]; + final Keyframe[] newKeyframes = new Keyframe[numKeyframes]; for (int i = 0; i < numKeyframes; ++i) { newKeyframes[i] = keyframes.get(i).clone(); } diff --git a/core/java/android/animation/Keyframes.java b/core/java/android/animation/Keyframes.java index 6611c6caf4a5eca148662d1a4fbb97736d702085..c921466b328f27d47ce61d4b359d60006bcca3f5 100644 --- a/core/java/android/animation/Keyframes.java +++ b/core/java/android/animation/Keyframes.java @@ -16,6 +16,7 @@ package android.animation; import java.util.ArrayList; +import java.util.List; /** * This interface abstracts a collection of Keyframe objects and is called by @@ -62,7 +63,7 @@ interface Keyframes extends Cloneable { * @return A list of all Keyframes contained by this. This may return null if this is * not made up of Keyframes. */ - ArrayList getKeyframes(); + List getKeyframes(); Keyframes clone(); diff --git a/core/java/android/animation/ObjectAnimator.java b/core/java/android/animation/ObjectAnimator.java index 500634ceab83747f283add0326815eec45fc3ba0..59daaab44a8417c863529d23631b7723616233f5 100644 --- a/core/java/android/animation/ObjectAnimator.java +++ b/core/java/android/animation/ObjectAnimator.java @@ -885,7 +885,8 @@ public final class ObjectAnimator extends ValueAnimator { } /** - * Sets the target object whose property will be animated by this animation + * Sets the target object whose property will be animated by this animation. If the + * animator has been started, it will be canceled. * * @param target The object being animated */ @@ -893,6 +894,9 @@ public final class ObjectAnimator extends ValueAnimator { public void setTarget(@Nullable Object target) { final Object oldTarget = getTarget(); if (oldTarget != target) { + if (isStarted()) { + cancel(); + } mTarget = target == null ? null : new WeakReference(target); // New target should cause re-initialization prior to starting mInitialized = false; diff --git a/core/java/android/animation/PropertyValuesHolder.java b/core/java/android/animation/PropertyValuesHolder.java index d372933e0265ff80ec31d6e06adddf9e34ec61fd..bd7bca0038c811a0a2740c1e516274625d2256fe 100644 --- a/core/java/android/animation/PropertyValuesHolder.java +++ b/core/java/android/animation/PropertyValuesHolder.java @@ -27,6 +27,7 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.concurrent.locks.ReentrantReadWriteLock; /** @@ -104,10 +105,6 @@ public class PropertyValuesHolder implements Cloneable { private static final HashMap> sGetterPropertyMap = new HashMap>(); - // This lock is used to ensure that only one thread is accessing the property maps - // at a time. - final ReentrantReadWriteLock mPropertyMapLock = new ReentrantReadWriteLock(); - // Used to pass single value to varargs parameter in setter invocation final Object[] mTmpValueArray = new Object[1]; @@ -736,16 +733,19 @@ public class PropertyValuesHolder implements Cloneable { HashMap> propertyMapMap, String prefix, Class valueType) { Method setterOrGetter = null; - try { + synchronized(propertyMapMap) { // Have to lock property map prior to reading it, to guard against // another thread putting something in there after we've checked it // but before we've added an entry to it - mPropertyMapLock.writeLock().lock(); HashMap propertyMap = propertyMapMap.get(targetClass); + boolean wasInMap = false; if (propertyMap != null) { - setterOrGetter = propertyMap.get(mPropertyName); + wasInMap = propertyMap.containsKey(mPropertyName); + if (wasInMap) { + setterOrGetter = propertyMap.get(mPropertyName); + } } - if (setterOrGetter == null) { + if (!wasInMap) { setterOrGetter = getPropertyFunction(targetClass, prefix, valueType); if (propertyMap == null) { propertyMap = new HashMap(); @@ -753,8 +753,6 @@ public class PropertyValuesHolder implements Cloneable { } propertyMap.put(mPropertyName, setterOrGetter); } - } finally { - mPropertyMapLock.writeLock().unlock(); } return setterOrGetter; } @@ -791,7 +789,7 @@ public class PropertyValuesHolder implements Cloneable { // check to make sure that mProperty is on the class of target try { Object testValue = null; - ArrayList keyframes = mKeyframes.getKeyframes(); + List keyframes = mKeyframes.getKeyframes(); int keyframeCount = keyframes == null ? 0 : keyframes.size(); for (int i = 0; i < keyframeCount; i++) { Keyframe kf = keyframes.get(i); @@ -810,30 +808,33 @@ public class PropertyValuesHolder implements Cloneable { mProperty = null; } } - Class targetClass = target.getClass(); - if (mSetter == null) { - setupSetter(targetClass); - } - ArrayList keyframes = mKeyframes.getKeyframes(); - int keyframeCount = keyframes == null ? 0 : keyframes.size(); - for (int i = 0; i < keyframeCount; i++) { - Keyframe kf = keyframes.get(i); - if (!kf.hasValue() || kf.valueWasSetOnStart()) { - if (mGetter == null) { - setupGetter(targetClass); + // We can't just say 'else' here because the catch statement sets mProperty to null. + if (mProperty == null) { + Class targetClass = target.getClass(); + if (mSetter == null) { + setupSetter(targetClass); + } + List keyframes = mKeyframes.getKeyframes(); + int keyframeCount = keyframes == null ? 0 : keyframes.size(); + for (int i = 0; i < keyframeCount; i++) { + Keyframe kf = keyframes.get(i); + if (!kf.hasValue() || kf.valueWasSetOnStart()) { if (mGetter == null) { - // Already logged the error - just return to avoid NPE - return; + setupGetter(targetClass); + if (mGetter == null) { + // Already logged the error - just return to avoid NPE + return; + } + } + try { + Object value = convertBack(mGetter.invoke(target)); + kf.setValue(value); + kf.setValueWasSetOnStart(true); + } catch (InvocationTargetException e) { + Log.e("PropertyValuesHolder", e.toString()); + } catch (IllegalAccessException e) { + Log.e("PropertyValuesHolder", e.toString()); } - } - try { - Object value = convertBack(mGetter.invoke(target)); - kf.setValue(value); - kf.setValueWasSetOnStart(true); - } catch (InvocationTargetException e) { - Log.e("PropertyValuesHolder", e.toString()); - } catch (IllegalAccessException e) { - Log.e("PropertyValuesHolder", e.toString()); } } } @@ -890,7 +891,7 @@ public class PropertyValuesHolder implements Cloneable { * @param target The object which holds the start values that should be set. */ void setupStartValue(Object target) { - ArrayList keyframes = mKeyframes.getKeyframes(); + List keyframes = mKeyframes.getKeyframes(); if (!keyframes.isEmpty()) { setupValue(target, keyframes.get(0)); } @@ -905,7 +906,7 @@ public class PropertyValuesHolder implements Cloneable { * @param target The object which holds the start values that should be set. */ void setupEndValue(Object target) { - ArrayList keyframes = mKeyframes.getKeyframes(); + List keyframes = mKeyframes.getKeyframes(); if (!keyframes.isEmpty()) { setupValue(target, keyframes.get(keyframes.size() - 1)); } @@ -1177,32 +1178,33 @@ public class PropertyValuesHolder implements Cloneable { return; } // Check new static hashmap for setter method - try { - mPropertyMapLock.writeLock().lock(); + synchronized(sJNISetterPropertyMap) { HashMap propertyMap = sJNISetterPropertyMap.get(targetClass); + boolean wasInMap = false; if (propertyMap != null) { - Long jniSetter = propertyMap.get(mPropertyName); - if (jniSetter != null) { - mJniSetter = jniSetter; + wasInMap = propertyMap.containsKey(mPropertyName); + if (wasInMap) { + Long jniSetter = propertyMap.get(mPropertyName); + if (jniSetter != null) { + mJniSetter = jniSetter; + } } } - if (mJniSetter == 0) { + if (!wasInMap) { String methodName = getMethodName("set", mPropertyName); - mJniSetter = nGetIntMethod(targetClass, methodName); - if (mJniSetter != 0) { - if (propertyMap == null) { - propertyMap = new HashMap(); - sJNISetterPropertyMap.put(targetClass, propertyMap); - } - propertyMap.put(mPropertyName, mJniSetter); + try { + mJniSetter = nGetIntMethod(targetClass, methodName); + } catch (NoSuchMethodError e) { + // Couldn't find it via JNI - try reflection next. Probably means the method + // doesn't exist, or the type is wrong. An error will be logged later if + // reflection fails as well. + } + if (propertyMap == null) { + propertyMap = new HashMap(); + sJNISetterPropertyMap.put(targetClass, propertyMap); } + propertyMap.put(mPropertyName, mJniSetter); } - } catch (NoSuchMethodError e) { - // Couldn't find it via JNI - try reflection next. Probably means the method - // doesn't exist, or the type is wrong. An error will be logged later if - // reflection fails as well. - } finally { - mPropertyMapLock.writeLock().unlock(); } if (mJniSetter == 0) { // Couldn't find method through fast JNI approach - just use reflection @@ -1314,32 +1316,33 @@ public class PropertyValuesHolder implements Cloneable { return; } // Check new static hashmap for setter method - try { - mPropertyMapLock.writeLock().lock(); + synchronized (sJNISetterPropertyMap) { HashMap propertyMap = sJNISetterPropertyMap.get(targetClass); + boolean wasInMap = false; if (propertyMap != null) { - Long jniSetter = propertyMap.get(mPropertyName); - if (jniSetter != null) { - mJniSetter = jniSetter; + wasInMap = propertyMap.containsKey(mPropertyName); + if (wasInMap) { + Long jniSetter = propertyMap.get(mPropertyName); + if (jniSetter != null) { + mJniSetter = jniSetter; + } } } - if (mJniSetter == 0) { + if (!wasInMap) { String methodName = getMethodName("set", mPropertyName); - mJniSetter = nGetFloatMethod(targetClass, methodName); - if (mJniSetter != 0) { - if (propertyMap == null) { - propertyMap = new HashMap(); - sJNISetterPropertyMap.put(targetClass, propertyMap); - } - propertyMap.put(mPropertyName, mJniSetter); + try { + mJniSetter = nGetFloatMethod(targetClass, methodName); + } catch (NoSuchMethodError e) { + // Couldn't find it via JNI - try reflection next. Probably means the method + // doesn't exist, or the type is wrong. An error will be logged later if + // reflection fails as well. + } + if (propertyMap == null) { + propertyMap = new HashMap(); + sJNISetterPropertyMap.put(targetClass, propertyMap); } + propertyMap.put(mPropertyName, mJniSetter); } - } catch (NoSuchMethodError e) { - // Couldn't find it via JNI - try reflection next. Probably means the method - // doesn't exist, or the type is wrong. An error will be logged later if - // reflection fails as well. - } finally { - mPropertyMapLock.writeLock().unlock(); } if (mJniSetter == 0) { // Couldn't find method through fast JNI approach - just use reflection @@ -1418,16 +1421,19 @@ public class PropertyValuesHolder implements Cloneable { if (mJniSetter != 0) { return; } - try { - mPropertyMapLock.writeLock().lock(); + synchronized(sJNISetterPropertyMap) { HashMap propertyMap = sJNISetterPropertyMap.get(targetClass); + boolean wasInMap = false; if (propertyMap != null) { - Long jniSetterLong = propertyMap.get(mPropertyName); - if (jniSetterLong != null) { - mJniSetter = jniSetterLong; + wasInMap = propertyMap.containsKey(mPropertyName); + if (wasInMap) { + Long jniSetter = propertyMap.get(mPropertyName); + if (jniSetter != null) { + mJniSetter = jniSetter; + } } } - if (mJniSetter == 0) { + if (!wasInMap) { String methodName = getMethodName("set", mPropertyName); calculateValue(0f); float[] values = (float[]) getAnimatedValue(); @@ -1436,19 +1442,20 @@ public class PropertyValuesHolder implements Cloneable { mJniSetter = nGetMultipleFloatMethod(targetClass, methodName, numParams); } catch (NoSuchMethodError e) { // try without the 'set' prefix - mJniSetter = nGetMultipleFloatMethod(targetClass, mPropertyName, numParams); - } - if (mJniSetter != 0) { - if (propertyMap == null) { - propertyMap = new HashMap(); - sJNISetterPropertyMap.put(targetClass, propertyMap); + try { + mJniSetter = nGetMultipleFloatMethod(targetClass, mPropertyName, + numParams); + } catch (NoSuchMethodError e2) { + // just try reflection next } - propertyMap.put(mPropertyName, mJniSetter); } + if (propertyMap == null) { + propertyMap = new HashMap(); + sJNISetterPropertyMap.put(targetClass, propertyMap); + } + propertyMap.put(mPropertyName, mJniSetter); } - } finally { - mPropertyMapLock.writeLock().unlock(); - } + } } } @@ -1521,16 +1528,19 @@ public class PropertyValuesHolder implements Cloneable { if (mJniSetter != 0) { return; } - try { - mPropertyMapLock.writeLock().lock(); + synchronized(sJNISetterPropertyMap) { HashMap propertyMap = sJNISetterPropertyMap.get(targetClass); + boolean wasInMap = false; if (propertyMap != null) { - Long jniSetterLong = propertyMap.get(mPropertyName); - if (jniSetterLong != null) { - mJniSetter = jniSetterLong; + wasInMap = propertyMap.containsKey(mPropertyName); + if (wasInMap) { + Long jniSetter = propertyMap.get(mPropertyName); + if (jniSetter != null) { + mJniSetter = jniSetter; + } } } - if (mJniSetter == 0) { + if (!wasInMap) { String methodName = getMethodName("set", mPropertyName); calculateValue(0f); int[] values = (int[]) getAnimatedValue(); @@ -1539,18 +1549,19 @@ public class PropertyValuesHolder implements Cloneable { mJniSetter = nGetMultipleIntMethod(targetClass, methodName, numParams); } catch (NoSuchMethodError e) { // try without the 'set' prefix - mJniSetter = nGetMultipleIntMethod(targetClass, mPropertyName, numParams); - } - if (mJniSetter != 0) { - if (propertyMap == null) { - propertyMap = new HashMap(); - sJNISetterPropertyMap.put(targetClass, propertyMap); + try { + mJniSetter = nGetMultipleIntMethod(targetClass, mPropertyName, + numParams); + } catch (NoSuchMethodError e2) { + // couldn't find it. } - propertyMap.put(mPropertyName, mJniSetter); } + if (propertyMap == null) { + propertyMap = new HashMap(); + sJNISetterPropertyMap.put(targetClass, propertyMap); + } + propertyMap.put(mPropertyName, mJniSetter); } - } finally { - mPropertyMapLock.writeLock().unlock(); } } } diff --git a/core/java/android/animation/StateListAnimator.java b/core/java/android/animation/StateListAnimator.java index 7256a0638e1026a78be00733091bd7b1b349fb41..d49e914cf5cca707cbffd43812f8afc63c91457e 100644 --- a/core/java/android/animation/StateListAnimator.java +++ b/core/java/android/animation/StateListAnimator.java @@ -16,6 +16,7 @@ package android.animation; +import android.content.res.ConstantState; import android.util.StateSet; import android.view.View; @@ -44,25 +45,31 @@ import java.util.ArrayList; * @attr ref android.R.styleable#DrawableStates_state_pressed * @attr ref android.R.styleable#StateListAnimatorItem_animation */ -public class StateListAnimator { - - private final ArrayList mTuples = new ArrayList(); +public class StateListAnimator implements Cloneable { + private ArrayList mTuples = new ArrayList(); private Tuple mLastMatch = null; - private Animator mRunningAnimator = null; - private WeakReference mViewRef; + private StateListAnimatorConstantState mConstantState; + private AnimatorListenerAdapter mAnimatorListener; + private int mChangingConfigurations; - private AnimatorListenerAdapter mAnimatorListener = new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - animation.setTarget(null); - if (mRunningAnimator == animation) { - mRunningAnimator = null; + public StateListAnimator() { + initAnimatorListener(); + } + + private void initAnimatorListener() { + mAnimatorListener = new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + animation.setTarget(null); + if (mRunningAnimator == animation) { + mRunningAnimator = null; + } } - } - }; + }; + } /** * Associates the given animator with the provided drawable state specs so that it will be run @@ -75,6 +82,7 @@ public class StateListAnimator { Tuple tuple = new Tuple(specs, animator); tuple.mAnimator.addListener(mAnimatorListener); mTuples.add(tuple); + mChangingConfigurations |= animator.getChangingConfigurations(); } /** @@ -118,12 +126,35 @@ public class StateListAnimator { for (int i = 0; i < size; i++) { mTuples.get(i).mAnimator.setTarget(null); } - mViewRef = null; mLastMatch = null; mRunningAnimator = null; } + @Override + public StateListAnimator clone() { + try { + StateListAnimator clone = (StateListAnimator) super.clone(); + clone.mTuples = new ArrayList(mTuples.size()); + clone.mLastMatch = null; + clone.mRunningAnimator = null; + clone.mViewRef = null; + clone.mAnimatorListener = null; + clone.initAnimatorListener(); + final int tupleSize = mTuples.size(); + for (int i = 0; i < tupleSize; i++) { + final Tuple tuple = mTuples.get(i); + final Animator animatorClone = tuple.mAnimator.clone(); + animatorClone.removeListener(mAnimatorListener); + clone.addState(tuple.mSpecs, animatorClone); + } + clone.setChangingConfigurations(getChangingConfigurations()); + return clone; + } catch (CloneNotSupportedException e) { + throw new AssertionError("cannot clone state list animator", e); + } + } + /** * Called by View * @hide @@ -181,6 +212,63 @@ public class StateListAnimator { } } + /** + * Return a mask of the configuration parameters for which this animator may change, requiring + * that it be re-created. The default implementation returns whatever was provided through + * {@link #setChangingConfigurations(int)} or 0 by default. + * + * @return Returns a mask of the changing configuration parameters, as defined by + * {@link android.content.pm.ActivityInfo}. + * + * @see android.content.pm.ActivityInfo + * @hide + */ + public int getChangingConfigurations() { + return mChangingConfigurations; + } + + /** + * Set a mask of the configuration parameters for which this animator may change, requiring + * that it should be recreated from resources instead of being cloned. + * + * @param configs A mask of the changing configuration parameters, as + * defined by {@link android.content.pm.ActivityInfo}. + * + * @see android.content.pm.ActivityInfo + * @hide + */ + public void setChangingConfigurations(int configs) { + mChangingConfigurations = configs; + } + + /** + * Sets the changing configurations value to the union of the current changing configurations + * and the provided configs. + * This method is called while loading the animator. + * @hide + */ + public void appendChangingConfigurations(int configs) { + mChangingConfigurations |= configs; + } + + /** + * Return a {@link android.content.res.ConstantState} instance that holds the shared state of + * this Animator. + *

    + * This constant state is used to create new instances of this animator when needed. Default + * implementation creates a new {@link StateListAnimatorConstantState}. You can override this + * method to provide your custom logic or return null if you don't want this animator to be + * cached. + * + * @return The {@link android.content.res.ConstantState} associated to this Animator. + * @see android.content.res.ConstantState + * @see #clone() + * @hide + */ + public ConstantState createConstantState() { + return new StateListAnimatorConstantState(this); + } + /** * @hide */ @@ -209,4 +297,36 @@ public class StateListAnimator { return mAnimator; } } + + /** + * Creates a constant state which holds changing configurations information associated with the + * given Animator. + *

    + * When new instance is called, default implementation clones the Animator. + */ + private static class StateListAnimatorConstantState + extends ConstantState { + + final StateListAnimator mAnimator; + + int mChangingConf; + + public StateListAnimatorConstantState(StateListAnimator animator) { + mAnimator = animator; + mAnimator.mConstantState = this; + mChangingConf = mAnimator.getChangingConfigurations(); + } + + @Override + public int getChangingConfigurations() { + return mChangingConf; + } + + @Override + public StateListAnimator newInstance() { + final StateListAnimator clone = mAnimator.clone(); + clone.mConstantState = this; + return clone; + } + } } diff --git a/core/java/android/animation/TimeAnimator.java b/core/java/android/animation/TimeAnimator.java index f9aa00ec25010019ae787716d46d8e4c0d873bfe..1738ade340802257ddb7f21a50dc1d74c8ca6914 100644 --- a/core/java/android/animation/TimeAnimator.java +++ b/core/java/android/animation/TimeAnimator.java @@ -1,5 +1,23 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package android.animation; +import android.view.animation.AnimationUtils; + /** * This class provides a simple callback mechanism to listeners that is synchronized with all * other animators in the system. There is no duration, interpolation, or object value-setting @@ -29,6 +47,13 @@ public class TimeAnimator extends ValueAnimator { return false; } + @Override + public void setCurrentPlayTime(long playTime) { + long currentTime = AnimationUtils.currentAnimationTimeMillis(); + mStartTime = Math.max(mStartTime, currentTime - playTime); + animationFrame(currentTime); + } + /** * Sets a listener that is sent update events throughout the life of * an animation. diff --git a/core/java/android/animation/ValueAnimator.java b/core/java/android/animation/ValueAnimator.java index 0d17d6716d6db94d63254299b64d254bea33bc61..97095553403b00af9c4bfce22514d0268584b783 100644 --- a/core/java/android/animation/ValueAnimator.java +++ b/core/java/android/animation/ValueAnimator.java @@ -16,6 +16,7 @@ package android.animation; +import android.content.res.ConfigurationBoundResourceCache; import android.os.Looper; import android.os.Trace; import android.util.AndroidRuntimeException; @@ -78,7 +79,7 @@ public class ValueAnimator extends Animator { * Set when setCurrentPlayTime() is called. If negative, animation is not currently seeked * to a value. */ - long mSeekTime = -1; + float mSeekFraction = -1; /** * Set on the next frame after pause() is called, used to calculate a new startTime @@ -112,6 +113,15 @@ public class ValueAnimator extends Animator { */ private boolean mPlayingBackwards = false; + /** + * Flag to indicate whether this animator is playing in reverse mode, specifically + * by being started or interrupted by a call to reverse(). This flag is different than + * mPlayingBackwards, which indicates merely whether the current iteration of the + * animator is playing in reverse. It is used in corner cases to determine proper end + * behavior. + */ + private boolean mReversing; + /** * This variable tracks the current iteration that is playing. When mCurrentIteration exceeds the * repeatCount (if repeatCount!=INFINITE), the animation ends @@ -536,14 +546,60 @@ public class ValueAnimator extends Animator { * @param playTime The time, in milliseconds, to which the animation is advanced or rewound. */ public void setCurrentPlayTime(long playTime) { + float fraction = mUnscaledDuration > 0 ? (float) playTime / mUnscaledDuration : 1; + setCurrentFraction(fraction); + } + + /** + * Sets the position of the animation to the specified fraction. This fraction should + * be between 0 and the total fraction of the animation, including any repetition. That is, + * a fraction of 0 will position the animation at the beginning, a value of 1 at the end, + * and a value of 2 at the end of a reversing animator that repeats once. If + * the animation has not yet been started, then it will not advance forward after it is + * set to this fraction; it will simply set the fraction to this value and perform any + * appropriate actions based on that fraction. If the animation is already running, then + * setCurrentFraction() will set the current fraction to this value and continue + * playing from that point. {@link Animator.AnimatorListener} events are not called + * due to changing the fraction; those events are only processed while the animation + * is running. + * + * @param fraction The fraction to which the animation is advanced or rewound. Values + * outside the range of 0 to the maximum fraction for the animator will be clamped to + * the correct range. + */ + public void setCurrentFraction(float fraction) { initAnimation(); + if (fraction < 0) { + fraction = 0; + } + int iteration = (int) fraction; + if (fraction == 1) { + iteration -= 1; + } else if (fraction > 1) { + if (iteration < (mRepeatCount + 1) || mRepeatCount == INFINITE) { + if (mRepeatMode == REVERSE) { + mPlayingBackwards = (iteration % 2) != 0; + } + fraction = fraction % 1f; + } else { + fraction = 1; + iteration -= 1; + } + } else { + mPlayingBackwards = mReversing; + } + mCurrentIteration = iteration; + long seekTime = (long) (mDuration * fraction); long currentTime = AnimationUtils.currentAnimationTimeMillis(); + mStartTime = currentTime - seekTime; if (mPlayingState != RUNNING) { - mSeekTime = playTime; + mSeekFraction = fraction; mPlayingState = SEEKED; } - mStartTime = currentTime - playTime; - doAnimationFrame(currentTime); + if (mPlayingBackwards) { + fraction = 1f - fraction; + } + animateValue(fraction); } /** @@ -945,8 +1001,31 @@ public class ValueAnimator extends Animator { if (Looper.myLooper() == null) { throw new AndroidRuntimeException("Animators may only be run on Looper threads"); } + mReversing = playBackwards; mPlayingBackwards = playBackwards; - mCurrentIteration = 0; + if (playBackwards && mSeekFraction != -1) { + if (mSeekFraction == 0 && mCurrentIteration == 0) { + // special case: reversing from seek-to-0 should act as if not seeked at all + mSeekFraction = 0; + } else if (mRepeatCount == INFINITE) { + mSeekFraction = 1 - (mSeekFraction % 1); + } else { + mSeekFraction = 1 + mRepeatCount - (mCurrentIteration + mSeekFraction); + } + mCurrentIteration = (int) mSeekFraction; + mSeekFraction = mSeekFraction % 1; + } + if (mCurrentIteration > 0 && mRepeatMode == REVERSE && + (mCurrentIteration < (mRepeatCount + 1) || mRepeatCount == INFINITE)) { + // if we were seeked to some other iteration in a reversing animator, + // figure out the correct direction to start playing based on the iteration + if (playBackwards) { + mPlayingBackwards = (mCurrentIteration % 2) == 0; + } else { + mPlayingBackwards = (mCurrentIteration % 2) != 0; + } + } + int prevPlayingState = mPlayingState; mPlayingState = STOPPED; mStarted = true; mStartedDelay = false; @@ -956,7 +1035,9 @@ public class ValueAnimator extends Animator { animationHandler.mPendingAnimations.add(this); if (mStartDelay == 0) { // This sets the initial value of the animation, prior to actually starting it running - setCurrentPlayTime(0); + if (prevPlayingState != SEEKED) { + setCurrentPlayTime(0); + } mPlayingState = STOPPED; mRunning = true; notifyStartListeners(); @@ -1051,6 +1132,7 @@ public class ValueAnimator extends Animator { long currentPlayTime = currentTime - mStartTime; long timeLeft = mDuration - currentPlayTime; mStartTime = currentTime - timeLeft; + mReversing = !mReversing; } else if (mStarted) { end(); } else { @@ -1093,6 +1175,8 @@ public class ValueAnimator extends Animator { mStarted = false; mStartListenersCalled = false; mPlayingBackwards = false; + mReversing = false; + mCurrentIteration = 0; if (Trace.isTagEnabled(Trace.TRACE_TAG_VIEW)) { Trace.asyncTraceEnd(Trace.TRACE_TAG_VIEW, getNameForTrace(), System.identityHashCode(this)); @@ -1181,6 +1265,13 @@ public class ValueAnimator extends Animator { case RUNNING: case SEEKED: float fraction = mDuration > 0 ? (float)(currentTime - mStartTime) / mDuration : 1f; + if (mDuration == 0 && mRepeatCount != INFINITE) { + // Skip to the end + mCurrentIteration = mRepeatCount; + if (!mReversing) { + mPlayingBackwards = false; + } + } if (fraction >= 1f) { if (mCurrentIteration < mRepeatCount || mRepeatCount == INFINITE) { // Time to repeat @@ -1193,7 +1284,7 @@ public class ValueAnimator extends Animator { if (mRepeatMode == REVERSE) { mPlayingBackwards = !mPlayingBackwards; } - mCurrentIteration += (int)fraction; + mCurrentIteration += (int) fraction; fraction = fraction % 1f; mStartTime += mDuration; } else { @@ -1220,12 +1311,12 @@ public class ValueAnimator extends Animator { final boolean doAnimationFrame(long frameTime) { if (mPlayingState == STOPPED) { mPlayingState = RUNNING; - if (mSeekTime < 0) { + if (mSeekFraction < 0) { mStartTime = frameTime; } else { - mStartTime = frameTime - mSeekTime; - // Now that we're playing, reset the seek time - mSeekTime = -1; + long seekTime = (long) (mDuration * mSeekFraction); + mStartTime = frameTime - seekTime; + mSeekFraction = -1; } } if (mPaused) { @@ -1289,15 +1380,11 @@ public class ValueAnimator extends Animator { public ValueAnimator clone() { final ValueAnimator anim = (ValueAnimator) super.clone(); if (mUpdateListeners != null) { - ArrayList oldListeners = mUpdateListeners; - anim.mUpdateListeners = new ArrayList(); - int numListeners = oldListeners.size(); - for (int i = 0; i < numListeners; ++i) { - anim.mUpdateListeners.add(oldListeners.get(i)); - } + anim.mUpdateListeners = new ArrayList(mUpdateListeners); } - anim.mSeekTime = -1; + anim.mSeekFraction = -1; anim.mPlayingBackwards = false; + anim.mReversing = false; anim.mCurrentIteration = 0; anim.mInitialized = false; anim.mPlayingState = STOPPED; diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java index 4b705dde1344b17d72c648856b8841f53ae01211..9568897dca615954b2ee249117bfebf13ad8a9e7 100644 --- a/core/java/android/app/Activity.java +++ b/core/java/android/app/Activity.java @@ -693,6 +693,7 @@ public class Activity extends ContextThemeWrapper /*package*/ String mEmbeddedID; private Application mApplication; /*package*/ Intent mIntent; + /*package*/ String mReferrer; private ComponentName mComponent; /*package*/ ActivityInfo mActivityInfo; /*package*/ ActivityThread mMainThread; @@ -2376,8 +2377,10 @@ public class Activity extends ContextThemeWrapper if (mDefaultKeyMode == DEFAULT_KEYS_DISABLE) { return false; } else if (mDefaultKeyMode == DEFAULT_KEYS_SHORTCUT) { - if (getWindow().performPanelShortcut(Window.FEATURE_OPTIONS_PANEL, - keyCode, event, Menu.FLAG_ALWAYS_PERFORM_CLOSE)) { + Window w = getWindow(); + if (w.hasFeature(Window.FEATURE_OPTIONS_PANEL) && + w.performPanelShortcut(Window.FEATURE_OPTIONS_PANEL, keyCode, event, + Menu.FLAG_ALWAYS_PERFORM_CLOSE)) { return true; } return false; @@ -2942,7 +2945,8 @@ public class Activity extends ContextThemeWrapper * time it needs to be displayed. */ public void invalidateOptionsMenu() { - if (mActionBar == null || !mActionBar.invalidateOptionsMenu()) { + if (mWindow.hasFeature(Window.FEATURE_OPTIONS_PANEL) && + (mActionBar == null || !mActionBar.invalidateOptionsMenu())) { mWindow.invalidatePanelMenu(Window.FEATURE_OPTIONS_PANEL); } } @@ -3154,7 +3158,8 @@ public class Activity extends ContextThemeWrapper * open, this method does nothing. */ public void openOptionsMenu() { - if (mActionBar == null || !mActionBar.openOptionsMenu()) { + if (mWindow.hasFeature(Window.FEATURE_OPTIONS_PANEL) && + (mActionBar == null || !mActionBar.openOptionsMenu())) { mWindow.openPanel(Window.FEATURE_OPTIONS_PANEL, null); } } @@ -3164,7 +3169,9 @@ public class Activity extends ContextThemeWrapper * closed, this method does nothing. */ public void closeOptionsMenu() { - mWindow.closePanel(Window.FEATURE_OPTIONS_PANEL); + if (mWindow.hasFeature(Window.FEATURE_OPTIONS_PANEL)) { + mWindow.closePanel(Window.FEATURE_OPTIONS_PANEL); + } } /** @@ -3223,7 +3230,9 @@ public class Activity extends ContextThemeWrapper * Programmatically closes the most recently opened context menu, if showing. */ public void closeContextMenu() { - mWindow.closePanel(Window.FEATURE_CONTEXT_MENU); + if (mWindow.hasFeature(Window.FEATURE_CONTEXT_MENU)) { + mWindow.closePanel(Window.FEATURE_CONTEXT_MENU); + } } /** @@ -4447,6 +4456,39 @@ public class Activity extends ContextThemeWrapper } } + /** + * Return information about who launched this activity. If the launching Intent + * contains an {@link android.content.Intent#EXTRA_REFERRER Intent.EXTRA_REFERRER}, + * that will be returned as-is; otherwise, if known, an + * {@link Intent#URI_ANDROID_APP_SCHEME android-app:} referrer URI containing the + * package name that started the Intent will be returned. This may return null if no + * referrer can be identified -- it is neither explicitly specified, nor is it known which + * application package was involved. + * + *

    If called while inside the handling of {@link #onNewIntent}, this function will + * return the referrer that submitted that new intent to the activity. Otherwise, it + * always returns the referrer of the original Intent.

    + * + *

    Note that this is not a security feature -- you can not trust the + * referrer information, applications can spoof it.

    + */ + @Nullable + public Uri getReferrer() { + Intent intent = getIntent(); + Uri referrer = intent.getParcelableExtra(Intent.EXTRA_REFERRER); + if (referrer != null) { + return referrer; + } + String referrerName = intent.getStringExtra(Intent.EXTRA_REFERRER_NAME); + if (referrerName != null) { + return Uri.parse(referrerName); + } + if (mReferrer != null) { + return new Uri.Builder().scheme("android-app").authority(mReferrer).build(); + } + return null; + } + /** * Return the name of the package that invoked this activity. This is who * the data in {@link #setResult setResult()} will be sent to. You can @@ -4751,6 +4793,10 @@ public class Activity extends ContextThemeWrapper *

    You will receive this call immediately before onResume() when your * activity is re-starting. * + *

    This method is never invoked if your activity sets + * {@link android.R.styleable#AndroidManifestActivity_noHistory noHistory} to + * true. + * * @param requestCode The integer request code originally supplied to * startActivityForResult(), allowing you to identify who this * result came from. @@ -5585,6 +5631,16 @@ public class Activity extends ContextThemeWrapper public void onEnterAnimationComplete() { } + /** + * @hide + */ + public void dispatchEnterAnimationComplete() { + onEnterAnimationComplete(); + if (getWindow() != null && getWindow().getDecorView() != null) { + getWindow().getDecorView().getViewTreeObserver().dispatchOnEnterAnimationComplete(); + } + } + /** * Adjust the current immersive mode setting. * @@ -5868,7 +5924,7 @@ public class Activity extends ContextThemeWrapper Application application, Intent intent, ActivityInfo info, CharSequence title, Activity parent, String id, NonConfigurationInstances lastNonConfigurationInstances, - Configuration config, IVoiceInteractor voiceInteractor) { + Configuration config, String referrer, IVoiceInteractor voiceInteractor) { attachBaseContext(context); mFragments.attachActivity(this, mContainer, null); @@ -5891,6 +5947,7 @@ public class Activity extends ContextThemeWrapper mIdent = ident; mApplication = application; mIntent = intent; + mReferrer = referrer; mComponent = intent.getComponent(); mActivityInfo = info; mTitle = title; diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java index 37e8aa4939ca7ea1c2c1a934bed98347e747834f..7a636dbdb59dc34b9c0578e21f068f8f95faa0ab 100644 --- a/core/java/android/app/ActivityManager.java +++ b/core/java/android/app/ActivityManager.java @@ -212,6 +212,13 @@ public class ActivityManager { */ public static final int BROADCAST_STICKY_CANT_HAVE_PERMISSION = -1; + /** + * Result for IActivityManager.broadcastIntent: trying to send a broadcast + * to a stopped user. Fail. + * @hide + */ + public static final int BROADCAST_FAILED_USER_STOPPED = -2; + /** * Type for IActivityManaqer.getIntentSender: this PendingIntent is * for a sendBroadcast operation. @@ -1242,27 +1249,17 @@ public class ActivityManager { } } - /** - * If set, the process of the root activity of the task will be killed - * as part of removing the task. - * @hide - */ - public static final int REMOVE_TASK_KILL_PROCESS = 0x0001; - /** * Completely remove the given task. * * @param taskId Identifier of the task to be removed. - * @param flags Additional operational flags. May be 0 or - * {@link #REMOVE_TASK_KILL_PROCESS}. * @return Returns true if the given task was found and removed. * * @hide */ - public boolean removeTask(int taskId, int flags) - throws SecurityException { + public boolean removeTask(int taskId) throws SecurityException { try { - return ActivityManagerNative.getDefault().removeTask(taskId, flags); + return ActivityManagerNative.getDefault().removeTask(taskId); } catch (RemoteException e) { // System dead, we will be dead too soon! return false; diff --git a/core/java/android/app/ActivityManagerInternal.java b/core/java/android/app/ActivityManagerInternal.java index 2a17fa6a8a26bed7e3b12e5ac575b094f08bd8e4..d56dc1e07f52d91d85f53e4b1796df3258eb0a63 100644 --- a/core/java/android/app/ActivityManagerInternal.java +++ b/core/java/android/app/ActivityManagerInternal.java @@ -23,8 +23,8 @@ package android.app; */ public abstract class ActivityManagerInternal { // Called by the power manager. - public abstract void goingToSleep(); - public abstract void wakingUp(); + public abstract void onWakefulnessChanged(int wakefulness); + public abstract int startIsolatedProcess(String entryPoint, String[] mainArgs, String processName, String abiOverride, int uid, Runnable crashHandler); } diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java index 09d6c290eb06e64c4e123b90c362d48bbe7a2e28..a7099d48ddfc939c20f370be972c047078bb5f1b 100644 --- a/core/java/android/app/ActivityManagerNative.java +++ b/core/java/android/app/ActivityManagerNative.java @@ -775,6 +775,14 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM return true; } + case REGISTER_TASK_STACK_LISTENER_TRANSACTION: { + data.enforceInterface(IActivityManager.descriptor); + IBinder token = data.readStrongBinder(); + registerTaskStackListener(ITaskStackListener.Stub.asInterface(token)); + reply.writeNoException(); + return true; + } + case GET_TASK_FOR_ACTIVITY_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); IBinder token = data.readStrongBinder(); @@ -1187,6 +1195,18 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM return true; } + case CHECK_PERMISSION_WITH_TOKEN_TRANSACTION: { + data.enforceInterface(IActivityManager.descriptor); + String perm = data.readString(); + int pid = data.readInt(); + int uid = data.readInt(); + IBinder token = data.readStrongBinder(); + int res = checkPermissionWithToken(perm, pid, uid, token); + reply.writeNoException(); + reply.writeInt(res); + return true; + } + case CHECK_URI_PERMISSION_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); Uri uri = Uri.CREATOR.createFromParcel(data); @@ -1194,7 +1214,8 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM int uid = data.readInt(); int mode = data.readInt(); int userId = data.readInt(); - int res = checkUriPermission(uri, pid, uid, mode, userId); + IBinder callerToken = data.readStrongBinder(); + int res = checkUriPermission(uri, pid, uid, mode, userId, callerToken); reply.writeNoException(); reply.writeInt(res); return true; @@ -1885,8 +1906,7 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM { data.enforceInterface(IActivityManager.descriptor); int taskId = data.readInt(); - int fl = data.readInt(); - boolean result = removeTask(taskId, fl); + boolean result = removeTask(taskId); reply.writeNoException(); reply.writeInt(result ? 1 : 0); return true; @@ -2281,6 +2301,20 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM return true; } + case START_IN_PLACE_ANIMATION_TRANSACTION: { + data.enforceInterface(IActivityManager.descriptor); + final Bundle bundle; + if (data.readInt() == 0) { + bundle = null; + } else { + bundle = data.readBundle(); + } + final ActivityOptions options = bundle == null ? null : new ActivityOptions(bundle); + startInPlaceAnimationOnFrontMostApplication(options); + reply.writeNoException(); + return true; + } + case REQUEST_VISIBLE_BEHIND_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); IBinder token = data.readStrongBinder(); @@ -2331,6 +2365,13 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM return true; } + case SYSTEM_BACKUP_RESTORED: { + data.enforceInterface(IActivityManager.descriptor); + systemBackupRestored(); + reply.writeNoException(); + return true; + } + case NOTIFY_CLEARTEXT_NETWORK_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); final int uid = data.readInt(); @@ -3252,6 +3293,18 @@ class ActivityManagerProxy implements IActivityManager data.recycle(); reply.recycle(); } + @Override + public void registerTaskStackListener(ITaskStackListener listener) throws RemoteException + { + Parcel data = Parcel.obtain(); + Parcel reply = Parcel.obtain(); + data.writeInterfaceToken(IActivityManager.descriptor); + data.writeStrongBinder(listener.asBinder()); + mRemote.transact(REGISTER_TASK_STACK_LISTENER_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY); + reply.readException(); + data.recycle(); + reply.recycle(); + } public int getTaskForActivity(IBinder token, boolean onlyRoot) throws RemoteException { Parcel data = Parcel.obtain(); @@ -3741,7 +3794,7 @@ class ActivityManagerProxy implements IActivityManager mRemote.transact(GET_INTENT_SENDER_TRANSACTION, data, reply, 0); reply.readException(); IIntentSender res = IIntentSender.Stub.asInterface( - reply.readStrongBinder()); + reply.readStrongBinder()); data.recycle(); reply.recycle(); return res; @@ -3850,6 +3903,22 @@ class ActivityManagerProxy implements IActivityManager reply.recycle(); return res; } + public int checkPermissionWithToken(String permission, int pid, int uid, IBinder callerToken) + throws RemoteException { + Parcel data = Parcel.obtain(); + Parcel reply = Parcel.obtain(); + data.writeInterfaceToken(IActivityManager.descriptor); + data.writeString(permission); + data.writeInt(pid); + data.writeInt(uid); + data.writeStrongBinder(callerToken); + mRemote.transact(CHECK_PERMISSION_WITH_TOKEN_TRANSACTION, data, reply, 0); + reply.readException(); + int res = reply.readInt(); + data.recycle(); + reply.recycle(); + return res; + } public boolean clearApplicationUserData(final String packageName, final IPackageDataObserver observer, final int userId) throws RemoteException { Parcel data = Parcel.obtain(); @@ -3865,8 +3934,8 @@ class ActivityManagerProxy implements IActivityManager reply.recycle(); return res; } - public int checkUriPermission(Uri uri, int pid, int uid, int mode, int userId) - throws RemoteException { + public int checkUriPermission(Uri uri, int pid, int uid, int mode, int userId, + IBinder callerToken) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IActivityManager.descriptor); @@ -3875,6 +3944,7 @@ class ActivityManagerProxy implements IActivityManager data.writeInt(uid); data.writeInt(mode); data.writeInt(userId); + data.writeStrongBinder(callerToken); mRemote.transact(CHECK_URI_PERMISSION_TRANSACTION, data, reply, 0); reply.readException(); int res = reply.readInt(); @@ -4790,12 +4860,11 @@ class ActivityManagerProxy implements IActivityManager return result; } - public boolean removeTask(int taskId, int flags) throws RemoteException { + public boolean removeTask(int taskId) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IActivityManager.descriptor); data.writeInt(taskId); - data.writeInt(flags); mRemote.transact(REMOVE_TASK_TRANSACTION, data, reply, 0); reply.readException(); boolean result = reply.readInt() != 0; @@ -5311,6 +5380,24 @@ class ActivityManagerProxy implements IActivityManager return icon; } + @Override + public void startInPlaceAnimationOnFrontMostApplication(ActivityOptions options) + throws RemoteException { + Parcel data = Parcel.obtain(); + Parcel reply = Parcel.obtain(); + data.writeInterfaceToken(IActivityManager.descriptor); + if (options == null) { + data.writeInt(0); + } else { + data.writeInt(1); + data.writeBundle(options.toBundle()); + } + mRemote.transact(START_IN_PLACE_ANIMATION_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY); + reply.readException(); + data.recycle(); + reply.recycle(); + } + @Override public boolean requestVisibleBehind(IBinder token, boolean visible) throws RemoteException { Parcel data = Parcel.obtain(); @@ -5390,6 +5477,17 @@ class ActivityManagerProxy implements IActivityManager reply.recycle(); } + @Override + public void systemBackupRestored() throws RemoteException { + Parcel data = Parcel.obtain(); + Parcel reply = Parcel.obtain(); + data.writeInterfaceToken(IActivityManager.descriptor); + mRemote.transact(SYSTEM_BACKUP_RESTORED, data, reply, 0); + reply.readException(); + data.recycle(); + reply.recycle(); + } + @Override public void notifyCleartextNetwork(int uid, byte[] firstPacket) throws RemoteException { Parcel data = Parcel.obtain(); diff --git a/core/java/android/app/ActivityOptions.java b/core/java/android/app/ActivityOptions.java index cd6a4f51bf906ec518b9d5ee370004e959e0293b..39ae65c79f6e5bca051de2810a54220a9a0fd52e 100644 --- a/core/java/android/app/ActivityOptions.java +++ b/core/java/android/app/ActivityOptions.java @@ -62,6 +62,12 @@ public class ActivityOptions { */ public static final String KEY_ANIM_EXIT_RES_ID = "android:animExitRes"; + /** + * Custom in-place animation resource ID. + * @hide + */ + public static final String KEY_ANIM_IN_PLACE_RES_ID = "android:animInPlaceRes"; + /** * Bitmap for thumbnail animation. * @hide @@ -132,11 +138,14 @@ public class ActivityOptions { public static final int ANIM_THUMBNAIL_ASPECT_SCALE_UP = 8; /** @hide */ public static final int ANIM_THUMBNAIL_ASPECT_SCALE_DOWN = 9; + /** @hide */ + public static final int ANIM_CUSTOM_IN_PLACE = 10; private String mPackageName; private int mAnimationType = ANIM_NONE; private int mCustomEnterResId; private int mCustomExitResId; + private int mCustomInPlaceResId; private Bitmap mThumbnail; private int mStartX; private int mStartY; @@ -198,6 +207,30 @@ public class ActivityOptions { return opts; } + /** + * Creates an ActivityOptions specifying a custom animation to run in place on an existing + * activity. + * + * @param context Who is defining this. This is the application that the + * animation resources will be loaded from. + * @param animId A resource ID of the animation resource to use for + * the incoming activity. + * @return Returns a new ActivityOptions object that you can use to + * supply these options as the options Bundle when running an in-place animation. + * @hide + */ + public static ActivityOptions makeCustomInPlaceAnimation(Context context, int animId) { + if (animId == 0) { + throw new RuntimeException("You must specify a valid animation."); + } + + ActivityOptions opts = new ActivityOptions(); + opts.mPackageName = context.getPackageName(); + opts.mAnimationType = ANIM_CUSTOM_IN_PLACE; + opts.mCustomInPlaceResId = animId; + return opts; + } + private void setOnAnimationStartedListener(Handler handler, OnAnimationStartedListener listener) { if (listener != null) { @@ -351,6 +384,8 @@ public class ActivityOptions { * of the animation. * @param startX The x starting location of the bitmap, relative to source. * @param startY The y starting location of the bitmap, relative to source. + * @param handler If listener is non-null this must be a valid + * Handler on which to dispatch the callback; otherwise it should be null. * @param listener Optional OnAnimationStartedListener to find out when the * requested animation has started running. If for some reason the animation * is not executed, the callback will happen immediately. @@ -360,9 +395,9 @@ public class ActivityOptions { */ public static ActivityOptions makeThumbnailAspectScaleUpAnimation(View source, Bitmap thumbnail, int startX, int startY, int targetWidth, int targetHeight, - OnAnimationStartedListener listener) { + Handler handler, OnAnimationStartedListener listener) { return makeAspectScaledThumbnailAnimation(source, thumbnail, startX, startY, - targetWidth, targetHeight, listener, true); + targetWidth, targetHeight, handler, listener, true); } /** @@ -375,6 +410,8 @@ public class ActivityOptions { * of the animation. * @param startX The x end location of the bitmap, relative to source. * @param startY The y end location of the bitmap, relative to source. + * @param handler If listener is non-null this must be a valid + * Handler on which to dispatch the callback; otherwise it should be null. * @param listener Optional OnAnimationStartedListener to find out when the * requested animation has started running. If for some reason the animation * is not executed, the callback will happen immediately. @@ -384,14 +421,14 @@ public class ActivityOptions { */ public static ActivityOptions makeThumbnailAspectScaleDownAnimation(View source, Bitmap thumbnail, int startX, int startY, int targetWidth, int targetHeight, - OnAnimationStartedListener listener) { + Handler handler, OnAnimationStartedListener listener) { return makeAspectScaledThumbnailAnimation(source, thumbnail, startX, startY, - targetWidth, targetHeight, listener, false); + targetWidth, targetHeight, handler, listener, false); } private static ActivityOptions makeAspectScaledThumbnailAnimation(View source, Bitmap thumbnail, int startX, int startY, int targetWidth, int targetHeight, - OnAnimationStartedListener listener, boolean scaleUp) { + Handler handler, OnAnimationStartedListener listener, boolean scaleUp) { ActivityOptions opts = new ActivityOptions(); opts.mPackageName = source.getContext().getPackageName(); opts.mAnimationType = scaleUp ? ANIM_THUMBNAIL_ASPECT_SCALE_UP : @@ -403,7 +440,7 @@ public class ActivityOptions { opts.mStartY = pts[1] + startY; opts.mWidth = targetWidth; opts.mHeight = targetHeight; - opts.setOnAnimationStartedListener(source.getHandler(), listener); + opts.setOnAnimationStartedListener(handler, listener); return opts; } @@ -540,6 +577,10 @@ public class ActivityOptions { opts.getBinder(KEY_ANIM_START_LISTENER)); break; + case ANIM_CUSTOM_IN_PLACE: + mCustomInPlaceResId = opts.getInt(KEY_ANIM_IN_PLACE_RES_ID, 0); + break; + case ANIM_SCALE_UP: mStartX = opts.getInt(KEY_ANIM_START_X, 0); mStartY = opts.getInt(KEY_ANIM_START_Y, 0); @@ -591,6 +632,11 @@ public class ActivityOptions { return mCustomExitResId; } + /** @hide */ + public int getCustomInPlaceResId() { + return mCustomInPlaceResId; + } + /** @hide */ public Bitmap getThumbnail() { return mThumbnail; @@ -689,6 +735,9 @@ public class ActivityOptions { } mAnimationStartedListener = otherOptions.mAnimationStartedListener; break; + case ANIM_CUSTOM_IN_PLACE: + mCustomInPlaceResId = otherOptions.mCustomInPlaceResId; + break; case ANIM_SCALE_UP: mStartX = otherOptions.mStartX; mStartY = otherOptions.mStartY; @@ -756,6 +805,9 @@ public class ActivityOptions { b.putBinder(KEY_ANIM_START_LISTENER, mAnimationStartedListener != null ? mAnimationStartedListener.asBinder() : null); break; + case ANIM_CUSTOM_IN_PLACE: + b.putInt(KEY_ANIM_IN_PLACE_RES_ID, mCustomInPlaceResId); + break; case ANIM_SCALE_UP: b.putInt(KEY_ANIM_START_X, mStartX); b.putInt(KEY_ANIM_START_Y, mStartY); diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index bffe395c31dd6623933870553d9f6553280b524a..ccbed92268bc7f52ff24420a6defabb5df40c471 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -44,7 +44,10 @@ import android.database.sqlite.SQLiteDebug.DbStats; import android.graphics.Bitmap; import android.graphics.Canvas; import android.hardware.display.DisplayManagerGlobal; +import android.net.ConnectivityManager; import android.net.IConnectivityManager; +import android.net.LinkProperties; +import android.net.Network; import android.net.Proxy; import android.net.ProxyInfo; import android.net.Uri; @@ -60,6 +63,7 @@ import android.os.IBinder; import android.os.Looper; import android.os.Message; import android.os.MessageQueue; +import android.os.Parcel; import android.os.ParcelFileDescriptor; import android.os.PersistableBundle; import android.os.Process; @@ -83,6 +87,8 @@ import android.util.Slog; import android.util.SuperNotCalledException; import android.view.Display; import android.view.HardwareRenderer; +import android.view.IWindowManager; +import android.view.IWindowSessionCallback; import android.view.View; import android.view.ViewDebug; import android.view.ViewManager; @@ -94,6 +100,7 @@ import android.renderscript.RenderScript; import android.security.AndroidKeyStoreProvider; import com.android.internal.app.IVoiceInteractor; +import com.android.internal.content.ReferrerIntent; import com.android.internal.os.BinderInternal; import com.android.internal.os.RuntimeInit; import com.android.internal.os.SamplingProfilerIntegration; @@ -161,6 +168,13 @@ public final class ActivityThread { private static final int LOG_ON_PAUSE_CALLED = 30021; private static final int LOG_ON_RESUME_CALLED = 30022; + /** Type for IActivityManager.serviceDoneExecuting: anonymous operation */ + public static final int SERVICE_DONE_EXECUTING_ANON = 0; + /** Type for IActivityManager.serviceDoneExecuting: done with an onStart call */ + public static final int SERVICE_DONE_EXECUTING_START = 1; + /** Type for IActivityManager.serviceDoneExecuting: done stopping (destroying) service */ + public static final int SERVICE_DONE_EXECUTING_STOP = 2; + private ContextImpl mSystemContext; static IPackageManager sPackageManager; @@ -268,6 +282,7 @@ public final class ActivityThread { IBinder token; int ident; Intent intent; + String referrer; IVoiceInteractor voiceInteractor; Bundle state; PersistableBundle persistentState; @@ -290,7 +305,7 @@ public final class ActivityThread { LoadedApk packageInfo; List pendingResults; - List pendingIntents; + List pendingIntents; boolean startsNotResumed; boolean isForward; @@ -348,7 +363,7 @@ public final class ActivityThread { } static final class NewIntentData { - List intents; + List intents; IBinder token; public String toString() { return "NewIntentData{intents=" + intents + " token=" + token + "}"; @@ -605,9 +620,9 @@ public final class ActivityThread { // activity itself back to the activity manager. (matters more with ipc) public final void scheduleLaunchActivity(Intent intent, IBinder token, int ident, ActivityInfo info, Configuration curConfig, CompatibilityInfo compatInfo, - IVoiceInteractor voiceInteractor, int procState, Bundle state, + String referrer, IVoiceInteractor voiceInteractor, int procState, Bundle state, PersistableBundle persistentState, List pendingResults, - List pendingNewIntents, boolean notResumed, boolean isForward, + List pendingNewIntents, boolean notResumed, boolean isForward, ProfilerInfo profilerInfo) { updateProcessState(procState, false); @@ -617,6 +632,7 @@ public final class ActivityThread { r.token = token; r.ident = ident; r.intent = intent; + r.referrer = referrer; r.voiceInteractor = voiceInteractor; r.activityInfo = info; r.compatInfo = compatInfo; @@ -637,13 +653,13 @@ public final class ActivityThread { } public final void scheduleRelaunchActivity(IBinder token, - List pendingResults, List pendingNewIntents, + List pendingResults, List pendingNewIntents, int configChanges, boolean notResumed, Configuration config) { requestRelaunchActivity(token, pendingResults, pendingNewIntents, configChanges, notResumed, config, true); } - public final void scheduleNewIntent(List intents, IBinder token) { + public final void scheduleNewIntent(List intents, IBinder token) { NewIntentData data = new NewIntentData(); data.intents = intents; data.token = token; @@ -833,7 +849,13 @@ public final class ActivityThread { } public void setHttpProxy(String host, String port, String exclList, Uri pacFileUrl) { - Proxy.setHttpProxySystemProperty(host, port, exclList, pacFileUrl); + final Network network = ConnectivityManager.getProcessDefaultNetwork(); + if (network != null) { + Proxy.setHttpProxySystemProperty( + ConnectivityManager.from(getSystemContext()).getDefaultProxy()); + } else { + Proxy.setHttpProxySystemProperty(host, port, exclList, pacFileUrl); + } } public void processInBackground() { @@ -962,6 +984,8 @@ public final class ActivityThread { int binderLocalObjectCount = Debug.getBinderLocalObjectCount(); int binderProxyObjectCount = Debug.getBinderProxyObjectCount(); int binderDeathObjectCount = Debug.getBinderDeathObjectCount(); + long parcelSize = Parcel.getGlobalAllocSize(); + long parcelCount = Parcel.getGlobalAllocCount(); long openSslSocketCount = Debug.countInstancesOfClass(OpenSSLSocketImpl.class); SQLiteDebug.PagerStats stats = SQLiteDebug.getDatabaseInfo(); @@ -1020,9 +1044,10 @@ public final class ActivityThread { printRow(pw, TWO_COUNT_COLUMNS, "Local Binders:", binderLocalObjectCount, "Proxy Binders:", binderProxyObjectCount); - printRow(pw, ONE_COUNT_COLUMN, "Death Recipients:", binderDeathObjectCount); - - printRow(pw, ONE_COUNT_COLUMN, "OpenSSL Sockets:", openSslSocketCount); + printRow(pw, TWO_COUNT_COLUMNS, "Parcel memory:", parcelSize/1024, + "Parcel count:", parcelCount); + printRow(pw, TWO_COUNT_COLUMNS, "Death Recipients:", binderDeathObjectCount, + "OpenSSL Sockets:", openSslSocketCount); // SQLite mem info pw.println(" "); @@ -1765,6 +1790,12 @@ public final class ActivityThread { new LoadedApk(this, aInfo, compatInfo, baseLoader, securityViolation, includeCode && (aInfo.flags&ApplicationInfo.FLAG_HAS_CODE) != 0, registerPackage); + + if (mSystemThread && "android".equals(aInfo.packageName)) { + packageInfo.installSystemApplicationInfo(aInfo, + getSystemContext().mPackageInfo.getClassLoader()); + } + if (includeCode) { mPackages.put(aInfo.packageName, new WeakReference(packageInfo)); @@ -1825,10 +1856,6 @@ public final class ActivityThread { synchronized (this) { getSystemContext().installSystemApplicationInfo(info, classLoader); - // The code package for "android" in the system server needs - // to be the system context's package. - mPackages.put("android", new WeakReference(getSystemContext().mPackageInfo)); - // give ourselves a default profiler mProfiler = new Profiler(); } @@ -2255,7 +2282,7 @@ public final class ActivityThread { activity.attach(appContext, this, getInstrumentation(), r.token, r.ident, app, r.intent, r.activityInfo, title, r.parent, r.embeddedID, r.lastNonConfigurationInstances, config, - r.voiceInteractor); + r.referrer, r.voiceInteractor); if (customIntent != null) { activity.mIntent = customIntent; @@ -2380,6 +2407,9 @@ public final class ActivityThread { if (localLOGV) Slog.v( TAG, "Handling launch of " + r); + // Initialize before creating the activity + WindowManagerGlobal.initialize(); + Activity a = performLaunchActivity(r, customIntent); if (a != null) { @@ -2442,11 +2472,10 @@ public final class ActivityThread { } } - private void deliverNewIntents(ActivityClientRecord r, - List intents) { + private void deliverNewIntents(ActivityClientRecord r, List intents) { final int N = intents.size(); for (int i=0; i intents) { + public final void performNewIntents(IBinder token, List intents) { ActivityClientRecord r = mActivities.get(token); if (r != null) { final boolean resumed = !r.paused; @@ -2536,13 +2564,18 @@ public final class ActivityThread { } public void handleInstallProvider(ProviderInfo info) { - installContentProviders(mInitialApplication, Lists.newArrayList(info)); + final StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskWrites(); + try { + installContentProviders(mInitialApplication, Lists.newArrayList(info)); + } finally { + StrictMode.setThreadPolicy(oldPolicy); + } } private void handleEnterAnimationComplete(IBinder token) { ActivityClientRecord r = mActivities.get(token); if (r != null) { - r.activity.onEnterAnimationComplete(); + r.activity.dispatchEnterAnimationComplete(); } } @@ -2755,7 +2788,7 @@ public final class ActivityThread { mServices.put(data.token, service); try { ActivityManagerNative.getDefault().serviceDoneExecuting( - data.token, 0, 0, 0); + data.token, SERVICE_DONE_EXECUTING_ANON, 0, 0); } catch (RemoteException e) { // nothing to do. } @@ -2784,7 +2817,7 @@ public final class ActivityThread { } else { s.onRebind(data.intent); ActivityManagerNative.getDefault().serviceDoneExecuting( - data.token, 0, 0, 0); + data.token, SERVICE_DONE_EXECUTING_ANON, 0, 0); } ensureJitEnabled(); } catch (RemoteException ex) { @@ -2812,7 +2845,7 @@ public final class ActivityThread { data.token, data.intent, doRebind); } else { ActivityManagerNative.getDefault().serviceDoneExecuting( - data.token, 0, 0, 0); + data.token, SERVICE_DONE_EXECUTING_ANON, 0, 0); } } catch (RemoteException ex) { } @@ -2894,7 +2927,7 @@ public final class ActivityThread { try { ActivityManagerNative.getDefault().serviceDoneExecuting( - data.token, 1, data.startId, res); + data.token, SERVICE_DONE_EXECUTING_START, data.startId, res); } catch (RemoteException e) { // nothing to do. } @@ -2925,9 +2958,11 @@ public final class ActivityThread { try { ActivityManagerNative.getDefault().serviceDoneExecuting( - token, 0, 0, 0); + token, SERVICE_DONE_EXECUTING_STOP, 0, 0); } catch (RemoteException e) { // nothing to do. + Slog.i(TAG, "handleStopService: unable to execute serviceDoneExecuting for " + + token, e); } } catch (Exception e) { if (!mInstrumentation.onException(s, e)) { @@ -2935,7 +2970,10 @@ public final class ActivityThread { "Unable to stop service " + s + ": " + e.toString(), e); } + Slog.i(TAG, "handleStopService: exception for " + token, e); } + } else { + Slog.i(TAG, "handleStopService: token=" + token + " not found."); } //Slog.i(TAG, "Running services: " + mServices); } @@ -3768,7 +3806,7 @@ public final class ActivityThread { } public final void requestRelaunchActivity(IBinder token, - List pendingResults, List pendingNewIntents, + List pendingResults, List pendingNewIntents, int configChanges, boolean notResumed, Configuration config, boolean fromServer) { ActivityClientRecord target = null; @@ -4444,7 +4482,7 @@ public final class ActivityThread { // crash if we can't get it. IConnectivityManager service = IConnectivityManager.Stub.asInterface(b); try { - ProxyInfo proxyInfo = service.getProxy(); + final ProxyInfo proxyInfo = service.getDefaultProxy(); Proxy.setHttpProxySystemProperty(proxyInfo); } catch (RemoteException e) {} } @@ -5246,8 +5284,6 @@ public final class ActivityThread { sMainThreadHandler = thread.getHandler(); } - AsyncTask.init(); - if (false) { Looper.myLooper().setMessageLogging(new LogPrinter(Log.DEBUG, "ActivityThread")); diff --git a/core/java/android/app/ActivityTransitionCoordinator.java b/core/java/android/app/ActivityTransitionCoordinator.java index 540376ec5fb726f031e99e7c40de48f6fe261cd1..e3b27b51f69a80244962fbf6ed25cf50cb71e070 100644 --- a/core/java/android/app/ActivityTransitionCoordinator.java +++ b/core/java/android/app/ActivityTransitionCoordinator.java @@ -206,6 +206,8 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { private ArrayList mGhostViewListeners = new ArrayList(); private ArrayMap mOriginalAlphas = new ArrayMap(); + final private ArrayList mRootSharedElements = new ArrayList(); + private ArrayList mSharedElementParentMatrices; public ActivityTransitionCoordinator(Window window, ArrayList allSharedElementNames, @@ -222,8 +224,7 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { if (mListener != null) { mListener.onMapSharedElements(mAllSharedElementNames, sharedElements); } - mSharedElementNames.addAll(sharedElements.keySet()); - mSharedElements.addAll(sharedElements.values()); + setSharedElements(sharedElements); if (getViewsTransition() != null && mTransitioningViews != null) { ViewGroup decorView = getDecor(); if (decorView != null) { @@ -234,6 +235,58 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { setEpicenter(); } + /** + * Iterates over the shared elements and adds them to the members in order. + * Shared elements that are nested in other shared elements are placed after the + * elements that they are nested in. This means that layout ordering can be done + * from first to last. + * + * @param sharedElements The map of transition names to shared elements to set into + * the member fields. + */ + private void setSharedElements(ArrayMap sharedElements) { + boolean isFirstRun = true; + while (!sharedElements.isEmpty()) { + final int numSharedElements = sharedElements.size(); + for (int i = numSharedElements - 1; i >= 0; i--) { + final View view = sharedElements.valueAt(i); + final String name = sharedElements.keyAt(i); + if (isFirstRun && (view == null || !view.isAttachedToWindow() || name == null)) { + sharedElements.removeAt(i); + } else { + if (!isNested(view, sharedElements)) { + mSharedElementNames.add(name); + mSharedElements.add(view); + sharedElements.removeAt(i); + if (isFirstRun) { + // We need to keep track which shared elements are roots + // and which are nested. + mRootSharedElements.add(view); + } + } + } + } + isFirstRun = false; + } + } + + /** + * Returns true when view is nested in any of the values of sharedElements. + */ + private static boolean isNested(View view, ArrayMap sharedElements) { + ViewParent parent = view.getParent(); + boolean isNested = false; + while (parent instanceof View) { + View parentView = (View) parent; + if (sharedElements.containsValue(parentView)) { + isNested = true; + break; + } + parent = parentView.getParent(); + } + return isNested; + } + protected void stripOffscreenViews() { if (mTransitioningViews == null) { return; @@ -449,11 +502,50 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { view.layout(x, y, x + width, y + height); } - protected void getSharedElementParentMatrix(View view, Matrix matrix) { - // Find the location in the view's parent - ViewGroup parent = (ViewGroup) view.getParent(); - matrix.reset(); - parent.transformMatrixToLocal(matrix); + private void setSharedElementMatrices() { + int numSharedElements = mSharedElements.size(); + if (numSharedElements > 0) { + mSharedElementParentMatrices = new ArrayList(numSharedElements); + } + for (int i = 0; i < numSharedElements; i++) { + View view = mSharedElements.get(i); + + // Find the location in the view's parent + ViewGroup parent = (ViewGroup) view.getParent(); + Matrix matrix = new Matrix(); + parent.transformMatrixToLocal(matrix); + + mSharedElementParentMatrices.add(matrix); + } + } + + private void getSharedElementParentMatrix(View view, Matrix matrix) { + final boolean isNestedInOtherSharedElement = !mRootSharedElements.contains(view); + final boolean useParentMatrix; + if (isNestedInOtherSharedElement) { + useParentMatrix = true; + } else { + final int index = mSharedElementParentMatrices == null ? -1 + : mSharedElements.indexOf(view); + if (index < 0) { + useParentMatrix = true; + } else { + // The indices of mSharedElementParentMatrices matches the + // mSharedElement matrices. + Matrix parentMatrix = mSharedElementParentMatrices.get(index); + matrix.set(parentMatrix); + useParentMatrix = false; + } + } + if (useParentMatrix) { + matrix.reset(); + ViewParent viewParent = view.getParent(); + if (viewParent instanceof ViewGroup) { + // Find the location in the view's parent + ViewGroup parent = (ViewGroup) viewParent; + parent.transformMatrixToLocal(matrix); + } + } } protected ArrayList setSharedElementState( @@ -536,29 +628,31 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { protected ArrayList createSnapshots(Bundle state, Collection names) { int numSharedElements = names.size(); + ArrayList snapshots = new ArrayList(numSharedElements); if (numSharedElements == 0) { - return null; + return snapshots; } - ArrayList snapshots = new ArrayList(numSharedElements); Context context = getWindow().getContext(); int[] decorLoc = new int[2]; ViewGroup decorView = getDecor(); if (decorView != null) { decorView.getLocationOnScreen(decorLoc); } + Matrix tempMatrix = new Matrix(); for (String name: names) { Bundle sharedElementBundle = state.getBundle(name); + View snapshot = null; if (sharedElementBundle != null) { Parcelable parcelable = sharedElementBundle.getParcelable(KEY_SNAPSHOT); - View snapshot = null; if (parcelable != null && mListener != null) { snapshot = mListener.onCreateSnapshotView(context, parcelable); } if (snapshot != null) { - setSharedElementState(snapshot, name, state, null, null, decorLoc); + setSharedElementState(snapshot, name, state, tempMatrix, null, decorLoc); } - snapshots.add(snapshot); } + // Even null snapshots are added so they remain in the same order as shared elements. + snapshots.add(snapshot); } return snapshots; } @@ -607,6 +701,8 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { mResultReceiver = null; mPendingTransition = null; mListener = null; + mRootSharedElements.clear(); + mSharedElementParentMatrices = null; } protected long getFadeDuration() { @@ -703,10 +799,20 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver { mIsStartingTransition = false; } + /** + * Cancels any pending transitions and returns true if there is a transition is in + * the middle of starting. + */ + protected boolean cancelPendingTransitions() { + mPendingTransition = null; + return mIsStartingTransition; + } + protected void moveSharedElementsToOverlay() { - if (!mWindow.getSharedElementsUseOverlay()) { + if (mWindow == null || !mWindow.getSharedElementsUseOverlay()) { return; } + setSharedElementMatrices(); int numSharedElements = mSharedElements.size(); ViewGroup decor = getDecor(); if (decor != null) { diff --git a/core/java/android/app/ActivityTransitionState.java b/core/java/android/app/ActivityTransitionState.java index 555d20bba99a354ddfb928a3b1f6666ecdd035f5..a2bfa4e4fba99bc9b59cb0f82f0e166e1e586d10 100644 --- a/core/java/android/app/ActivityTransitionState.java +++ b/core/java/android/app/ActivityTransitionState.java @@ -22,6 +22,7 @@ import android.util.ArrayMap; import android.util.SparseArray; import android.view.View; import android.view.ViewGroup; +import android.view.ViewTreeObserver; import android.view.Window; import java.lang.ref.WeakReference; @@ -252,7 +253,7 @@ class ActivityTransitionState { } } - public boolean startExitBackTransition(Activity activity) { + public boolean startExitBackTransition(final Activity activity) { if (mEnteringNames == null) { return false; } else { @@ -260,10 +261,11 @@ class ActivityTransitionState { mHasExited = true; Transition enterViewsTransition = null; ViewGroup decor = null; + boolean delayExitBack = false; if (mEnterTransitionCoordinator != null) { enterViewsTransition = mEnterTransitionCoordinator.getEnterViewsTransition(); decor = mEnterTransitionCoordinator.getDecor(); - mEnterTransitionCoordinator.cancelEnter(); + delayExitBack = mEnterTransitionCoordinator.cancelEnter(); mEnterTransitionCoordinator = null; if (enterViewsTransition != null && decor != null) { enterViewsTransition.pause(decor); @@ -275,7 +277,23 @@ class ActivityTransitionState { if (enterViewsTransition != null && decor != null) { enterViewsTransition.resume(decor); } - mReturnExitCoordinator.startExit(activity.mResultCode, activity.mResultData); + if (delayExitBack && decor != null) { + final ViewGroup finalDecor = decor; + decor.getViewTreeObserver().addOnPreDrawListener( + new ViewTreeObserver.OnPreDrawListener() { + @Override + public boolean onPreDraw() { + finalDecor.getViewTreeObserver().removeOnPreDrawListener(this); + if (mReturnExitCoordinator != null) { + mReturnExitCoordinator.startExit(activity.mResultCode, + activity.mResultData); + } + return true; + } + }); + } else { + mReturnExitCoordinator.startExit(activity.mResultCode, activity.mResultData); + } } return true; } diff --git a/core/java/android/app/AlertDialog.java b/core/java/android/app/AlertDialog.java index 4ce78357f352d820bfbff6d49176506e3e91192b..3c6458fc2674285ffad67b3596e8abc7a83c26f6 100644 --- a/core/java/android/app/AlertDialog.java +++ b/core/java/android/app/AlertDialog.java @@ -466,6 +466,8 @@ public class AlertDialog extends Dialog implements DialogInterface { /** * Set the resource id of the {@link Drawable} to be used in the title. + *

    + * Takes precedence over values set using {@link #setIcon(Drawable)}. * * @return This Builder object to allow for chaining of calls to set methods */ @@ -485,7 +487,11 @@ public class AlertDialog extends Dialog implements DialogInterface { } /** - * Set an icon as supplied by a theme attribute. e.g. android.R.attr.alertDialogIcon + * Set an icon as supplied by a theme attribute. e.g. + * {@link android.R.attr#alertDialogIcon}. + *

    + * Takes precedence over values set using {@link #setIcon(int)} or + * {@link #setIcon(Drawable)}. * * @param attrId ID of a theme attribute that points to a drawable resource. */ diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java index ba9c9d644ef8547f563fd1929bbdb9fcf296dab6..95870cf9675a0688239f0b5ff23ba09c0dc96f22 100644 --- a/core/java/android/app/AppOpsManager.java +++ b/core/java/android/app/AppOpsManager.java @@ -26,6 +26,7 @@ import android.os.Parcel; import android.os.Parcelable; import android.os.Process; import android.os.RemoteException; +import android.os.UserHandle; import android.os.UserManager; import android.util.ArrayMap; @@ -733,6 +734,18 @@ public class AppOpsManager { return op < sOpNames.length ? sOpNames[op] : ("Unknown(" + op + ")"); } + /** + * @hide + */ + public static int strDebugOpToOp(String op) { + for (int i=0; i ri = data.createTypedArrayList(ResultInfo.CREATOR); - List pi = data.createTypedArrayList(Intent.CREATOR); + List pi = data.createTypedArrayList(ReferrerIntent.CREATOR); boolean notResumed = data.readInt() != 0; boolean isForward = data.readInt() != 0; ProfilerInfo profilerInfo = data.readInt() != 0 ? ProfilerInfo.CREATOR.createFromParcel(data) : null; - scheduleLaunchActivity(intent, b, ident, info, curConfig, compatInfo, voiceInteractor, - procState, state, persistentState, ri, pi, notResumed, isForward, profilerInfo); + scheduleLaunchActivity(intent, b, ident, info, curConfig, compatInfo, referrer, + voiceInteractor, procState, state, persistentState, ri, pi, + notResumed, isForward, profilerInfo); return true; } @@ -161,7 +164,7 @@ public abstract class ApplicationThreadNative extends Binder data.enforceInterface(IApplicationThread.descriptor); IBinder b = data.readStrongBinder(); List ri = data.createTypedArrayList(ResultInfo.CREATOR); - List pi = data.createTypedArrayList(Intent.CREATOR); + List pi = data.createTypedArrayList(ReferrerIntent.CREATOR); int configChanges = data.readInt(); boolean notResumed = data.readInt() != 0; Configuration config = null; @@ -175,7 +178,7 @@ public abstract class ApplicationThreadNative extends Binder case SCHEDULE_NEW_INTENT_TRANSACTION: { data.enforceInterface(IApplicationThread.descriptor); - List pi = data.createTypedArrayList(Intent.CREATOR); + List pi = data.createTypedArrayList(ReferrerIntent.CREATOR); IBinder b = data.readStrongBinder(); scheduleNewIntent(pi, b); return true; @@ -773,9 +776,9 @@ class ApplicationThreadProxy implements IApplicationThread { public final void scheduleLaunchActivity(Intent intent, IBinder token, int ident, ActivityInfo info, Configuration curConfig, CompatibilityInfo compatInfo, - IVoiceInteractor voiceInteractor, int procState, Bundle state, + String referrer, IVoiceInteractor voiceInteractor, int procState, Bundle state, PersistableBundle persistentState, List pendingResults, - List pendingNewIntents, boolean notResumed, boolean isForward, + List pendingNewIntents, boolean notResumed, boolean isForward, ProfilerInfo profilerInfo) throws RemoteException { Parcel data = Parcel.obtain(); data.writeInterfaceToken(IApplicationThread.descriptor); @@ -785,6 +788,7 @@ class ApplicationThreadProxy implements IApplicationThread { info.writeToParcel(data, 0); curConfig.writeToParcel(data, 0); compatInfo.writeToParcel(data, 0); + data.writeString(referrer); data.writeStrongBinder(voiceInteractor != null ? voiceInteractor.asBinder() : null); data.writeInt(procState); data.writeBundle(state); @@ -805,7 +809,7 @@ class ApplicationThreadProxy implements IApplicationThread { } public final void scheduleRelaunchActivity(IBinder token, - List pendingResults, List pendingNewIntents, + List pendingResults, List pendingNewIntents, int configChanges, boolean notResumed, Configuration config) throws RemoteException { Parcel data = Parcel.obtain(); @@ -826,7 +830,7 @@ class ApplicationThreadProxy implements IApplicationThread { data.recycle(); } - public void scheduleNewIntent(List intents, IBinder token) + public void scheduleNewIntent(List intents, IBinder token) throws RemoteException { Parcel data = Parcel.obtain(); data.writeInterfaceToken(IApplicationThread.descriptor); diff --git a/core/java/android/app/BackStackRecord.java b/core/java/android/app/BackStackRecord.java index 0092ee78ccd33e778389cfebdeb0fca2728b6f1f..2784d441ee3b6943cc372b2f96cf851f9efecb31 100644 --- a/core/java/android/app/BackStackRecord.java +++ b/core/java/android/app/BackStackRecord.java @@ -38,6 +38,7 @@ import android.view.ViewTreeObserver; import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.ArrayList; +import java.util.List; final class BackStackState implements Parcelable { final int[] mOps; @@ -1055,7 +1056,7 @@ final class BackStackRecord extends FragmentTransaction implements } private static ArrayList captureExitingViews(Transition exitTransition, - Fragment outFragment, ArrayMap namedViews) { + Fragment outFragment, ArrayMap namedViews, View nonExistentView) { ArrayList viewList = null; if (exitTransition != null) { viewList = new ArrayList(); @@ -1064,7 +1065,10 @@ final class BackStackRecord extends FragmentTransaction implements if (namedViews != null) { viewList.removeAll(namedViews.values()); } - addTargets(exitTransition, viewList); + if (!viewList.isEmpty()) { + viewList.add(nonExistentView); + addTargets(exitTransition, viewList); + } } return viewList; } @@ -1132,11 +1136,8 @@ final class BackStackRecord extends FragmentTransaction implements namedViews = mapSharedElementsIn(state, isBack, inFragment); removeTargets(sharedElementTransition, sharedElementTargets); sharedElementTargets.clear(); - if (namedViews.isEmpty()) { - sharedElementTargets.add(state.nonExistentView); - } else { - sharedElementTargets.addAll(namedViews.values()); - } + sharedElementTargets.add(state.nonExistentView); + sharedElementTargets.addAll(namedViews.values()); addTargets(sharedElementTransition, sharedElementTargets); @@ -1153,6 +1154,9 @@ final class BackStackRecord extends FragmentTransaction implements if (namedViews != null) { enteringViews.removeAll(namedViews.values()); } + enteringViews.add(state.nonExistentView); + // We added this earlier to prevent any views being targeted. + enterTransition.removeTarget(state.nonExistentView); addTargets(enterTransition, enteringViews); } setSharedElementEpicenter(enterTransition, state); @@ -1293,11 +1297,8 @@ final class BackStackRecord extends FragmentTransaction implements ArrayList sharedElementTargets = new ArrayList(); if (sharedElementTransition != null) { namedViews = remapSharedElements(state, outFragment, isBack); - if (namedViews.isEmpty()) { - sharedElementTargets.add(state.nonExistentView); - } else { - sharedElementTargets.addAll(namedViews.values()); - } + sharedElementTargets.add(state.nonExistentView); + sharedElementTargets.addAll(namedViews.values()); addTargets(sharedElementTransition, sharedElementTargets); // Notify the start of the transition. @@ -1310,7 +1311,7 @@ final class BackStackRecord extends FragmentTransaction implements } ArrayList exitingViews = captureExitingViews(exitTransition, outFragment, - namedViews); + namedViews, state.nonExistentView); if (exitingViews == null || exitingViews.isEmpty()) { exitTransition = null; } @@ -1388,20 +1389,69 @@ final class BackStackRecord extends FragmentTransaction implements } } - private static void removeTargets(Transition transition, ArrayList views) { - int numViews = views.size(); - for (int i = 0; i < numViews; i++) { - transition.removeTarget(views.get(i)); + /** + * This method removes the views from transitions that target ONLY those views. + * The views list should match those added in addTargets and should contain + * one view that is not in the view hierarchy (state.nonExistentView). + */ + public static void removeTargets(Transition transition, ArrayList views) { + if (transition instanceof TransitionSet) { + TransitionSet set = (TransitionSet) transition; + int numTransitions = set.getTransitionCount(); + for (int i = 0; i < numTransitions; i++) { + Transition child = set.getTransitionAt(i); + removeTargets(child, views); + } + } else if (!hasSimpleTarget(transition)) { + List targets = transition.getTargets(); + if (targets != null && targets.size() == views.size() && + targets.containsAll(views)) { + // We have an exact match. We must have added these earlier in addTargets + for (int i = views.size() - 1; i >= 0; i--) { + transition.removeTarget(views.get(i)); + } + } } } - private static void addTargets(Transition transition, ArrayList views) { - int numViews = views.size(); - for (int i = 0; i < numViews; i++) { - transition.addTarget(views.get(i)); + /** + * This method adds views as targets to the transition, but only if the transition + * doesn't already have a target. It is best for views to contain one View object + * that does not exist in the view hierarchy (state.nonExistentView) so that + * when they are removed later, a list match will suffice to remove the targets. + * Otherwise, if you happened to have targeted the exact views for the transition, + * the removeTargets call will remove them unexpectedly. + */ + public static void addTargets(Transition transition, ArrayList views) { + if (transition instanceof TransitionSet) { + TransitionSet set = (TransitionSet) transition; + int numTransitions = set.getTransitionCount(); + for (int i = 0; i < numTransitions; i++) { + Transition child = set.getTransitionAt(i); + addTargets(child, views); + } + } else if (!hasSimpleTarget(transition)) { + List targets = transition.getTargets(); + if (isNullOrEmpty(targets)) { + // We can just add the target views + int numViews = views.size(); + for (int i = 0; i < numViews; i++) { + transition.addTarget(views.get(i)); + } + } } } + private static boolean hasSimpleTarget(Transition transition) { + return !isNullOrEmpty(transition.getTargetIds()) || + !isNullOrEmpty(transition.getTargetNames()) || + !isNullOrEmpty(transition.getTargetTypes()); + } + + private static boolean isNullOrEmpty(List list) { + return list == null || list.isEmpty(); + } + /** * Remaps a name-to-View map, substituting different names for keys. * diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java index 7fafc380ddb8681af9708e35f6a61d5f9f1b6b63..2ef046d8e1fa3113f9f9b5e606596aceb5fdd92a 100644 --- a/core/java/android/app/ContextImpl.java +++ b/core/java/android/app/ContextImpl.java @@ -20,9 +20,9 @@ import android.app.usage.IUsageStatsManager; import android.app.usage.UsageStatsManager; import android.appwidget.AppWidgetManager; import android.os.Build; - import android.service.persistentdata.IPersistentDataBlockService; import android.service.persistentdata.PersistentDataBlockManager; + import com.android.internal.appwidget.IAppWidgetService; import com.android.internal.policy.PolicyManager; import com.android.internal.util.Preconditions; @@ -125,6 +125,7 @@ import android.print.PrintManager; import android.service.fingerprint.IFingerprintService; import android.service.fingerprint.FingerprintManager; import android.telecom.TelecomManager; +import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.content.ClipboardManager; import android.util.AndroidRuntimeException; @@ -561,6 +562,11 @@ class ContextImpl extends Context { return new TelephonyManager(ctx.getOuterContext()); }}); + registerService(TELEPHONY_SUBSCRIPTION_SERVICE, new ServiceFetcher() { + public Object createService(ContextImpl ctx) { + return new SubscriptionManager(ctx.getOuterContext()); + }}); + registerService(TELECOM_SERVICE, new ServiceFetcher() { public Object createService(ContextImpl ctx) { return new TelecomManager(ctx.getOuterContext()); @@ -1863,6 +1869,21 @@ class ContextImpl extends Context { } } + /** @hide */ + @Override + public int checkPermission(String permission, int pid, int uid, IBinder callerToken) { + if (permission == null) { + throw new IllegalArgumentException("permission is null"); + } + + try { + return ActivityManagerNative.getDefault().checkPermissionWithToken( + permission, pid, uid, callerToken); + } catch (RemoteException e) { + return PackageManager.PERMISSION_DENIED; + } + } + @Override public int checkCallingPermission(String permission) { if (permission == null) { @@ -1951,7 +1972,19 @@ class ContextImpl extends Context { try { return ActivityManagerNative.getDefault().checkUriPermission( ContentProvider.getUriWithoutUserId(uri), pid, uid, modeFlags, - resolveUserId(uri)); + resolveUserId(uri), null); + } catch (RemoteException e) { + return PackageManager.PERMISSION_DENIED; + } + } + + /** @hide */ + @Override + public int checkUriPermission(Uri uri, int pid, int uid, int modeFlags, IBinder callerToken) { + try { + return ActivityManagerNative.getDefault().checkUriPermission( + ContentProvider.getUriWithoutUserId(uri), pid, uid, modeFlags, + resolveUserId(uri), callerToken); } catch (RemoteException e) { return PackageManager.PERMISSION_DENIED; } @@ -2386,7 +2419,7 @@ class ContextImpl extends Context { int res = -1; try { res = mount.mkdirs(getPackageName(), dir.getAbsolutePath()); - } catch (RemoteException e) { + } catch (Exception ignored) { } if (res != 0) { Log.w(TAG, "Failed to ensure directory: " + dir); diff --git a/core/java/android/app/Dialog.java b/core/java/android/app/Dialog.java index 12d451380c3de821eed55263d87dfe97fdf6d96b..067073a1f71cdcca6d28d79cfdf559c45b5f6f0a 100644 --- a/core/java/android/app/Dialog.java +++ b/core/java/android/app/Dialog.java @@ -910,21 +910,27 @@ public class Dialog implements DialogInterface, Window.Callback, * @see Activity#openOptionsMenu() */ public void openOptionsMenu() { - mWindow.openPanel(Window.FEATURE_OPTIONS_PANEL, null); + if (mWindow.hasFeature(Window.FEATURE_OPTIONS_PANEL)) { + mWindow.openPanel(Window.FEATURE_OPTIONS_PANEL, null); + } } - + /** * @see Activity#closeOptionsMenu() */ public void closeOptionsMenu() { - mWindow.closePanel(Window.FEATURE_OPTIONS_PANEL); + if (mWindow.hasFeature(Window.FEATURE_OPTIONS_PANEL)) { + mWindow.closePanel(Window.FEATURE_OPTIONS_PANEL); + } } /** * @see Activity#invalidateOptionsMenu() */ public void invalidateOptionsMenu() { - mWindow.invalidatePanelMenu(Window.FEATURE_OPTIONS_PANEL); + if (mWindow.hasFeature(Window.FEATURE_OPTIONS_PANEL)) { + mWindow.invalidatePanelMenu(Window.FEATURE_OPTIONS_PANEL); + } } /** diff --git a/core/java/android/app/EnterTransitionCoordinator.java b/core/java/android/app/EnterTransitionCoordinator.java index add67f2ec8a522ec392b348b3b1b6e21bdeb337d..c053c830adfc7c72567ec9509d55a79ab0f5a4e6 100644 --- a/core/java/android/app/EnterTransitionCoordinator.java +++ b/core/java/android/app/EnterTransitionCoordinator.java @@ -18,7 +18,6 @@ package android.app; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.ObjectAnimator; -import android.graphics.Matrix; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.ResultReceiver; @@ -57,7 +56,6 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { private boolean mIsViewsTransitionStarted; private boolean mIsViewsTransitionComplete; private boolean mIsSharedElementTransitionComplete; - private ArrayList mSharedElementParentMatrices; private Transition mEnterViewsTransition; public EnterTransitionCoordinator(Activity activity, ResultReceiver resultReceiver, @@ -122,7 +120,6 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { if (mIsReturning) { sendSharedElementDestination(); } else { - setSharedElementMatrices(); moveSharedElementsToOverlay(); } if (mSharedElementsBundle != null) { @@ -135,16 +132,17 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { return; } mAreViewsReady = true; + final ViewGroup decor = getDecor(); // Ensure the views have been laid out before capturing the views -- we need the epicenter. - if (sharedElements.isEmpty() || !sharedElements.valueAt(0).isLayoutRequested()) { + if (decor == null || (decor.isAttachedToWindow() && + (sharedElements.isEmpty() || !sharedElements.valueAt(0).isLayoutRequested()))) { viewsReady(sharedElements); } else { - final View sharedElement = sharedElements.valueAt(0); - sharedElement.getViewTreeObserver() + decor.getViewTreeObserver() .addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { - sharedElement.getViewTreeObserver().removeOnPreDrawListener(this); + decor.getViewTreeObserver().removeOnPreDrawListener(this); viewsReady(sharedElements); return true; } @@ -194,7 +192,6 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { } if (allReady) { Bundle state = captureSharedElementState(); - setSharedElementMatrices(); moveSharedElementsToOverlay(); mResultReceiver.send(MSG_SHARED_ELEMENT_DESTINATION, state); } else if (decorView != null) { @@ -205,7 +202,6 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { decorView.getViewTreeObserver().removeOnPreDrawListener(this); if (mResultReceiver != null) { Bundle state = captureSharedElementState(); - setSharedElementMatrices(); moveSharedElementsToOverlay(); mResultReceiver.send(MSG_SHARED_ELEMENT_DESTINATION, state); } @@ -322,6 +318,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { if (mListener != null) { mListener.onRejectSharedElements(rejectedSnapshots); } + removeNullViews(rejectedSnapshots); startRejectedAnimations(rejectedSnapshots); // Now start shared element transition @@ -370,6 +367,16 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { } } + private static void removeNullViews(ArrayList views) { + if (views != null) { + for (int i = views.size() - 1; i >= 0; i--) { + if (views.get(i) == null) { + views.remove(i); + } + } + } + } + private void onTakeSharedElements() { if (!mIsReadyForTransition || mSharedElementsBundle == null) { return; @@ -557,7 +564,12 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { clearState(); } - public void cancelEnter() { + /** + * Cancels the enter transition. + * @return True if the enter transition is still pending capturing the target state. If so, + * any transition started on the decor will do nothing. + */ + public boolean cancelEnter() { setGhostVisibility(View.INVISIBLE); mHasStopped = true; mIsCanceled = true; @@ -568,6 +580,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { } mActivity = null; clearState(); + return super.cancelPendingTransitions(); } private void makeOpaque() { @@ -634,30 +647,4 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator { }); } - private void setSharedElementMatrices() { - int numSharedElements = mSharedElements.size(); - if (numSharedElements > 0) { - mSharedElementParentMatrices = new ArrayList(numSharedElements); - } - for (int i = 0; i < numSharedElements; i++) { - View view = mSharedElements.get(i); - - // Find the location in the view's parent - ViewGroup parent = (ViewGroup) view.getParent(); - Matrix matrix = new Matrix(); - parent.transformMatrixToLocal(matrix); - - mSharedElementParentMatrices.add(matrix); - } - } - - @Override - protected void getSharedElementParentMatrix(View view, Matrix matrix) { - int index = mSharedElementParentMatrices == null ? -1 : mSharedElements.indexOf(view); - if (index < 0) { - super.getSharedElementParentMatrix(view, matrix); - } else { - matrix.set(mSharedElementParentMatrices.get(index)); - } - } } diff --git a/core/java/android/app/IActivityManager.java b/core/java/android/app/IActivityManager.java index de47147f46e315b9d31222c9112b80f27b223250..70c14c666fb54e5b70ce07638d172656f653c51e 100644 --- a/core/java/android/app/IActivityManager.java +++ b/core/java/android/app/IActivityManager.java @@ -140,6 +140,7 @@ public interface IActivityManager extends IInterface { public StackInfo getStackInfo(int stackId) throws RemoteException; public boolean isInHomeStack(int taskId) throws RemoteException; public void setFocusedStack(int stackId) throws RemoteException; + public void registerTaskStackListener(ITaskStackListener listener) throws RemoteException; public int getTaskForActivity(IBinder token, boolean onlyRoot) throws RemoteException; public ContentProviderHolder getContentProvider(IApplicationThread caller, String name, int userId, boolean stable) throws RemoteException; @@ -220,9 +221,11 @@ public interface IActivityManager extends IInterface { public int checkPermission(String permission, int pid, int uid) throws RemoteException; - - public int checkUriPermission(Uri uri, int pid, int uid, int mode, int userId) + public int checkPermissionWithToken(String permission, int pid, int uid, IBinder callerToken) throws RemoteException; + + public int checkUriPermission(Uri uri, int pid, int uid, int mode, int userId, + IBinder callerToken) throws RemoteException; public void grantUriPermission(IApplicationThread caller, String targetPkg, Uri uri, int mode, int userId) throws RemoteException; public void revokeUriPermission(IApplicationThread caller, Uri uri, int mode, int userId) @@ -374,7 +377,7 @@ public interface IActivityManager extends IInterface { public boolean isUserRunning(int userid, boolean orStopping) throws RemoteException; public int[] getRunningUserIds() throws RemoteException; - public boolean removeTask(int taskId, int flags) throws RemoteException; + public boolean removeTask(int taskId) throws RemoteException; public void registerProcessObserver(IProcessObserver observer) throws RemoteException; public void unregisterProcessObserver(IProcessObserver observer) throws RemoteException; @@ -457,6 +460,9 @@ public interface IActivityManager extends IInterface { throws RemoteException; public Bitmap getTaskDescriptionIcon(String filename) throws RemoteException; + public void startInPlaceAnimationOnFrontMostApplication(ActivityOptions opts) + throws RemoteException; + public boolean requestVisibleBehind(IBinder token, boolean visible) throws RemoteException; public boolean isBackgroundVisibleBehind(IBinder token) throws RemoteException; public void backgroundResourcesReleased(IBinder token) throws RemoteException; @@ -464,6 +470,7 @@ public interface IActivityManager extends IInterface { public void notifyLaunchTaskBehindComplete(IBinder token) throws RemoteException; public void notifyEnterAnimationComplete(IBinder token) throws RemoteException; + public void systemBackupRestored() throws RemoteException; public void notifyCleartextNetwork(int uid, byte[] firstPacket) throws RemoteException; /* @@ -784,6 +791,10 @@ public interface IActivityManager extends IInterface { int BOOT_ANIMATION_COMPLETE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+237; int GET_TASK_DESCRIPTION_ICON_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+238; int LAUNCH_ASSIST_INTENT_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+239; + int START_IN_PLACE_ANIMATION_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+240; + int CHECK_PERMISSION_WITH_TOKEN_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+241; + int REGISTER_TASK_STACK_LISTENER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+242; + int SYSTEM_BACKUP_RESTORED = IBinder.FIRST_CALL_TRANSACTION+243; // Start of M transactions int NOTIFY_CLEARTEXT_NETWORK_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+280; diff --git a/core/java/android/app/IApplicationThread.java b/core/java/android/app/IApplicationThread.java index 7ff207fd5bd3cdfd3b44da484956b2a45711b2cc..8bf8cd733b0b5b365746a810669333d45e505873 100644 --- a/core/java/android/app/IApplicationThread.java +++ b/core/java/android/app/IApplicationThread.java @@ -35,6 +35,7 @@ import android.os.IBinder; import android.os.IInterface; import android.service.voice.IVoiceInteractionSession; import com.android.internal.app.IVoiceInteractor; +import com.android.internal.content.ReferrerIntent; import java.io.FileDescriptor; import java.util.List; @@ -59,14 +60,14 @@ public interface IApplicationThread extends IInterface { void scheduleSendResult(IBinder token, List results) throws RemoteException; void scheduleLaunchActivity(Intent intent, IBinder token, int ident, ActivityInfo info, Configuration curConfig, CompatibilityInfo compatInfo, - IVoiceInteractor voiceInteractor, int procState, Bundle state, + String referrer, IVoiceInteractor voiceInteractor, int procState, Bundle state, PersistableBundle persistentState, List pendingResults, - List pendingNewIntents, boolean notResumed, boolean isForward, + List pendingNewIntents, boolean notResumed, boolean isForward, ProfilerInfo profilerInfo) throws RemoteException; void scheduleRelaunchActivity(IBinder token, List pendingResults, - List pendingNewIntents, int configChanges, + List pendingNewIntents, int configChanges, boolean notResumed, Configuration config) throws RemoteException; - void scheduleNewIntent(List intent, IBinder token) throws RemoteException; + void scheduleNewIntent(List intent, IBinder token) throws RemoteException; void scheduleDestroyActivity(IBinder token, boolean finished, int configChanges) throws RemoteException; void scheduleReceiver(Intent intent, ActivityInfo info, CompatibilityInfo compatInfo, diff --git a/core/java/android/app/INotificationManager.aidl b/core/java/android/app/INotificationManager.aidl index bdcff381b15468be8de06f3c2d45b1c35ff41a14..88b9080a2dc8bbf6abeabc72326c5b5f8fddeba0 100644 --- a/core/java/android/app/INotificationManager.aidl +++ b/core/java/android/app/INotificationManager.aidl @@ -71,6 +71,7 @@ interface INotificationManager ComponentName getEffectsSuppressor(); boolean matchesCallFilter(in Bundle extras); + boolean isSystemConditionProviderEnabled(String path); ZenModeConfig getZenModeConfig(); boolean setZenModeConfig(in ZenModeConfig config); diff --git a/core/java/android/app/ITaskStackListener.aidl b/core/java/android/app/ITaskStackListener.aidl new file mode 100644 index 0000000000000000000000000000000000000000..4b0935ca23cc83feec5736fb95c67dfabb601e3a --- /dev/null +++ b/core/java/android/app/ITaskStackListener.aidl @@ -0,0 +1,22 @@ +/** + * Copyright (c) 2014, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.app; + +/** @hide */ +oneway interface ITaskStackListener { + void onTaskStackChanged(); +} diff --git a/core/java/android/app/Instrumentation.java b/core/java/android/app/Instrumentation.java index 60a013e47c94fa5f7a96210a7630c9963d2be176..ad2b61f2446bb7ce689e8306f8d6fc87dfb64127 100644 --- a/core/java/android/app/Instrumentation.java +++ b/core/java/android/app/Instrumentation.java @@ -45,6 +45,7 @@ import android.view.KeyEvent; import android.view.MotionEvent; import android.view.ViewConfiguration; import android.view.Window; +import com.android.internal.content.ReferrerIntent; import java.io.File; import java.util.ArrayList; @@ -1042,7 +1043,7 @@ public class Instrumentation { activity.attach(context, aThread, this, token, 0, application, intent, info, title, parent, id, (Activity.NonConfigurationInstances)lastNonConfigurationInstance, - new Configuration(), null); + new Configuration(), null, null); return activity; } @@ -1210,6 +1211,21 @@ public class Instrumentation { activity.onNewIntent(intent); } + /** + * @hide + */ + public void callActivityOnNewIntent(Activity activity, ReferrerIntent intent) { + final String oldReferrer = activity.mReferrer; + try { + if (intent != null) { + activity.mReferrer = intent.mReferrer; + } + callActivityOnNewIntent(activity, intent != null ? new Intent(intent) : null); + } finally { + activity.mReferrer = oldReferrer; + } + } + /** * Perform calling of an activity's {@link Activity#onStart} * method. The default implementation simply calls through to that method. diff --git a/core/java/android/app/KeyguardManager.java b/core/java/android/app/KeyguardManager.java index cc9aed8ccdbce11047c3883ec683dc2e2483fb4c..ddd21e62e2c56c87bf23c00a6f73f357a1660fa2 100644 --- a/core/java/android/app/KeyguardManager.java +++ b/core/java/android/app/KeyguardManager.java @@ -16,10 +16,14 @@ package android.app; +import android.app.trust.ITrustManager; +import android.content.Context; import android.content.Intent; import android.os.Binder; import android.os.RemoteException; import android.os.IBinder; +import android.os.ServiceManager; +import android.os.UserHandle; import android.view.IWindowManager; import android.view.IOnKeyguardExitResult; import android.view.WindowManagerGlobal; @@ -33,6 +37,7 @@ import android.view.WindowManagerGlobal; */ public class KeyguardManager { private IWindowManager mWM; + private ITrustManager mTrustManager; /** * Intent used to prompt user for device credentials. @@ -151,6 +156,8 @@ public class KeyguardManager { KeyguardManager() { mWM = WindowManagerGlobal.getWindowManagerService(); + mTrustManager = ITrustManager.Stub.asInterface( + ServiceManager.getService(Context.TRUST_SERVICE)); } /** @@ -217,6 +224,34 @@ public class KeyguardManager { } } + /** + * Returns whether the device is currently locked and requires a PIN, pattern or + * password to unlock. + * + * @return true if unlocking the device currently requires a PIN, pattern or + * password. + */ + public boolean isDeviceLocked() { + return isDeviceLocked(UserHandle.getCallingUserId()); + } + + /** + * Returns whether the device is currently locked and requires a PIN, pattern or + * password to unlock. + * + * @param userId the user for which the locked state should be reported. + * @return true if unlocking the device currently requires a PIN, pattern or + * password. + * @hide + */ + public boolean isDeviceLocked(int userId) { + try { + return mTrustManager.isDeviceLocked(userId); + } catch (RemoteException e) { + return false; + } + } + /** * @deprecated Use {@link android.view.WindowManager.LayoutParams#FLAG_DISMISS_KEYGUARD} * and/or {@link android.view.WindowManager.LayoutParams#FLAG_SHOW_WHEN_LOCKED} diff --git a/core/java/android/app/LoadedApk.java b/core/java/android/app/LoadedApk.java index 52db295ba7f9dbc961ac83b87e92626ffcf694a3..83c6c2bcbe8ae36862df29fdf8a74f9ee5fa13d9 100644 --- a/core/java/android/app/LoadedApk.java +++ b/core/java/android/app/LoadedApk.java @@ -638,55 +638,60 @@ public final class LoadedApk { public void removeContextRegistrations(Context context, String who, String what) { final boolean reportRegistrationLeaks = StrictMode.vmRegistrationLeaksEnabled(); - ArrayMap rmap = - mReceivers.remove(context); - if (rmap != null) { - for (int i=0; i rmap = + mReceivers.remove(context); + if (rmap != null) { + for (int i = 0; i < rmap.size(); i++) { + LoadedApk.ReceiverDispatcher rd = rmap.valueAt(i); + IntentReceiverLeaked leak = new IntentReceiverLeaked( + what + " " + who + " has leaked IntentReceiver " + + rd.getIntentReceiver() + " that was " + + "originally registered here. Are you missing a " + + "call to unregisterReceiver()?"); + leak.setStackTrace(rd.getLocation().getStackTrace()); + Slog.e(ActivityThread.TAG, leak.getMessage(), leak); + if (reportRegistrationLeaks) { + StrictMode.onIntentReceiverLeaked(leak); + } + try { + ActivityManagerNative.getDefault().unregisterReceiver( + rd.getIIntentReceiver()); + } catch (RemoteException e) { + // system crashed, nothing we can do + } } } + mUnregisteredReceivers.remove(context); } - mUnregisteredReceivers.remove(context); - //Slog.i(TAG, "Receiver registrations: " + mReceivers); - ArrayMap smap = - mServices.remove(context); - if (smap != null) { - for (int i=0; i smap = + mServices.remove(context); + if (smap != null) { + for (int i = 0; i < smap.size(); i++) { + LoadedApk.ServiceDispatcher sd = smap.valueAt(i); + ServiceConnectionLeaked leak = new ServiceConnectionLeaked( + what + " " + who + " has leaked ServiceConnection " + + sd.getServiceConnection() + " that was originally bound here"); + leak.setStackTrace(sd.getLocation().getStackTrace()); + Slog.e(ActivityThread.TAG, leak.getMessage(), leak); + if (reportRegistrationLeaks) { + StrictMode.onServiceConnectionLeaked(leak); + } + try { + ActivityManagerNative.getDefault().unbindService( + sd.getIServiceConnection()); + } catch (RemoteException e) { + // system crashed, nothing we can do + } + sd.doForget(); } - sd.doForget(); } + mUnboundServices.remove(context); + //Slog.i(TAG, "Service registrations: " + mServices); } - mUnboundServices.remove(context); - //Slog.i(TAG, "Service registrations: " + mServices); } public IIntentReceiver getReceiverDispatcher(BroadcastReceiver r, diff --git a/core/java/android/app/LocalActivityManager.java b/core/java/android/app/LocalActivityManager.java index b654a6aae8afd1e45e3978eb3c01b0b659481bb8..873e3373d80dcdcbd86673a9b56db5b60ef1bba0 100644 --- a/core/java/android/app/LocalActivityManager.java +++ b/core/java/android/app/LocalActivityManager.java @@ -22,6 +22,7 @@ import android.os.Binder; import android.os.Bundle; import android.util.Log; import android.view.Window; +import com.android.internal.content.ReferrerIntent; import java.util.ArrayList; import java.util.HashMap; @@ -310,8 +311,8 @@ public class LocalActivityManager { if (aInfo.launchMode != ActivityInfo.LAUNCH_MULTIPLE || (intent.getFlags()&Intent.FLAG_ACTIVITY_SINGLE_TOP) != 0) { // The activity wants onNewIntent() called. - ArrayList intents = new ArrayList(1); - intents.add(intent); + ArrayList intents = new ArrayList<>(1); + intents.add(new ReferrerIntent(intent, mParent.getPackageName())); if (localLOGV) Log.v(TAG, r.id + ": new intent"); mActivityThread.performNewIntents(r, intents); r.intent = intent; diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java index a3635038e60b79df0b7c98081a4818ae972657a3..860b9cc25d22cf4f8446493f935d5f263f43cd9f 100644 --- a/core/java/android/app/Notification.java +++ b/core/java/android/app/Notification.java @@ -23,6 +23,7 @@ import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager.NameNotFoundException; +import android.content.res.ColorStateList; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.PorterDuff; @@ -1112,7 +1113,11 @@ public class Notification implements Parcelable /** Notification action extra which contains wearable extensions */ private static final String EXTRA_WEARABLE_EXTENSIONS = "android.wearable.EXTENSIONS"; + // Keys within EXTRA_WEARABLE_EXTENSIONS for wearable options. private static final String KEY_FLAGS = "flags"; + private static final String KEY_IN_PROGRESS_LABEL = "inProgressLabel"; + private static final String KEY_CONFIRM_LABEL = "confirmLabel"; + private static final String KEY_CANCEL_LABEL = "cancelLabel"; // Flags bitwise-ored to mFlags private static final int FLAG_AVAILABLE_OFFLINE = 0x1; @@ -1122,6 +1127,10 @@ public class Notification implements Parcelable private int mFlags = DEFAULT_FLAGS; + private CharSequence mInProgressLabel; + private CharSequence mConfirmLabel; + private CharSequence mCancelLabel; + /** * Create a {@link android.app.Notification.Action.WearableExtender} with default * options. @@ -1138,6 +1147,9 @@ public class Notification implements Parcelable Bundle wearableBundle = action.getExtras().getBundle(EXTRA_WEARABLE_EXTENSIONS); if (wearableBundle != null) { mFlags = wearableBundle.getInt(KEY_FLAGS, DEFAULT_FLAGS); + mInProgressLabel = wearableBundle.getCharSequence(KEY_IN_PROGRESS_LABEL); + mConfirmLabel = wearableBundle.getCharSequence(KEY_CONFIRM_LABEL); + mCancelLabel = wearableBundle.getCharSequence(KEY_CANCEL_LABEL); } } @@ -1153,6 +1165,15 @@ public class Notification implements Parcelable if (mFlags != DEFAULT_FLAGS) { wearableBundle.putInt(KEY_FLAGS, mFlags); } + if (mInProgressLabel != null) { + wearableBundle.putCharSequence(KEY_IN_PROGRESS_LABEL, mInProgressLabel); + } + if (mConfirmLabel != null) { + wearableBundle.putCharSequence(KEY_CONFIRM_LABEL, mConfirmLabel); + } + if (mCancelLabel != null) { + wearableBundle.putCharSequence(KEY_CANCEL_LABEL, mCancelLabel); + } builder.getExtras().putBundle(EXTRA_WEARABLE_EXTENSIONS, wearableBundle); return builder; @@ -1162,6 +1183,9 @@ public class Notification implements Parcelable public WearableExtender clone() { WearableExtender that = new WearableExtender(); that.mFlags = this.mFlags; + that.mInProgressLabel = this.mInProgressLabel; + that.mConfirmLabel = this.mConfirmLabel; + that.mCancelLabel = this.mCancelLabel; return that; } @@ -1193,6 +1217,72 @@ public class Notification implements Parcelable mFlags &= ~mask; } } + + /** + * Set a label to display while the wearable is preparing to automatically execute the + * action. This is usually a 'ing' verb ending in ellipsis like "Sending..." + * + * @param label the label to display while the action is being prepared to execute + * @return this object for method chaining + */ + public WearableExtender setInProgressLabel(CharSequence label) { + mInProgressLabel = label; + return this; + } + + /** + * Get the label to display while the wearable is preparing to automatically execute + * the action. This is usually a 'ing' verb ending in ellipsis like "Sending..." + * + * @return the label to display while the action is being prepared to execute + */ + public CharSequence getInProgressLabel() { + return mInProgressLabel; + } + + /** + * Set a label to display to confirm that the action should be executed. + * This is usually an imperative verb like "Send". + * + * @param label the label to confirm the action should be executed + * @return this object for method chaining + */ + public WearableExtender setConfirmLabel(CharSequence label) { + mConfirmLabel = label; + return this; + } + + /** + * Get the label to display to confirm that the action should be executed. + * This is usually an imperative verb like "Send". + * + * @return the label to confirm the action should be executed + */ + public CharSequence getConfirmLabel() { + return mConfirmLabel; + } + + /** + * Set a label to display to cancel the action. + * This is usually an imperative verb, like "Cancel". + * + * @param label the label to display to cancel the action + * @return this object for method chaining + */ + public WearableExtender setCancelLabel(CharSequence label) { + mCancelLabel = label; + return this; + } + + /** + * Get the label to display to cancel the action. + * This is usually an imperative verb like "Cancel". + * + * @return the label to display to cancel the action + */ + public CharSequence getCancelLabel() { + return mCancelLabel; + } } } @@ -2774,6 +2864,14 @@ public class Notification implements Parcelable contentView.setViewVisibility(R.id.progress, View.VISIBLE); contentView.setProgressBar( R.id.progress, mProgressMax, mProgress, mProgressIndeterminate); + contentView.setProgressBackgroundTintList( + R.id.progress, ColorStateList.valueOf(mContext.getResources().getColor( + R.color.notification_progress_background_color))); + if (mColor != COLOR_DEFAULT) { + ColorStateList colorStateList = ColorStateList.valueOf(mColor); + contentView.setProgressTintList(R.id.progress, colorStateList); + contentView.setProgressIndeterminateTintList(R.id.progress, colorStateList); + } showLine2 = true; } else { contentView.setViewVisibility(R.id.progress, View.GONE); @@ -2958,6 +3056,11 @@ public class Notification implements Parcelable * Apply any necessary background to smallIcons being used in the largeIcon spot. */ private void processSmallIconAsLarge(int largeIconId, RemoteViews contentView) { + if (!isLegacy()) { + contentView.setDrawableParameters(R.id.icon, false, -1, + 0xFFFFFFFF, + PorterDuff.Mode.SRC_ATOP, -1); + } if (!isLegacy() || mColorUtil.isGrayscaleIcon(mContext, largeIconId)) { applyLargeIconBackground(contentView); } @@ -3005,11 +3108,12 @@ public class Notification implements Parcelable */ private void processSmallRightIcon(int smallIconDrawableId, RemoteViews contentView) { - if (!isLegacy() || mColorUtil.isGrayscaleIcon(mContext, smallIconDrawableId)) { + if (!isLegacy()) { contentView.setDrawableParameters(R.id.right_icon, false, -1, 0xFFFFFFFF, PorterDuff.Mode.SRC_ATOP, -1); - + } + if (!isLegacy() || mColorUtil.isGrayscaleIcon(mContext, smallIconDrawableId)) { contentView.setInt(R.id.right_icon, "setBackgroundResource", R.drawable.notification_icon_legacy_bg); @@ -3674,8 +3778,24 @@ public class Notification implements Parcelable } private RemoteViews makeBigContentView() { + + // Replace mLargeIcon with mBigLargeIcon if mBigLargeIconSet + // This covers the following cases: + // 1. mBigLargeIconSet -> mBigLargeIcon (null or non-null) applies, overrides + // mLargeIcon + // 2. !mBigLargeIconSet -> mLargeIcon applies + Bitmap oldLargeIcon = null; + if (mBigLargeIconSet) { + oldLargeIcon = mBuilder.mLargeIcon; + mBuilder.mLargeIcon = mBigLargeIcon; + } + RemoteViews contentView = getStandardView(mBuilder.getBigPictureLayoutResource()); + if (mBigLargeIconSet) { + mBuilder.mLargeIcon = oldLargeIcon; + } + contentView.setImageViewBitmap(R.id.big_picture, mPicture); applyTopPadding(contentView); @@ -3706,6 +3826,7 @@ public class Notification implements Parcelable super.restoreFromExtras(extras); if (extras.containsKey(EXTRA_LARGE_ICON_BIG)) { + mBigLargeIconSet = true; mBigLargeIcon = extras.getParcelable(EXTRA_LARGE_ICON_BIG); } mPicture = extras.getParcelable(EXTRA_PICTURE); @@ -4001,7 +4122,7 @@ public class Notification implements Parcelable * * Unlike the other styles provided here, MediaStyle can also modify the standard-size * {@link Notification#contentView}; by providing action indices to - * {@link #setShowActionsInCompactView(int...)} you can promote up to 2 actions to be displayed + * {@link #setShowActionsInCompactView(int...)} you can promote up to 3 actions to be displayed * in the standard view alongside the usual content. * * Notifications created with MediaStyle will have their category set to @@ -4018,9 +4139,9 @@ public class Notification implements Parcelable *

          * Notification noti = new Notification.Builder()
          *     .setSmallIcon(R.drawable.ic_stat_player)
    -     *     .setContentTitle("Track title")     // these three lines are optional
    -     *     .setContentText("Artist - Album")   // if you use
    -     *     .setLargeIcon(albumArtBitmap))      // setMediaSession(token)
    +     *     .setContentTitle("Track title")
    +     *     .setContentText("Artist - Album")
    +     *     .setLargeIcon(albumArtBitmap))
          *     .setStyle(new Notification.MediaStyle()
          *         .setMediaSession(mySession))
          *     .build();
    @@ -4332,10 +4453,23 @@ public class Notification implements Parcelable
              */
             public static final int SIZE_FULL_SCREEN = 5;
     
    +        /**
    +         * Sentinel value for use with {@link #setHintScreenTimeout} to keep the screen on for a
    +         * short amount of time when this notification is displayed on the screen. This
    +         * is the default value.
    +         */
    +        public static final int SCREEN_TIMEOUT_SHORT = 0;
    +
    +        /**
    +         * Sentinel value for use with {@link #setHintScreenTimeout} to keep the screen on
    +         * for a longer amount of time when this notification is displayed on the screen.
    +         */
    +        public static final int SCREEN_TIMEOUT_LONG = -1;
    +
             /** Notification extra which contains wearable extensions */
             private static final String EXTRA_WEARABLE_EXTENSIONS = "android.wearable.EXTENSIONS";
     
    -        // Keys within EXTRA_WEARABLE_OPTIONS for wearable options.
    +        // Keys within EXTRA_WEARABLE_EXTENSIONS for wearable options.
             private static final String KEY_ACTIONS = "actions";
             private static final String KEY_FLAGS = "flags";
             private static final String KEY_DISPLAY_INTENT = "displayIntent";
    @@ -4347,12 +4481,14 @@ public class Notification implements Parcelable
             private static final String KEY_CUSTOM_SIZE_PRESET = "customSizePreset";
             private static final String KEY_CUSTOM_CONTENT_HEIGHT = "customContentHeight";
             private static final String KEY_GRAVITY = "gravity";
    +        private static final String KEY_HINT_SCREEN_TIMEOUT = "hintScreenTimeout";
     
             // Flags bitwise-ored to mFlags
             private static final int FLAG_CONTENT_INTENT_AVAILABLE_OFFLINE = 0x1;
             private static final int FLAG_HINT_HIDE_ICON = 1 << 1;
             private static final int FLAG_HINT_SHOW_BACKGROUND_ONLY = 1 << 2;
             private static final int FLAG_START_SCROLL_BOTTOM = 1 << 3;
    +        private static final int FLAG_HINT_AVOID_BACKGROUND_CLIPPING = 1 << 4;
     
             // Default value for flags integer
             private static final int DEFAULT_FLAGS = FLAG_CONTENT_INTENT_AVAILABLE_OFFLINE;
    @@ -4371,6 +4507,7 @@ public class Notification implements Parcelable
             private int mCustomSizePreset = SIZE_DEFAULT;
             private int mCustomContentHeight;
             private int mGravity = DEFAULT_GRAVITY;
    +        private int mHintScreenTimeout;
     
             /**
              * Create a {@link android.app.Notification.WearableExtender} with default
    @@ -4406,6 +4543,7 @@ public class Notification implements Parcelable
                             SIZE_DEFAULT);
                     mCustomContentHeight = wearableBundle.getInt(KEY_CUSTOM_CONTENT_HEIGHT);
                     mGravity = wearableBundle.getInt(KEY_GRAVITY, DEFAULT_GRAVITY);
    +                mHintScreenTimeout = wearableBundle.getInt(KEY_HINT_SCREEN_TIMEOUT);
                 }
             }
     
    @@ -4453,6 +4591,9 @@ public class Notification implements Parcelable
                 if (mGravity != DEFAULT_GRAVITY) {
                     wearableBundle.putInt(KEY_GRAVITY, mGravity);
                 }
    +            if (mHintScreenTimeout != 0) {
    +                wearableBundle.putInt(KEY_HINT_SCREEN_TIMEOUT, mHintScreenTimeout);
    +            }
     
                 builder.getExtras().putBundle(EXTRA_WEARABLE_EXTENSIONS, wearableBundle);
                 return builder;
    @@ -4472,6 +4613,7 @@ public class Notification implements Parcelable
                 that.mCustomSizePreset = this.mCustomSizePreset;
                 that.mCustomContentHeight = this.mCustomContentHeight;
                 that.mGravity = this.mGravity;
    +            that.mHintScreenTimeout = this.mHintScreenTimeout;
                 return that;
             }
     
    @@ -4867,6 +5009,52 @@ public class Notification implements Parcelable
                 return (mFlags & FLAG_HINT_SHOW_BACKGROUND_ONLY) != 0;
             }
     
    +        /**
    +         * Set a hint that this notification's background should not be clipped if possible,
    +         * and should instead be resized to fully display on the screen, retaining the aspect
    +         * ratio of the image. This can be useful for images like barcodes or qr codes.
    +         * @param hintAvoidBackgroundClipping {@code true} to avoid clipping if possible.
    +         * @return this object for method chaining
    +         */
    +        public WearableExtender setHintAvoidBackgroundClipping(
    +                boolean hintAvoidBackgroundClipping) {
    +            setFlag(FLAG_HINT_AVOID_BACKGROUND_CLIPPING, hintAvoidBackgroundClipping);
    +            return this;
    +        }
    +
    +        /**
    +         * Get a hint that this notification's background should not be clipped if possible,
    +         * and should instead be resized to fully display on the screen, retaining the aspect
    +         * ratio of the image. This can be useful for images like barcodes or qr codes.
    +         * @return {@code true} if it's ok if the background is clipped on the screen, false
    +         * otherwise. The default value is {@code false} if this was never set.
    +         */
    +        public boolean getHintAvoidBackgroundClipping() {
    +            return (mFlags & FLAG_HINT_AVOID_BACKGROUND_CLIPPING) != 0;
    +        }
    +
    +        /**
    +         * Set a hint that the screen should remain on for at least this duration when
    +         * this notification is displayed on the screen.
    +         * @param timeout The requested screen timeout in milliseconds. Can also be either
    +         *     {@link #SCREEN_TIMEOUT_SHORT} or {@link #SCREEN_TIMEOUT_LONG}.
    +         * @return this object for method chaining
    +         */
    +        public WearableExtender setHintScreenTimeout(int timeout) {
    +            mHintScreenTimeout = timeout;
    +            return this;
    +        }
    +
    +        /**
    +         * Get the duration, in milliseconds, that the screen should remain on for
    +         * when this notification is displayed.
    +         * @return the duration in milliseconds if > 0, or either one of the sentinel values
    +         *     {@link #SCREEN_TIMEOUT_SHORT} or {@link #SCREEN_TIMEOUT_LONG}.
    +         */
    +        public int getHintScreenTimeout() {
    +            return mHintScreenTimeout;
    +        }
    +
             private void setFlag(int mask, boolean value) {
                 if (value) {
                     mFlags |= mask;
    diff --git a/core/java/android/app/NotificationManager.java b/core/java/android/app/NotificationManager.java
    index 7dc1ad644e77e0de4f21615913311dba7d1be257..cf54107848f855009cd49a2081c91f4c256c2f83 100644
    --- a/core/java/android/app/NotificationManager.java
    +++ b/core/java/android/app/NotificationManager.java
    @@ -264,5 +264,17 @@ public class NotificationManager
             }
         }
     
    +    /**
    +     * @hide
    +     */
    +    public boolean isSystemConditionProviderEnabled(String path) {
    +        INotificationManager service = getService();
    +        try {
    +            return service.isSystemConditionProviderEnabled(path);
    +        } catch (RemoteException e) {
    +            return false;
    +        }
    +    }
    +
         private Context mContext;
     }
    diff --git a/core/java/android/app/SharedElementCallback.java b/core/java/android/app/SharedElementCallback.java
    index 060bbe61e4073b4494cbb47136083a7668b0670f..6ac24013672c3b88b760211dbbabd9e137bb70e6 100644
    --- a/core/java/android/app/SharedElementCallback.java
    +++ b/core/java/android/app/SharedElementCallback.java
    @@ -18,13 +18,16 @@ package android.app;
     import android.content.Context;
     import android.content.res.Resources;
     import android.graphics.Bitmap;
    -import android.graphics.Canvas;
     import android.graphics.Matrix;
     import android.graphics.RectF;
     import android.graphics.drawable.BitmapDrawable;
    +import android.graphics.drawable.Drawable;
    +import android.os.Bundle;
     import android.os.Parcelable;
     import android.transition.TransitionUtils;
     import android.view.View;
    +import android.widget.ImageView;
    +import android.widget.ImageView.ScaleType;
     
     import java.util.List;
     import java.util.Map;
    @@ -40,6 +43,9 @@ import java.util.Map;
      */
     public abstract class SharedElementCallback {
         private Matrix mTempMatrix;
    +    private static final String BUNDLE_SNAPSHOT_BITMAP = "sharedElement:snapshot:bitmap";
    +    private static final String BUNDLE_SNAPSHOT_IMAGE_SCALETYPE = "sharedElement:snapshot:imageScaleType";
    +    private static final String BUNDLE_SNAPSHOT_IMAGE_MATRIX = "sharedElement:snapshot:imageMatrix";
     
         static final SharedElementCallback NULL_CALLBACK = new SharedElementCallback() {
         };
    @@ -142,6 +148,27 @@ public abstract class SharedElementCallback {
          */
         public Parcelable onCaptureSharedElementSnapshot(View sharedElement, Matrix viewToGlobalMatrix,
                 RectF screenBounds) {
    +        if (sharedElement instanceof ImageView) {
    +            ImageView imageView = ((ImageView) sharedElement);
    +            Drawable d = imageView.getDrawable();
    +            Drawable bg = imageView.getBackground();
    +            if (d != null && (bg == null || bg.getAlpha() == 0)) {
    +                Bitmap bitmap = TransitionUtils.createDrawableBitmap(d);
    +                if (bitmap != null) {
    +                    Bundle bundle = new Bundle();
    +                    bundle.putParcelable(BUNDLE_SNAPSHOT_BITMAP, bitmap);
    +                    bundle.putString(BUNDLE_SNAPSHOT_IMAGE_SCALETYPE,
    +                            imageView.getScaleType().toString());
    +                    if (imageView.getScaleType() == ScaleType.MATRIX) {
    +                        Matrix matrix = imageView.getImageMatrix();
    +                        float[] values = new float[9];
    +                        matrix.getValues(values);
    +                        bundle.putFloatArray(BUNDLE_SNAPSHOT_IMAGE_MATRIX, values);
    +                    }
    +                    return bundle;
    +                }
    +            }
    +        }
             if (mTempMatrix == null) {
                 mTempMatrix = new Matrix(viewToGlobalMatrix);
             } else {
    @@ -169,7 +196,24 @@ public abstract class SharedElementCallback {
          */
         public View onCreateSnapshotView(Context context, Parcelable snapshot) {
             View view = null;
    -        if (snapshot instanceof Bitmap) {
    +        if (snapshot instanceof Bundle) {
    +            Bundle bundle = (Bundle) snapshot;
    +            Bitmap bitmap = (Bitmap) bundle.getParcelable(BUNDLE_SNAPSHOT_BITMAP);
    +            if (bitmap == null) {
    +                return null;
    +            }
    +            ImageView imageView = new ImageView(context);
    +            view = imageView;
    +            imageView.setImageBitmap(bitmap);
    +            imageView.setScaleType(
    +                    ScaleType.valueOf(bundle.getString(BUNDLE_SNAPSHOT_IMAGE_SCALETYPE)));
    +            if (imageView.getScaleType() == ScaleType.MATRIX) {
    +                float[] values = bundle.getFloatArray(BUNDLE_SNAPSHOT_IMAGE_MATRIX);
    +                Matrix matrix = new Matrix();
    +                matrix.setValues(values);
    +                imageView.setImageMatrix(matrix);
    +            }
    +        } else if (snapshot instanceof Bitmap) {
                 Bitmap bitmap = (Bitmap) snapshot;
                 view = new View(context);
                 Resources resources = context.getResources();
    diff --git a/core/java/android/app/TimePickerDialog.java b/core/java/android/app/TimePickerDialog.java
    index 64543673dc8a0148460993af0d26379de920caf7..3a2c21b13dfd04389249ff1b904b786cb0c03617 100644
    --- a/core/java/android/app/TimePickerDialog.java
    +++ b/core/java/android/app/TimePickerDialog.java
    @@ -134,6 +134,9 @@ public class TimePickerDialog extends AlertDialog implements OnClickListener,
                                 mTimePicker.getCurrentMinute());
                     }
                     break;
    +            case BUTTON_NEGATIVE:
    +                cancel();
    +                break;
             }
         }
     
    diff --git a/core/java/android/app/UiAutomation.java b/core/java/android/app/UiAutomation.java
    index 4aec9e00e56f6e4f1ab5495cd1e94ca95dd44ce1..b0dd70f34fd22d7db578f3c1638b0cab67f4c017 100644
    --- a/core/java/android/app/UiAutomation.java
    +++ b/core/java/android/app/UiAutomation.java
    @@ -25,6 +25,7 @@ import android.graphics.Bitmap;
     import android.graphics.Canvas;
     import android.graphics.Point;
     import android.hardware.display.DisplayManagerGlobal;
    +import android.os.IBinder;
     import android.os.Looper;
     import android.os.ParcelFileDescriptor;
     import android.os.RemoteException;
    @@ -919,7 +920,7 @@ public final class UiAutomation {
             public IAccessibilityServiceClientImpl(Looper looper) {
                 super(null, looper, new Callbacks() {
                     @Override
    -                public void onSetConnectionId(int connectionId) {
    +                public void init(int connectionId, IBinder windowToken) {
                         synchronized (mLock) {
                             mConnectionId = connectionId;
                             mLock.notifyAll();
    diff --git a/core/java/android/app/WallpaperManager.java b/core/java/android/app/WallpaperManager.java
    index 8bfe6d3859ae05502e44ca67ea9e45feb4de13d3..90d84ee746648860d113fe10498a2d745034c483 100644
    --- a/core/java/android/app/WallpaperManager.java
    +++ b/core/java/android/app/WallpaperManager.java
    @@ -993,6 +993,47 @@ public class WallpaperManager {
             }
         }
     
    +    /**
    +     * Clear the wallpaper.
    +     *
    +     * @hide
    +     */
    +    @SystemApi
    +    public void clearWallpaper() {
    +        if (sGlobals.mService == null) {
    +            Log.w(TAG, "WallpaperService not running");
    +            return;
    +        }
    +        try {
    +            sGlobals.mService.clearWallpaper();
    +        } catch (RemoteException e) {
    +            // Ignore
    +        }
    +    }
    +
    +    /**
    +     * Set the live wallpaper.
    +     *
    +     * This can only be called by packages with android.permission.SET_WALLPAPER_COMPONENT
    +     * permission.
    +     *
    +     * @hide
    +     */
    +    @SystemApi
    +    public boolean setWallpaperComponent(ComponentName name) {
    +        if (sGlobals.mService == null) {
    +            Log.w(TAG, "WallpaperService not running");
    +            return false;
    +        }
    +        try {
    +            sGlobals.mService.setWallpaperComponent(name);
    +            return true;
    +        } catch (RemoteException e) {
    +            // Ignore
    +        }
    +        return false;
    +    }
    +
         /**
          * Set the position of the current wallpaper within any larger space, when
          * that wallpaper is visible behind the given window.  The X and Y offsets
    diff --git a/core/java/android/app/admin/DeviceAdminReceiver.java b/core/java/android/app/admin/DeviceAdminReceiver.java
    index e9cce51ec2a468b66f982b4ecc50f2a703b5d4cb..381d851478077ca0f17f42493b3738b44543d198 100644
    --- a/core/java/android/app/admin/DeviceAdminReceiver.java
    +++ b/core/java/android/app/admin/DeviceAdminReceiver.java
    @@ -170,10 +170,10 @@ public class DeviceAdminReceiver extends BroadcastReceiver {
          * lock task mode from an authorized package.  The extra {@link #EXTRA_LOCK_TASK_PACKAGE}
          * will describe the authorized package using lock task mode.
          *
    -     * @see DevicePolicyManager#isLockTaskPermitted(String)
    -     *
          * 

    The calling device admin must be the device owner or profile * owner to receive this broadcast. + * + * @see DevicePolicyManager#isLockTaskPermitted(String) */ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) public static final String ACTION_LOCK_TASK_ENTERING @@ -183,20 +183,19 @@ public class DeviceAdminReceiver extends BroadcastReceiver { * Action sent to a device administrator to notify that the device is exiting * lock task mode from an authorized package. * - * @see DevicePolicyManager#isLockTaskPermitted(String) - * *

    The calling device admin must be the device owner or profile * owner to receive this broadcast. + * + * @see DevicePolicyManager#isLockTaskPermitted(String) */ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) public static final String ACTION_LOCK_TASK_EXITING = "android.app.action.LOCK_TASK_EXITING"; /** - * A boolean describing whether the device is currently entering or exiting - * lock task mode. + * A string containing the name of the package entering lock task mode. * - * @see #ACTION_LOCK_TASK_CHANGED + * @see #ACTION_LOCK_TASK_ENTERING */ public static final String EXTRA_LOCK_TASK_PACKAGE = "android.app.extra.LOCK_TASK_PACKAGE"; diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java index a30ae573066d81dac77c126c97b3f5dc31bddb5e..cf06cb75bcb23d6bb1710261d9d79ba45e0e33d5 100644 --- a/core/java/android/app/admin/DevicePolicyManager.java +++ b/core/java/android/app/admin/DevicePolicyManager.java @@ -31,6 +31,7 @@ import android.content.pm.ResolveInfo; import android.net.ProxyInfo; import android.os.Bundle; import android.os.Handler; +import android.os.PersistableBundle; import android.os.Process; import android.os.RemoteCallback; import android.os.RemoteException; @@ -40,6 +41,7 @@ import android.os.UserManager; import android.provider.Settings; import android.security.Credentials; import android.service.restrictions.RestrictionsReceiver; +import android.service.trust.TrustAgentService; import android.util.Log; import com.android.org.conscrypt.TrustedCertificateStore; @@ -60,13 +62,16 @@ import java.util.Collections; import java.util.List; /** - * Public interface for managing policies enforced on a device. Most clients - * of this class must have published a {@link DeviceAdminReceiver} that the user - * has currently enabled. + * Public interface for managing policies enforced on a device. Most clients of this class must be + * registered with the system as a + * device administrator. Additionally, + * a device administrator may be registered as either a profile or device owner. A given method is + * accessible to all device administrators unless the documentation for that method specifies that + * it is restricted to either device or profile owners. * *

    *

    Developer Guides

    - *

    For more information about managing policies for device adminstration, read the + *

    For more information about managing policies for device administration, read the * Device Administration * developer guide.

    *
    @@ -137,12 +142,23 @@ public class DevicePolicyManager { * {@link #ACTION_PROVISION_MANAGED_PROFILE} this package has to match the package name of the * application that started provisioning. The package will be set as profile owner in that case. * - *

    This package is set as device owner when device owner provisioning is started by an Nfc - * message containing an Nfc record with MIME type {@link #MIME_TYPE_PROVISIONING_NFC}. + *

    This package is set as device owner when device owner provisioning is started by an NFC + * message containing an NFC record with MIME type {@link #MIME_TYPE_PROVISIONING_NFC}. */ public static final String EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME = "android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME"; + /** + * An {@link android.accounts.Account} extra holding the account to migrate during managed + * profile provisioning. If the account supplied is present in the primary user, it will be + * copied, along with its credentials to the managed profile and removed from the primary user. + * + * Use with {@link #ACTION_PROVISION_MANAGED_PROFILE}. + */ + + public static final String EXTRA_PROVISIONING_ACCOUNT_TO_MIGRATE + = "android.app.extra.PROVISIONING_ACCOUNT_TO_MIGRATE"; + /** * A String extra that, holds the email address of the account which a managed profile is * created for. Used with {@link #ACTION_PROVISION_MANAGED_PROFILE} and @@ -159,12 +175,22 @@ public class DevicePolicyManager { public static final String EXTRA_PROVISIONING_EMAIL_ADDRESS = "android.app.extra.PROVISIONING_EMAIL_ADDRESS"; + /** + * A Boolean extra that can be used by the mobile device management application to skip the + * disabling of system apps during provisioning when set to true. + * + *

    Use in an NFC record with {@link #MIME_TYPE_PROVISIONING_NFC} that starts device owner + * provisioning via an NFC bump. + */ + public static final String EXTRA_PROVISIONING_LEAVE_ALL_SYSTEM_APPS_ENABLED = + "android.app.extra.PROVISIONING_LEAVE_ALL_SYSTEM_APPS_ENABLED"; + /** * A String extra holding the time zone {@link android.app.AlarmManager} that the device * will be set to. * - *

    Use in an Nfc record with {@link #MIME_TYPE_PROVISIONING_NFC} that starts device owner - * provisioning via an Nfc bump. + *

    Use in an NFC record with {@link #MIME_TYPE_PROVISIONING_NFC} that starts device owner + * provisioning via an NFC bump. */ public static final String EXTRA_PROVISIONING_TIME_ZONE = "android.app.extra.PROVISIONING_TIME_ZONE"; @@ -173,8 +199,8 @@ public class DevicePolicyManager { * A Long extra holding the wall clock time (in milliseconds) to be set on the device's * {@link android.app.AlarmManager}. * - *

    Use in an Nfc record with {@link #MIME_TYPE_PROVISIONING_NFC} that starts device owner - * provisioning via an Nfc bump. + *

    Use in an NFC record with {@link #MIME_TYPE_PROVISIONING_NFC} that starts device owner + * provisioning via an NFC bump. */ public static final String EXTRA_PROVISIONING_LOCAL_TIME = "android.app.extra.PROVISIONING_LOCAL_TIME"; @@ -183,8 +209,8 @@ public class DevicePolicyManager { * A String extra holding the {@link java.util.Locale} that the device will be set to. * Format: xx_yy, where xx is the language code, and yy the country code. * - *

    Use in an Nfc record with {@link #MIME_TYPE_PROVISIONING_NFC} that starts device owner - * provisioning via an Nfc bump. + *

    Use in an NFC record with {@link #MIME_TYPE_PROVISIONING_NFC} that starts device owner + * provisioning via an NFC bump. */ public static final String EXTRA_PROVISIONING_LOCALE = "android.app.extra.PROVISIONING_LOCALE"; @@ -193,8 +219,8 @@ public class DevicePolicyManager { * A String extra holding the ssid of the wifi network that should be used during nfc device * owner provisioning for downloading the mobile device management application. * - *

    Use in an Nfc record with {@link #MIME_TYPE_PROVISIONING_NFC} that starts device owner - * provisioning via an Nfc bump. + *

    Use in an NFC record with {@link #MIME_TYPE_PROVISIONING_NFC} that starts device owner + * provisioning via an NFC bump. */ public static final String EXTRA_PROVISIONING_WIFI_SSID = "android.app.extra.PROVISIONING_WIFI_SSID"; @@ -203,8 +229,8 @@ public class DevicePolicyManager { * A boolean extra indicating whether the wifi network in {@link #EXTRA_PROVISIONING_WIFI_SSID} * is hidden or not. * - *

    Use in an Nfc record with {@link #MIME_TYPE_PROVISIONING_NFC} that starts device owner - * provisioning via an Nfc bump. + *

    Use in an NFC record with {@link #MIME_TYPE_PROVISIONING_NFC} that starts device owner + * provisioning via an NFC bump. */ public static final String EXTRA_PROVISIONING_WIFI_HIDDEN = "android.app.extra.PROVISIONING_WIFI_HIDDEN"; @@ -213,8 +239,8 @@ public class DevicePolicyManager { * A String extra indicating the security type of the wifi network in * {@link #EXTRA_PROVISIONING_WIFI_SSID}. * - *

    Use in an Nfc record with {@link #MIME_TYPE_PROVISIONING_NFC} that starts device owner - * provisioning via an Nfc bump. + *

    Use in an NFC record with {@link #MIME_TYPE_PROVISIONING_NFC} that starts device owner + * provisioning via an NFC bump. */ public static final String EXTRA_PROVISIONING_WIFI_SECURITY_TYPE = "android.app.extra.PROVISIONING_WIFI_SECURITY_TYPE"; @@ -223,8 +249,8 @@ public class DevicePolicyManager { * A String extra holding the password of the wifi network in * {@link #EXTRA_PROVISIONING_WIFI_SSID}. * - *

    Use in an Nfc record with {@link #MIME_TYPE_PROVISIONING_NFC} that starts device owner - * provisioning via an Nfc bump. + *

    Use in an NFC record with {@link #MIME_TYPE_PROVISIONING_NFC} that starts device owner + * provisioning via an NFC bump. */ public static final String EXTRA_PROVISIONING_WIFI_PASSWORD = "android.app.extra.PROVISIONING_WIFI_PASSWORD"; @@ -233,8 +259,8 @@ public class DevicePolicyManager { * A String extra holding the proxy host for the wifi network in * {@link #EXTRA_PROVISIONING_WIFI_SSID}. * - *

    Use in an Nfc record with {@link #MIME_TYPE_PROVISIONING_NFC} that starts device owner - * provisioning via an Nfc bump. + *

    Use in an NFC record with {@link #MIME_TYPE_PROVISIONING_NFC} that starts device owner + * provisioning via an NFC bump. */ public static final String EXTRA_PROVISIONING_WIFI_PROXY_HOST = "android.app.extra.PROVISIONING_WIFI_PROXY_HOST"; @@ -243,8 +269,8 @@ public class DevicePolicyManager { * An int extra holding the proxy port for the wifi network in * {@link #EXTRA_PROVISIONING_WIFI_SSID}. * - *

    Use in an Nfc record with {@link #MIME_TYPE_PROVISIONING_NFC} that starts device owner - * provisioning via an Nfc bump. + *

    Use in an NFC record with {@link #MIME_TYPE_PROVISIONING_NFC} that starts device owner + * provisioning via an NFC bump. */ public static final String EXTRA_PROVISIONING_WIFI_PROXY_PORT = "android.app.extra.PROVISIONING_WIFI_PROXY_PORT"; @@ -253,8 +279,8 @@ public class DevicePolicyManager { * A String extra holding the proxy bypass for the wifi network in * {@link #EXTRA_PROVISIONING_WIFI_SSID}. * - *

    Use in an Nfc record with {@link #MIME_TYPE_PROVISIONING_NFC} that starts device owner - * provisioning via an Nfc bump. + *

    Use in an NFC record with {@link #MIME_TYPE_PROVISIONING_NFC} that starts device owner + * provisioning via an NFC bump. */ public static final String EXTRA_PROVISIONING_WIFI_PROXY_BYPASS = "android.app.extra.PROVISIONING_WIFI_PROXY_BYPASS"; @@ -263,8 +289,8 @@ public class DevicePolicyManager { * A String extra holding the proxy auto-config (PAC) URL for the wifi network in * {@link #EXTRA_PROVISIONING_WIFI_SSID}. * - *

    Use in an Nfc record with {@link #MIME_TYPE_PROVISIONING_NFC} that starts device owner - * provisioning via an Nfc bump. + *

    Use in an NFC record with {@link #MIME_TYPE_PROVISIONING_NFC} that starts device owner + * provisioning via an NFC bump. */ public static final String EXTRA_PROVISIONING_WIFI_PAC_URL = "android.app.extra.PROVISIONING_WIFI_PAC_URL"; @@ -273,8 +299,8 @@ public class DevicePolicyManager { * A String extra holding a url that specifies the download location of the device admin * package. When not provided it is assumed that the device admin package is already installed. * - *

    Use in an Nfc record with {@link #MIME_TYPE_PROVISIONING_NFC} that starts device owner - * provisioning via an Nfc bump. + *

    Use in an NFC record with {@link #MIME_TYPE_PROVISIONING_NFC} that starts device owner + * provisioning via an NFC bump. */ public static final String EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION = "android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION"; @@ -283,8 +309,8 @@ public class DevicePolicyManager { * A String extra holding a http cookie header which should be used in the http request to the * url specified in {@link #EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION}. * - *

    Use in an Nfc record with {@link #MIME_TYPE_PROVISIONING_NFC} that starts device owner - * provisioning via an Nfc bump. + *

    Use in an NFC record with {@link #MIME_TYPE_PROVISIONING_NFC} that starts device owner + * provisioning via an NFC bump. */ public static final String EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_COOKIE_HEADER = "android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_COOKIE_HEADER"; @@ -295,8 +321,8 @@ public class DevicePolicyManager { * the file at the download location an error will be shown to the user and the user will be * asked to factory reset the device. * - *

    Use in an Nfc record with {@link #MIME_TYPE_PROVISIONING_NFC} that starts device owner - * provisioning via an Nfc bump. + *

    Use in an NFC record with {@link #MIME_TYPE_PROVISIONING_NFC} that starts device owner + * provisioning via an NFC bump. */ public static final String EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM = "android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM"; @@ -312,9 +338,9 @@ public class DevicePolicyManager { *

    A typical use case would be a device that is owned by a company, but used by either an * employee or client. * - *

    The Nfc message should be send to an unprovisioned device. + *

    The NFC message should be send to an unprovisioned device. * - *

    The Nfc record must contain a serialized {@link java.util.Properties} object which + *

    The NFC record must contain a serialized {@link java.util.Properties} object which * contains the following properties: *

      *
    • {@link #EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME}
    • @@ -439,20 +465,20 @@ public class DevicePolicyManager { = "android.app.action.SET_NEW_PASSWORD"; /** - * Flag used by {@link #addCrossProfileIntentFilter} to allow access - * from a managed profile to its parent. That is, any - * matching activities in the parent profile are included in the - * disambiguation list shown when an app in the managed profile calls - * {@link Activity#startActivity(Intent)}. + * Flag used by {@link #addCrossProfileIntentFilter} to allow activities in + * the parent profile to access intents sent from the managed profile. + * That is, when an app in the managed profile calls + * {@link Activity#startActivity(Intent)}, the intent can be resolved by a + * matching activity in the parent profile. */ public static final int FLAG_PARENT_CAN_ACCESS_MANAGED = 0x0001; /** - * Flag used by {@link #addCrossProfileIntentFilter} to allow access - * from a parent to its managed profile. That is, any - * matching activities in the managed profile are included in the - * disambiguation list shown when an app in the parent profile calls - * {@link Activity#startActivity(Intent)}. + * Flag used by {@link #addCrossProfileIntentFilter} to allow activities in + * the managed profile to access intents sent from the parent profile. + * That is, when an app in the parent profile calls + * {@link Activity#startActivity(Intent)}, the intent can be resolved by a + * matching activity in the managed profile. */ public static final int FLAG_MANAGED_CAN_ACCESS_PARENT = 0x0002; @@ -478,6 +504,22 @@ public class DevicePolicyManager { } return false; } + /** + * Return true if the given administrator component is currently being removed + * for the user. + * @hide + */ + public boolean isRemovingAdmin(ComponentName who, int userId) { + if (mService != null) { + try { + return mService.isRemovingAdmin(who, userId); + } catch (RemoteException e) { + Log.w(TAG, "Failed talking with device policy service", e); + } + } + return false; + } + /** * Return a list of all currently active device administrator's component @@ -1318,6 +1360,24 @@ public class DevicePolicyManager { return 0; } + /** + * Returns the profile with the smallest maximum failed passwords for wipe, + * for the given user. So for primary user, it might return the primary or + * a managed profile. For a secondary user, it would be the same as the + * user passed in. + * @hide Used only by Keyguard + */ + public int getProfileWithMinimumFailedPasswordsForWipe(int userHandle) { + if (mService != null) { + try { + return mService.getProfileWithMinimumFailedPasswordsForWipe(userHandle); + } catch (RemoteException e) { + Log.w(TAG, "Failed talking with device policy service", e); + } + } + return UserHandle.USER_NULL; + } + /** * Flag for {@link #resetPassword}: don't allow other admins to change * the password again until the user has entered it. @@ -1337,13 +1397,16 @@ public class DevicePolicyManager { * characters when the requested quality is only numeric), in which case * the currently active quality will be increased to match. * + *

      Calling with a null or empty password will clear any existing PIN, + * pattern or password if the current password constraints allow it. + * *

      The calling device admin must have requested * {@link DeviceAdminInfo#USES_POLICY_RESET_PASSWORD} to be able to call * this method; if it has not, a security exception will be thrown. * *

      Calling this from a managed profile will throw a security exception. * - * @param password The new password for the user. + * @param password The new password for the user. Null or empty clears the password. * @param flags May be 0 or {@link #RESET_PASSWORD_REQUIRE_ENTRY}. * @return Returns true if the password was applied, or false if it is * not acceptable for the current constraints. @@ -1426,22 +1489,30 @@ public class DevicePolicyManager { /** * Flag for {@link #wipeData(int)}: also erase the device's external - * storage. + * storage (such as SD cards). */ public static final int WIPE_EXTERNAL_STORAGE = 0x0001; + /** + * Flag for {@link #wipeData(int)}: also erase the factory reset protection + * data. + * + *

      This flag may only be set by device owner admins; if it is set by + * other admins a {@link SecurityException} will be thrown. + */ + public static final int WIPE_RESET_PROTECTION_DATA = 0x0002; + /** * Ask the user data be wiped. This will cause the device to reboot, - * erasing all user data while next booting up. External storage such - * as SD cards will be also erased if the flag {@link #WIPE_EXTERNAL_STORAGE} - * is set. + * erasing all user data while next booting up. * *

      The calling device admin must have requested * {@link DeviceAdminInfo#USES_POLICY_WIPE_DATA} to be able to call * this method; if it has not, a security exception will be thrown. * - * @param flags Bit mask of additional options: currently 0 and - * {@link #WIPE_EXTERNAL_STORAGE} are supported. + * @param flags Bit mask of additional options: currently supported flags + * are {@link #WIPE_EXTERNAL_STORAGE} and + * {@link #WIPE_RESET_PROTECTION_DATA}. */ public void wipeData(int flags) { if (mService != null) { @@ -2584,6 +2655,10 @@ public class DevicePolicyManager { *

      The application restrictions are only made visible to the target application and the * profile or device owner. * + *

      If the restrictions are not available yet, but may be applied in the near future, + * the admin can notify the target application of that by adding + * {@link UserManager#KEY_RESTRICTIONS_PENDING} to the settings parameter. + * *

      The calling device admin must be a profile or device owner; if it is not, a security * exception will be thrown. * @@ -2591,6 +2666,8 @@ public class DevicePolicyManager { * @param packageName The name of the package to update restricted settings for. * @param settings A {@link Bundle} to be parsed by the receiving application, conveying a new * set of active restrictions. + * + * @see UserManager#KEY_RESTRICTIONS_PENDING */ public void setApplicationRestrictions(ComponentName admin, String packageName, Bundle settings) { @@ -2604,25 +2681,30 @@ public class DevicePolicyManager { } /** - * Sets a list of features to enable for a TrustAgent component. This is meant to be - * used in conjunction with {@link #KEYGUARD_DISABLE_TRUST_AGENTS}, which will disable all - * trust agents but those with features enabled by this function call. + * Sets a list of configuration features to enable for a TrustAgent component. This is meant + * to be used in conjunction with {@link #KEYGUARD_DISABLE_TRUST_AGENTS}, which disables all + * trust agents but those enabled by this function call. If flag + * {@link #KEYGUARD_DISABLE_TRUST_AGENTS} is not set, then this call has no effect. * *

      The calling device admin must have requested * {@link DeviceAdminInfo#USES_POLICY_DISABLE_KEYGUARD_FEATURES} to be able to call - * this method; if it has not, a security exception will be thrown. + * this method; if not, a security exception will be thrown. * * @param admin Which {@link DeviceAdminReceiver} this request is associated with. - * @param agent Which component to enable features for. - * @param features List of features to enable. Consult specific TrustAgent documentation for - * the feature list. - * @hide + * @param target Component name of the agent to be enabled. + * @param configuration TrustAgent-specific feature bundle. If null for any admin, agent + * will be strictly disabled according to the state of the + * {@link #KEYGUARD_DISABLE_TRUST_AGENTS} flag. + *

      If {@link #KEYGUARD_DISABLE_TRUST_AGENTS} is set and options is not null for all admins, + * then it's up to the TrustAgent itself to aggregate the values from all device admins. + *

      Consult documentation for the specific TrustAgent to determine legal options parameters. */ - public void setTrustAgentFeaturesEnabled(ComponentName admin, ComponentName agent, - List features) { + public void setTrustAgentConfiguration(ComponentName admin, ComponentName target, + PersistableBundle configuration) { if (mService != null) { try { - mService.setTrustAgentFeaturesEnabled(admin, agent, features, UserHandle.myUserId()); + mService.setTrustAgentConfiguration(admin, target, configuration, + UserHandle.myUserId()); } catch (RemoteException e) { Log.w(TAG, "Failed talking with device policy service", e); } @@ -2630,24 +2712,35 @@ public class DevicePolicyManager { } /** - * Gets list of enabled features for the given TrustAgent component. If admin is - * null, this will return the intersection of all features enabled for the given agent by all - * admins. + * Gets configuration for the given trust agent based on aggregating all calls to + * {@link #setTrustAgentConfiguration(ComponentName, ComponentName, PersistableBundle)} for + * all device admins. * - * @param admin Which {@link DeviceAdminReceiver} this request is associated with. + * @param admin Which {@link DeviceAdminReceiver} this request is associated with. If null, + * this function returns a list of configurations for all admins that declare + * {@link #KEYGUARD_DISABLE_TRUST_AGENTS}. If any admin declares + * {@link #KEYGUARD_DISABLE_TRUST_AGENTS} but doesn't call + * {@link #setTrustAgentConfiguration(ComponentName, ComponentName, PersistableBundle)} + * for this {@param agent} or calls it with a null configuration, null is returned. * @param agent Which component to get enabled features for. - * @return List of enabled features. - * @hide + * @return configuration for the given trust agent. */ - public List getTrustAgentFeaturesEnabled(ComponentName admin, ComponentName agent) { + public List getTrustAgentConfiguration(ComponentName admin, + ComponentName agent) { + return getTrustAgentConfiguration(admin, agent, UserHandle.myUserId()); + } + + /** @hide per-user version */ + public List getTrustAgentConfiguration(ComponentName admin, + ComponentName agent, int userHandle) { if (mService != null) { try { - return mService.getTrustAgentFeaturesEnabled(admin, agent, UserHandle.myUserId()); + return mService.getTrustAgentConfiguration(admin, agent, userHandle); } catch (RemoteException e) { Log.w(TAG, "Failed talking with device policy service", e); } } - return new ArrayList(); // empty list + return new ArrayList(); // empty list } /** @@ -2710,6 +2803,8 @@ public class DevicePolicyManager { /** * Called by the profile owner of a managed profile so that some intents sent in the managed * profile can also be resolved in the parent, or vice versa. + * Only activity intents are supported. + * * @param admin Which {@link DeviceAdminReceiver} this request is associated with. * @param filter The {@link IntentFilter} the intent has to match to be also resolved in the * other profile @@ -2838,9 +2933,9 @@ public class DevicePolicyManager { * * @param admin Which {@link DeviceAdminReceiver} this request is associated with. * @param packageNames List of input method package names. - * @return true if setting the restriction succeeded. It will fail if there is - * one or more input method enabled, that are not in the list or user if the foreground - * user. + * @return true if setting the restriction succeeded. It will fail if there are + * one or more non-system input methods currently enabled that are not in + * the packageNames list. */ public boolean setPermittedInputMethods(ComponentName admin, List packageNames) { if (mService != null) { @@ -3133,9 +3228,10 @@ public class DevicePolicyManager { } /** - * Called by a profile owner to disable account management for a specific type of account. + * Called by a device owner or profile owner to disable account management for a specific type + * of account. * - *

      The calling device admin must be a profile owner. If it is not, a + *

      The calling device admin must be a device owner or profile owner. If it is not, a * security exception will be thrown. * *

      When account management is disabled for an account type, adding or removing an account @@ -3284,6 +3380,7 @@ public class DevicePolicyManager { *

      The settings that can be updated by a profile or device owner with this method are: *

        *
      • {@link Settings.Secure#DEFAULT_INPUT_METHOD}
      • + *
      • {@link Settings.Secure#INSTALL_NON_MARKET_APPS}
      • *
      • {@link Settings.Secure#SKIP_FIRST_USE_HINTS}
      • *
      *

      A device owner can additionally update the following settings: @@ -3377,12 +3474,13 @@ public class DevicePolicyManager { } /** - * Called by profile or device owners to check whether a user has been blocked from - * uninstalling a package. + * Check whether the current user has been blocked by device policy from uninstalling a package. + * Requires the caller to be the profile owner if checking a specific admin's policy. * - * @param admin Which {@link DeviceAdminReceiver} this request is associated with. + * @param admin The name of the admin component whose blocking policy will be checked, or null + * to check if any admin has blocked the uninstallation. * @param packageName package to check. - * @return true if the user shouldn't be able to uninstall the package. + * @return true if uninstallation is blocked. */ public boolean isUninstallBlocked(ComponentName admin, String packageName) { if (mService != null) { diff --git a/core/java/android/app/admin/IDevicePolicyManager.aidl b/core/java/android/app/admin/IDevicePolicyManager.aidl index c8e17800267fce67b029ccc1570bcf3969b4d225..0ca60c006575955904fa4dde2d9f41b7215a8b10 100644 --- a/core/java/android/app/admin/IDevicePolicyManager.aidl +++ b/core/java/android/app/admin/IDevicePolicyManager.aidl @@ -22,6 +22,7 @@ import android.content.Intent; import android.content.IntentFilter; import android.net.ProxyInfo; import android.os.Bundle; +import android.os.PersistableBundle; import android.os.RemoteCallback; import android.os.UserHandle; import java.util.List; @@ -65,6 +66,7 @@ interface IDevicePolicyManager { boolean isActivePasswordSufficient(int userHandle); int getCurrentFailedPasswordAttempts(int userHandle); + int getProfileWithMinimumFailedPasswordsForWipe(int userHandle); void setMaximumFailedPasswordsForWipe(in ComponentName admin, int num, int userHandle); int getMaximumFailedPasswordsForWipe(in ComponentName admin, int userHandle); @@ -183,8 +185,10 @@ interface IDevicePolicyManager { boolean getCrossProfileCallerIdDisabled(in ComponentName who); boolean getCrossProfileCallerIdDisabledForUser(int userId); - void setTrustAgentFeaturesEnabled(in ComponentName admin, in ComponentName agent, in List features, int userId); - List getTrustAgentFeaturesEnabled(in ComponentName admin, in ComponentName agent, int userId); + void setTrustAgentConfiguration(in ComponentName admin, in ComponentName agent, + in PersistableBundle args, int userId); + List getTrustAgentConfiguration(in ComponentName admin, + in ComponentName agent, int userId); boolean addCrossProfileWidgetProvider(in ComponentName admin, String packageName); boolean removeCrossProfileWidgetProvider(in ComponentName admin, String packageName); @@ -192,4 +196,6 @@ interface IDevicePolicyManager { void setAutoTimeRequired(in ComponentName who, int userHandle, boolean required); boolean getAutoTimeRequired(); + + boolean isRemovingAdmin(in ComponentName adminReceiver, int userHandle); } diff --git a/core/java/android/app/backup/BackupHelperDispatcher.java b/core/java/android/app/backup/BackupHelperDispatcher.java index 5466db56157673dc0a3932cb46ed06e5fb7d31f3..681153236967d893b8145dc338185f3f7d9e2715 100644 --- a/core/java/android/app/backup/BackupHelperDispatcher.java +++ b/core/java/android/app/backup/BackupHelperDispatcher.java @@ -50,7 +50,6 @@ public class BackupHelperDispatcher { Header header = new Header(); TreeMap helpers = (TreeMap)mHelpers.clone(); FileDescriptor oldStateFD = null; - FileDescriptor newStateFD = newState.getFileDescriptor(); if (oldState != null) { oldStateFD = oldState.getFileDescriptor(); diff --git a/core/java/android/app/backup/BackupTransport.java b/core/java/android/app/backup/BackupTransport.java index 70bb5e4f64a734a3c41de7de0170a6996d353f3a..e853540e5d5090e9a5145dd0df9de68fcbbe36cf 100644 --- a/core/java/android/app/backup/BackupTransport.java +++ b/core/java/android/app/backup/BackupTransport.java @@ -213,8 +213,9 @@ public class BackupTransport { /** * Send one application's key/value data update to the backup destination. The - * transport may send the data immediately, or may buffer it. After this is called, - * {@link #finishBackup} will be called to ensure the data is sent and recorded successfully. + * transport may send the data immediately, or may buffer it. If this method returns + * {@link #TRANSPORT_OK}, {@link #finishBackup} will then be called to ensure the data + * is sent and recorded successfully. * * @param packageInfo The identity of the application whose data is being backed up. * This specifically includes the signature list for the package. @@ -226,6 +227,8 @@ public class BackupTransport { * is to provide a guarantee that no stale data exists in the restore set when the * device begins providing incremental backups. * @return one of {@link BackupTransport#TRANSPORT_OK} (OK so far), + * {@link BackupTransport#TRANSPORT_PACKAGE_REJECTED} (to suppress backup of this + * specific package, but allow others to proceed), * {@link BackupTransport#TRANSPORT_ERROR} (on network error or other failure), or * {@link BackupTransport#TRANSPORT_NOT_INITIALIZED} (if the backend dataset has * become lost due to inactivity purge or some other reason and needs re-initializing) diff --git a/core/java/android/app/backup/IBackupManager.aidl b/core/java/android/app/backup/IBackupManager.aidl index 8a44c8eea58b466a2db0645947f17f41030c203b..41ad9361a382afa6628150221e8c06e5a5204588 100644 --- a/core/java/android/app/backup/IBackupManager.aidl +++ b/core/java/android/app/backup/IBackupManager.aidl @@ -291,4 +291,23 @@ interface IBackupManager { * {@hide} */ void opComplete(int token); + + /** + * Make the device's backup and restore machinery (in)active. When it is inactive, + * the device will not perform any backup operations, nor will it deliver data for + * restore, although clients can still safely call BackupManager methods. + * + * @param whichUser User handle of the defined user whose backup active state + * is to be adjusted. + * @param makeActive {@code true} when backup services are to be made active; + * {@code false} otherwise. + */ + void setBackupServiceActive(int whichUser, boolean makeActive); + + /** + * Queries the activity status of backup service as set by {@link #setBackupServiceActive}. + * @param whichUser User handle of the defined user whose backup active state + * is being queried. + */ + boolean isBackupServiceActive(int whichUser); } diff --git a/core/java/android/app/backup/RecentsBackupHelper.java b/core/java/android/app/backup/RecentsBackupHelper.java new file mode 100644 index 0000000000000000000000000000000000000000..fd69d2043d15024724b00acd12287ec72ff80dfb --- /dev/null +++ b/core/java/android/app/backup/RecentsBackupHelper.java @@ -0,0 +1,114 @@ +package android.app.backup; + +import android.content.Context; +import android.os.Environment; +import android.os.ParcelFileDescriptor; +import android.util.Slog; + +import java.io.File; + +/** + * Helper for saving/restoring 'recent tasks' infrastructure. + * @hide + */ +public class RecentsBackupHelper implements BackupHelper { + private static final String TAG = "RecentsBackup"; + private static final boolean DEBUG = false; + + // This must match TaskPersister.TASKS_DIRNAME, but that class is not accessible from here + private static final String RECENTS_TASK_DIR = "recent_tasks"; + + // Must match TaskPersister.IMAGES_DIRNAME, as above + private static final String RECENTS_IMAGE_DIR = "recent_images"; + + // At restore time, tasks/thumbnails are placed in these directories alongside + // the "live" recents dirs named above. + private static final String RECENTS_TASK_RESTORE_DIR = "restored_" + RECENTS_TASK_DIR; + private static final String RECENTS_IMAGE_RESTORE_DIR = "restored_" + RECENTS_IMAGE_DIR; + + // Prefixes for tagging the two kinds of recents backup records that we might generate + private static final String RECENTS_TASK_KEY = "task:"; + private static final String RECENTS_IMAGE_KEY = "image:"; + + FileBackupHelperBase mTaskFileHelper; + + final File mSystemDir; + final File mTasksDir; + final File mRestoredTasksDir; + final File mRestoredImagesDir; + final String[] mRecentFiles; + final String[] mRecentKeys; + + /** + * @param context The agent context in which this helper instance will run + */ + public RecentsBackupHelper(Context context) { + mTaskFileHelper = new FileBackupHelperBase(context); + + mSystemDir = new File(Environment.getDataDirectory(), "system"); + mTasksDir = new File(mSystemDir, RECENTS_TASK_DIR); + mRestoredTasksDir = new File(mSystemDir, RECENTS_TASK_RESTORE_DIR); + mRestoredImagesDir = new File(mSystemDir, RECENTS_IMAGE_RESTORE_DIR); + + // Currently we back up only the recent-task descriptions, not the thumbnails + File[] recentFiles = mTasksDir.listFiles(); + if (recentFiles != null) { + // We explicitly proceed even if this is a zero-size array + final int N = recentFiles.length; + mRecentKeys = new String[N]; + mRecentFiles = new String[N]; + if (DEBUG) { + Slog.i(TAG, "Identifying recents for backup: " + N); + } + for (int i = 0; i < N; i++) { + mRecentKeys[i] = new String(RECENTS_TASK_KEY + recentFiles[i].getName()); + mRecentFiles[i] = recentFiles[i].getAbsolutePath(); + if (DEBUG) { + Slog.i(TAG, " " + mRecentKeys[i]); + } + } + } else { + mRecentFiles = mRecentKeys = new String[0]; + } + } + + /** + * Task-file key: RECENTS_TASK_KEY + leaf filename + * Thumbnail-file key: RECENTS_IMAGE_KEY + leaf filename + */ + @Override + public void performBackup(ParcelFileDescriptor oldState, BackupDataOutput data, + ParcelFileDescriptor newState) { + FileBackupHelperBase.performBackup_checked(oldState, data, newState, + mRecentFiles, mRecentKeys); + } + + @Override + public void restoreEntity(BackupDataInputStream data) { + final String key = data.getKey(); + File output = null; + if (key.startsWith(RECENTS_TASK_KEY)) { + String name = key.substring(RECENTS_TASK_KEY.length()); + output = new File(mRestoredTasksDir, name); + mRestoredTasksDir.mkdirs(); + } else if (key.startsWith(RECENTS_IMAGE_KEY)) { + String name = key.substring(RECENTS_IMAGE_KEY.length()); + output = new File(mRestoredImagesDir, name); + mRestoredImagesDir.mkdirs(); + } + + if (output != null) { + if (DEBUG) { + Slog.i(TAG, "Restoring key='" + + key + "' to " + output.getAbsolutePath()); + } + mTaskFileHelper.writeFile(output, data); + } + } + + @Override + public void writeNewStateDescription(ParcelFileDescriptor newState) { + mTaskFileHelper.writeNewStateDescription(newState); + } + +} diff --git a/core/java/android/app/backup/WallpaperBackupHelper.java b/core/java/android/app/backup/WallpaperBackupHelper.java index a55cc2b4b78b4727b5cc973ffa695417176ac252..7a809361632c443015889341800e6eb6a1479c4c 100644 --- a/core/java/android/app/backup/WallpaperBackupHelper.java +++ b/core/java/android/app/backup/WallpaperBackupHelper.java @@ -102,9 +102,8 @@ public class WallpaperBackupHelper extends FileBackupHelperBase implements Backu final Display d = wm.getDefaultDisplay(); final Point size = new Point(); d.getSize(size); - mDesiredMinWidth = size.x; + mDesiredMinWidth = Math.min(size.x, size.y); mDesiredMinHeight = (double) wpm.getDesiredMinimumHeight(); - if (mDesiredMinHeight <= 0) { mDesiredMinHeight = size.y; } @@ -149,9 +148,13 @@ public class WallpaperBackupHelper extends FileBackupHelperBase implements Backu // We accept any wallpaper that is at least as wide as our preference // (i.e. wide enough to fill the screen), and is within a comfortable // factor of the target height, to avoid significant clipping/scaling/ - // letterboxing. + // letterboxing. At this point we know that mDesiredMinWidth is the + // smallest dimension, regardless of current orientation, so we can + // safely require that the candidate's width and height both exceed + // that hard minimum. final double heightRatio = mDesiredMinHeight / options.outHeight; if (options.outWidth < mDesiredMinWidth + || options.outHeight < mDesiredMinWidth || heightRatio >= MAX_HEIGHT_RATIO || heightRatio <= MIN_HEIGHT_RATIO) { // Not wide enough for the screen, or too short/tall to be a good fit diff --git a/core/java/android/app/trust/ITrustManager.aidl b/core/java/android/app/trust/ITrustManager.aidl index 6fbf87d2d3359e1ef8b9be4fb31ced4d53c48d0a..68ea0aaed4972505ddb1b312bdefb9c998528261 100644 --- a/core/java/android/app/trust/ITrustManager.aidl +++ b/core/java/android/app/trust/ITrustManager.aidl @@ -29,4 +29,6 @@ interface ITrustManager { void reportRequireCredentialEntry(int userId); void registerTrustListener(in ITrustListener trustListener); void unregisterTrustListener(in ITrustListener trustListener); + void reportKeyguardShowingChanged(); + boolean isDeviceLocked(int userId); } diff --git a/core/java/android/app/trust/TrustManager.java b/core/java/android/app/trust/TrustManager.java index 3d262b181e8179d7d302e10278ef1d7262cdcefc..705a144d8c035cc6476f2c6d2898a585db41e6cd 100644 --- a/core/java/android/app/trust/TrustManager.java +++ b/core/java/android/app/trust/TrustManager.java @@ -87,6 +87,19 @@ public class TrustManager { } } + /** + * Reports that the visibility of the keyguard has changed. + * + * Requires the {@link android.Manifest.permission#ACCESS_KEYGUARD_SECURE_STORAGE} permission. + */ + public void reportKeyguardShowingChanged() { + try { + mService.reportKeyguardShowingChanged(); + } catch (RemoteException e) { + onError(e); + } + } + /** * Registers a listener for trust events. * diff --git a/core/java/android/appwidget/AppWidgetHost.java b/core/java/android/appwidget/AppWidgetHost.java index 24c67933159d0af0c2444a6e4945a31e9b72dcd8..8e86824761e2757a319a439c34aca0beedc6b6b7 100644 --- a/core/java/android/appwidget/AppWidgetHost.java +++ b/core/java/android/appwidget/AppWidgetHost.java @@ -57,7 +57,7 @@ public class AppWidgetHost { static IAppWidgetService sService; private DisplayMetrics mDisplayMetrics; - Context mContext; + private String mContextOpPackageName; Handler mHandler; int mHostId; Callbacks mCallbacks = new Callbacks(); @@ -128,7 +128,7 @@ public class AppWidgetHost { * @hide */ public AppWidgetHost(Context context, int hostId, OnClickHandler handler, Looper looper) { - mContext = context; + mContextOpPackageName = context.getOpPackageName(); mHostId = hostId; mOnClickHandler = handler; mHandler = new UpdateHandler(looper); @@ -154,7 +154,7 @@ public class AppWidgetHost { int[] updatedIds; ArrayList updatedViews = new ArrayList(); try { - updatedIds = sService.startListening(mCallbacks, mContext.getOpPackageName(), mHostId, + updatedIds = sService.startListening(mCallbacks, mContextOpPackageName, mHostId, updatedViews); } catch (RemoteException e) { @@ -173,7 +173,7 @@ public class AppWidgetHost { */ public void stopListening() { try { - sService.stopListening(mContext.getOpPackageName(), mHostId); + sService.stopListening(mContextOpPackageName, mHostId); } catch (RemoteException e) { throw new RuntimeException("system server dead?", e); @@ -191,7 +191,7 @@ public class AppWidgetHost { */ public int allocateAppWidgetId() { try { - return sService.allocateAppWidgetId(mContext.getOpPackageName(), mHostId); + return sService.allocateAppWidgetId(mContextOpPackageName, mHostId); } catch (RemoteException e) { throw new RuntimeException("system server dead?", e); @@ -221,7 +221,7 @@ public class AppWidgetHost { int appWidgetId, int intentFlags, int requestCode, @Nullable Bundle options) { try { IntentSender intentSender = sService.createAppWidgetConfigIntentSender( - mContext.getOpPackageName(), appWidgetId, intentFlags); + mContextOpPackageName, appWidgetId, intentFlags); if (intentSender != null) { activity.startIntentSenderForResult(intentSender, requestCode, null, 0, 0, 0, options); @@ -245,7 +245,7 @@ public class AppWidgetHost { if (sService == null) { bindService(); } - return sService.getAppWidgetIdsForHost(mContext.getOpPackageName(), mHostId); + return sService.getAppWidgetIdsForHost(mContextOpPackageName, mHostId); } catch (RemoteException e) { throw new RuntimeException("system server dead?", e); } @@ -262,7 +262,7 @@ public class AppWidgetHost { synchronized (mViews) { mViews.remove(appWidgetId); try { - sService.deleteAppWidgetId(mContext.getOpPackageName(), appWidgetId); + sService.deleteAppWidgetId(mContextOpPackageName, appWidgetId); } catch (RemoteException e) { throw new RuntimeException("system server dead?", e); @@ -280,7 +280,7 @@ public class AppWidgetHost { */ public void deleteHost() { try { - sService.deleteHost(mContext.getOpPackageName(), mHostId); + sService.deleteHost(mContextOpPackageName, mHostId); } catch (RemoteException e) { throw new RuntimeException("system server dead?", e); @@ -310,7 +310,7 @@ public class AppWidgetHost { */ public final AppWidgetHostView createView(Context context, int appWidgetId, AppWidgetProviderInfo appWidget) { - AppWidgetHostView view = onCreateView(mContext, appWidgetId, appWidget); + AppWidgetHostView view = onCreateView(context, appWidgetId, appWidget); view.setOnClickHandler(mOnClickHandler); view.setAppWidget(appWidgetId, appWidget); synchronized (mViews) { @@ -318,7 +318,7 @@ public class AppWidgetHost { } RemoteViews views; try { - views = sService.getAppWidgetViews(mContext.getOpPackageName(), appWidgetId); + views = sService.getAppWidgetViews(mContextOpPackageName, appWidgetId); } catch (RemoteException e) { throw new RuntimeException("system server dead?", e); } diff --git a/core/java/android/bluetooth/BluetoothAdapter.java b/core/java/android/bluetooth/BluetoothAdapter.java index 5564af789e13eed062334b9315a78cd308826d7f..b8f4bf8f044a1d188a0069612a6db34a4cb8efbd 100644 --- a/core/java/android/bluetooth/BluetoothAdapter.java +++ b/core/java/android/bluetooth/BluetoothAdapter.java @@ -465,7 +465,8 @@ public final class BluetoothAdapter { if (getState() != STATE_ON) { return null; } - if (!isMultipleAdvertisementSupported()) { + if (!isMultipleAdvertisementSupported() && !isPeripheralModeSupported()) { + Log.e(TAG, "bluetooth le advertising not supported"); return null; } synchronized(mLock) { @@ -917,6 +918,21 @@ public final class BluetoothAdapter { return false; } + /** + * Returns whether peripheral mode is supported. + * + * @hide + */ + public boolean isPeripheralModeSupported() { + if (getState() != STATE_ON) return false; + try { + return mService.isPeripheralModeSupported(); + } catch (RemoteException e) { + Log.e(TAG, "failed to get peripheral mode capability: ", e); + } + return false; + } + /** * Return true if offloaded filters are supported * @@ -1413,14 +1429,16 @@ public final class BluetoothAdapter { if (VDBG) Log.d(TAG, "onBluetoothServiceUp: " + bluetoothService); synchronized (mManagerCallback) { mService = bluetoothService; - for (IBluetoothManagerCallback cb : mProxyServiceStateCallbacks ){ - try { - if (cb != null) { - cb.onBluetoothServiceUp(bluetoothService); - } else { - Log.d(TAG, "onBluetoothServiceUp: cb is null!!!"); - } - } catch (Exception e) { Log.e(TAG,"",e);} + synchronized (mProxyServiceStateCallbacks) { + for (IBluetoothManagerCallback cb : mProxyServiceStateCallbacks ){ + try { + if (cb != null) { + cb.onBluetoothServiceUp(bluetoothService); + } else { + Log.d(TAG, "onBluetoothServiceUp: cb is null!!!"); + } + } catch (Exception e) { Log.e(TAG,"",e);} + } } } } @@ -1429,17 +1447,19 @@ public final class BluetoothAdapter { if (VDBG) Log.d(TAG, "onBluetoothServiceDown: " + mService); synchronized (mManagerCallback) { mService = null; - mLeScanClients.clear(); + if (mLeScanClients != null) mLeScanClients.clear(); if (sBluetoothLeAdvertiser != null) sBluetoothLeAdvertiser.cleanup(); if (sBluetoothLeScanner != null) sBluetoothLeScanner.cleanup(); - for (IBluetoothManagerCallback cb : mProxyServiceStateCallbacks ){ - try { - if (cb != null) { - cb.onBluetoothServiceDown(); - } else { - Log.d(TAG, "onBluetoothServiceDown: cb is null!!!"); - } - } catch (Exception e) { Log.e(TAG,"",e);} + synchronized (mProxyServiceStateCallbacks) { + for (IBluetoothManagerCallback cb : mProxyServiceStateCallbacks ){ + try { + if (cb != null) { + cb.onBluetoothServiceDown(); + } else { + Log.d(TAG, "onBluetoothServiceDown: cb is null!!!"); + } + } catch (Exception e) { Log.e(TAG,"",e);} + } } } } @@ -1580,10 +1600,10 @@ public final class BluetoothAdapter { return mManagerService; } - private ArrayList mProxyServiceStateCallbacks = new ArrayList(); + final private ArrayList mProxyServiceStateCallbacks = new ArrayList(); /*package*/ IBluetooth getBluetoothService(IBluetoothManagerCallback cb) { - synchronized (mManagerCallback) { + synchronized (mProxyServiceStateCallbacks) { if (cb == null) { Log.w(TAG, "getBluetoothService() called with no BluetoothManagerCallback"); } else if (!mProxyServiceStateCallbacks.contains(cb)) { @@ -1594,7 +1614,7 @@ public final class BluetoothAdapter { } /*package*/ void removeServiceStateCallback(IBluetoothManagerCallback cb) { - synchronized (mManagerCallback) { + synchronized (mProxyServiceStateCallbacks) { mProxyServiceStateCallbacks.remove(cb); } } diff --git a/core/java/android/bluetooth/BluetoothDevice.java b/core/java/android/bluetooth/BluetoothDevice.java index 5e50b696b22702fd1490833ee81ee05a99130ebd..bb0d0a39f56af64eb9e0a97ea49f1723686debfc 100644 --- a/core/java/android/bluetooth/BluetoothDevice.java +++ b/core/java/android/bluetooth/BluetoothDevice.java @@ -18,6 +18,7 @@ package android.bluetooth; import android.annotation.SdkConstant; import android.annotation.SdkConstant.SdkConstantType; +import android.annotation.SystemApi; import android.content.Context; import android.os.Parcel; import android.os.Parcelable; @@ -66,6 +67,14 @@ public final class BluetoothDevice implements Parcelable { private static final String TAG = "BluetoothDevice"; private static final boolean DBG = false; + /** + * Connection state bitmask as returned by getConnectionState. + */ + private static final int CONNECTION_STATE_DISCONNECTED = 0; + private static final int CONNECTION_STATE_CONNECTED = 1; + private static final int CONNECTION_STATE_ENCRYPTED_BREDR = 2; + private static final int CONNECTION_STATE_ENCRYPTED_LE = 4; + /** * Sentinel error value for this class. Guaranteed to not equal any other * integer constant in this class. Provided as a convenience for functions @@ -940,13 +949,36 @@ public final class BluetoothDevice implements Parcelable { * @return True if there is at least one open connection to this device. * @hide */ + @SystemApi public boolean isConnected() { if (sService == null) { // BT is not enabled, we cannot be connected. return false; } try { - return sService.isConnected(this); + return sService.getConnectionState(this) != CONNECTION_STATE_DISCONNECTED; + } catch (RemoteException e) { + Log.e(TAG, "", e); + return false; + } + } + + /** + * Returns whether there is an open connection to this device + * that has been encrypted. + *

      Requires {@link android.Manifest.permission#BLUETOOTH}. + * + * @return True if there is at least one encrypted connection to this device. + * @hide + */ + @SystemApi + public boolean isEncrypted() { + if (sService == null) { + // BT is not enabled, we cannot be connected. + return false; + } + try { + return sService.getConnectionState(this) > CONNECTION_STATE_CONNECTED; } catch (RemoteException e) { Log.e(TAG, "", e); return false; diff --git a/core/java/android/bluetooth/BluetoothGatt.java b/core/java/android/bluetooth/BluetoothGatt.java index c203a8e69e750aaec87dc52877b3baef25781039..ea2dca08fd4775ad291099e6739796ccff5cefcb 100644 --- a/core/java/android/bluetooth/BluetoothGatt.java +++ b/core/java/android/bluetooth/BluetoothGatt.java @@ -928,7 +928,7 @@ public final class BluetoothGatt implements BluetoothProfile { BluetoothGattCharacteristic.PROPERTY_WRITE_NO_RESPONSE) == 0) return false; if (VDBG) Log.d(TAG, "writeCharacteristic() - uuid: " + characteristic.getUuid()); - if (mService == null || mClientIf == 0) return false; + if (mService == null || mClientIf == 0 || characteristic.getValue() == null) return false; BluetoothGattService service = characteristic.getService(); if (service == null) return false; @@ -1015,7 +1015,7 @@ public final class BluetoothGatt implements BluetoothProfile { */ public boolean writeDescriptor(BluetoothGattDescriptor descriptor) { if (VDBG) Log.d(TAG, "writeDescriptor() - uuid: " + descriptor.getUuid()); - if (mService == null || mClientIf == 0) return false; + if (mService == null || mClientIf == 0 || descriptor.getValue() == null) return false; BluetoothGattCharacteristic characteristic = descriptor.getCharacteristic(); if (characteristic == null) return false; diff --git a/core/java/android/bluetooth/BluetoothGattCharacteristic.java b/core/java/android/bluetooth/BluetoothGattCharacteristic.java index a86677cfaabf738c8c027daa1b0a810fb613a57a..7cdcc2c9b9ff88ba117be70fa4c00914f334daec 100644 --- a/core/java/android/bluetooth/BluetoothGattCharacteristic.java +++ b/core/java/android/bluetooth/BluetoothGattCharacteristic.java @@ -502,7 +502,7 @@ public class BluetoothGattCharacteristic { * @return Cached value of the characteristic */ public String getStringValue(int offset) { - if (offset > mValue.length) return null; + if (mValue == null || offset > mValue.length) return null; byte[] strBytes = new byte[mValue.length - offset]; for (int i=0; i != (mValue.length-offset); ++i) strBytes[i] = mValue[offset+i]; return new String(strBytes); diff --git a/core/java/android/bluetooth/BluetoothGattServer.java b/core/java/android/bluetooth/BluetoothGattServer.java index e94a8cea216d91231a17cfc5f87ed43adb0f69e6..f4513405b196d350693024719868114b8a7edf09 100644 --- a/core/java/android/bluetooth/BluetoothGattServer.java +++ b/core/java/android/bluetooth/BluetoothGattServer.java @@ -284,6 +284,24 @@ public final class BluetoothGattServer implements BluetoothProfile { Log.w(TAG, "Unhandled exception: " + ex); } } + + /** + * The MTU for a connection has changed + * @hide + */ + public void onMtuChanged(String address, int mtu) { + if (DBG) Log.d(TAG, "onMtuChanged() - " + + "device=" + address + ", mtu=" + mtu); + + BluetoothDevice device = mAdapter.getRemoteDevice(address); + if (device == null) return; + + try { + mCallback.onMtuChanged(device, mtu); + } catch (Exception ex) { + Log.w(TAG, "Unhandled exception: " + ex); + } + } }; /** diff --git a/core/java/android/bluetooth/BluetoothGattServerCallback.java b/core/java/android/bluetooth/BluetoothGattServerCallback.java index 1dd06f2ce1c62c615b0f16b821f24cd280e8603e..2afcf9a322bbf783764e6d6a333c58510d406987 100644 --- a/core/java/android/bluetooth/BluetoothGattServerCallback.java +++ b/core/java/android/bluetooth/BluetoothGattServerCallback.java @@ -145,4 +145,16 @@ public abstract class BluetoothGattServerCallback { */ public void onNotificationSent(BluetoothDevice device, int status) { } + + /** + * Callback indicating the MTU for a given device connection has changed. + * + *

      This callback will be invoked if a remote client has requested to change + * the MTU for a given connection. + * + * @param device The remote device that requested the MTU change + * @param mtu The new MTU size + */ + public void onMtuChanged(BluetoothDevice device, int mtu) { + } } diff --git a/core/java/android/bluetooth/BluetoothHeadset.java b/core/java/android/bluetooth/BluetoothHeadset.java index 353f0fba05d3841ecd6c6d75e999076ef158d4b7..25d9aa9bae679482617d9af98688958cd7249d19 100644 --- a/core/java/android/bluetooth/BluetoothHeadset.java +++ b/core/java/android/bluetooth/BluetoothHeadset.java @@ -20,9 +20,10 @@ import android.annotation.SdkConstant; import android.annotation.SdkConstant.SdkConstantType; import android.content.ComponentName; import android.content.Context; -import android.content.Intent; -import android.content.ServiceConnection; +import android.os.Handler; import android.os.IBinder; +import android.os.Looper; +import android.os.Message; import android.os.RemoteException; import android.util.Log; @@ -221,6 +222,8 @@ public final class BluetoothHeadset implements BluetoothProfile { */ public static final int STATE_AUDIO_CONNECTED = 12; + private static final int MESSAGE_HEADSET_SERVICE_CONNECTED = 100; + private static final int MESSAGE_HEADSET_SERVICE_DISCONNECTED = 101; private Context mContext; private ServiceListener mServiceListener; @@ -233,14 +236,7 @@ public final class BluetoothHeadset implements BluetoothProfile { if (DBG) Log.d(TAG, "onBluetoothStateChange: up=" + up); if (!up) { if (VDBG) Log.d(TAG,"Unbinding service..."); - synchronized (mConnection) { - try { - mService = null; - mContext.unbindService(mConnection); - } catch (Exception re) { - Log.e(TAG,"",re); - } - } + doUnbind(); } else { synchronized (mConnection) { try { @@ -277,15 +273,26 @@ public final class BluetoothHeadset implements BluetoothProfile { } boolean doBind() { - Intent intent = new Intent(IBluetoothHeadset.class.getName()); - ComponentName comp = intent.resolveSystemService(mContext.getPackageManager(), 0); - intent.setComponent(comp); - if (comp == null || !mContext.bindServiceAsUser(intent, mConnection, 0, - android.os.Process.myUserHandle())) { - Log.e(TAG, "Could not bind to Bluetooth Headset Service with " + intent); - return false; + try { + return mAdapter.getBluetoothManager().bindBluetoothProfileService( + BluetoothProfile.HEADSET, mConnection); + } catch (RemoteException e) { + Log.e(TAG, "Unable to bind HeadsetService", e); + } + return false; + } + + void doUnbind() { + synchronized (mConnection) { + if (mService != null) { + try { + mAdapter.getBluetoothManager().unbindBluetoothProfileService( + BluetoothProfile.HEADSET, mConnection); + } catch (RemoteException e) { + Log.e(TAG,"Unable to unbind HeadsetService", e); + } + } } - return true; } /** @@ -305,18 +312,8 @@ public final class BluetoothHeadset implements BluetoothProfile { Log.e(TAG,"",e); } } - - synchronized (mConnection) { - if (mService != null) { - try { - mService = null; - mContext.unbindService(mConnection); - } catch (Exception re) { - Log.e(TAG,"",re); - } - } - } mServiceListener = null; + doUnbind(); } /** @@ -930,21 +927,21 @@ public final class BluetoothHeadset implements BluetoothProfile { return false; } - private final ServiceConnection mConnection = new ServiceConnection() { + private final IBluetoothProfileServiceConnection mConnection + = new IBluetoothProfileServiceConnection.Stub() { + @Override public void onServiceConnected(ComponentName className, IBinder service) { if (DBG) Log.d(TAG, "Proxy object connected"); mService = IBluetoothHeadset.Stub.asInterface(service); - - if (mServiceListener != null) { - mServiceListener.onServiceConnected(BluetoothProfile.HEADSET, BluetoothHeadset.this); - } + mHandler.sendMessage(mHandler.obtainMessage( + MESSAGE_HEADSET_SERVICE_CONNECTED)); } + @Override public void onServiceDisconnected(ComponentName className) { if (DBG) Log.d(TAG, "Proxy object disconnected"); mService = null; - if (mServiceListener != null) { - mServiceListener.onServiceDisconnected(BluetoothProfile.HEADSET); - } + mHandler.sendMessage(mHandler.obtainMessage( + MESSAGE_HEADSET_SERVICE_DISCONNECTED)); } }; @@ -968,4 +965,25 @@ public final class BluetoothHeadset implements BluetoothProfile { private static void log(String msg) { Log.d(TAG, msg); } + + private final Handler mHandler = new Handler(Looper.getMainLooper()) { + @Override + public void handleMessage(Message msg) { + switch (msg.what) { + case MESSAGE_HEADSET_SERVICE_CONNECTED: { + if (mServiceListener != null) { + mServiceListener.onServiceConnected(BluetoothProfile.HEADSET, + BluetoothHeadset.this); + } + break; + } + case MESSAGE_HEADSET_SERVICE_DISCONNECTED: { + if (mServiceListener != null) { + mServiceListener.onServiceDisconnected(BluetoothProfile.HEADSET); + } + break; + } + } + } + }; } diff --git a/core/java/android/bluetooth/BluetoothUuid.java b/core/java/android/bluetooth/BluetoothUuid.java index 1e22eb39289eb08b17a291b90e173c2f1699a6ae..194a53e0f6cbf04cc145202f0a205998866dfbfa 100644 --- a/core/java/android/bluetooth/BluetoothUuid.java +++ b/core/java/android/bluetooth/BluetoothUuid.java @@ -66,6 +66,8 @@ public final class BluetoothUuid { ParcelUuid.fromString("00001116-0000-1000-8000-00805F9B34FB"); public static final ParcelUuid BNEP = ParcelUuid.fromString("0000000f-0000-1000-8000-00805F9B34FB"); + public static final ParcelUuid PBAP_PCE = + ParcelUuid.fromString("0000112e-0000-1000-8000-00805F9B34FB"); public static final ParcelUuid PBAP_PSE = ParcelUuid.fromString("0000112f-0000-1000-8000-00805F9B34FB"); public static final ParcelUuid MAP = diff --git a/core/java/android/bluetooth/IBluetooth.aidl b/core/java/android/bluetooth/IBluetooth.aidl index cf2a343dc0473cfc474d75391b62e41e6ee62ec9..dabb1ceaea8f508572a6d3532c74acf101c96a00 100644 --- a/core/java/android/bluetooth/IBluetooth.aidl +++ b/core/java/android/bluetooth/IBluetooth.aidl @@ -59,7 +59,7 @@ interface IBluetooth boolean cancelBondProcess(in BluetoothDevice device); boolean removeBond(in BluetoothDevice device); int getBondState(in BluetoothDevice device); - boolean isConnected(in BluetoothDevice device); + int getConnectionState(in BluetoothDevice device); String getRemoteName(in BluetoothDevice device); int getRemoteType(in BluetoothDevice device); @@ -92,9 +92,13 @@ interface IBluetooth boolean configHciSnoopLog(boolean enable); boolean isMultiAdvertisementSupported(); + boolean isPeripheralModeSupported(); boolean isOffloadedFilteringSupported(); boolean isOffloadedScanBatchingSupported(); boolean isActivityAndEnergyReportingSupported(); void getActivityEnergyInfoFromController(); BluetoothActivityEnergyInfo reportActivityInfo(); + + // for dumpsys support + String dump(); } diff --git a/core/java/android/bluetooth/IBluetoothGattServerCallback.aidl b/core/java/android/bluetooth/IBluetoothGattServerCallback.aidl index 5d4d6c63efd1f7ff3c7aaa0bf3888c76984b37b8..8b202b23cc61b3e7347579f2a696fff089f137fd 100644 --- a/core/java/android/bluetooth/IBluetoothGattServerCallback.aidl +++ b/core/java/android/bluetooth/IBluetoothGattServerCallback.aidl @@ -59,4 +59,5 @@ oneway interface IBluetoothGattServerCallback { in byte[] value); void onExecuteWrite(in String address, in int transId, in boolean execWrite); void onNotificationSent(in String address, in int status); + void onMtuChanged(in String address, in int mtu); } diff --git a/core/java/android/bluetooth/IBluetoothManager.aidl b/core/java/android/bluetooth/IBluetoothManager.aidl index 493d2f8e77418e5f75a26309039132287749b613..7411d3f27b54ca308cf066f331fe5e122b5d86d3 100644 --- a/core/java/android/bluetooth/IBluetoothManager.aidl +++ b/core/java/android/bluetooth/IBluetoothManager.aidl @@ -19,6 +19,7 @@ package android.bluetooth; import android.bluetooth.IBluetooth; import android.bluetooth.IBluetoothGatt; import android.bluetooth.IBluetoothManagerCallback; +import android.bluetooth.IBluetoothProfileServiceConnection; import android.bluetooth.IBluetoothStateChangeCallback; /** @@ -38,6 +39,9 @@ interface IBluetoothManager boolean disable(boolean persist); IBluetoothGatt getBluetoothGatt(); + boolean bindBluetoothProfileService(int profile, IBluetoothProfileServiceConnection proxy); + void unbindBluetoothProfileService(int profile, IBluetoothProfileServiceConnection proxy); + String getAddress(); String getName(); } diff --git a/core/java/android/bluetooth/IBluetoothProfileServiceConnection.aidl b/core/java/android/bluetooth/IBluetoothProfileServiceConnection.aidl new file mode 100755 index 0000000000000000000000000000000000000000..96c59e239151533d4a92b1b5ba7fbda5f3bd5c34 --- /dev/null +++ b/core/java/android/bluetooth/IBluetoothProfileServiceConnection.aidl @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2014 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.bluetooth; + +import android.content.ComponentName; +import android.os.IBinder; + +/** + * Callback for bluetooth profile connections. + * + * {@hide} + */ +interface IBluetoothProfileServiceConnection { + void onServiceConnected(in ComponentName comp, in IBinder service); + void onServiceDisconnected(in ComponentName comp); +} diff --git a/core/java/android/bluetooth/le/BluetoothLeAdvertiser.java b/core/java/android/bluetooth/le/BluetoothLeAdvertiser.java index d46850843f6ab2fe4c3ce5e080571a05c3286aa9..67d9de5940909a6b6755e0bd89aadd0e17ee4cda 100644 --- a/core/java/android/bluetooth/le/BluetoothLeAdvertiser.java +++ b/core/java/android/bluetooth/le/BluetoothLeAdvertiser.java @@ -111,13 +111,15 @@ public final class BluetoothLeAdvertiser { if (callback == null) { throw new IllegalArgumentException("callback cannot be null"); } - if (!mBluetoothAdapter.isMultipleAdvertisementSupported()) { + if (!mBluetoothAdapter.isMultipleAdvertisementSupported() && + !mBluetoothAdapter.isPeripheralModeSupported()) { postStartFailure(callback, AdvertiseCallback.ADVERTISE_FAILED_FEATURE_UNSUPPORTED); return; } - if (totalBytes(advertiseData) > MAX_ADVERTISING_DATA_BYTES || - totalBytes(scanResponse) > MAX_ADVERTISING_DATA_BYTES) { + boolean isConnectable = settings.isConnectable(); + if (totalBytes(advertiseData, isConnectable) > MAX_ADVERTISING_DATA_BYTES || + totalBytes(scanResponse, false) > MAX_ADVERTISING_DATA_BYTES) { postStartFailure(callback, AdvertiseCallback.ADVERTISE_FAILED_DATA_TOO_LARGE); return; } @@ -169,10 +171,11 @@ public final class BluetoothLeAdvertiser { mLeAdvertisers.clear(); } - // Compute the size of the advertise data. - private int totalBytes(AdvertiseData data) { + // Compute the size of advertisement data or scan resp + private int totalBytes(AdvertiseData data, boolean isFlagsIncluded) { if (data == null) return 0; - int size = FLAGS_FIELD_BYTES; // flags field is always set. + // Flags field is omitted if the advertising is not connectable. + int size = (isFlagsIncluded) ? FLAGS_FIELD_BYTES : 0; if (data.getServiceUuids() != null) { int num16BitUuids = 0; int num32BitUuids = 0; diff --git a/core/java/android/bluetooth/le/BluetoothLeScanner.java b/core/java/android/bluetooth/le/BluetoothLeScanner.java index a57c3ca25a9b696ee50a5b56c06dbfab11f08ee6..93ea299bc8dd42889715dea53caf99007be3734a 100644 --- a/core/java/android/bluetooth/le/BluetoothLeScanner.java +++ b/core/java/android/bluetooth/le/BluetoothLeScanner.java @@ -51,6 +51,7 @@ public final class BluetoothLeScanner { private static final String TAG = "BluetoothLeScanner"; private static final boolean DBG = true; + private static final boolean VDBG = false; private final IBluetoothManager mBluetoothManager; private final Handler mHandler; @@ -317,7 +318,7 @@ public final class BluetoothLeScanner { */ @Override public void onScanResult(final ScanResult scanResult) { - if (DBG) Log.d(TAG, "onScanResult() - " + scanResult.toString()); + if (VDBG) Log.d(TAG, "onScanResult() - " + scanResult.toString()); // Check null in case the scan has been stopped synchronized (this) { @@ -346,7 +347,7 @@ public final class BluetoothLeScanner { @Override public void onFoundOrLost(final boolean onFound, final ScanResult scanResult) { - if (DBG) { + if (VDBG) { Log.d(TAG, "onFoundOrLost() - onFound = " + onFound + " " + scanResult.toString()); } diff --git a/core/java/android/content/ContentProvider.java b/core/java/android/content/ContentProvider.java index 2853c58d4b0729b4f62b06a5c952de997e732a9d..0cff4c0e9a9b963022085cb281f60b8e5db1bd11 100644 --- a/core/java/android/content/ContentProvider.java +++ b/core/java/android/content/ContentProvider.java @@ -31,6 +31,7 @@ import android.os.AsyncTask; import android.os.Binder; import android.os.Bundle; import android.os.CancellationSignal; +import android.os.IBinder; import android.os.ICancellationSignal; import android.os.OperationCanceledException; import android.os.ParcelFileDescriptor; @@ -201,7 +202,7 @@ public abstract class ContentProvider implements ComponentCallbacks2 { ICancellationSignal cancellationSignal) { validateIncomingUri(uri); uri = getUriWithoutUserId(uri); - if (enforceReadPermission(callingPkg, uri) != AppOpsManager.MODE_ALLOWED) { + if (enforceReadPermission(callingPkg, uri, null) != AppOpsManager.MODE_ALLOWED) { return rejectQuery(uri, projection, selection, selectionArgs, sortOrder, CancellationSignal.fromTransport(cancellationSignal)); } @@ -227,7 +228,7 @@ public abstract class ContentProvider implements ComponentCallbacks2 { validateIncomingUri(uri); int userId = getUserIdFromUri(uri); uri = getUriWithoutUserId(uri); - if (enforceWritePermission(callingPkg, uri) != AppOpsManager.MODE_ALLOWED) { + if (enforceWritePermission(callingPkg, uri, null) != AppOpsManager.MODE_ALLOWED) { return rejectInsert(uri, initialValues); } final String original = setCallingPackage(callingPkg); @@ -242,7 +243,7 @@ public abstract class ContentProvider implements ComponentCallbacks2 { public int bulkInsert(String callingPkg, Uri uri, ContentValues[] initialValues) { validateIncomingUri(uri); uri = getUriWithoutUserId(uri); - if (enforceWritePermission(callingPkg, uri) != AppOpsManager.MODE_ALLOWED) { + if (enforceWritePermission(callingPkg, uri, null) != AppOpsManager.MODE_ALLOWED) { return 0; } final String original = setCallingPackage(callingPkg); @@ -270,13 +271,13 @@ public abstract class ContentProvider implements ComponentCallbacks2 { operations.set(i, operation); } if (operation.isReadOperation()) { - if (enforceReadPermission(callingPkg, uri) + if (enforceReadPermission(callingPkg, uri, null) != AppOpsManager.MODE_ALLOWED) { throw new OperationApplicationException("App op not allowed", 0); } } if (operation.isWriteOperation()) { - if (enforceWritePermission(callingPkg, uri) + if (enforceWritePermission(callingPkg, uri, null) != AppOpsManager.MODE_ALLOWED) { throw new OperationApplicationException("App op not allowed", 0); } @@ -285,10 +286,12 @@ public abstract class ContentProvider implements ComponentCallbacks2 { final String original = setCallingPackage(callingPkg); try { ContentProviderResult[] results = ContentProvider.this.applyBatch(operations); - for (int i = 0; i < results.length ; i++) { - if (userIds[i] != UserHandle.USER_CURRENT) { - // Adding the userId to the uri. - results[i] = new ContentProviderResult(results[i], userIds[i]); + if (results != null) { + for (int i = 0; i < results.length ; i++) { + if (userIds[i] != UserHandle.USER_CURRENT) { + // Adding the userId to the uri. + results[i] = new ContentProviderResult(results[i], userIds[i]); + } } } return results; @@ -301,7 +304,7 @@ public abstract class ContentProvider implements ComponentCallbacks2 { public int delete(String callingPkg, Uri uri, String selection, String[] selectionArgs) { validateIncomingUri(uri); uri = getUriWithoutUserId(uri); - if (enforceWritePermission(callingPkg, uri) != AppOpsManager.MODE_ALLOWED) { + if (enforceWritePermission(callingPkg, uri, null) != AppOpsManager.MODE_ALLOWED) { return 0; } final String original = setCallingPackage(callingPkg); @@ -317,7 +320,7 @@ public abstract class ContentProvider implements ComponentCallbacks2 { String[] selectionArgs) { validateIncomingUri(uri); uri = getUriWithoutUserId(uri); - if (enforceWritePermission(callingPkg, uri) != AppOpsManager.MODE_ALLOWED) { + if (enforceWritePermission(callingPkg, uri, null) != AppOpsManager.MODE_ALLOWED) { return 0; } final String original = setCallingPackage(callingPkg); @@ -330,11 +333,11 @@ public abstract class ContentProvider implements ComponentCallbacks2 { @Override public ParcelFileDescriptor openFile( - String callingPkg, Uri uri, String mode, ICancellationSignal cancellationSignal) - throws FileNotFoundException { + String callingPkg, Uri uri, String mode, ICancellationSignal cancellationSignal, + IBinder callerToken) throws FileNotFoundException { validateIncomingUri(uri); uri = getUriWithoutUserId(uri); - enforceFilePermission(callingPkg, uri, mode); + enforceFilePermission(callingPkg, uri, mode, callerToken); final String original = setCallingPackage(callingPkg); try { return ContentProvider.this.openFile( @@ -350,7 +353,7 @@ public abstract class ContentProvider implements ComponentCallbacks2 { throws FileNotFoundException { validateIncomingUri(uri); uri = getUriWithoutUserId(uri); - enforceFilePermission(callingPkg, uri, mode); + enforceFilePermission(callingPkg, uri, mode, null); final String original = setCallingPackage(callingPkg); try { return ContentProvider.this.openAssetFile( @@ -382,7 +385,7 @@ public abstract class ContentProvider implements ComponentCallbacks2 { Bundle opts, ICancellationSignal cancellationSignal) throws FileNotFoundException { validateIncomingUri(uri); uri = getUriWithoutUserId(uri); - enforceFilePermission(callingPkg, uri, "r"); + enforceFilePermission(callingPkg, uri, "r", null); final String original = setCallingPackage(callingPkg); try { return ContentProvider.this.openTypedAssetFile( @@ -402,7 +405,7 @@ public abstract class ContentProvider implements ComponentCallbacks2 { validateIncomingUri(uri); int userId = getUserIdFromUri(uri); uri = getUriWithoutUserId(uri); - if (enforceReadPermission(callingPkg, uri) != AppOpsManager.MODE_ALLOWED) { + if (enforceReadPermission(callingPkg, uri, null) != AppOpsManager.MODE_ALLOWED) { return null; } final String original = setCallingPackage(callingPkg); @@ -418,7 +421,7 @@ public abstract class ContentProvider implements ComponentCallbacks2 { validateIncomingUri(uri); int userId = getUserIdFromUri(uri); uri = getUriWithoutUserId(uri); - if (enforceReadPermission(callingPkg, uri) != AppOpsManager.MODE_ALLOWED) { + if (enforceReadPermission(callingPkg, uri, null) != AppOpsManager.MODE_ALLOWED) { return null; } final String original = setCallingPackage(callingPkg); @@ -429,29 +432,33 @@ public abstract class ContentProvider implements ComponentCallbacks2 { } } - private void enforceFilePermission(String callingPkg, Uri uri, String mode) - throws FileNotFoundException, SecurityException { + private void enforceFilePermission(String callingPkg, Uri uri, String mode, + IBinder callerToken) throws FileNotFoundException, SecurityException { if (mode != null && mode.indexOf('w') != -1) { - if (enforceWritePermission(callingPkg, uri) != AppOpsManager.MODE_ALLOWED) { + if (enforceWritePermission(callingPkg, uri, callerToken) + != AppOpsManager.MODE_ALLOWED) { throw new FileNotFoundException("App op not allowed"); } } else { - if (enforceReadPermission(callingPkg, uri) != AppOpsManager.MODE_ALLOWED) { + if (enforceReadPermission(callingPkg, uri, callerToken) + != AppOpsManager.MODE_ALLOWED) { throw new FileNotFoundException("App op not allowed"); } } } - private int enforceReadPermission(String callingPkg, Uri uri) throws SecurityException { - enforceReadPermissionInner(uri); + private int enforceReadPermission(String callingPkg, Uri uri, IBinder callerToken) + throws SecurityException { + enforceReadPermissionInner(uri, callerToken); if (mReadOp != AppOpsManager.OP_NONE) { return mAppOpsManager.noteOp(mReadOp, Binder.getCallingUid(), callingPkg); } return AppOpsManager.MODE_ALLOWED; } - private int enforceWritePermission(String callingPkg, Uri uri) throws SecurityException { - enforceWritePermissionInner(uri); + private int enforceWritePermission(String callingPkg, Uri uri, IBinder callerToken) + throws SecurityException { + enforceWritePermissionInner(uri, callerToken); if (mWriteOp != AppOpsManager.OP_NONE) { return mAppOpsManager.noteOp(mWriteOp, Binder.getCallingUid(), callingPkg); } @@ -467,7 +474,8 @@ public abstract class ContentProvider implements ComponentCallbacks2 { } /** {@hide} */ - protected void enforceReadPermissionInner(Uri uri) throws SecurityException { + protected void enforceReadPermissionInner(Uri uri, IBinder callerToken) + throws SecurityException { final Context context = getContext(); final int pid = Binder.getCallingPid(); final int uid = Binder.getCallingUid(); @@ -480,7 +488,8 @@ public abstract class ContentProvider implements ComponentCallbacks2 { if (mExported && checkUser(pid, uid, context)) { final String componentPerm = getReadPermission(); if (componentPerm != null) { - if (context.checkPermission(componentPerm, pid, uid) == PERMISSION_GRANTED) { + if (context.checkPermission(componentPerm, pid, uid, callerToken) + == PERMISSION_GRANTED) { return; } else { missingPerm = componentPerm; @@ -497,7 +506,8 @@ public abstract class ContentProvider implements ComponentCallbacks2 { for (PathPermission pp : pps) { final String pathPerm = pp.getReadPermission(); if (pathPerm != null && pp.match(path)) { - if (context.checkPermission(pathPerm, pid, uid) == PERMISSION_GRANTED) { + if (context.checkPermission(pathPerm, pid, uid, callerToken) + == PERMISSION_GRANTED) { return; } else { // any denied means we lose @@ -515,8 +525,11 @@ public abstract class ContentProvider implements ComponentCallbacks2 { } // last chance, check against any uri grants - if (context.checkUriPermission(uri, pid, uid, Intent.FLAG_GRANT_READ_URI_PERMISSION) - == PERMISSION_GRANTED) { + final int callingUserId = UserHandle.getUserId(uid); + final Uri userUri = (mSingleUser && !UserHandle.isSameUser(mMyUid, uid)) + ? maybeAddUserId(uri, callingUserId) : uri; + if (context.checkUriPermission(userUri, pid, uid, Intent.FLAG_GRANT_READ_URI_PERMISSION, + callerToken) == PERMISSION_GRANTED) { return; } @@ -529,7 +542,8 @@ public abstract class ContentProvider implements ComponentCallbacks2 { } /** {@hide} */ - protected void enforceWritePermissionInner(Uri uri) throws SecurityException { + protected void enforceWritePermissionInner(Uri uri, IBinder callerToken) + throws SecurityException { final Context context = getContext(); final int pid = Binder.getCallingPid(); final int uid = Binder.getCallingUid(); @@ -542,7 +556,8 @@ public abstract class ContentProvider implements ComponentCallbacks2 { if (mExported && checkUser(pid, uid, context)) { final String componentPerm = getWritePermission(); if (componentPerm != null) { - if (context.checkPermission(componentPerm, pid, uid) == PERMISSION_GRANTED) { + if (context.checkPermission(componentPerm, pid, uid, callerToken) + == PERMISSION_GRANTED) { return; } else { missingPerm = componentPerm; @@ -559,7 +574,8 @@ public abstract class ContentProvider implements ComponentCallbacks2 { for (PathPermission pp : pps) { final String pathPerm = pp.getWritePermission(); if (pathPerm != null && pp.match(path)) { - if (context.checkPermission(pathPerm, pid, uid) == PERMISSION_GRANTED) { + if (context.checkPermission(pathPerm, pid, uid, callerToken) + == PERMISSION_GRANTED) { return; } else { // any denied means we lose @@ -577,8 +593,8 @@ public abstract class ContentProvider implements ComponentCallbacks2 { } // last chance, check against any uri grants - if (context.checkUriPermission(uri, pid, uid, Intent.FLAG_GRANT_WRITE_URI_PERMISSION) - == PERMISSION_GRANTED) { + if (context.checkUriPermission(uri, pid, uid, Intent.FLAG_GRANT_WRITE_URI_PERMISSION, + callerToken) == PERMISSION_GRANTED) { return; } @@ -1656,12 +1672,6 @@ public abstract class ContentProvider implements ComponentCallbacks2 { } private void attachInfo(Context context, ProviderInfo info, boolean testing) { - /* - * We may be using AsyncTask from binder threads. Make it init here - * so its static handler is on the main thread. - */ - AsyncTask.init(); - mNoPerms = testing; /* diff --git a/core/java/android/content/ContentProviderClient.java b/core/java/android/content/ContentProviderClient.java index cefc27f331fdb348cc1679b1ff1c2c46daf044eb..e15ac943380c15ee1b8b5b534b355b4038f29916 100644 --- a/core/java/android/content/ContentProviderClient.java +++ b/core/java/android/content/ContentProviderClient.java @@ -288,7 +288,7 @@ public class ContentProviderClient { remoteSignal = mContentProvider.createCancellationSignal(); signal.setRemote(remoteSignal); } - return mContentProvider.openFile(mPackageName, url, mode, remoteSignal); + return mContentProvider.openFile(mPackageName, url, mode, remoteSignal, null); } catch (DeadObjectException e) { if (!mStable) { mContentResolver.unstableProviderDied(mContentProvider); diff --git a/core/java/android/content/ContentProviderNative.java b/core/java/android/content/ContentProviderNative.java index 39286d6ea9b673935e10c773cec65f2469aec269..f2e7fc463ab6ff3c639fbde4af21d031ead96f9b 100644 --- a/core/java/android/content/ContentProviderNative.java +++ b/core/java/android/content/ContentProviderNative.java @@ -234,9 +234,10 @@ abstract public class ContentProviderNative extends Binder implements IContentPr String mode = data.readString(); ICancellationSignal signal = ICancellationSignal.Stub.asInterface( data.readStrongBinder()); + IBinder callerToken = data.readStrongBinder(); ParcelFileDescriptor fd; - fd = openFile(callingPkg, url, mode, signal); + fd = openFile(callingPkg, url, mode, signal, callerToken); reply.writeNoException(); if (fd != null) { reply.writeInt(1); @@ -575,7 +576,7 @@ final class ContentProviderProxy implements IContentProvider @Override public ParcelFileDescriptor openFile( - String callingPkg, Uri url, String mode, ICancellationSignal signal) + String callingPkg, Uri url, String mode, ICancellationSignal signal, IBinder token) throws RemoteException, FileNotFoundException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); @@ -586,6 +587,7 @@ final class ContentProviderProxy implements IContentProvider url.writeToParcel(data, 0); data.writeString(mode); data.writeStrongBinder(signal != null ? signal.asBinder() : null); + data.writeStrongBinder(token); mRemote.transact(IContentProvider.OPEN_FILE_TRANSACTION, data, reply, 0); diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java index c9b7d0a5dca5282a8c6733b956ed077fb9ff1f7c..26735a6c6a6c5a4ecdb8d4f4f333dc02fc6bde2b 100644 --- a/core/java/android/content/Context.java +++ b/core/java/android/content/Context.java @@ -37,6 +37,7 @@ import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.os.Handler; +import android.os.IBinder; import android.os.Looper; import android.os.StatFs; import android.os.UserHandle; @@ -2141,6 +2142,7 @@ public abstract class Context { MEDIA_SESSION_SERVICE, BATTERY_SERVICE, JOB_SCHEDULER_SERVICE, + MEDIA_PROJECTION_SERVICE, }) @Retention(RetentionPolicy.SOURCE) public @interface ServiceName {} @@ -2244,6 +2246,8 @@ public abstract class Context { * @see android.media.MediaRouter * @see #TELEPHONY_SERVICE * @see android.telephony.TelephonyManager + * @see #TELEPHONY_SUBSCRIPTION_SERVICE + * @see android.telephony.SubscriptionManager * @see #INPUT_METHOD_SERVICE * @see android.view.inputmethod.InputMethodManager * @see #UI_MODE_SERVICE @@ -2586,6 +2590,16 @@ public abstract class Context { */ public static final String TELEPHONY_SERVICE = "phone"; + /** + * Use with {@link #getSystemService} to retrieve a + * {@link android.telephony.SubscriptionManager} for handling management the + * telephony subscriptions of the device. + * + * @see #getSystemService + * @see android.telephony.SubscriptionManager + */ + public static final String TELEPHONY_SUBSCRIPTION_SERVICE = "telephony_subscription_service"; + /** * Use with {@link #getSystemService} to retrieve a * {@link android.telecom.TelecomManager} to manage telecom-related features @@ -2864,11 +2878,10 @@ public abstract class Context { /** * Use with {@link #getSystemService} to retrieve a {@link - * android.app.UsageStatsManager} for interacting with the status bar. + * android.app.usage.UsageStatsManager} for querying device usage stats. * * @see #getSystemService - * @see android.app.UsageStatsManager - * @hide + * @see android.app.usage.UsageStatsManager */ public static final String USAGE_STATS_SERVICE = "usagestats"; @@ -2921,6 +2934,11 @@ public abstract class Context { @PackageManager.PermissionResult public abstract int checkPermission(@NonNull String permission, int pid, int uid); + /** @hide */ + @PackageManager.PermissionResult + public abstract int checkPermission(@NonNull String permission, int pid, int uid, + IBinder callerToken); + /** * Determine whether the calling process of an IPC you are handling has been * granted a particular permission. This is basically the same as calling @@ -3108,6 +3126,10 @@ public abstract class Context { public abstract int checkUriPermission(Uri uri, int pid, int uid, @Intent.AccessUriMode int modeFlags); + /** @hide */ + public abstract int checkUriPermission(Uri uri, int pid, int uid, + @Intent.AccessUriMode int modeFlags, IBinder callerToken); + /** * Determine whether the calling process and user ID has been * granted permission to access a specific URI. This is basically diff --git a/core/java/android/content/ContextWrapper.java b/core/java/android/content/ContextWrapper.java index ad7c350aa24e1a75ac58badc911ec121bca27182..cfae1cfeb0d087540745bb56c01010257f987b1a 100644 --- a/core/java/android/content/ContextWrapper.java +++ b/core/java/android/content/ContextWrapper.java @@ -29,6 +29,7 @@ import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Bundle; import android.os.Handler; +import android.os.IBinder; import android.os.Looper; import android.os.UserHandle; import android.view.DisplayAdjustments; @@ -566,6 +567,12 @@ public class ContextWrapper extends Context { return mBase.checkPermission(permission, pid, uid); } + /** @hide */ + @Override + public int checkPermission(String permission, int pid, int uid, IBinder callerToken) { + return mBase.checkPermission(permission, pid, uid, callerToken); + } + @Override public int checkCallingPermission(String permission) { return mBase.checkCallingPermission(permission); @@ -608,6 +615,12 @@ public class ContextWrapper extends Context { return mBase.checkUriPermission(uri, pid, uid, modeFlags); } + /** @hide */ + @Override + public int checkUriPermission(Uri uri, int pid, int uid, int modeFlags, IBinder callerToken) { + return mBase.checkUriPermission(uri, pid, uid, modeFlags, callerToken); + } + @Override public int checkCallingUriPermission(Uri uri, int modeFlags) { return mBase.checkCallingUriPermission(uri, modeFlags); diff --git a/core/java/android/content/IContentProvider.java b/core/java/android/content/IContentProvider.java index f92a4044090419679d2396b502fe7f7d14e1fe15..f8584067ce90a046958cfde849a322f40dd893c8 100644 --- a/core/java/android/content/IContentProvider.java +++ b/core/java/android/content/IContentProvider.java @@ -47,7 +47,8 @@ public interface IContentProvider extends IInterface { public int update(String callingPkg, Uri url, ContentValues values, String selection, String[] selectionArgs) throws RemoteException; public ParcelFileDescriptor openFile( - String callingPkg, Uri url, String mode, ICancellationSignal signal) + String callingPkg, Uri url, String mode, ICancellationSignal signal, + IBinder callerToken) throws RemoteException, FileNotFoundException; public AssetFileDescriptor openAssetFile( String callingPkg, Uri url, String mode, ICancellationSignal signal) diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java index af6f1816ae8c1f02f457f0ee9974ab5f3c649e82..2fe727cfaf7252bdf2951348936df326c622a9ba 100644 --- a/core/java/android/content/Intent.java +++ b/core/java/android/content/Intent.java @@ -41,6 +41,7 @@ import android.os.Bundle; import android.os.IBinder; import android.os.Parcel; import android.os.Parcelable; +import android.os.Process; import android.os.StrictMode; import android.os.UserHandle; import android.provider.DocumentsContract; @@ -876,12 +877,44 @@ public class Intent implements Parcelable, Cloneable { * related methods. */ public static Intent createChooser(Intent target, CharSequence title) { + return createChooser(target, title, null); + } + + /** + * Convenience function for creating a {@link #ACTION_CHOOSER} Intent. + * + *

      Builds a new {@link #ACTION_CHOOSER} Intent that wraps the given + * target intent, also optionally supplying a title. If the target + * intent has specified {@link #FLAG_GRANT_READ_URI_PERMISSION} or + * {@link #FLAG_GRANT_WRITE_URI_PERMISSION}, then these flags will also be + * set in the returned chooser intent, with its ClipData set appropriately: + * either a direct reflection of {@link #getClipData()} if that is non-null, + * or a new ClipData built from {@link #getData()}.

      + * + *

      The caller may optionally supply an {@link IntentSender} to receive a callback + * when the user makes a choice. This can be useful if the calling application wants + * to remember the last chosen target and surface it as a more prominent or one-touch + * affordance elsewhere in the UI for next time.

      + * + * @param target The Intent that the user will be selecting an activity + * to perform. + * @param title Optional title that will be displayed in the chooser. + * @param sender Optional IntentSender to be called when a choice is made. + * @return Return a new Intent object that you can hand to + * {@link Context#startActivity(Intent) Context.startActivity()} and + * related methods. + */ + public static Intent createChooser(Intent target, CharSequence title, IntentSender sender) { Intent intent = new Intent(ACTION_CHOOSER); intent.putExtra(EXTRA_INTENT, target); if (title != null) { intent.putExtra(EXTRA_TITLE, title); } + if (sender != null) { + intent.putExtra(EXTRA_CHOSEN_COMPONENT_INTENT_SENDER, sender); + } + // Migrate any clip data and flags from target. int permFlags = target.getFlags() & (FLAG_GRANT_READ_URI_PERMISSION | FLAG_GRANT_WRITE_URI_PERMISSION | FLAG_GRANT_PERSISTABLE_URI_PERMISSION @@ -1368,13 +1401,35 @@ public class Intent implements Parcelable, Cloneable { = "android.intent.extra.ORIGINATING_URI"; /** - * Used as a URI extra field with {@link #ACTION_INSTALL_PACKAGE} and - * {@link #ACTION_VIEW} to indicate the HTTP referrer URI associated with the Intent - * data field or {@link #EXTRA_ORIGINATING_URI}. + * This extra can be used with any Intent used to launch an activity, supplying information + * about who is launching that activity. This field contains a {@link android.net.Uri} + * object, typically an http: or https: URI of the web site that the referral came from; + * it can also use the {@link #URI_ANDROID_APP_SCHEME android-app:} scheme to identify + * a native application that it came from. + * + *

      To retrieve this value in a client, use {@link android.app.Activity#getReferrer} + * instead of directly retrieving the extra. It is also valid for applications to + * instead supply {@link #EXTRA_REFERRER_NAME} for cases where they can only create + * a string, not a Uri; the field here, if supplied, will always take precedence, + * however.

      + * + * @see #EXTRA_REFERRER_NAME */ public static final String EXTRA_REFERRER = "android.intent.extra.REFERRER"; + /** + * Alternate version of {@link #EXTRA_REFERRER} that supplies the URI as a String rather + * than a {@link android.net.Uri} object. Only for use in cases where Uri objects can + * not be created, in particular when Intent extras are supplied through the + * {@link #URI_INTENT_SCHEME intent:} or {@link #URI_ANDROID_APP_SCHEME android-app:} + * schemes. + * + * @see #EXTRA_REFERRER + */ + public static final String EXTRA_REFERRER_NAME + = "android.intent.extra.REFERRER_NAME"; + /** * Used as an int extra field with {@link #ACTION_INSTALL_PACKAGE} and * {@link} #ACTION_VIEW} to indicate the uid of the package that initiated the install @@ -3139,6 +3194,26 @@ public class Intent implements Parcelable, Cloneable { public static final String EXTRA_REPLACEMENT_EXTRAS = "android.intent.extra.REPLACEMENT_EXTRAS"; + /** + * An {@link IntentSender} that will be notified if a user successfully chooses a target + * component to handle an action in an {@link #ACTION_CHOOSER} activity. The IntentSender + * will have the extra {@link #EXTRA_CHOSEN_COMPONENT} appended to it containing the + * {@link ComponentName} of the chosen component. + * + *

      In some situations this callback may never come, for example if the user abandons + * the chooser, switches to another task or any number of other reasons. Apps should not + * be written assuming that this callback will always occur.

      + */ + public static final String EXTRA_CHOSEN_COMPONENT_INTENT_SENDER = + "android.intent.extra.CHOSEN_COMPONENT_INTENT_SENDER"; + + /** + * The {@link ComponentName} chosen by the user to complete an action. + * + * @see #EXTRA_CHOSEN_COMPONENT_INTENT_SENDER + */ + public static final String EXTRA_CHOSEN_COMPONENT = "android.intent.extra.CHOSEN_COMPONENT"; + /** * A {@link android.view.KeyEvent} object containing the event that * triggered the creation of the Intent it is in. @@ -3535,6 +3610,10 @@ public class Intent implements Parcelable, Cloneable { * the user navigates away from it, the activity is finished. This may also * be set with the {@link android.R.styleable#AndroidManifestActivity_noHistory * noHistory} attribute. + * + *

      If set, {@link android.app.Activity#onActivityResult onActivityResult()} + * is never invoked when the current activity starts a new activity which + * sets a result and finishes. */ public static final int FLAG_ACTIVITY_NO_HISTORY = 0x40000000; /** @@ -3688,7 +3767,7 @@ public class Intent implements Parcelable, Cloneable { * This flag is used to open a document into a new task rooted at the activity launched * by this Intent. Through the use of this flag, or its equivalent attribute, * {@link android.R.attr#documentLaunchMode} multiple instances of the same activity - * containing different douments will appear in the recent tasks list. + * containing different documents will appear in the recent tasks list. * *

      The use of the activity attribute form of this, * {@link android.R.attr#documentLaunchMode}, is @@ -3866,6 +3945,91 @@ public class Intent implements Parcelable, Cloneable { */ public static final int URI_INTENT_SCHEME = 1<<0; + /** + * Flag for use with {@link #toUri} and {@link #parseUri}: the URI string + * always has the "android-app:" scheme. This is a variation of + * {@link #URI_INTENT_SCHEME} whose format is simpler for the case of an + * http/https URI being delivered to a specific package name. The format + * is: + * + *

      +     * android-app://{package_id}[/{scheme}[/{host}[/{path}]]][#Intent;{...}]
      + * + *

      In this scheme, only the package_id is required. If you include a host, + * you must also include a scheme; including a path also requires both a host and a scheme. + * The final #Intent; fragment can be used without a scheme, host, or path. + * Note that this can not be + * used with intents that have a {@link #setSelector}, since the base intent + * will always have an explicit package name.

      + * + *

      Some examples of how this scheme maps to Intent objects:

      + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
      URI Intent
      android-app://com.example.app + * + * + *
      Action: {@link #ACTION_MAIN}
      Package: com.example.app
      android-app://com.example.app/http/example.com + * + * + * + *
      Action: {@link #ACTION_VIEW}
      Data: http://example.com/
      Package: com.example.app
      android-app://com.example.app/http/example.com/foo?1234 + * + * + * + *
      Action: {@link #ACTION_VIEW}
      Data: http://example.com/foo?1234
      Package: com.example.app
      android-app://com.example.app/
      #Intent;action=com.example.MY_ACTION;end
      + * + * + *
      Action: com.example.MY_ACTION
      Package: com.example.app
      android-app://com.example.app/http/example.com/foo?1234
      #Intent;action=com.example.MY_ACTION;end
      + * + * + * + *
      Action: com.example.MY_ACTION
      Data: http://example.com/foo?1234
      Package: com.example.app
      android-app://com.example.app/
      #Intent;action=com.example.MY_ACTION;
      i.some_int=100;S.some_str=hello;end
      + * + * + * + *
      Action: com.example.MY_ACTION
      Package: com.example.app
      Extras: some_int=(int)100
      some_str=(String)hello
      + */ + public static final int URI_ANDROID_APP_SCHEME = 1<<1; + + /** + * Flag for use with {@link #toUri} and {@link #parseUri}: allow parsing + * of unsafe information. In particular, the flags {@link #FLAG_GRANT_READ_URI_PERMISSION}, + * {@link #FLAG_GRANT_WRITE_URI_PERMISSION}, {@link #FLAG_GRANT_PERSISTABLE_URI_PERMISSION}, + * and {@link #FLAG_GRANT_PREFIX_URI_PERMISSION} flags can not be set, so that the + * generated Intent can not cause unexpected data access to happen. + * + *

      If you do not trust the source of the URI being parsed, you should still do further + * processing to protect yourself from it. In particular, when using it to start an + * activity you should usually add in {@link #CATEGORY_BROWSABLE} to limit the activities + * that can handle it.

      + */ + public static final int URI_ALLOW_UNSAFE = 1<<2; + // --------------------------------------------------------------------- private String mAction; @@ -4126,8 +4290,8 @@ public class Intent implements Parcelable, Cloneable { * the scheme and full path. * * @param uri The URI to turn into an Intent. - * @param flags Additional processing flags. Either 0 or - * {@link #URI_INTENT_SCHEME}. + * @param flags Additional processing flags. Either 0, + * {@link #URI_INTENT_SCHEME}, or {@link #URI_ANDROID_APP_SCHEME}. * * @return Intent The newly created Intent object. * @@ -4140,9 +4304,11 @@ public class Intent implements Parcelable, Cloneable { public static Intent parseUri(String uri, int flags) throws URISyntaxException { int i = 0; try { - // Validate intent scheme for if requested. - if ((flags&URI_INTENT_SCHEME) != 0) { - if (!uri.startsWith("intent:")) { + final boolean androidApp = uri.startsWith("android-app:"); + + // Validate intent scheme if requested. + if ((flags&(URI_INTENT_SCHEME|URI_ANDROID_APP_SCHEME)) != 0) { + if (!uri.startsWith("intent:") && !androidApp) { Intent intent = new Intent(ACTION_VIEW); try { intent.setData(Uri.parse(uri)); @@ -4153,24 +4319,40 @@ public class Intent implements Parcelable, Cloneable { } } - // simple case i = uri.lastIndexOf("#"); - if (i == -1) return new Intent(ACTION_VIEW, Uri.parse(uri)); + // simple case + if (i == -1) { + if (!androidApp) { + return new Intent(ACTION_VIEW, Uri.parse(uri)); + } // old format Intent URI - if (!uri.startsWith("#Intent;", i)) return getIntentOld(uri); + } else if (!uri.startsWith("#Intent;", i)) { + if (!androidApp) { + return getIntentOld(uri, flags); + } else { + i = -1; + } + } // new format Intent intent = new Intent(ACTION_VIEW); Intent baseIntent = intent; + boolean explicitAction = false; + boolean inSelector = false; // fetch data part, if present - String data = i >= 0 ? uri.substring(0, i) : null; String scheme = null; - i += "#Intent;".length(); + String data; + if (i >= 0) { + data = uri.substring(0, i); + i += 8; // length of "#Intent;" + } else { + data = uri; + } // loop over contents of Intent, all name=value; - while (!uri.startsWith("end", i)) { + while (i >= 0 && !uri.startsWith("end", i)) { int eq = uri.indexOf('=', i); if (eq < 0) eq = i-1; int semi = uri.indexOf(';', i); @@ -4179,6 +4361,9 @@ public class Intent implements Parcelable, Cloneable { // action if (uri.startsWith("action=", i)) { intent.setAction(value); + if (!inSelector) { + explicitAction = true; + } } // categories @@ -4194,6 +4379,9 @@ public class Intent implements Parcelable, Cloneable { // launch flags else if (uri.startsWith("launchFlags=", i)) { intent.mFlags = Integer.decode(value).intValue(); + if ((flags& URI_ALLOW_UNSAFE) == 0) { + intent.mFlags &= ~IMMUTABLE_FLAGS; + } } // package @@ -4208,7 +4396,11 @@ public class Intent implements Parcelable, Cloneable { // scheme else if (uri.startsWith("scheme=", i)) { - scheme = value; + if (inSelector) { + intent.mData = Uri.parse(value + ":"); + } else { + scheme = value; + } } // source bounds @@ -4219,6 +4411,7 @@ public class Intent implements Parcelable, Cloneable { // selector else if (semi == (i+3) && uri.startsWith("SEL", i)) { intent = new Intent(); + inSelector = true; } // extra @@ -4244,9 +4437,11 @@ public class Intent implements Parcelable, Cloneable { i = semi + 1; } - if (intent != baseIntent) { + if (inSelector) { // The Intent had a selector; fix it up. - baseIntent.setSelector(intent); + if (baseIntent.mPackage == null) { + baseIntent.setSelector(intent); + } intent = baseIntent; } @@ -4256,6 +4451,52 @@ public class Intent implements Parcelable, Cloneable { if (scheme != null) { data = scheme + ':' + data; } + } else if (data.startsWith("android-app:")) { + if (data.charAt(12) == '/' && data.charAt(13) == '/') { + // Correctly formed android-app, first part is package name. + int end = data.indexOf('/', 14); + if (end < 0) { + // All we have is a package name. + intent.mPackage = data.substring(14); + if (!explicitAction) { + intent.setAction(ACTION_MAIN); + } + data = ""; + } else { + // Target the Intent at the given package name always. + String authority = null; + intent.mPackage = data.substring(14, end); + int newEnd; + if ((end+1) < data.length()) { + if ((newEnd=data.indexOf('/', end+1)) >= 0) { + // Found a scheme, remember it. + scheme = data.substring(end+1, newEnd); + end = newEnd; + if (end < data.length() && (newEnd=data.indexOf('/', end+1)) >= 0) { + // Found a authority, remember it. + authority = data.substring(end+1, newEnd); + end = newEnd; + } + } else { + // All we have is a scheme. + scheme = data.substring(end+1); + } + } + if (scheme == null) { + // If there was no scheme, then this just targets the package. + if (!explicitAction) { + intent.setAction(ACTION_MAIN); + } + data = ""; + } else if (authority == null) { + data = scheme + ":"; + } else { + data = scheme + "://" + authority + data.substring(end); + } + } + } else { + data = ""; + } } if (data.length() > 0) { @@ -4275,6 +4516,10 @@ public class Intent implements Parcelable, Cloneable { } public static Intent getIntentOld(String uri) throws URISyntaxException { + return getIntentOld(uri, 0); + } + + private static Intent getIntentOld(String uri, int flags) throws URISyntaxException { Intent intent; int i = uri.lastIndexOf('#'); @@ -4323,6 +4568,9 @@ public class Intent implements Parcelable, Cloneable { i += 12; int j = uri.indexOf(')', i); intent.mFlags = Integer.decode(uri.substring(i, j)).intValue(); + if ((flags& URI_ALLOW_UNSAFE) == 0) { + intent.mFlags &= ~IMMUTABLE_FLAGS; + } i = j + 1; } @@ -7031,14 +7279,53 @@ public class Intent implements Parcelable, Cloneable { *

      You can convert the returned string back to an Intent with * {@link #getIntent}. * - * @param flags Additional operating flags. Either 0 or - * {@link #URI_INTENT_SCHEME}. + * @param flags Additional operating flags. Either 0, + * {@link #URI_INTENT_SCHEME}, or {@link #URI_ANDROID_APP_SCHEME}. * * @return Returns a URI encoding URI string describing the entire contents * of the Intent. */ public String toUri(int flags) { StringBuilder uri = new StringBuilder(128); + if ((flags&URI_ANDROID_APP_SCHEME) != 0) { + if (mPackage == null) { + throw new IllegalArgumentException( + "Intent must include an explicit package name to build an android-app: " + + this); + } + uri.append("android-app://"); + uri.append(mPackage); + String scheme = null; + if (mData != null) { + scheme = mData.getScheme(); + if (scheme != null) { + uri.append('/'); + uri.append(scheme); + String authority = mData.getEncodedAuthority(); + if (authority != null) { + uri.append('/'); + uri.append(authority); + String path = mData.getEncodedPath(); + if (path != null) { + uri.append(path); + } + String queryParams = mData.getEncodedQuery(); + if (queryParams != null) { + uri.append('?'); + uri.append(queryParams); + } + String fragment = mData.getEncodedFragment(); + if (fragment != null) { + uri.append('#'); + uri.append(fragment); + } + } + } + } + toUriFragment(uri, null, scheme == null ? Intent.ACTION_MAIN : Intent.ACTION_VIEW, + mPackage, flags); + return uri.toString(); + } String scheme = null; if (mData != null) { String data = mData.toString(); @@ -7068,27 +7355,38 @@ public class Intent implements Parcelable, Cloneable { uri.append("intent:"); } - uri.append("#Intent;"); + toUriFragment(uri, scheme, Intent.ACTION_VIEW, null, flags); - toUriInner(uri, scheme, flags); + return uri.toString(); + } + + private void toUriFragment(StringBuilder uri, String scheme, String defAction, + String defPackage, int flags) { + StringBuilder frag = new StringBuilder(128); + + toUriInner(frag, scheme, defAction, defPackage, flags); if (mSelector != null) { - uri.append("SEL;"); + frag.append("SEL;"); // Note that for now we are not going to try to handle the // data part; not clear how to represent this as a URI, and // not much utility in it. - mSelector.toUriInner(uri, null, flags); + mSelector.toUriInner(frag, mSelector.mData != null ? mSelector.mData.getScheme() : null, + null, null, flags); } - uri.append("end"); - - return uri.toString(); + if (frag.length() > 0) { + uri.append("#Intent;"); + uri.append(frag); + uri.append("end"); + } } - private void toUriInner(StringBuilder uri, String scheme, int flags) { + private void toUriInner(StringBuilder uri, String scheme, String defAction, + String defPackage, int flags) { if (scheme != null) { uri.append("scheme=").append(scheme).append(';'); } - if (mAction != null) { + if (mAction != null && !mAction.equals(defAction)) { uri.append("action=").append(Uri.encode(mAction)).append(';'); } if (mCategories != null) { @@ -7102,7 +7400,7 @@ public class Intent implements Parcelable, Cloneable { if (mFlags != 0) { uri.append("launchFlags=0x").append(Integer.toHexString(mFlags)).append(';'); } - if (mPackage != null) { + if (mPackage != null && !mPackage.equals(defPackage)) { uri.append("package=").append(Uri.encode(mPackage)).append(';'); } if (mComponent != null) { @@ -7446,8 +7744,10 @@ public class Intent implements Parcelable, Cloneable { */ public void prepareToEnterProcess() { if (mContentUserHint != UserHandle.USER_CURRENT) { - fixUris(mContentUserHint); - mContentUserHint = UserHandle.USER_CURRENT; + if (UserHandle.getAppId(Process.myUid()) != Process.SYSTEM_UID) { + fixUris(mContentUserHint); + mContentUserHint = UserHandle.USER_CURRENT; + } } } diff --git a/core/java/android/content/pm/IPackageManager.aidl b/core/java/android/content/pm/IPackageManager.aidl index b37713a64832109e45b54003ced9e27c6fd33c43..b518498c3ad4ab5923a0951aae492e5c634cf8c0 100644 --- a/core/java/android/content/pm/IPackageManager.aidl +++ b/core/java/android/content/pm/IPackageManager.aidl @@ -438,6 +438,7 @@ interface IPackageManager { boolean isFirstBoot(); boolean isOnlyCoreApps(); + boolean isUpgrade(); void setPermissionEnforced(String permission, boolean enforced); boolean isPermissionEnforced(String permission); diff --git a/core/java/android/content/pm/LabeledIntent.aidl b/core/java/android/content/pm/LabeledIntent.aidl new file mode 100644 index 0000000000000000000000000000000000000000..ad9675924ab599b33f2c91d0c961e139395fdd36 --- /dev/null +++ b/core/java/android/content/pm/LabeledIntent.aidl @@ -0,0 +1,19 @@ +/* + * Copyright 2014, 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.content.pm; + +parcelable LabeledIntent; diff --git a/core/java/android/content/pm/LauncherApps.java b/core/java/android/content/pm/LauncherApps.java index 5ee0b673e3e5d2a08c0f57e2bbc4d9988885f21e..c16434073a78d5399f43e1893823c3eecacf3b42 100644 --- a/core/java/android/content/pm/LauncherApps.java +++ b/core/java/android/content/pm/LauncherApps.java @@ -499,20 +499,4 @@ public class LauncherApps { obtainMessage(MSG_UNAVAILABLE, info).sendToTarget(); } } - - /** - * TODO Remove after 2014-09-22 - * @hide - */ - public void addCallback(Callback callback) { - registerCallback(callback); - } - - /** - * TODO Remove after 2014-09-22 - * @hide - */ - public void removeCallback(Callback callback) { - unregisterCallback(callback); - } } diff --git a/core/java/android/content/pm/PackageInfo.java b/core/java/android/content/pm/PackageInfo.java index b66bd01727580a2d1ad82ecda9a54a4635b3b4b1..92232693e7d21033962d53ab9e59cbab7ff9090c 100644 --- a/core/java/android/content/pm/PackageInfo.java +++ b/core/java/android/content/pm/PackageInfo.java @@ -41,14 +41,30 @@ public class PackageInfo implements Parcelable { * attribute. */ public int versionCode; - + /** * The version name of this package, as specified by the <manifest> * tag's {@link android.R.styleable#AndroidManifest_versionName versionName} * attribute. */ public String versionName; - + + /** + * The revision number of the base APK for this package, as specified by the + * <manifest> tag's + * {@link android.R.styleable#AndroidManifest_revisionCode revisionCode} + * attribute. + */ + public int baseRevisionCode; + + /** + * The revision number of any split APKs for this package, as specified by + * the <manifest> tag's + * {@link android.R.styleable#AndroidManifest_revisionCode revisionCode} + * attribute. Indexes are a 1:1 mapping against {@link #splitNames}. + */ + public int[] splitRevisionCodes; + /** * The shared user ID name of this package, as specified by the <manifest> * tag's {@link android.R.styleable#AndroidManifest_sharedUserId sharedUserId} @@ -257,21 +273,26 @@ public class PackageInfo implements Parcelable { public PackageInfo() { } + @Override public String toString() { return "PackageInfo{" + Integer.toHexString(System.identityHashCode(this)) + " " + packageName + "}"; } + @Override public int describeContents() { return 0; } + @Override public void writeToParcel(Parcel dest, int parcelableFlags) { dest.writeString(packageName); dest.writeStringArray(splitNames); dest.writeInt(versionCode); dest.writeString(versionName); + dest.writeInt(baseRevisionCode); + dest.writeIntArray(splitRevisionCodes); dest.writeString(sharedUserId); dest.writeInt(sharedUserLabel); if (applicationInfo != null) { @@ -305,10 +326,12 @@ public class PackageInfo implements Parcelable { public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + @Override public PackageInfo createFromParcel(Parcel source) { return new PackageInfo(source); } + @Override public PackageInfo[] newArray(int size) { return new PackageInfo[size]; } @@ -316,9 +339,11 @@ public class PackageInfo implements Parcelable { private PackageInfo(Parcel source) { packageName = source.readString(); - splitNames = source.readStringArray(); + splitNames = source.createStringArray(); versionCode = source.readInt(); versionName = source.readString(); + baseRevisionCode = source.readInt(); + splitRevisionCodes = source.createIntArray(); sharedUserId = source.readString(); sharedUserLabel = source.readInt(); int hasApp = source.readInt(); diff --git a/core/java/android/content/pm/PackageInfoLite.java b/core/java/android/content/pm/PackageInfoLite.java index e336c5f752ab9870ef3d7d539a1e441170fa6727..1efe082b7fdf9880c5b7700409d74b67d2f0c5d8 100644 --- a/core/java/android/content/pm/PackageInfoLite.java +++ b/core/java/android/content/pm/PackageInfoLite.java @@ -19,6 +19,8 @@ package android.content.pm; import android.os.Parcel; import android.os.Parcelable; +import com.android.internal.content.PackageHelper; + /** * Basic information about a package as specified in its manifest. * Utility class used in PackageManager methods @@ -31,11 +33,19 @@ public class PackageInfoLite implements Parcelable { */ public String packageName; + /** Names of any split APKs, ordered by parsed splitName */ + public String[] splitNames; + /** * The android:versionCode of the package. */ public int versionCode; + /** Revision code of base APK */ + public int baseRevisionCode; + /** Revision codes of any split APKs, ordered by parsed splitName */ + public int[] splitRevisionCodes; + /** * The android:multiArch flag from the package manifest. If set, * we will extract all native libraries for the given app, not just those @@ -70,7 +80,10 @@ public class PackageInfoLite implements Parcelable { public void writeToParcel(Parcel dest, int parcelableFlags) { dest.writeString(packageName); + dest.writeStringArray(splitNames); dest.writeInt(versionCode); + dest.writeInt(baseRevisionCode); + dest.writeIntArray(splitRevisionCodes); dest.writeInt(recommendedInstallLocation); dest.writeInt(installLocation); dest.writeInt(multiArch ? 1 : 0); @@ -96,7 +109,10 @@ public class PackageInfoLite implements Parcelable { private PackageInfoLite(Parcel source) { packageName = source.readString(); + splitNames = source.createStringArray(); versionCode = source.readInt(); + baseRevisionCode = source.readInt(); + splitRevisionCodes = source.createIntArray(); recommendedInstallLocation = source.readInt(); installLocation = source.readInt(); multiArch = (source.readInt() != 0); diff --git a/core/java/android/content/pm/PackageItemInfo.java b/core/java/android/content/pm/PackageItemInfo.java index cacdf8e36250a914e331477f262837d43e309fbb..22a899cda05b7739ee3a884962436481ca849a29 100644 --- a/core/java/android/content/pm/PackageItemInfo.java +++ b/core/java/android/content/pm/PackageItemInfo.java @@ -138,7 +138,7 @@ public class PackageItemInfo { } return packageName; } - + /** * Retrieve the current graphical icon associated with this item. This * will call back on the given PackageManager to load the icon from @@ -155,6 +155,23 @@ public class PackageItemInfo { return pm.loadItemIcon(this, getApplicationInfo()); } + /** + * Retrieve the current graphical icon associated with this item without + * the addition of a work badge if applicable. + * This will call back on the given PackageManager to load the icon from + * the application. + * + * @param pm A PackageManager from which the icon can be loaded; usually + * the PackageManager from which you originally retrieved this item. + * + * @return Returns a Drawable containing the item's icon. If the + * item does not have an icon, the item's default icon is returned + * such as the default activity icon. + */ + public Drawable loadUnbadgedIcon(PackageManager pm) { + return pm.loadUnbadgedItemIcon(this, getApplicationInfo()); + } + /** * Retrieve the current graphical banner associated with this item. This * will call back on the given PackageManager to load the banner from diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index e5191630fa60ba22ca928fff71ed5cbd3c9a4572..e9f7c50431b53b2a255471079789c158ffaafabf 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -3866,6 +3866,13 @@ public abstract class PackageManager { */ public abstract VerifierDeviceIdentity getVerifierDeviceIdentity(); + /** + * Returns true if the device is upgrading, such as first boot after OTA. + * + * @hide + */ + public abstract boolean isUpgrade(); + /** * Return interface that offers the ability to install, upgrade, and remove * applications on the device. @@ -3911,6 +3918,11 @@ public abstract class PackageManager { */ public abstract Drawable loadItemIcon(PackageItemInfo itemInfo, ApplicationInfo appInfo); + /** + * @hide + */ + public abstract Drawable loadUnbadgedItemIcon(PackageItemInfo itemInfo, ApplicationInfo appInfo); + /** {@hide} */ public abstract boolean isPackageAvailable(String packageName); diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java index 131ca3910252f53b7c044f4dd4233cab9cd9a791..77dc27aee9e5f24a1eaf1173679d08939ed5497e 100644 --- a/core/java/android/content/pm/PackageParser.java +++ b/core/java/android/content/pm/PackageParser.java @@ -74,7 +74,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; -import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Set; @@ -262,11 +261,16 @@ public class PackageParser { /** Paths of any split APKs, ordered by parsed splitName */ public final String[] splitCodePaths; + /** Revision code of base APK */ + public final int baseRevisionCode; + /** Revision codes of any split APKs, ordered by parsed splitName */ + public final int[] splitRevisionCodes; + public final boolean coreApp; public final boolean multiArch; public PackageLite(String codePath, ApkLite baseApk, String[] splitNames, - String[] splitCodePaths) { + String[] splitCodePaths, int[] splitRevisionCodes) { this.packageName = baseApk.packageName; this.versionCode = baseApk.versionCode; this.installLocation = baseApk.installLocation; @@ -275,6 +279,8 @@ public class PackageParser { this.codePath = codePath; this.baseCodePath = baseApk.codePath; this.splitCodePaths = splitCodePaths; + this.baseRevisionCode = baseApk.revisionCode; + this.splitRevisionCodes = splitRevisionCodes; this.coreApp = baseApk.coreApp; this.multiArch = baseApk.multiArch; } @@ -297,6 +303,7 @@ public class PackageParser { public final String packageName; public final String splitName; public final int versionCode; + public final int revisionCode; public final int installLocation; public final VerifierInfo[] verifiers; public final Signature[] signatures; @@ -304,12 +311,13 @@ public class PackageParser { public final boolean multiArch; public ApkLite(String codePath, String packageName, String splitName, int versionCode, - int installLocation, List verifiers, Signature[] signatures, - boolean coreApp, boolean multiArch) { + int revisionCode, int installLocation, List verifiers, + Signature[] signatures, boolean coreApp, boolean multiArch) { this.codePath = codePath; this.packageName = packageName; this.splitName = splitName; this.versionCode = versionCode; + this.revisionCode = revisionCode; this.installLocation = installLocation; this.verifiers = verifiers.toArray(new VerifierInfo[verifiers.size()]); this.signatures = signatures; @@ -380,7 +388,7 @@ public class PackageParser { */ public static PackageInfo generatePackageInfo(PackageParser.Package p, int gids[], int flags, long firstInstallTime, long lastUpdateTime, - HashSet grantedPermissions, PackageUserState state) { + ArraySet grantedPermissions, PackageUserState state) { return generatePackageInfo(p, gids, flags, firstInstallTime, lastUpdateTime, grantedPermissions, state, UserHandle.getCallingUserId()); @@ -401,7 +409,7 @@ public class PackageParser { public static PackageInfo generatePackageInfo(PackageParser.Package p, int gids[], int flags, long firstInstallTime, long lastUpdateTime, - HashSet grantedPermissions, PackageUserState state, int userId) { + ArraySet grantedPermissions, PackageUserState state, int userId) { if (!checkUseInstalledOrHidden(flags, state)) { return null; @@ -410,6 +418,8 @@ public class PackageParser { pi.packageName = p.packageName; pi.splitNames = p.splitNames; pi.versionCode = p.mVersionCode; + pi.baseRevisionCode = p.baseRevisionCode; + pi.splitRevisionCodes = p.splitRevisionCodes; pi.versionName = p.mVersionName; pi.sharedUserId = p.mSharedUserId; pi.sharedUserLabel = p.mSharedUserLabel; @@ -648,7 +658,7 @@ public class PackageParser { throws PackageParserException { final ApkLite baseApk = parseApkLite(packageFile, flags); final String packagePath = packageFile.getAbsolutePath(); - return new PackageLite(packagePath, baseApk, null, null); + return new PackageLite(packagePath, baseApk, null, null, null); } private static PackageLite parseClusterPackageLite(File packageDir, int flags) @@ -705,20 +715,24 @@ public class PackageParser { String[] splitNames = null; String[] splitCodePaths = null; + int[] splitRevisionCodes = null; if (size > 0) { splitNames = new String[size]; splitCodePaths = new String[size]; + splitRevisionCodes = new int[size]; splitNames = apks.keySet().toArray(splitNames); Arrays.sort(splitNames, sSplitNameComparator); for (int i = 0; i < size; i++) { splitCodePaths[i] = apks.get(splitNames[i]).codePath; + splitRevisionCodes[i] = apks.get(splitNames[i]).revisionCode; } } final String codePath = packageDir.getAbsolutePath(); - return new PackageLite(codePath, baseApk, splitNames, splitCodePaths); + return new PackageLite(codePath, baseApk, splitNames, splitCodePaths, + splitRevisionCodes); } /** @@ -783,6 +797,7 @@ public class PackageParser { final int num = lite.splitNames.length; pkg.splitNames = lite.splitNames; pkg.splitCodePaths = lite.splitCodePaths; + pkg.splitRevisionCodes = lite.splitRevisionCodes; pkg.splitFlags = new int[num]; pkg.splitPrivateFlags = new int[num]; @@ -1251,25 +1266,21 @@ public class PackageParser { int installLocation = PARSE_DEFAULT_INSTALL_LOCATION; int versionCode = 0; + int revisionCode = 0; boolean coreApp = false; boolean multiArch = false; - int numFound = 0; for (int i = 0; i < attrs.getAttributeCount(); i++) { - String attr = attrs.getAttributeName(i); + final String attr = attrs.getAttributeName(i); if (attr.equals("installLocation")) { installLocation = attrs.getAttributeIntValue(i, PARSE_DEFAULT_INSTALL_LOCATION); - numFound++; } else if (attr.equals("versionCode")) { versionCode = attrs.getAttributeIntValue(i, 0); - numFound++; + } else if (attr.equals("revisionCode")) { + revisionCode = attrs.getAttributeIntValue(i, 0); } else if (attr.equals("coreApp")) { coreApp = attrs.getAttributeBooleanValue(i, false); - numFound++; - } - if (numFound >= 3) { - break; } } @@ -1303,7 +1314,7 @@ public class PackageParser { } return new ApkLite(codePath, packageSplit.first, packageSplit.second, versionCode, - installLocation, verifiers, signatures, coreApp, multiArch); + revisionCode, installLocation, verifiers, signatures, coreApp, multiArch); } /** @@ -1361,6 +1372,8 @@ public class PackageParser { com.android.internal.R.styleable.AndroidManifest); pkg.mVersionCode = pkg.applicationInfo.versionCode = sa.getInteger( com.android.internal.R.styleable.AndroidManifest_versionCode, 0); + pkg.baseRevisionCode = sa.getInteger( + com.android.internal.R.styleable.AndroidManifest_revisionCode, 0); pkg.mVersionName = sa.getNonConfigurationString( com.android.internal.R.styleable.AndroidManifest_versionName, 0); if (pkg.mVersionName != null) { @@ -3518,6 +3531,10 @@ public class PackageParser { outError[0] = " does not include authorities attribute"; return null; } + if (cpname.length() <= 0) { + outError[0] = " has empty authorities attribute"; + return null; + } p.info.authority = cpname.intern(); if (!parseProviderTags(res, parser, attrs, p, outError)) { @@ -4173,6 +4190,7 @@ public class PackageParser { public final static class Package { public String packageName; + /** Names of any split APKs, ordered by parsed splitName */ public String[] splitNames; @@ -4190,6 +4208,11 @@ public class PackageParser { /** Paths of any split APKs, ordered by parsed splitName */ public String[] splitCodePaths; + /** Revision code of base APK */ + public int baseRevisionCode; + /** Revision codes of any split APKs, ordered by parsed splitName */ + public int[] splitRevisionCodes; + /** Flags of any split APKs; ordered by parsed splitName */ public int[] splitFlags; @@ -4234,7 +4257,7 @@ public class PackageParser { // The version code declared for this package. public int mVersionCode; - + // The version name declared for this package. public String mVersionName; diff --git a/core/java/android/content/pm/PackageUserState.java b/core/java/android/content/pm/PackageUserState.java index 4dcad6f16195a2901a87d7df0b3d8b0b9dcd67a2..a9c7be37665662b517d9012be98f292022d3918d 100644 --- a/core/java/android/content/pm/PackageUserState.java +++ b/core/java/android/content/pm/PackageUserState.java @@ -18,7 +18,7 @@ package android.content.pm; import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DEFAULT; -import java.util.HashSet; +import android.util.ArraySet; /** * Per-user state information about a package. @@ -34,8 +34,8 @@ public class PackageUserState { public String lastDisableAppCaller; - public HashSet disabledComponents; - public HashSet enabledComponents; + public ArraySet disabledComponents; + public ArraySet enabledComponents; public PackageUserState() { installed = true; @@ -51,9 +51,9 @@ public class PackageUserState { hidden = o.hidden; lastDisableAppCaller = o.lastDisableAppCaller; disabledComponents = o.disabledComponents != null - ? new HashSet(o.disabledComponents) : null; + ? new ArraySet(o.disabledComponents) : null; enabledComponents = o.enabledComponents != null - ? new HashSet(o.enabledComponents) : null; + ? new ArraySet(o.enabledComponents) : null; blockUninstall = o.blockUninstall; } -} \ No newline at end of file +} diff --git a/core/java/android/content/pm/ParceledListSlice.java b/core/java/android/content/pm/ParceledListSlice.java index 8a43472a430b26bb3699870b35d5f2c98032e2d2..335a45e40777191ab081cc1daaea2d2f304e4e31 100644 --- a/core/java/android/content/pm/ParceledListSlice.java +++ b/core/java/android/content/pm/ParceledListSlice.java @@ -30,6 +30,12 @@ import java.util.List; * Transfer a large list of Parcelable objects across an IPC. Splits into * multiple transactions if needed. * + * Caveat: for efficiency and security, all elements must be the same concrete type. + * In order to avoid writing the class name of each object, we must ensure that + * each object is the same type, or else unparceling then reparceling the data may yield + * a different result if the class name encoded in the Parcelable is a Base type. + * See b/17671747. + * * @hide */ public class ParceledListSlice implements Parcelable { @@ -56,13 +62,25 @@ public class ParceledListSlice implements Parcelable { if (N <= 0) { return; } + Parcelable.Creator creator = p.readParcelableCreator(loader); + Class listElementClass = null; + int i = 0; while (i < N) { if (p.readInt() == 0) { break; } - mList.add(p.readCreator(creator, loader)); + + final T parcelable = p.readCreator(creator, loader); + if (listElementClass == null) { + listElementClass = parcelable.getClass(); + } else { + verifySameType(listElementClass, parcelable.getClass()); + } + + mList.add(parcelable); + if (DEBUG) Log.d(TAG, "Read inline #" + i + ": " + mList.get(mList.size()-1)); i++; } @@ -82,7 +100,11 @@ public class ParceledListSlice implements Parcelable { return; } while (i < N && reply.readInt() != 0) { - mList.add(reply.readCreator(creator, loader)); + final T parcelable = reply.readCreator(creator, loader); + verifySameType(listElementClass, parcelable.getClass()); + + mList.add(parcelable); + if (DEBUG) Log.d(TAG, "Read extra #" + i + ": " + mList.get(mList.size()-1)); i++; } @@ -91,6 +113,14 @@ public class ParceledListSlice implements Parcelable { } } + private static void verifySameType(final Class expected, final Class actual) { + if (!actual.equals(expected)) { + throw new IllegalArgumentException("Can't unparcel type " + + actual.getName() + " in list of type " + + expected.getName()); + } + } + public List getList() { return mList; } @@ -116,11 +146,16 @@ public class ParceledListSlice implements Parcelable { dest.writeInt(N); if (DEBUG) Log.d(TAG, "Writing " + N + " items"); if (N > 0) { + final Class listElementClass = mList.get(0).getClass(); dest.writeParcelableCreator(mList.get(0)); int i = 0; while (i < N && dest.dataSize() < MAX_FIRST_IPC_SIZE) { dest.writeInt(1); - mList.get(i).writeToParcel(dest, callFlags); + + final T parcelable = mList.get(i); + verifySameType(listElementClass, parcelable.getClass()); + parcelable.writeToParcel(dest, callFlags); + if (DEBUG) Log.d(TAG, "Wrote inline #" + i + ": " + mList.get(i)); i++; } @@ -137,7 +172,11 @@ public class ParceledListSlice implements Parcelable { if (DEBUG) Log.d(TAG, "Writing more @" + i + " of " + N); while (i < N && reply.dataSize() < MAX_IPC_SIZE) { reply.writeInt(1); - mList.get(i).writeToParcel(reply, callFlags); + + final T parcelable = mList.get(i); + verifySameType(listElementClass, parcelable.getClass()); + parcelable.writeToParcel(reply, callFlags); + if (DEBUG) Log.d(TAG, "Wrote extra #" + i + ": " + mList.get(i)); i++; } diff --git a/core/java/android/content/pm/RegisteredServicesCache.java b/core/java/android/content/pm/RegisteredServicesCache.java index 4a743a50261f7506b700d369b6521a14542d3822..391ef2269217f233dc94a2fac1a84b82daf41885 100644 --- a/core/java/android/content/pm/RegisteredServicesCache.java +++ b/core/java/android/content/pm/RegisteredServicesCache.java @@ -35,6 +35,7 @@ import android.util.SparseArray; import android.util.Xml; import com.android.internal.annotations.GuardedBy; +import com.android.internal.util.ArrayUtils; import com.android.internal.util.FastXmlSerializer; import com.google.android.collect.Lists; import com.google.android.collect.Maps; @@ -155,9 +156,19 @@ public abstract class RegisteredServicesCache { // package is going away, but it's the middle of an upgrade: keep the current // state and do nothing here. This clause is intentionally empty. } else { + int[] uids = null; // either we're adding/changing, or it's a removal without replacement, so - // we need to recalculate the set of available services - generateServicesMap(userId); + // we need to update the set of available services + if (Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE.equals(action) + || Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE.equals(action)) { + uids = intent.getIntArrayExtra(Intent.EXTRA_CHANGED_UID_LIST); + } else { + int uid = intent.getIntExtra(Intent.EXTRA_UID, -1); + if (uid > 0) { + uids = new int[] { uid }; + } + } + generateServicesMap(uids, userId); } } @@ -270,7 +281,7 @@ public abstract class RegisteredServicesCache { // Find user and lazily populate cache final UserServices user = findOrCreateUserLocked(userId); if (user.services == null) { - generateServicesMap(userId); + generateServicesMap(null, userId); } return user.services.get(type); } @@ -285,7 +296,7 @@ public abstract class RegisteredServicesCache { // Find user and lazily populate cache final UserServices user = findOrCreateUserLocked(userId); if (user.services == null) { - generateServicesMap(userId); + generateServicesMap(null, userId); } return Collections.unmodifiableCollection( new ArrayList>(user.services.values())); @@ -311,10 +322,13 @@ public abstract class RegisteredServicesCache { /** * Populate {@link UserServices#services} by scanning installed packages for * given {@link UserHandle}. + * @param changedUids the array of uids that have been affected, as mentioned in the broadcast + * or null to assume that everything is affected. + * @param userId the user for whom to update the services map. */ - private void generateServicesMap(int userId) { + private void generateServicesMap(int[] changedUids, int userId) { if (DEBUG) { - Slog.d(TAG, "generateServicesMap() for " + userId); + Slog.d(TAG, "generateServicesMap() for " + userId + ", changed UIDs = " + changedUids); } final PackageManager pm = mContext.getPackageManager(); @@ -341,8 +355,6 @@ public abstract class RegisteredServicesCache { final boolean firstScan = user.services == null; if (firstScan) { user.services = Maps.newHashMap(); - } else { - user.services.clear(); } StringBuilder changes = new StringBuilder(); @@ -399,7 +411,10 @@ public abstract class RegisteredServicesCache { ArrayList toBeRemoved = Lists.newArrayList(); for (V v1 : user.persistentServices.keySet()) { - if (!containsType(serviceInfos, v1)) { + // Remove a persisted service that's not in the currently available services list. + // And only if it is in the list of changedUids. + if (!containsType(serviceInfos, v1) + && containsUid(changedUids, user.persistentServices.get(v1))) { toBeRemoved.add(v1); } } @@ -409,8 +424,19 @@ public abstract class RegisteredServicesCache { } changed = true; user.persistentServices.remove(v1); + user.services.remove(v1); notifyListener(v1, userId, true /* removed */); } + if (DEBUG) { + Log.d(TAG, "user.services="); + for (V v : user.services.keySet()) { + Log.d(TAG, " " + v + " " + user.services.get(v)); + } + Log.d(TAG, "user.persistentServices="); + for (V v : user.persistentServices.keySet()) { + Log.d(TAG, " " + v + " " + user.persistentServices.get(v)); + } + } if (DEBUG) { if (changes.length() > 0) { Log.d(TAG, "generateServicesMap(" + mInterfaceName + "): " + @@ -426,6 +452,14 @@ public abstract class RegisteredServicesCache { } } + /** + * Returns true if the list of changed uids is null (wildcard) or the specified uid + * is contained in the list of changed uids. + */ + private boolean containsUid(int[] changedUids, int uid) { + return changedUids == null || ArrayUtils.contains(changedUids, uid); + } + private boolean containsType(ArrayList> serviceInfos, V type) { for (int i = 0, N = serviceInfos.size(); i < N; i++) { if (serviceInfos.get(i).type.equals(type)) { diff --git a/core/java/android/content/pm/Signature.java b/core/java/android/content/pm/Signature.java index 7edf4b984f9e615168634e0b1aaf568e6af35907..fdc54aedac9663c94080ad8da860eeafe402a56c 100644 --- a/core/java/android/content/pm/Signature.java +++ b/core/java/android/content/pm/Signature.java @@ -22,12 +22,14 @@ import android.os.Parcelable; import com.android.internal.util.ArrayUtils; import java.io.ByteArrayInputStream; +import java.io.InputStream; import java.lang.ref.SoftReference; import java.security.PublicKey; import java.security.cert.Certificate; import java.security.cert.CertificateEncodingException; import java.security.cert.CertificateException; import java.security.cert.CertificateFactory; +import java.security.cert.X509Certificate; import java.util.Arrays; /** @@ -252,4 +254,53 @@ public class Signature implements Parcelable { return (a.length == b.length) && ArrayUtils.containsAll(a, b) && ArrayUtils.containsAll(b, a); } + + /** + * Test if given {@link Signature} sets are effectively equal. In rare + * cases, certificates can have slightly malformed encoding which causes + * exact-byte checks to fail. + *

      + * To identify effective equality, we bounce the certificates through an + * decode/encode pass before doing the exact-byte check. To reduce attack + * surface area, we only allow a byte size delta of a few bytes. + * + * @throws CertificateException if the before/after length differs + * substantially, usually a signal of something fishy going on. + * @hide + */ + public static boolean areEffectiveMatch(Signature[] a, Signature[] b) + throws CertificateException { + final CertificateFactory cf = CertificateFactory.getInstance("X.509"); + + final Signature[] aPrime = new Signature[a.length]; + for (int i = 0; i < a.length; i++) { + aPrime[i] = bounce(cf, a[i]); + } + final Signature[] bPrime = new Signature[b.length]; + for (int i = 0; i < b.length; i++) { + bPrime[i] = bounce(cf, b[i]); + } + + return areExactMatch(aPrime, bPrime); + } + + /** + * Bounce the given {@link Signature} through a decode/encode cycle. + * + * @throws CertificateException if the before/after length differs + * substantially, usually a signal of something fishy going on. + * @hide + */ + public static Signature bounce(CertificateFactory cf, Signature s) throws CertificateException { + final InputStream is = new ByteArrayInputStream(s.mSignature); + final X509Certificate cert = (X509Certificate) cf.generateCertificate(is); + final Signature sPrime = new Signature(cert.getEncoded()); + + if (Math.abs(sPrime.mSignature.length - s.mSignature.length) > 2) { + throw new CertificateException("Bounced cert length looks fishy; before " + + s.mSignature.length + ", after " + sPrime.mSignature.length); + } + + return sPrime; + } } diff --git a/core/java/android/content/res/AssetManager.java b/core/java/android/content/res/AssetManager.java index 72f24d3e4ee8ca770efad139258bb5a76ccc4699..a17659362a7cf915985563e4d9c0d82a06fca76a 100644 --- a/core/java/android/content/res/AssetManager.java +++ b/core/java/android/content/res/AssetManager.java @@ -680,6 +680,14 @@ public final class AssetManager implements AutoCloseable { /** * Get the locales that this asset manager contains data for. + * + *

      On SDK 21 (Android 5.0: Lollipop) and above, Locale strings are valid + * BCP-47 language tags and can be + * parsed using {@link java.util.Locale#forLanguageTag(String)}. + * + *

      On SDK 20 (Android 4.4W: Kitkat for watches) and below, locale strings + * are of the form {@code ll_CC} where {@code ll} is a two letter language code, + * and {@code CC} is a two letter country code. */ public native final String[] getLocales(); diff --git a/core/java/android/content/res/ColorStateList.java b/core/java/android/content/res/ColorStateList.java index 3c290f72a53743ff0046d92b8225c8dea96f6f27..68a39d37dbdc184669d63c876e93fc680d47acc3 100644 --- a/core/java/android/content/res/ColorStateList.java +++ b/core/java/android/content/res/ColorStateList.java @@ -353,7 +353,7 @@ public class ColorStateList implements Parcelable { for (int i = 0; i < inputStates.length; i++) { final int[] inputState = inputStates[i]; for (int j = 0; j < inputState.length; j++) { - if (inputState[i] == state) { + if (inputState[j] == state) { return colorStateList; } } diff --git a/core/java/android/content/res/Configuration.java b/core/java/android/content/res/Configuration.java index 27bbb242f575a3e0577b20af3cfaac686b91bec1..14af58481f05fa6a1dfaebb4fb967c2baf362f5e 100644 --- a/core/java/android/content/res/Configuration.java +++ b/core/java/android/content/res/Configuration.java @@ -1365,13 +1365,13 @@ public final class Configuration implements Parcelable, Comparable parts = new ArrayList(); if (config.mcc != 0) { - parts.add(config.mcc + "mcc"); + parts.add("mcc" + config.mcc); if (config.mnc != 0) { - parts.add(config.mnc + "mnc"); + parts.add("mnc" + config.mnc); } } - if (!config.locale.getLanguage().isEmpty()) { + if (config.locale != null && !config.locale.getLanguage().isEmpty()) { parts.add(localeToResourceQualifier(config.locale)); } diff --git a/core/java/android/content/res/ConfigurationBoundResourceCache.java b/core/java/android/content/res/ConfigurationBoundResourceCache.java new file mode 100644 index 0000000000000000000000000000000000000000..cde7e84b70ce7ac33bf8ce7244a632e1a277bf92 --- /dev/null +++ b/core/java/android/content/res/ConfigurationBoundResourceCache.java @@ -0,0 +1,138 @@ +/* +* Copyright (C) 2014 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.content.res; + +import android.util.ArrayMap; +import android.util.LongSparseArray; +import java.lang.ref.WeakReference; + +/** + * A Cache class which can be used to cache resource objects that are easy to clone but more + * expensive to inflate. + * @hide + */ +public class ConfigurationBoundResourceCache { + + private final ArrayMap>>> mCache = + new ArrayMap>>>(); + + final Resources mResources; + + /** + * Creates a Resource cache for the given Resources instance. + * + * @param resources The Resource which can be used when creating new instances. + */ + public ConfigurationBoundResourceCache(Resources resources) { + mResources = resources; + } + + /** + * Adds a new item to the cache. + * + * @param key A custom key that uniquely identifies the resource. + * @param theme The Theme instance where this resource was loaded. + * @param constantState The constant state that can create new instances of the resource. + * + */ + public void put(long key, Resources.Theme theme, ConstantState constantState) { + if (constantState == null) { + return; + } + final String themeKey = theme == null ? "" : theme.getKey(); + LongSparseArray>> themedCache; + synchronized (this) { + themedCache = mCache.get(themeKey); + if (themedCache == null) { + themedCache = new LongSparseArray>>(1); + mCache.put(themeKey, themedCache); + } + themedCache.put(key, new WeakReference>(constantState)); + } + } + + /** + * If the resource is cached, creates a new instance of it and returns. + * + * @param key The long key which can be used to uniquely identify the resource. + * @param theme The The Theme instance where we want to load this resource. + * + * @return If this resources was loaded before, returns a new instance of it. Otherwise, returns + * null. + */ + public T get(long key, Resources.Theme theme) { + final String themeKey = theme != null ? theme.getKey() : ""; + final LongSparseArray>> themedCache; + final WeakReference> wr; + synchronized (this) { + themedCache = mCache.get(themeKey); + if (themedCache == null) { + return null; + } + wr = themedCache.get(key); + } + if (wr == null) { + return null; + } + final ConstantState entry = wr.get(); + if (entry != null) { + return (T) entry.newInstance(mResources, theme); + } else { // our entry has been purged + synchronized (this) { + // there is a potential race condition here where this entry may be put in + // another thread. But we prefer it to minimize lock duration + themedCache.delete(key); + } + } + return null; + } + + /** + * Users of ConfigurationBoundResourceCache must call this method whenever a configuration + * change happens. On this callback, the cache invalidates all resources that are not valid + * anymore. + * + * @param configChanges The configuration changes + */ + public void onConfigurationChange(final int configChanges) { + synchronized (this) { + final int size = mCache.size(); + for (int i = size - 1; i >= 0; i--) { + final LongSparseArray>> + themeCache = mCache.valueAt(i); + onConfigurationChangeInt(themeCache, configChanges); + if (themeCache.size() == 0) { + mCache.removeAt(i); + } + } + } + } + + private void onConfigurationChangeInt( + final LongSparseArray>> themeCache, + final int configChanges) { + final int size = themeCache.size(); + for (int i = size - 1; i >= 0; i--) { + final WeakReference> wr = themeCache.valueAt(i); + final ConstantState constantState = wr.get(); + if (constantState == null || Configuration.needNewResources( + configChanges, constantState.getChangingConfigurations())) { + themeCache.removeAt(i); + } + } + } + +} diff --git a/core/java/android/content/res/ConstantState.java b/core/java/android/content/res/ConstantState.java new file mode 100644 index 0000000000000000000000000000000000000000..ee609df2e2322fdfd2aa1910912fa9a5daba19bb --- /dev/null +++ b/core/java/android/content/res/ConstantState.java @@ -0,0 +1,61 @@ +/* +* Copyright (C) 2014 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.content.res; + +/** + * A cache class that can provide new instances of a particular resource which may change + * depending on the current {@link Resources.Theme} or {@link Configuration}. + *

      + * A constant state should be able to return a bitmask of changing configurations, which + * identifies the type of configuration changes that may invalidate this resource. These + * configuration changes can be obtained from {@link android.util.TypedValue}. Entities such as + * {@link android.animation.Animator} also provide a changing configuration method to include + * their dependencies (e.g. An AnimatorSet's changing configuration is the union of the + * changing configurations of each Animator in the set) + * @hide + */ +abstract public class ConstantState { + + /** + * Return a bit mask of configuration changes that will impact + * this resource (and thus require completely reloading it). + */ + abstract public int getChangingConfigurations(); + + /** + * Create a new instance without supplying resources the caller + * is running in. + */ + public abstract T newInstance(); + + /** + * Create a new instance from its constant state. This + * must be implemented for resources that change based on the target + * density of their caller (that is depending on whether it is + * in compatibility mode). + */ + public T newInstance(Resources res) { + return newInstance(); + } + + /** + * Create a new instance from its constant state. This must be + * implemented for resources that can have a theme applied. + */ + public T newInstance(Resources res, Resources.Theme theme) { + return newInstance(res); + } +} diff --git a/core/java/android/content/res/Resources.java b/core/java/android/content/res/Resources.java index 7f276c24dc71dc882ff9b9d97db3157da164d810..73913b6c17628afa9676a21a48a714b12d0064b4 100644 --- a/core/java/android/content/res/Resources.java +++ b/core/java/android/content/res/Resources.java @@ -16,6 +16,9 @@ package android.content.res; +import android.animation.Animator; +import android.animation.StateListAnimator; +import android.annotation.NonNull; import android.util.Pools.SynchronizedPool; import android.view.ViewDebug; import com.android.internal.util.XmlUtils; @@ -115,6 +118,10 @@ public class Resources { new ArrayMap>>(); private final LongSparseArray> mColorStateListCache = new LongSparseArray>(); + private final ConfigurationBoundResourceCache mAnimatorCache = + new ConfigurationBoundResourceCache(this); + private final ConfigurationBoundResourceCache mStateListAnimatorCache = + new ConfigurationBoundResourceCache(this); private TypedValue mTmpValue = new TypedValue(); private boolean mPreloading; @@ -182,6 +189,24 @@ public class Resources { return deviceDefault; } + /** + * Used by AnimatorInflater. + * + * @hide + */ + public ConfigurationBoundResourceCache getAnimatorCache() { + return mAnimatorCache; + } + + /** + * Used by AnimatorInflater. + * + * @hide + */ + public ConfigurationBoundResourceCache getStateListAnimatorCache() { + return mStateListAnimatorCache; + } + /** * This exception is thrown by the resource APIs when a requested resource * can not be found. @@ -719,10 +744,13 @@ public class Resources { * @throws NotFoundException Throws NotFoundException if the given ID does * not exist. * @see #getDrawable(int, Theme) + * @deprecated Use {@link #getDrawable(int, Theme)} instead. */ + @Deprecated + @Nullable public Drawable getDrawable(int id) throws NotFoundException { final Drawable d = getDrawable(id, null); - if (d.canApplyTheme()) { + if (d != null && d.canApplyTheme()) { Log.w(TAG, "Drawable " + getResourceName(id) + " has unresolved theme " + "attributes! Consider using Resources.getDrawable(int, Theme) or " + "Context.getDrawable(int).", new RuntimeException()); @@ -744,6 +772,7 @@ public class Resources { * @throws NotFoundException Throws NotFoundException if the given ID does * not exist. */ + @Nullable public Drawable getDrawable(int id, @Nullable Theme theme) throws NotFoundException { TypedValue value; synchronized (mAccessLock) { @@ -788,7 +817,10 @@ public class Resources { * @throws NotFoundException Throws NotFoundException if the given ID does * not exist. * @see #getDrawableForDensity(int, int, Theme) + * @deprecated Use {@link #getDrawableForDensity(int, int, Theme)} instead. */ + @Deprecated + @Nullable public Drawable getDrawableForDensity(int id, int density) throws NotFoundException { return getDrawableForDensity(id, density, null); } @@ -807,6 +839,7 @@ public class Resources { * @throws NotFoundException Throws NotFoundException if the given ID does * not exist. */ + @Nullable public Drawable getDrawableForDensity(int id, int density, @Nullable Theme theme) { TypedValue value; synchronized (mAccessLock) { @@ -1524,20 +1557,21 @@ public class Resources { * contents of the typed array are ultimately filled in by * {@link Resources#getValue}. * - * @param values The base set of attribute values, must be equal - * in length to {@code attrs} or {@code null}. All values - * must be of type {@link TypedValue#TYPE_ATTRIBUTE}. + * @param values The base set of attribute values, must be equal in + * length to {@code attrs}. All values must be of type + * {@link TypedValue#TYPE_ATTRIBUTE}. * @param attrs The desired attributes to be retrieved. * @return Returns a TypedArray holding an array of the attribute * values. Be sure to call {@link TypedArray#recycle()} * when done with it. * @hide */ - public TypedArray resolveAttributes(int[] values, int[] attrs) { + @NonNull + public TypedArray resolveAttributes(@NonNull int[] values, @NonNull int[] attrs) { final int len = attrs.length; - if (values != null && len != values.length) { + if (values == null || len != values.length) { throw new IllegalArgumentException( - "Base attribute values must be null or the same length as attrs"); + "Base attribute values must the same length as attrs"); } final TypedArray array = TypedArray.obtain(Resources.this, len); @@ -1761,23 +1795,7 @@ public class Resources { // the framework. mCompatibilityInfo.applyToDisplayMetrics(mMetrics); - int configChanges = 0xfffffff; - if (config != null) { - mTmpConfig.setTo(config); - int density = config.densityDpi; - if (density == Configuration.DENSITY_DPI_UNDEFINED) { - density = mMetrics.noncompatDensityDpi; - } - - mCompatibilityInfo.applyToConfiguration(density, mTmpConfig); - - if (mTmpConfig.locale == null) { - mTmpConfig.locale = Locale.getDefault(); - mTmpConfig.setLayoutDirection(mTmpConfig.locale); - } - configChanges = mConfiguration.updateFrom(mTmpConfig); - configChanges = ActivityInfo.activityInfoConfigToNative(configChanges); - } + int configChanges = calcConfigChanges(config); if (mConfiguration.locale == null) { mConfiguration.locale = Locale.getDefault(); mConfiguration.setLayoutDirection(mConfiguration.locale); @@ -1825,6 +1843,8 @@ public class Resources { clearDrawableCachesLocked(mDrawableCache, configChanges); clearDrawableCachesLocked(mColorDrawableCache, configChanges); + mAnimatorCache.onConfigurationChange(configChanges); + mStateListAnimatorCache.onConfigurationChange(configChanges); mColorStateListCache.clear(); @@ -1837,6 +1857,30 @@ public class Resources { } } + /** + * Called by ConfigurationBoundResourceCacheTest via reflection. + */ + private int calcConfigChanges(Configuration config) { + int configChanges = 0xfffffff; + if (config != null) { + mTmpConfig.setTo(config); + int density = config.densityDpi; + if (density == Configuration.DENSITY_DPI_UNDEFINED) { + density = mMetrics.noncompatDensityDpi; + } + + mCompatibilityInfo.applyToConfiguration(density, mTmpConfig); + + if (mTmpConfig.locale == null) { + mTmpConfig.locale = Locale.getDefault(); + mTmpConfig.setLayoutDirection(mTmpConfig.locale); + } + configChanges = mConfiguration.updateFrom(mTmpConfig); + configChanges = ActivityInfo.activityInfoConfigToNative(configChanges); + } + return configChanges; + } + private void clearDrawableCachesLocked( ArrayMap>> caches, int configChanges) { @@ -2323,7 +2367,14 @@ public class Resources { final Drawable dr; if (cs != null) { - dr = cs.newDrawable(this, theme); + final Drawable clonedDr = cs.newDrawable(this); + if (theme != null) { + dr = clonedDr.mutate(); + dr.applyTheme(theme); + dr.clearMutated(); + } else { + dr = clonedDr; + } } else if (isColorDrawable) { dr = new ColorDrawable(value.data); } else { diff --git a/core/java/android/content/res/ResourcesKey.java b/core/java/android/content/res/ResourcesKey.java index e0f1b3a3f079b0b7a4c54cbfa6421b2321c6dfc0..4ae3825a2c3a23e75411a3f02462aadce989b250 100644 --- a/core/java/android/content/res/ResourcesKey.java +++ b/core/java/android/content/res/ResourcesKey.java @@ -62,10 +62,15 @@ public final class ResourcesKey { return false; } ResourcesKey peer = (ResourcesKey) obj; - if (mResDir != peer.mResDir) { - if (mResDir == null || peer.mResDir == null) { - return false; - } else if (!mResDir.equals(peer.mResDir)) { + + if ((mResDir == null) && (peer.mResDir != null)) { + return false; + } + if ((mResDir != null) && (peer.mResDir == null)) { + return false; + } + if ((mResDir != null) && (peer.mResDir != null)) { + if (!mResDir.equals(peer.mResDir)) { return false; } } diff --git a/core/java/android/content/res/TypedArray.java b/core/java/android/content/res/TypedArray.java index 73b93c64d5246a63acc457b9514ac1e953938baf..02602fb67f2a898d65651efc67b4d11a6255313f 100644 --- a/core/java/android/content/res/TypedArray.java +++ b/core/java/android/content/res/TypedArray.java @@ -807,6 +807,9 @@ public class TypedArray { /** * Determines whether there is an attribute at index. + *

      + * Note: If the attribute was set to {@code @empty} or + * {@code @undefined}, this method returns {@code false}. * * @param index Index of attribute to retrieve. * @@ -823,6 +826,27 @@ public class TypedArray { return type != TypedValue.TYPE_NULL; } + /** + * Determines whether there is an attribute at index, returning + * {@code true} if the attribute was explicitly set to {@code @empty} and + * {@code false} only if the attribute was undefined. + * + * @param index Index of attribute to retrieve. + * + * @return True if the attribute has a value or is empty, false otherwise. + */ + public boolean hasValueOrEmpty(int index) { + if (mRecycled) { + throw new RuntimeException("Cannot make calls to a recycled instance!"); + } + + index *= AssetManager.STYLE_NUM_ENTRIES; + final int[] data = mData; + final int type = data[index+AssetManager.STYLE_TYPE]; + return type != TypedValue.TYPE_NULL + || data[index+AssetManager.STYLE_DATA] == TypedValue.DATA_NULL_EMPTY; + } + /** * Retrieve the raw TypedValue for the attribute at index * and return a temporary object holding its data. This object is only diff --git a/core/java/android/hardware/Sensor.java b/core/java/android/hardware/Sensor.java index f514e428e52531a5bb8cb4b30e168a92311bd344..fa5e9d2d2c2d95e977d4aa0a1180049e62ef355f 100644 --- a/core/java/android/hardware/Sensor.java +++ b/core/java/android/hardware/Sensor.java @@ -18,6 +18,7 @@ package android.hardware; import android.os.Build; +import android.annotation.SystemApi; /** * Class representing a sensor. Use {@link SensorManager#getSensorList} to get @@ -329,7 +330,11 @@ public final class Sensor { * A sensor of this type triggers an event each time a step is taken by the user. The only * allowed value to return is 1.0 and an event is generated for each step. Like with any other * event, the timestamp indicates when the event (here the step) occurred, this corresponds to - * when the foot hit the ground, generating a high variation in acceleration. + * when the foot hit the ground, generating a high variation in acceleration. This sensor is + * only for detecting every individual step as soon as it is taken, for example to perform dead + * reckoning. If you only need aggregate number of steps taken over a period of time, register + * for {@link #TYPE_STEP_COUNTER} instead. It is defined as a + * {@link Sensor#REPORTING_MODE_SPECIAL_TRIGGER} sensor. *

      * See {@link android.hardware.SensorEvent#values SensorEvent.values} for more details. */ @@ -349,7 +354,12 @@ public final class Sensor { * while activated. The value is returned as a float (with the fractional part set to zero) and * is reset to zero only on a system reboot. The timestamp of the event is set to the time when * the last step for that event was taken. This sensor is implemented in hardware and is - * expected to be low power. + * expected to be low power. If you want to continuously track the number of steps over a long + * period of time, do NOT unregister for this sensor, so that it keeps counting steps in the + * background even when the AP is in suspend mode and report the aggregate count when the AP + * is awake. Application needs to stay registered for this sensor because step counter does not + * count steps if it is not activated. This sensor is ideal for fitness tracking applications. + * It is defined as an {@link Sensor#REPORTING_MODE_ON_CHANGE} sensor. *

      * See {@link android.hardware.SensorEvent#values SensorEvent.values} for more details. */ @@ -502,6 +512,27 @@ public final class Sensor { */ public static final String STRING_TYPE_PICK_UP_GESTURE = "android.sensor.pick_up_gesture"; + /** + * A constant describing a wrist tilt gesture sensor. + * + * A sensor of this type triggers when the device face is tilted towards the user. + * The only allowed return value is 1.0. + * This sensor remains active until disabled. + * + * @hide This sensor is expected to only be used by the system ui + */ + @SystemApi + public static final int TYPE_WRIST_TILT_GESTURE = 26; + + /** + * A constant string describing a wrist tilt gesture sensor. + * + * @hide This sensor is expected to only be used by the system ui + * @see #TYPE_WRIST_TILT_GESTURE + */ + @SystemApi + public static final String STRING_TYPE_WRIST_TILT_GESTURE = "android.sensor.wrist_tilt_gesture"; + /** * A constant describing all sensor types. */ @@ -582,6 +613,7 @@ public final class Sensor { 1, // SENSOR_TYPE_WAKE_GESTURE 1, // SENSOR_TYPE_GLANCE_GESTURE 1, // SENSOR_TYPE_PICK_UP_GESTURE + 1, // SENSOR_TYPE_WRIST_TILT_GESTURE }; /** @@ -750,31 +782,41 @@ public final class Sensor { } /** - * Returns whether this sensor is a wake-up sensor. - *

      - * Wake up sensors wake the application processor up when they have events to deliver. When a - * wake up sensor is registered to without batching enabled, each event will wake the - * application processor up. - *

      - * When a wake up sensor is registered to with batching enabled, it - * wakes the application processor up when maxReportingLatency has elapsed or when the hardware - * FIFO storing the events from wake up sensors is getting full. + * Returns true if the sensor is a wake-up sensor. *

      - * Non-wake up sensors never wake the application processor up. Their events are only reported - * when the application processor is awake, for example because the application holds a wake - * lock, or another source woke the application processor up. + * Application Processor Power modes

      + * Application Processor(AP), is the processor on which applications run. When no wake lock is held + * and the user is not interacting with the device, this processor can enter a “Suspend” mode, + * reducing the power consumption by 10 times or more. + *

      *

      - * When a non-wake up sensor is registered to without batching enabled, the measurements made - * while the application processor is asleep might be lost and never returned. + * Non-wake-up sensors

      + * Non-wake-up sensors are sensors that do not wake the AP out of suspend to report data. While + * the AP is in suspend mode, the sensors continue to function and generate events, which are + * put in a hardware FIFO. The events in the FIFO are delivered to the application when the AP + * wakes up. If the FIFO was too small to store all events generated while the AP was in + * suspend mode, the older events are lost: the oldest data is dropped to accommodate the newer + * data. In the extreme case where the FIFO is non-existent {@code maxFifoEventCount() == 0}, + * all events generated while the AP was in suspend mode are lost. Applications using + * non-wake-up sensors should usually: + *

        + *
      • Either unregister from the sensors when they do not need them, usually in the activity’s + * {@code onPause} method. This is the most common case. + *
      • Or realize that the sensors are consuming some power while the AP is in suspend mode and + * that even then, some events might be lost. + *
      + *

      *

      - * When a non-wake up sensor is registered to with batching enabled, the measurements made while - * the application processor is asleep are stored in the hardware FIFO for non-wake up sensors. - * When this FIFO gets full, new events start overwriting older events. When the application - * then wakes up, the latest events are returned, and some old events might be lost. The number - * of events actually returned depends on the hardware FIFO size, as well as on what other - * sensors are activated. If losing sensor events is not acceptable during batching, you must - * use the wake-up version of the sensor. - * @return true if this is a wake up sensor, false otherwise. + * Wake-up sensors

      + * In opposition to non-wake-up sensors, wake-up sensors ensure that their data is delivered + * independently of the state of the AP. While the AP is awake, the wake-up sensors behave + * like non-wake-up-sensors. When the AP is asleep, wake-up sensors wake up the AP to deliver + * events. That is, the AP will wake up and the sensor will deliver the events before the + * maximum reporting latency is elapsed or the hardware FIFO gets full. See {@link + * SensorManager#registerListener(SensorEventListener, Sensor, int, int)} for more details. + *

      + * + * @return true if this is a wake-up sensor, false otherwise. */ public boolean isWakeUpSensor() { return (mFlags & SENSOR_FLAG_WAKE_UP_SENSOR) != 0; diff --git a/core/java/android/hardware/SensorEventListener2.java b/core/java/android/hardware/SensorEventListener2.java index 70eff08d7ca2757da9f8c733a1c9548ff4ef603c..fd3e62b2b3cb27c3054d113616f622af4b0848d5 100644 --- a/core/java/android/hardware/SensorEventListener2.java +++ b/core/java/android/hardware/SensorEventListener2.java @@ -21,15 +21,16 @@ package android.hardware; */ public interface SensorEventListener2 extends SensorEventListener { /** - * Called after flush() is completed. All the events in the batch at the point when - * the flush was called have been delivered to the applications registered for those - * sensor events. Flush Complete Events are sent ONLY to the application that has - * explicitly called flush(). If the hardware FIFO is flushed due to some other - * application calling flush(), flush complete event is not delivered to this application. + * Called after flush() is completed. All the events in the batch at the point when the flush + * was called have been delivered to the applications registered for those sensor events. In + * {@link android.os.Build.VERSION_CODES#KITKAT}, applications may receive flush complete events + * even if some other application has called flush() on the same sensor. Starting with + * {@link android.os.Build.VERSION_CODES#LOLLIPOP}, flush Complete events are sent ONLY to the + * application that has explicitly called flush(). If the hardware FIFO is flushed due to some + * other application calling flush(), flush complete event is not delivered to this application. *

      * * @param sensor The {@link android.hardware.Sensor Sensor} on which flush was called. - * * @see android.hardware.SensorManager#flush(SensorEventListener) */ public void onFlushCompleted(Sensor sensor); diff --git a/core/java/android/hardware/SensorManager.java b/core/java/android/hardware/SensorManager.java index cccd62495b1ba7c2d1cbbddd1bef44fbc7a20d00..34b895b5c5545a94315acc5c8ca90e121b3abf57 100644 --- a/core/java/android/hardware/SensorManager.java +++ b/core/java/android/hardware/SensorManager.java @@ -451,7 +451,8 @@ public abstract class SensorManager { // non_wake-up version. if (type == Sensor.TYPE_PROXIMITY || type == Sensor.TYPE_SIGNIFICANT_MOTION || type == Sensor.TYPE_TILT_DETECTOR || type == Sensor.TYPE_WAKE_GESTURE || - type == Sensor.TYPE_GLANCE_GESTURE || type == Sensor.TYPE_PICK_UP_GESTURE) { + type == Sensor.TYPE_GLANCE_GESTURE || type == Sensor.TYPE_PICK_UP_GESTURE || + type == Sensor.TYPE_WRIST_TILT_GESTURE) { wakeUpSensor = true; } @@ -626,73 +627,90 @@ public abstract class SensorManager { protected abstract void unregisterListenerImpl(SensorEventListener listener, Sensor sensor); /** - * Registers a {@link android.hardware.SensorEventListener - * SensorEventListener} for the given sensor. - * - *

      - * Note: Don't use this method with a one shot trigger sensor such as - * {@link Sensor#TYPE_SIGNIFICANT_MOTION}. - * Use {@link #requestTriggerSensor(TriggerEventListener, Sensor)} instead. + * Registers a {@link android.hardware.SensorEventListener SensorEventListener} for the given + * sensor at the given sampling frequency. + *

      + * The events will be delivered to the provided {@code SensorEventListener} as soon as they are + * available. To reduce the power consumption, applications can use + * {@link #registerListener(SensorEventListener, Sensor, int, int)} instead and specify a + * positive non-zero maximum reporting latency. + *

      + *

      + * In the case of non-wake-up sensors, the events are only delivered while the Application + * Processor (AP) is not in suspend mode. See {@link Sensor#isWakeUpSensor()} for more details. + * To ensure delivery of events from non-wake-up sensors even when the screen is OFF, the + * application registering to the sensor must hold a partial wake-lock to keep the AP awake, + * otherwise some events might be lost while the AP is asleep. Note that although events might + * be lost while the AP is asleep, the sensor will still consume power if it is not explicitly + * deactivated by the application. Applications must unregister their {@code + * SensorEventListener}s in their activity's {@code onPause()} method to avoid consuming power + * while the device is inactive. See {@link #registerListener(SensorEventListener, Sensor, int, + * int)} for more details on hardware FIFO (queueing) capabilities and when some sensor events + * might be lost. + *

      + *

      + * In the case of wake-up sensors, each event generated by the sensor will cause the AP to + * wake-up, ensuring that each event can be delivered. Because of this, registering to a wake-up + * sensor has very significant power implications. Call {@link Sensor#isWakeUpSensor()} to check + * whether a sensor is a wake-up sensor. See + * {@link #registerListener(SensorEventListener, Sensor, int, int)} for information on how to + * reduce the power impact of registering to wake-up sensors. + *

      + *

      + * Note: Don't use this method with one-shot trigger sensors such as + * {@link Sensor#TYPE_SIGNIFICANT_MOTION}. Use + * {@link #requestTriggerSensor(TriggerEventListener, Sensor)} instead. Use + * {@link Sensor#getReportingMode()} to obtain the reporting mode of a given sensor. *

      * - * @param listener - * A {@link android.hardware.SensorEventListener SensorEventListener} - * object. - * - * @param sensor - * The {@link android.hardware.Sensor Sensor} to register to. - * - * @param rateUs - * The rate {@link android.hardware.SensorEvent sensor events} are - * delivered at. This is only a hint to the system. Events may be - * received faster or slower than the specified rate. Usually events - * are received faster. The value must be one of - * {@link #SENSOR_DELAY_NORMAL}, {@link #SENSOR_DELAY_UI}, - * {@link #SENSOR_DELAY_GAME}, or {@link #SENSOR_DELAY_FASTEST} - * or, the desired delay between events in microseconds. - * Specifying the delay in microseconds only works from Android - * 2.3 (API level 9) onwards. For earlier releases, you must use - * one of the {@code SENSOR_DELAY_*} constants. - * - * @return true if the sensor is supported and successfully - * enabled. - * + * @param listener A {@link android.hardware.SensorEventListener SensorEventListener} object. + * @param sensor The {@link android.hardware.Sensor Sensor} to register to. + * @param samplingPeriodUs The rate {@link android.hardware.SensorEvent sensor events} are + * delivered at. This is only a hint to the system. Events may be received faster or + * slower than the specified rate. Usually events are received faster. The value must + * be one of {@link #SENSOR_DELAY_NORMAL}, {@link #SENSOR_DELAY_UI}, + * {@link #SENSOR_DELAY_GAME}, or {@link #SENSOR_DELAY_FASTEST} or, the desired delay + * between events in microseconds. Specifying the delay in microseconds only works + * from Android 2.3 (API level 9) onwards. For earlier releases, you must use one of + * the {@code SENSOR_DELAY_*} constants. + * @return true if the sensor is supported and successfully enabled. * @see #registerListener(SensorEventListener, Sensor, int, Handler) * @see #unregisterListener(SensorEventListener) * @see #unregisterListener(SensorEventListener, Sensor) - * */ - public boolean registerListener(SensorEventListener listener, Sensor sensor, int rateUs) { - return registerListener(listener, sensor, rateUs, null); + public boolean registerListener(SensorEventListener listener, Sensor sensor, + int samplingPeriodUs) { + return registerListener(listener, sensor, samplingPeriodUs, null); } /** - * Enables batch mode for a sensor with the given rate and maxBatchReportLatency. If the - * underlying hardware does not support batch mode, this defaults to - * {@link #registerListener(SensorEventListener, Sensor, int)} and other parameters are - * ignored. In non-batch mode, all sensor events must be reported as soon as they are detected. - * While in batch mode, sensor events do not need to be reported as soon as they are detected. - * They can be temporarily stored in batches and reported in batches, as long as no event is - * delayed by more than "maxBatchReportLatency" microseconds. That is, all events since the - * previous batch are recorded and returned all at once. This allows to reduce the amount of - * interrupts sent to the SoC, and allows the SoC to switch to a lower power state (Idle) while - * the sensor is capturing and batching data. - *

      - * Registering to a sensor in batch mode will not prevent the SoC from going to suspend mode. In - * this case, the sensor will continue to gather events and store it in a hardware FIFO. If the - * FIFO gets full before the AP wakes up again, some events will be lost, as the older events - * get overwritten by new events in the hardware FIFO. This can be avoided by holding a wake - * lock. If the application holds a wake lock, the SoC will not go to suspend mode, so no events - * will be lost, as the events will be reported before the FIFO gets full. - *

      + * Registers a {@link android.hardware.SensorEventListener SensorEventListener} for the given + * sensor at the given sampling frequency and the given maximum reporting latency. *

      - * Batching is always best effort. If a different application requests updates in continuous - * mode, this application will also get events in continuous mode. Batch mode updates can be - * unregistered by calling {@link #unregisterListener(SensorEventListener)}. + * This function is similar to {@link #registerListener(SensorEventListener, Sensor, int)} but + * it allows events to stay temporarily in the hardware FIFO (queue) before being delivered. The + * events can be stored in the hardware FIFO up to {@code maxReportLatencyUs} microseconds. Once + * one of the events in the FIFO needs to be reported, all of the events in the FIFO are + * reported sequentially. This means that some events will be reported before the maximum + * reporting latency has elapsed. + *

      + * When {@code maxReportLatencyUs} is 0, the call is equivalent to a call to + * {@link #registerListener(SensorEventListener, Sensor, int)}, as it requires the events to be + * delivered as soon as possible. + *

      + * When {@code sensor.maxFifoEventCount()} is 0, the sensor does not use a FIFO, so the call + * will also be equivalent to {@link #registerListener(SensorEventListener, Sensor, int)}. + *

      + * Setting {@code maxReportLatencyUs} to a positive value allows to reduce the number of + * interrupts the AP (Application Processor) receives, hence reducing power consumption, as the + * AP can switch to a lower power state while the sensor is capturing the data. This is + * especially important when registering to wake-up sensors, for which each interrupt causes the + * AP to wake up if it was in suspend mode. See {@link Sensor#isWakeUpSensor()} for more + * information on wake-up sensors. *

      *

      *

      - * Note: Don't use this method with a one shot trigger sensor such as + * Note: Don't use this method with one-shot trigger sensors such as * {@link Sensor#TYPE_SIGNIFICANT_MOTION}. Use * {@link #requestTriggerSensor(TriggerEventListener, Sensor)} instead.

      * @@ -701,118 +719,104 @@ public abstract class SensorManager { * flush complete notifications, it should register with * {@link android.hardware.SensorEventListener SensorEventListener2} instead. * @param sensor The {@link android.hardware.Sensor Sensor} to register to. - * @param rateUs The desired delay between two consecutive events in microseconds. This is only - * a hint to the system. Events may be received faster or slower than the specified - * rate. Usually events are received faster. Can be one of + * @param samplingPeriodUs The desired delay between two consecutive events in microseconds. + * This is only a hint to the system. Events may be received faster or slower than + * the specified rate. Usually events are received faster. Can be one of * {@link #SENSOR_DELAY_NORMAL}, {@link #SENSOR_DELAY_UI}, * {@link #SENSOR_DELAY_GAME}, {@link #SENSOR_DELAY_FASTEST} or the delay in * microseconds. - * @param maxBatchReportLatencyUs An event in the batch can be delayed by at most - * maxBatchReportLatency microseconds. More events can be batched if this value is - * large. If this is set to zero, batch mode is disabled and events are delivered in - * continuous mode as soon as they are available which is equivalent to calling + * @param maxReportLatencyUs Maximum time in microseconds that events can be delayed before + * being reported to the application. A large value allows reducing the power + * consumption associated with the sensor. If maxReportLatencyUs is set to zero, + * events are delivered as soon as they are available, which is equivalent to calling * {@link #registerListener(SensorEventListener, Sensor, int)}. - * @return true if batch mode is successfully enabled for this sensor, - * false otherwise. + * @return true if the sensor is supported and successfully enabled. * @see #registerListener(SensorEventListener, Sensor, int) * @see #unregisterListener(SensorEventListener) * @see #flush(SensorEventListener) */ - public boolean registerListener(SensorEventListener listener, Sensor sensor, int rateUs, - int maxBatchReportLatencyUs) { - int delay = getDelay(rateUs); - return registerListenerImpl(listener, sensor, delay, null, maxBatchReportLatencyUs, 0); + public boolean registerListener(SensorEventListener listener, Sensor sensor, + int samplingPeriodUs, int maxReportLatencyUs) { + int delay = getDelay(samplingPeriodUs); + return registerListenerImpl(listener, sensor, delay, null, maxReportLatencyUs, 0); } /** * Registers a {@link android.hardware.SensorEventListener SensorEventListener} for the given * sensor. Events are delivered in continuous mode as soon as they are available. To reduce the - * battery usage, use {@link #registerListener(SensorEventListener, Sensor, int, int)} which - * enables batch mode for the sensor. - * - *

      - * Note: Don't use this method with a one shot trigger sensor such as - * {@link Sensor#TYPE_SIGNIFICANT_MOTION}. - * Use {@link #requestTriggerSensor(TriggerEventListener, Sensor)} instead. + * power consumption, applications can use + * {@link #registerListener(SensorEventListener, Sensor, int, int)} instead and specify a + * positive non-zero maximum reporting latency. + *

      *

      + * Note: Don't use this method with a one shot trigger sensor such as + * {@link Sensor#TYPE_SIGNIFICANT_MOTION}. Use + * {@link #requestTriggerSensor(TriggerEventListener, Sensor)} instead.

      * - * @param listener - * A {@link android.hardware.SensorEventListener SensorEventListener} - * object. - * - * @param sensor - * The {@link android.hardware.Sensor Sensor} to register to. - * - * @param rateUs - * The rate {@link android.hardware.SensorEvent sensor events} are - * delivered at. This is only a hint to the system. Events may be - * received faster or slower than the specified rate. Usually events - * are received faster. The value must be one of - * {@link #SENSOR_DELAY_NORMAL}, {@link #SENSOR_DELAY_UI}, - * {@link #SENSOR_DELAY_GAME}, or {@link #SENSOR_DELAY_FASTEST}. - * or, the desired delay between events in microseconds. - * Specifying the delay in microseconds only works from Android - * 2.3 (API level 9) onwards. For earlier releases, you must use - * one of the {@code SENSOR_DELAY_*} constants. - * - * @param handler - * The {@link android.os.Handler Handler} the - * {@link android.hardware.SensorEvent sensor events} will be - * delivered to. - * + * @param listener A {@link android.hardware.SensorEventListener SensorEventListener} object. + * @param sensor The {@link android.hardware.Sensor Sensor} to register to. + * @param samplingPeriodUs The rate {@link android.hardware.SensorEvent sensor events} are + * delivered at. This is only a hint to the system. Events may be received faster or + * slower than the specified rate. Usually events are received faster. The value must + * be one of {@link #SENSOR_DELAY_NORMAL}, {@link #SENSOR_DELAY_UI}, + * {@link #SENSOR_DELAY_GAME}, or {@link #SENSOR_DELAY_FASTEST} or, the desired + * delay between events in microseconds. Specifying the delay in microseconds only + * works from Android 2.3 (API level 9) onwards. For earlier releases, you must use + * one of the {@code SENSOR_DELAY_*} constants. + * @param handler The {@link android.os.Handler Handler} the {@link android.hardware.SensorEvent + * sensor events} will be delivered to. * @return true if the sensor is supported and successfully enabled. - * * @see #registerListener(SensorEventListener, Sensor, int) * @see #unregisterListener(SensorEventListener) * @see #unregisterListener(SensorEventListener, Sensor) */ - public boolean registerListener(SensorEventListener listener, Sensor sensor, int rateUs, - Handler handler) { - int delay = getDelay(rateUs); + public boolean registerListener(SensorEventListener listener, Sensor sensor, + int samplingPeriodUs, Handler handler) { + int delay = getDelay(samplingPeriodUs); return registerListenerImpl(listener, sensor, delay, handler, 0, 0); } /** - * Enables batch mode for a sensor with the given rate and maxBatchReportLatency. + * Registers a {@link android.hardware.SensorEventListener SensorEventListener} for the given + * sensor at the given sampling frequency and the given maximum reporting latency. + * * @param listener A {@link android.hardware.SensorEventListener SensorEventListener} object * that will receive the sensor events. If the application is interested in receiving * flush complete notifications, it should register with * {@link android.hardware.SensorEventListener SensorEventListener2} instead. * @param sensor The {@link android.hardware.Sensor Sensor} to register to. - * @param rateUs The desired delay between two consecutive events in microseconds. This is only - * a hint to the system. Events may be received faster or slower than the specified - * rate. Usually events are received faster. Can be one of + * @param samplingPeriodUs The desired delay between two consecutive events in microseconds. + * This is only a hint to the system. Events may be received faster or slower than + * the specified rate. Usually events are received faster. Can be one of * {@link #SENSOR_DELAY_NORMAL}, {@link #SENSOR_DELAY_UI}, * {@link #SENSOR_DELAY_GAME}, {@link #SENSOR_DELAY_FASTEST} or the delay in * microseconds. - * @param maxBatchReportLatencyUs An event in the batch can be delayed by at most - * maxBatchReportLatency microseconds. More events can be batched if this value is - * large. If this is set to zero, batch mode is disabled and events are delivered in - * continuous mode as soon as they are available which is equivalent to calling + * @param maxReportLatencyUs Maximum time in microseconds that events can be delayed before + * being reported to the application. A large value allows reducing the power + * consumption associated with the sensor. If maxReportLatencyUs is set to zero, + * events are delivered as soon as they are available, which is equivalent to calling * {@link #registerListener(SensorEventListener, Sensor, int)}. - * @param handler The {@link android.os.Handler Handler} the - * {@link android.hardware.SensorEvent sensor events} will be delivered to. - * - * @return true if batch mode is successfully enabled for this sensor, - * false otherwise. + * @param handler The {@link android.os.Handler Handler} the {@link android.hardware.SensorEvent + * sensor events} will be delivered to. + * @return true if the sensor is supported and successfully enabled. * @see #registerListener(SensorEventListener, Sensor, int, int) */ - public boolean registerListener(SensorEventListener listener, Sensor sensor, int rateUs, - int maxBatchReportLatencyUs, Handler handler) { - int delayUs = getDelay(rateUs); - return registerListenerImpl(listener, sensor, delayUs, handler, maxBatchReportLatencyUs, 0); + public boolean registerListener(SensorEventListener listener, Sensor sensor, int samplingPeriodUs, + int maxReportLatencyUs, Handler handler) { + int delayUs = getDelay(samplingPeriodUs); + return registerListenerImpl(listener, sensor, delayUs, handler, maxReportLatencyUs, 0); } /** @hide */ protected abstract boolean registerListenerImpl(SensorEventListener listener, Sensor sensor, - int delayUs, Handler handler, int maxBatchReportLatencyUs, int reservedFlags); + int delayUs, Handler handler, int maxReportLatencyUs, int reservedFlags); /** - * Flushes the batch FIFO of all the sensors registered for this listener. If there are events - * in the FIFO of the sensor, they are returned as if the batch timeout in the FIFO of the - * sensors had expired. Events are returned in the usual way through the SensorEventListener. - * This call doesn't affect the batch timeout for this sensor. This call is asynchronous and + * Flushes the FIFO of all the sensors registered for this listener. If there are events + * in the FIFO of the sensor, they are returned as if the maxReportLantecy of the FIFO has + * expired. Events are returned in the usual way through the SensorEventListener. + * This call doesn't affect the maxReportLantecy for this sensor. This call is asynchronous and * returns immediately. * {@link android.hardware.SensorEventListener2#onFlushCompleted onFlushCompleted} is called * after all the events in the batch at the time of calling this method have been delivered diff --git a/core/java/android/hardware/camera2/CameraCharacteristics.java b/core/java/android/hardware/camera2/CameraCharacteristics.java index fb3eaffe339bee9c2cec693af19b2d4e456a081d..7cf8fb00d05db0236a5ee09ca1364911511747e2 100644 --- a/core/java/android/hardware/camera2/CameraCharacteristics.java +++ b/core/java/android/hardware/camera2/CameraCharacteristics.java @@ -315,16 +315,15 @@ public final class CameraCharacteristics extends CameraMetadata *

      This key lists the valid modes for {@link CaptureRequest#COLOR_CORRECTION_ABERRATION_MODE android.colorCorrection.aberrationMode}. If no * aberration correction modes are available for a device, this list will solely include - * OFF mode.

      - *

      For FULL capability device ({@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} == FULL), OFF is - * always included.

      + * OFF mode. All camera devices will support either OFF or FAST mode.

      + *

      Camera devices that support the MANUAL_POST_PROCESSING capability will always list + * OFF mode. This includes all FULL level devices.

      *

      LEGACY devices will always only support FAST mode.

      *

      Range of valid values:
      * Any value listed in {@link CaptureRequest#COLOR_CORRECTION_ABERRATION_MODE android.colorCorrection.aberrationMode}

      *

      This key is available on all devices.

      * * @see CaptureRequest#COLOR_CORRECTION_ABERRATION_MODE - * @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL */ @PublicKey public static final Key COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES = @@ -337,8 +336,7 @@ public final class CameraCharacteristics extends CameraMetadata + * {@link CaptureRequest#CONTROL_AE_ANTIBANDING_MODE android.control.aeAntibandingMode} control.

      *

      Range of valid values:
      * Any value listed in {@link CaptureRequest#CONTROL_AE_ANTIBANDING_MODE android.control.aeAntibandingMode}

      *

      This key is available on all devices.

      @@ -393,8 +391,12 @@ public final class CameraCharacteristics extends CameraMetadata *

      Range of valid values:

      + *

      Range [0,0] indicates that exposure compensation is not supported.

      + *

      For LIMITED and FULL devices, range must follow below requirements if exposure + * compensation is supported (range != [0, 0]):

      *

      Min.exposure compensation * {@link CameraCharacteristics#CONTROL_AE_COMPENSATION_STEP android.control.aeCompensationStep} <= -2 EV

      *

      Max.exposure compensation * {@link CameraCharacteristics#CONTROL_AE_COMPENSATION_STEP android.control.aeCompensationStep} >= 2 EV

      + *

      LEGACY devices may support a smaller range than this.

      *

      This key is available on all devices.

      * * @see CameraCharacteristics#CONTROL_AE_COMPENSATION_STEP @@ -1155,6 +1157,8 @@ public final class CameraCharacteristics extends CameraMetadata{@link #REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR MANUAL_SENSOR} *
    • {@link #REQUEST_AVAILABLE_CAPABILITIES_MANUAL_POST_PROCESSING MANUAL_POST_PROCESSING}
    • *
    • {@link #REQUEST_AVAILABLE_CAPABILITIES_RAW RAW}
    • + *
    • {@link #REQUEST_AVAILABLE_CAPABILITIES_READ_SENSOR_SETTINGS READ_SENSOR_SETTINGS}
    • + *
    • {@link #REQUEST_AVAILABLE_CAPABILITIES_BURST_CAPTURE BURST_CAPTURE}
    • *

    *

    This key is available on all devices.

    * @@ -1163,6 +1167,8 @@ public final class CameraCharacteristics extends CameraMetadata REQUEST_AVAILABLE_CAPABILITIES = @@ -2283,12 +2289,16 @@ public final class CameraCharacteristics extends CameraMetadataCamera devices will come in three flavors: LEGACY, LIMITED and FULL.

    *

    A FULL device will support below capabilities:

    *
      - *
    • 30fps at maximum resolution (== sensor resolution) is preferred, more than 20fps is required.
    • + *
    • 30fps operation at maximum resolution (== sensor resolution) is preferred, more than + * 20fps is required, for at least uncompressed YUV + * output. ({@link CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES android.request.availableCapabilities} contains BURST_CAPTURE)
    • *
    • Per frame control ({@link CameraCharacteristics#SYNC_MAX_LATENCY android.sync.maxLatency} == PER_FRAME_CONTROL)
    • *
    • Manual sensor control ({@link CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES android.request.availableCapabilities} contains MANUAL_SENSOR)
    • - *
    • Manual post-processing control ({@link CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES android.request.availableCapabilities} contains MANUAL_POST_PROCESSING)
    • + *
    • Manual post-processing control ({@link CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES android.request.availableCapabilities} contains + * MANUAL_POST_PROCESSING)
    • *
    • Arbitrary cropping region ({@link CameraCharacteristics#SCALER_CROPPING_TYPE android.scaler.croppingType} == FREEFORM)
    • - *
    • At least 3 processed (but not stalling) format output streams ({@link CameraCharacteristics#REQUEST_MAX_NUM_OUTPUT_PROC android.request.maxNumOutputProc} >= 3)
    • + *
    • At least 3 processed (but not stalling) format output streams + * ({@link CameraCharacteristics#REQUEST_MAX_NUM_OUTPUT_PROC android.request.maxNumOutputProc} >= 3)
    • *
    • The required stream configuration defined in android.scaler.availableStreamConfigurations
    • *
    • The required exposure time range defined in {@link CameraCharacteristics#SENSOR_INFO_EXPOSURE_TIME_RANGE android.sensor.info.exposureTimeRange}
    • *
    • The required maxFrameDuration defined in {@link CameraCharacteristics#SENSOR_INFO_MAX_FRAME_DURATION android.sensor.info.maxFrameDuration}
    • diff --git a/core/java/android/hardware/camera2/CameraDevice.java b/core/java/android/hardware/camera2/CameraDevice.java index 5cfa82126f47d4961882b9e42edd12f13956e3bb..bec94895f5aaaafa82d37001cf5177f6bebc5a54 100644 --- a/core/java/android/hardware/camera2/CameraDevice.java +++ b/core/java/android/hardware/camera2/CameraDevice.java @@ -147,20 +147,20 @@ public abstract class CameraDevice implements AutoCloseable { *
        * *
      • For drawing to a {@link android.view.SurfaceView SurfaceView}: Once the SurfaceView's - * Surface is {@link android.view.SurfaceHolder.Callback#surfaceCreated created}, set the - * size of the Surface with {@link android.view.SurfaceHolder#setFixedSize} to be one of the - * sizes returned by - * {@link StreamConfigurationMap#getOutputSizes(Class) getOutputSizes(SurfaceHolder.class)} - * and then obtain the Surface by calling {@link android.view.SurfaceHolder#getSurface}.
      • - * - *
      • For accessing through an OpenGL texture via a - * {@link android.graphics.SurfaceTexture SurfaceTexture}: Set the size of - * the SurfaceTexture with - * {@link android.graphics.SurfaceTexture#setDefaultBufferSize} to be one - * of the sizes returned by + * Surface is {@link android.view.SurfaceHolder.Callback#surfaceCreated created}, set the size + * of the Surface with {@link android.view.SurfaceHolder#setFixedSize} to be one of the sizes + * returned by {@link StreamConfigurationMap#getOutputSizes(Class) + * getOutputSizes(SurfaceHolder.class)} and then obtain the Surface by calling {@link + * android.view.SurfaceHolder#getSurface}. If the size is not set by the application, it will + * be rounded to the nearest supported size less than 1080p, by the camera device.
      • + * + *
      • For accessing through an OpenGL texture via a {@link android.graphics.SurfaceTexture + * SurfaceTexture}: Set the size of the SurfaceTexture with {@link + * android.graphics.SurfaceTexture#setDefaultBufferSize} to be one of the sizes returned by * {@link StreamConfigurationMap#getOutputSizes(Class) getOutputSizes(SurfaceTexture.class)} - * before creating a Surface from the SurfaceTexture with - * {@link Surface#Surface}.
      • + * before creating a Surface from the SurfaceTexture with {@link Surface#Surface}. If the size + * is not set by the application, it will be set to be the smallest supported size less than + * 1080p, by the camera device. * *
      • For recording with {@link android.media.MediaCodec}: Call * {@link android.media.MediaCodec#createInputSurface} after configuring @@ -189,6 +189,8 @@ public abstract class CameraDevice implements AutoCloseable { * corresponding supported sizes by passing the chosen output format into * {@link StreamConfigurationMap#getOutputSizes(int)}. Then obtain a * {@link android.view.Surface} from it with {@link android.media.ImageReader#getSurface()}. + * If the ImageReader size is not set to a supported size, it will be rounded to a supported + * size less than 1080p by the camera device. *
      • * *
      @@ -334,6 +336,24 @@ public abstract class CameraDevice implements AutoCloseable { *
      *

      * + *

      BURST-capability ({@link CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES} includes + * {@link CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_BURST_CAPTURE BURST_CAPTURE}) devices + * support at least the below stream combinations in addition to those for + * {@link CameraMetadata#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED LIMITED} devices. Note that all + * FULL-level devices support the BURST capability, and the below list is a strict subset of the + * list for FULL-level devices, so this table is only relevant for LIMITED-level devices that + * support the BURST_CAPTURE capability. + * + * + * + * + * + * + * + * + *
      BURST-capability additional guaranteed configurations
      Target 1Target 2Sample use case(s)
      TypeMax sizeTypeMax size
      {@code PRIV}{@code PREVIEW} {@code PRIV}{@code MAXIMUM} Maximum-resolution GPU processing with preview.
      {@code PRIV}{@code PREVIEW} {@code YUV }{@code MAXIMUM} Maximum-resolution in-app processing with preview.
      {@code YUV }{@code PREVIEW} {@code YUV }{@code MAXIMUM} Maximum-resolution two-input in-app processsing.

      + *

      + * *

      Since the capabilities of camera devices vary greatly, a given camera device may support * target combinations with sizes outside of these guarantees, but this can only be tested for * by attempting to create a session with such targets.

      diff --git a/core/java/android/hardware/camera2/CameraManager.java b/core/java/android/hardware/camera2/CameraManager.java index 9a9e4c2e131d3610bff3b0613291162b293363b6..b6bb33b42f886aa107c8266a89e5467ad3927c12 100644 --- a/core/java/android/hardware/camera2/CameraManager.java +++ b/core/java/android/hardware/camera2/CameraManager.java @@ -54,29 +54,17 @@ public final class CameraManager { private static final String TAG = "CameraManager"; private final boolean DEBUG; - /** - * This should match the ICameraService definition - */ - private static final String CAMERA_SERVICE_BINDER_NAME = "media.camera"; private static final int USE_CALLING_UID = -1; @SuppressWarnings("unused") private static final int API_VERSION_1 = 1; private static final int API_VERSION_2 = 2; - // Access only through getCameraServiceLocked to deal with binder death - private ICameraService mCameraService; - private ArrayList mDeviceIdList; - private final ArrayMap mCallbackMap = - new ArrayMap(); - private final Context mContext; private final Object mLock = new Object(); - private final CameraServiceListener mServiceListener = new CameraServiceListener(); - /** * @hide */ @@ -84,8 +72,6 @@ public final class CameraManager { DEBUG = Log.isLoggable(TAG, Log.DEBUG); synchronized(mLock) { mContext = context; - - connectCameraServiceLocked(); } } @@ -116,6 +102,12 @@ public final class CameraManager { *

      The first time a callback is registered, it is immediately called * with the availability status of all currently known camera devices.

      * + *

      Since this callback will be registered with the camera service, remember to unregister it + * once it is no longer needed; otherwise the callback will continue to receive events + * indefinitely and it may prevent other resources from being released. Specifically, the + * callbacks will be invoked independently of the general activity lifecycle and independently + * of the state of individual CameraManager instances.

      + * * @param callback the new callback to send camera availability notices to * @param handler The handler on which the callback should be invoked, or * {@code null} to use the current thread's {@link android.os.Looper looper}. @@ -130,13 +122,7 @@ public final class CameraManager { handler = new Handler(looper); } - synchronized (mLock) { - Handler oldHandler = mCallbackMap.put(callback, handler); - // For new callbacks, provide initial availability information - if (oldHandler == null) { - mServiceListener.updateCallbackLocked(callback, handler); - } - } + CameraManagerGlobal.get().registerAvailabilityCallback(callback, handler); } /** @@ -148,9 +134,7 @@ public final class CameraManager { * @param callback The callback to remove from the notification list */ public void unregisterAvailabilityCallback(AvailabilityCallback callback) { - synchronized (mLock) { - mCallbackMap.remove(callback); - } + CameraManagerGlobal.get().unregisterAvailabilityCallback(callback); } /** @@ -187,7 +171,7 @@ public final class CameraManager { * otherwise get them from the legacy shim instead. */ - ICameraService cameraService = getCameraServiceLocked(); + ICameraService cameraService = CameraManagerGlobal.get().getCameraService(); if (cameraService == null) { throw new CameraAccessException(CameraAccessException.CAMERA_DISCONNECTED, "Camera service is currently unavailable"); @@ -268,7 +252,7 @@ public final class CameraManager { try { if (supportsCamera2ApiLocked(cameraId)) { // Use cameraservice's cameradeviceclient implementation for HAL3.2+ devices - ICameraService cameraService = getCameraServiceLocked(); + ICameraService cameraService = CameraManagerGlobal.get().getCameraService(); if (cameraService == null) { throw new CameraRuntimeException( CameraAccessException.CAMERA_DISCONNECTED, @@ -443,13 +427,6 @@ public final class CameraManager { } } - /** - * Temporary for migrating to Callback naming - * @hide - */ - public static abstract class AvailabilityListener extends AvailabilityCallback { - } - /** * Return or create the list of currently connected camera devices. * @@ -458,7 +435,7 @@ public final class CameraManager { private ArrayList getOrCreateDeviceIdListLocked() throws CameraAccessException { if (mDeviceIdList == null) { int numCameras = 0; - ICameraService cameraService = getCameraServiceLocked(); + ICameraService cameraService = CameraManagerGlobal.get().getCameraService(); ArrayList deviceIdList = new ArrayList<>(); // If no camera service, then no devices @@ -515,18 +492,6 @@ public final class CameraManager { return mDeviceIdList; } - private void handleRecoverableSetupErrors(CameraRuntimeException e, String msg) { - int problem = e.getReason(); - switch (problem) { - case CameraAccessException.CAMERA_DISCONNECTED: - String errorMsg = CameraAccessException.getDefaultMessage(problem); - Log.w(TAG, msg + ": " + errorMsg); - break; - default: - throw new IllegalStateException(msg, e.asChecked()); - } - } - /** * Queries the camera service if it supports the camera2 api directly, or needs a shim. * @@ -556,7 +521,7 @@ public final class CameraManager { * Anything else is an unexpected error we don't want to recover from. */ try { - ICameraService cameraService = getCameraServiceLocked(); + ICameraService cameraService = CameraManagerGlobal.get().getCameraService(); // If no camera service, no support if (cameraService == null) return false; @@ -578,97 +543,23 @@ public final class CameraManager { } /** - * Connect to the camera service if it's available, and set up listeners. - * - *

      Sets mCameraService to a valid pointer or null if the connection does not succeed.

      + * A per-process global camera manager instance, to retain a connection to the camera service, + * and to distribute camera availability notices to API-registered callbacks */ - private void connectCameraServiceLocked() { - mCameraService = null; - IBinder cameraServiceBinder = ServiceManager.getService(CAMERA_SERVICE_BINDER_NAME); - if (cameraServiceBinder == null) { - // Camera service is now down, leave mCameraService as null - return; - } - try { - cameraServiceBinder.linkToDeath(new CameraServiceDeathListener(), /*flags*/ 0); - } catch (RemoteException e) { - // Camera service is now down, leave mCameraService as null - return; - } + private static final class CameraManagerGlobal extends ICameraServiceListener.Stub + implements IBinder.DeathRecipient { + + private static final String TAG = "CameraManagerGlobal"; + private final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); - ICameraService cameraServiceRaw = ICameraService.Stub.asInterface(cameraServiceBinder); + // Singleton instance + private static final CameraManagerGlobal gCameraManager = + new CameraManagerGlobal(); /** - * Wrap the camera service in a decorator which automatically translates return codes - * into exceptions. + * This must match the ICameraService definition */ - ICameraService cameraService = CameraServiceBinderDecorator.newInstance(cameraServiceRaw); - - try { - CameraServiceBinderDecorator.throwOnError( - CameraMetadataNative.nativeSetupGlobalVendorTagDescriptor()); - } catch (CameraRuntimeException e) { - handleRecoverableSetupErrors(e, "Failed to set up vendor tags"); - } - - try { - cameraService.addListener(mServiceListener); - mCameraService = cameraService; - } catch(CameraRuntimeException e) { - // Unexpected failure - throw new IllegalStateException("Failed to register a camera service listener", - e.asChecked()); - } catch (RemoteException e) { - // Camera service is now down, leave mCameraService as null - } - } - - /** - * Return a best-effort ICameraService. - * - *

      This will be null if the camera service - * is not currently available. If the camera service has died since the last - * use of the camera service, will try to reconnect to the service.

      - */ - private ICameraService getCameraServiceLocked() { - if (mCameraService == null) { - Log.i(TAG, "getCameraServiceLocked: Reconnecting to camera service"); - connectCameraServiceLocked(); - if (mCameraService == null) { - Log.e(TAG, "Camera service is unavailable"); - } - } - return mCameraService; - } - - /** - * Listener for camera service death. - * - *

      The camera service isn't supposed to die under any normal circumstances, but can be turned - * off during debug, or crash due to bugs. So detect that and null out the interface object, so - * that the next calls to the manager can try to reconnect.

      - */ - private class CameraServiceDeathListener implements IBinder.DeathRecipient { - public void binderDied() { - synchronized(mLock) { - mCameraService = null; - // Tell listeners that the cameras are _available_, because any existing clients - // will have gotten disconnected. This is optimistic under the assumption that the - // service will be back shortly. - // - // Without this, a camera service crash while a camera is open will never signal to - // listeners that previously in-use cameras are now available. - for (String cameraId : mDeviceIdList) { - mServiceListener.onStatusChangedLocked(CameraServiceListener.STATUS_PRESENT, - cameraId); - } - } - } - } - - // TODO: this class needs unit tests - // TODO: extract class into top level - private class CameraServiceListener extends ICameraServiceListener.Stub { + private static final String CAMERA_SERVICE_BINDER_NAME = "media.camera"; // Keep up-to-date with ICameraServiceListener.h @@ -683,16 +574,112 @@ public final class CameraManager { // Camera is in use by another app and cannot be used exclusively public static final int STATUS_NOT_AVAILABLE = 0x80000000; + // End enums shared with ICameraServiceListener.h + // Camera ID -> Status map private final ArrayMap mDeviceStatus = new ArrayMap(); - private static final String TAG = "CameraServiceListener"; + // Registered availablility callbacks and their handlers + private final ArrayMap mCallbackMap = + new ArrayMap(); + + private final Object mLock = new Object(); + + // Access only through getCameraService to deal with binder death + private ICameraService mCameraService; + + // Singleton, don't allow construction + private CameraManagerGlobal() { + } + + public static CameraManagerGlobal get() { + return gCameraManager; + } @Override public IBinder asBinder() { return this; } + /** + * Return a best-effort ICameraService. + * + *

      This will be null if the camera service is not currently available. If the camera + * service has died since the last use of the camera service, will try to reconnect to the + * service.

      + */ + public ICameraService getCameraService() { + synchronized(mLock) { + if (mCameraService == null) { + Log.i(TAG, "getCameraService: Reconnecting to camera service"); + connectCameraServiceLocked(); + if (mCameraService == null) { + Log.e(TAG, "Camera service is unavailable"); + } + } + return mCameraService; + } + } + + /** + * Connect to the camera service if it's available, and set up listeners. + * + *

      Sets mCameraService to a valid pointer or null if the connection does not succeed.

      + */ + private void connectCameraServiceLocked() { + mCameraService = null; + IBinder cameraServiceBinder = ServiceManager.getService(CAMERA_SERVICE_BINDER_NAME); + if (cameraServiceBinder == null) { + // Camera service is now down, leave mCameraService as null + return; + } + try { + cameraServiceBinder.linkToDeath(this, /*flags*/ 0); + } catch (RemoteException e) { + // Camera service is now down, leave mCameraService as null + return; + } + + ICameraService cameraServiceRaw = ICameraService.Stub.asInterface(cameraServiceBinder); + + /** + * Wrap the camera service in a decorator which automatically translates return codes + * into exceptions. + */ + ICameraService cameraService = + CameraServiceBinderDecorator.newInstance(cameraServiceRaw); + + try { + CameraServiceBinderDecorator.throwOnError( + CameraMetadataNative.nativeSetupGlobalVendorTagDescriptor()); + } catch (CameraRuntimeException e) { + handleRecoverableSetupErrors(e, "Failed to set up vendor tags"); + } + + try { + cameraService.addListener(this); + mCameraService = cameraService; + } catch(CameraRuntimeException e) { + // Unexpected failure + throw new IllegalStateException("Failed to register a camera service listener", + e.asChecked()); + } catch (RemoteException e) { + // Camera service is now down, leave mCameraService as null + } + } + + private void handleRecoverableSetupErrors(CameraRuntimeException e, String msg) { + int problem = e.getReason(); + switch (problem) { + case CameraAccessException.CAMERA_DISCONNECTED: + String errorMsg = CameraAccessException.getDefaultMessage(problem); + Log.w(TAG, msg + ": " + errorMsg); + break; + default: + throw new IllegalStateException(msg, e.asChecked()); + } + } + private boolean isAvailable(int status) { switch (status) { case STATUS_PRESENT: @@ -739,7 +726,7 @@ public final class CameraManager { * Send the state of all known cameras to the provided listener, to initialize * the listener's knowledge of camera state. */ - public void updateCallbackLocked(AvailabilityCallback callback, Handler handler) { + private void updateCallbackLocked(AvailabilityCallback callback, Handler handler) { for (int i = 0; i < mDeviceStatus.size(); i++) { String id = mDeviceStatus.keyAt(i); Integer status = mDeviceStatus.valueAt(i); @@ -747,14 +734,7 @@ public final class CameraManager { } } - @Override - public void onStatusChanged(int status, int cameraId) throws RemoteException { - synchronized(CameraManager.this.mLock) { - onStatusChangedLocked(status, String.valueOf(cameraId)); - } - } - - public void onStatusChangedLocked(int status, String id) { + private void onStatusChangedLocked(int status, String id) { if (DEBUG) { Log.v(TAG, String.format("Camera id %s has status changed to 0x%x", id, status)); @@ -811,5 +791,72 @@ public final class CameraManager { } } // onStatusChangedLocked - } // CameraServiceListener + /** + * Register a callback to be notified about camera device availability with the + * global listener singleton. + * + * @param callback the new callback to send camera availability notices to + * @param handler The handler on which the callback should be invoked. May not be null. + */ + public void registerAvailabilityCallback(AvailabilityCallback callback, Handler handler) { + synchronized (mLock) { + Handler oldHandler = mCallbackMap.put(callback, handler); + // For new callbacks, provide initial availability information + if (oldHandler == null) { + updateCallbackLocked(callback, handler); + } + } + } + + /** + * Remove a previously-added callback; the callback will no longer receive connection and + * disconnection callbacks, and is no longer referenced by the global listener singleton. + * + * @param callback The callback to remove from the notification list + */ + public void unregisterAvailabilityCallback(AvailabilityCallback callback) { + synchronized (mLock) { + mCallbackMap.remove(callback); + } + } + + /** + * Callback from camera service notifying the process about camera availability changes + */ + @Override + public void onStatusChanged(int status, int cameraId) throws RemoteException { + synchronized(mLock) { + onStatusChangedLocked(status, String.valueOf(cameraId)); + } + } + + /** + * Listener for camera service death. + * + *

      The camera service isn't supposed to die under any normal circumstances, but can be + * turned off during debug, or crash due to bugs. So detect that and null out the interface + * object, so that the next calls to the manager can try to reconnect.

      + */ + public void binderDied() { + synchronized(mLock) { + // Only do this once per service death + if (mCameraService == null) return; + + mCameraService = null; + + // Tell listeners that the cameras are _available_, because any existing clients + // will have gotten disconnected. This is optimistic under the assumption that + // the service will be back shortly. + // + // Without this, a camera service crash while a camera is open will never signal + // to listeners that previously in-use cameras are now available. + for (int i = 0; i < mDeviceStatus.size(); i++) { + String cameraId = mDeviceStatus.keyAt(i); + onStatusChangedLocked(STATUS_PRESENT, cameraId); + } + } + } + + } // CameraManagerGlobal + } // CameraManager diff --git a/core/java/android/hardware/camera2/CameraMetadata.java b/core/java/android/hardware/camera2/CameraMetadata.java index 16df8441b1718bb321657cb4a1e8cf5a31944cea..1b108589ef46e706d5440ab6ceb44795251ca0e3 100644 --- a/core/java/android/hardware/camera2/CameraMetadata.java +++ b/core/java/android/hardware/camera2/CameraMetadata.java @@ -450,6 +450,64 @@ public abstract class CameraMetadata { */ public static final int REQUEST_AVAILABLE_CAPABILITIES_ZSL = 4; + /** + *

      The camera device supports accurately reporting the sensor settings for many of + * the sensor controls while the built-in 3A algorithm is running. This allows + * reporting of sensor settings even when these settings cannot be manually changed.

      + *

      The values reported for the following controls are guaranteed to be available + * in the CaptureResult, including when 3A is enabled:

      + *
        + *
      • Exposure control
          + *
        • {@link CaptureRequest#SENSOR_EXPOSURE_TIME android.sensor.exposureTime}
        • + *
        + *
      • + *
      • Sensitivity control
          + *
        • {@link CaptureRequest#SENSOR_SENSITIVITY android.sensor.sensitivity}
        • + *
        + *
      • + *
      • Lens controls (if the lens is adjustable)
          + *
        • {@link CaptureRequest#LENS_FOCUS_DISTANCE android.lens.focusDistance}
        • + *
        • {@link CaptureRequest#LENS_APERTURE android.lens.aperture}
        • + *
        + *
      • + *
      + *

      This capability is a subset of the MANUAL_SENSOR control capability, and will + * always be included if the MANUAL_SENSOR capability is available.

      + * + * @see CaptureRequest#LENS_APERTURE + * @see CaptureRequest#LENS_FOCUS_DISTANCE + * @see CaptureRequest#SENSOR_EXPOSURE_TIME + * @see CaptureRequest#SENSOR_SENSITIVITY + * @see CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES + */ + public static final int REQUEST_AVAILABLE_CAPABILITIES_READ_SENSOR_SETTINGS = 5; + + /** + *

      The camera device supports capturing maximum-resolution + * images at >= 20 frames per second, in at least the + * uncompressed YUV format, when post-processing settings + * are set to FAST.

      + *

      More specifically, this means that a size matching the + * camera device's active array size is listed as a + * supported size for the YUV_420_888 format in + * {@link CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP android.scaler.streamConfigurationMap}, the minimum frame + * duration for that format and size is <= 1/20 s, and + * the {@link CameraCharacteristics#CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES android.control.aeAvailableTargetFpsRanges} entry + * lists at least one FPS range where the minimum FPS is

      + *
      + *

      = 1 / minimumFrameDuration for the maximum-size + * YUV_420_888 format.

      + *
      + *

      In addition, the {@link CameraCharacteristics#SYNC_MAX_LATENCY android.sync.maxLatency} field is + * guaranted to have a value between 0 and 4, inclusive.

      + * + * @see CameraCharacteristics#CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES + * @see CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP + * @see CameraCharacteristics#SYNC_MAX_LATENCY + * @see CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES + */ + public static final int REQUEST_AVAILABLE_CAPABILITIES_BURST_CAPTURE = 6; + // // Enumeration values for CameraCharacteristics#SCALER_CROPPING_TYPE // @@ -791,7 +849,8 @@ public abstract class CameraMetadata { /** *

      The camera device will automatically adapt its * antibanding routine to the current illumination - * conditions. This is the default.

      + * condition. This is the default mode if AUTO is + * available on given camera device.

      * @see CaptureRequest#CONTROL_AE_ANTIBANDING_MODE */ public static final int CONTROL_AE_ANTIBANDING_MODE_AUTO = 3; @@ -807,9 +866,21 @@ public abstract class CameraMetadata { * {@link CaptureRequest#SENSOR_FRAME_DURATION android.sensor.frameDuration} are used by the camera * device, along with android.flash.* fields, if there's * a flash unit for this camera device.

      + *

      Note that auto-white balance (AWB) and auto-focus (AF) + * behavior is device dependent when AE is in OFF mode. + * To have consistent behavior across different devices, + * it is recommended to either set AWB and AF to OFF mode + * or lock AWB and AF before setting AE to OFF. + * See {@link CaptureRequest#CONTROL_AWB_MODE android.control.awbMode}, {@link CaptureRequest#CONTROL_AF_MODE android.control.afMode}, + * {@link CaptureRequest#CONTROL_AWB_LOCK android.control.awbLock}, and {@link CaptureRequest#CONTROL_AF_TRIGGER android.control.afTrigger} + * for more details.

      *

      LEGACY devices do not support the OFF mode and will * override attempts to use this value to ON.

      * + * @see CaptureRequest#CONTROL_AF_MODE + * @see CaptureRequest#CONTROL_AF_TRIGGER + * @see CaptureRequest#CONTROL_AWB_LOCK + * @see CaptureRequest#CONTROL_AWB_MODE * @see CaptureRequest#SENSOR_EXPOSURE_TIME * @see CaptureRequest#SENSOR_FRAME_DURATION * @see CaptureRequest#SENSOR_SENSITIVITY @@ -1577,11 +1648,41 @@ public abstract class CameraMetadata { public static final int CONTROL_SCENE_MODE_HIGH_SPEED_VIDEO = 17; /** - *

      Turn on custom high dynamic range (HDR) mode.

      - *

      This is intended for LEGACY mode devices only; - * HAL3+ camera devices should not implement this mode.

      + *

      Turn on a device-specific high dynamic range (HDR) mode.

      + *

      In this scene mode, the camera device captures images + * that keep a larger range of scene illumination levels + * visible in the final image. For example, when taking a + * picture of a object in front of a bright window, both + * the object and the scene through the window may be + * visible when using HDR mode, while in normal AUTO mode, + * one or the other may be poorly exposed. As a tradeoff, + * HDR mode generally takes much longer to capture a single + * image, has no user control, and may have other artifacts + * depending on the HDR method used.

      + *

      Therefore, HDR captures operate at a much slower rate + * than regular captures.

      + *

      In this mode, on LIMITED or FULL devices, when a request + * is made with a {@link CaptureRequest#CONTROL_CAPTURE_INTENT android.control.captureIntent} of + * STILL_CAPTURE, the camera device will capture an image + * using a high dynamic range capture technique. On LEGACY + * devices, captures that target a JPEG-format output will + * be captured with HDR, and the capture intent is not + * relevant.

      + *

      The HDR capture may involve the device capturing a burst + * of images internally and combining them into one, or it + * may involve the device using specialized high dynamic + * range capture hardware. In all cases, a single image is + * produced in response to a capture request submitted + * while in HDR mode.

      + *

      Since substantial post-processing is generally needed to + * produce an HDR image, only YUV and JPEG outputs are + * supported for LIMITED/FULL device HDR captures, and only + * JPEG outputs are supported for LEGACY HDR + * captures. Using a RAW output for HDR capture is not + * supported.

      + * + * @see CaptureRequest#CONTROL_CAPTURE_INTENT * @see CaptureRequest#CONTROL_SCENE_MODE - * @hide */ public static final int CONTROL_SCENE_MODE_HDR = 18; diff --git a/core/java/android/hardware/camera2/CaptureRequest.java b/core/java/android/hardware/camera2/CaptureRequest.java index 6aec72a36762f28a4428ce6d4a2559db9c89bd9b..b4174965dedd9e98a7b95c92dcddc58e3ce83aed 100644 --- a/core/java/android/hardware/camera2/CaptureRequest.java +++ b/core/java/android/hardware/camera2/CaptureRequest.java @@ -642,8 +642,10 @@ public final class CaptureRequest extends CameraMetadata> * options for the antibanding mode. The * {@link CameraCharacteristics#CONTROL_AE_AVAILABLE_ANTIBANDING_MODES android.control.aeAvailableAntibandingModes} key contains * the available modes for a given camera device.

      - *

      The default mode is AUTO, which is supported by all - * camera devices.

      + *

      AUTO mode is the default if it is available on given + * camera device. When AUTO mode is not available, the + * default will be either 50HZ or 60HZ, and both 50HZ + * and 60HZ will be available.

      *

      If manual exposure control is enabled (by setting * {@link CaptureRequest#CONTROL_AE_MODE android.control.aeMode} or {@link CaptureRequest#CONTROL_MODE android.control.mode} to OFF), * then this setting has no effect, and the application must @@ -865,9 +867,9 @@ public final class CaptureRequest extends CameraMetadata> * metering sequence when it processes this request.

      *

      This entry is normally set to IDLE, or is not * included at all in the request settings. When included and - * set to START, the camera device will trigger the autoexposure + * set to START, the camera device will trigger the auto-exposure (AE) * precapture metering sequence.

      - *

      The precapture sequence should triggered before starting a + *

      The precapture sequence should be triggered before starting a * high-quality still capture for final metering decisions to * be made, and for firing pre-capture flash pulses to estimate * scene brightness and required final capture flash power, when @@ -875,6 +877,14 @@ public final class CaptureRequest extends CameraMetadata> *

      Normally, this entry should be set to START for only a * single request, and the application should wait until the * sequence completes before starting a new one.

      + *

      When a precapture metering sequence is finished, the camera device + * may lock the auto-exposure routine internally to be able to accurately expose the + * subsequent still capture image ({@link CaptureRequest#CONTROL_CAPTURE_INTENT android.control.captureIntent} == STILL_CAPTURE). + * For this case, the AE may not resume normal scan if no subsequent still capture is + * submitted. To ensure that the AE routine restarts normal scan, the application should + * submit a request with {@link CaptureRequest#CONTROL_AE_LOCK android.control.aeLock} == true, followed by a request + * with {@link CaptureRequest#CONTROL_AE_LOCK android.control.aeLock} == false, if the application decides not to submit a + * still capture request after the precapture sequence completes.

      *

      The exact effect of auto-exposure (AE) precapture trigger * depends on the current AE mode and state; see * {@link CaptureResult#CONTROL_AE_STATE android.control.aeState} for AE precapture state transition @@ -893,7 +903,9 @@ public final class CaptureRequest extends CameraMetadata> * Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the * {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key

      * + * @see CaptureRequest#CONTROL_AE_LOCK * @see CaptureResult#CONTROL_AE_STATE + * @see CaptureRequest#CONTROL_CAPTURE_INTENT * @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL * @see #CONTROL_AE_PRECAPTURE_TRIGGER_IDLE * @see #CONTROL_AE_PRECAPTURE_TRIGGER_START @@ -906,7 +918,10 @@ public final class CaptureRequest extends CameraMetadata> *

      Whether auto-focus (AF) is currently enabled, and what * mode it is set to.

      *

      Only effective if {@link CaptureRequest#CONTROL_MODE android.control.mode} = AUTO and the lens is not fixed focus - * (i.e. {@link CameraCharacteristics#LENS_INFO_MINIMUM_FOCUS_DISTANCE android.lens.info.minimumFocusDistance} > 0).

      + * (i.e. {@link CameraCharacteristics#LENS_INFO_MINIMUM_FOCUS_DISTANCE android.lens.info.minimumFocusDistance} > 0). Also note that + * when {@link CaptureRequest#CONTROL_AE_MODE android.control.aeMode} is OFF, the behavior of AF is device + * dependent. It is recommended to lock AF by using {@link CaptureRequest#CONTROL_AF_TRIGGER android.control.afTrigger} before + * setting {@link CaptureRequest#CONTROL_AE_MODE android.control.aeMode} to OFF, or set AF mode to OFF when AE is OFF.

      *

      If the lens is controlled by the camera device auto-focus algorithm, * the camera device will report the current AF status in {@link CaptureResult#CONTROL_AF_STATE android.control.afState} * in result metadata.

      @@ -923,8 +938,10 @@ public final class CaptureRequest extends CameraMetadata> * {@link CameraCharacteristics#CONTROL_AF_AVAILABLE_MODES android.control.afAvailableModes}

      *

      This key is available on all devices.

      * + * @see CaptureRequest#CONTROL_AE_MODE * @see CameraCharacteristics#CONTROL_AF_AVAILABLE_MODES * @see CaptureResult#CONTROL_AF_STATE + * @see CaptureRequest#CONTROL_AF_TRIGGER * @see CaptureRequest#CONTROL_MODE * @see CameraCharacteristics#LENS_INFO_MINIMUM_FOCUS_DISTANCE * @see #CONTROL_AF_MODE_OFF @@ -1046,7 +1063,10 @@ public final class CaptureRequest extends CameraMetadata> *

      When set to the ON mode, the camera device's auto-white balance * routine is enabled, overriding the application's selected * {@link CaptureRequest#COLOR_CORRECTION_TRANSFORM android.colorCorrection.transform}, {@link CaptureRequest#COLOR_CORRECTION_GAINS android.colorCorrection.gains} and - * {@link CaptureRequest#COLOR_CORRECTION_MODE android.colorCorrection.mode}.

      + * {@link CaptureRequest#COLOR_CORRECTION_MODE android.colorCorrection.mode}. Note that when {@link CaptureRequest#CONTROL_AE_MODE android.control.aeMode} + * is OFF, the behavior of AWB is device dependent. It is recommened to + * also set AWB mode to OFF or lock AWB by using {@link CaptureRequest#CONTROL_AWB_LOCK android.control.awbLock} before + * setting AE mode to OFF.

      *

      When set to the OFF mode, the camera device's auto-white balance * routine is disabled. The application manually controls the white * balance by {@link CaptureRequest#COLOR_CORRECTION_TRANSFORM android.colorCorrection.transform}, {@link CaptureRequest#COLOR_CORRECTION_GAINS android.colorCorrection.gains} @@ -1077,7 +1097,9 @@ public final class CaptureRequest extends CameraMetadata> * @see CaptureRequest#COLOR_CORRECTION_GAINS * @see CaptureRequest#COLOR_CORRECTION_MODE * @see CaptureRequest#COLOR_CORRECTION_TRANSFORM + * @see CaptureRequest#CONTROL_AE_MODE * @see CameraCharacteristics#CONTROL_AWB_AVAILABLE_MODES + * @see CaptureRequest#CONTROL_AWB_LOCK * @see CaptureRequest#CONTROL_MODE * @see #CONTROL_AWB_MODE_OFF * @see #CONTROL_AWB_MODE_AUTO @@ -1282,6 +1304,7 @@ public final class CaptureRequest extends CameraMetadata> *

    • {@link #CONTROL_SCENE_MODE_CANDLELIGHT CANDLELIGHT}
    • *
    • {@link #CONTROL_SCENE_MODE_BARCODE BARCODE}
    • *
    • {@link #CONTROL_SCENE_MODE_HIGH_SPEED_VIDEO HIGH_SPEED_VIDEO}
    • + *
    • {@link #CONTROL_SCENE_MODE_HDR HDR}
    • *

    *

    Available values for this device:
    * {@link CameraCharacteristics#CONTROL_AVAILABLE_SCENE_MODES android.control.availableSceneModes}

    @@ -1310,6 +1333,7 @@ public final class CaptureRequest extends CameraMetadata> * @see #CONTROL_SCENE_MODE_CANDLELIGHT * @see #CONTROL_SCENE_MODE_BARCODE * @see #CONTROL_SCENE_MODE_HIGH_SPEED_VIDEO + * @see #CONTROL_SCENE_MODE_HDR */ @PublicKey public static final Key CONTROL_SCENE_MODE = diff --git a/core/java/android/hardware/camera2/CaptureResult.java b/core/java/android/hardware/camera2/CaptureResult.java index d208649f3edd6243f5402d4fe0d921639b378b51..f17100d29eb0bd955457356d308040e62bb9d33f 100644 --- a/core/java/android/hardware/camera2/CaptureResult.java +++ b/core/java/android/hardware/camera2/CaptureResult.java @@ -493,8 +493,10 @@ public class CaptureResult extends CameraMetadata> { * options for the antibanding mode. The * {@link CameraCharacteristics#CONTROL_AE_AVAILABLE_ANTIBANDING_MODES android.control.aeAvailableAntibandingModes} key contains * the available modes for a given camera device.

    - *

    The default mode is AUTO, which is supported by all - * camera devices.

    + *

    AUTO mode is the default if it is available on given + * camera device. When AUTO mode is not available, the + * default will be either 50HZ or 60HZ, and both 50HZ + * and 60HZ will be available.

    *

    If manual exposure control is enabled (by setting * {@link CaptureRequest#CONTROL_AE_MODE android.control.aeMode} or {@link CaptureRequest#CONTROL_MODE android.control.mode} to OFF), * then this setting has no effect, and the application must @@ -716,9 +718,9 @@ public class CaptureResult extends CameraMetadata> { * metering sequence when it processes this request.

    *

    This entry is normally set to IDLE, or is not * included at all in the request settings. When included and - * set to START, the camera device will trigger the autoexposure + * set to START, the camera device will trigger the auto-exposure (AE) * precapture metering sequence.

    - *

    The precapture sequence should triggered before starting a + *

    The precapture sequence should be triggered before starting a * high-quality still capture for final metering decisions to * be made, and for firing pre-capture flash pulses to estimate * scene brightness and required final capture flash power, when @@ -726,6 +728,14 @@ public class CaptureResult extends CameraMetadata> { *

    Normally, this entry should be set to START for only a * single request, and the application should wait until the * sequence completes before starting a new one.

    + *

    When a precapture metering sequence is finished, the camera device + * may lock the auto-exposure routine internally to be able to accurately expose the + * subsequent still capture image ({@link CaptureRequest#CONTROL_CAPTURE_INTENT android.control.captureIntent} == STILL_CAPTURE). + * For this case, the AE may not resume normal scan if no subsequent still capture is + * submitted. To ensure that the AE routine restarts normal scan, the application should + * submit a request with {@link CaptureRequest#CONTROL_AE_LOCK android.control.aeLock} == true, followed by a request + * with {@link CaptureRequest#CONTROL_AE_LOCK android.control.aeLock} == false, if the application decides not to submit a + * still capture request after the precapture sequence completes.

    *

    The exact effect of auto-exposure (AE) precapture trigger * depends on the current AE mode and state; see * {@link CaptureResult#CONTROL_AE_STATE android.control.aeState} for AE precapture state transition @@ -744,7 +754,9 @@ public class CaptureResult extends CameraMetadata> { * Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the * {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key

    * + * @see CaptureRequest#CONTROL_AE_LOCK * @see CaptureResult#CONTROL_AE_STATE + * @see CaptureRequest#CONTROL_CAPTURE_INTENT * @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL * @see #CONTROL_AE_PRECAPTURE_TRIGGER_IDLE * @see #CONTROL_AE_PRECAPTURE_TRIGGER_START @@ -970,7 +982,10 @@ public class CaptureResult extends CameraMetadata> { *

    Whether auto-focus (AF) is currently enabled, and what * mode it is set to.

    *

    Only effective if {@link CaptureRequest#CONTROL_MODE android.control.mode} = AUTO and the lens is not fixed focus - * (i.e. {@link CameraCharacteristics#LENS_INFO_MINIMUM_FOCUS_DISTANCE android.lens.info.minimumFocusDistance} > 0).

    + * (i.e. {@link CameraCharacteristics#LENS_INFO_MINIMUM_FOCUS_DISTANCE android.lens.info.minimumFocusDistance} > 0). Also note that + * when {@link CaptureRequest#CONTROL_AE_MODE android.control.aeMode} is OFF, the behavior of AF is device + * dependent. It is recommended to lock AF by using {@link CaptureRequest#CONTROL_AF_TRIGGER android.control.afTrigger} before + * setting {@link CaptureRequest#CONTROL_AE_MODE android.control.aeMode} to OFF, or set AF mode to OFF when AE is OFF.

    *

    If the lens is controlled by the camera device auto-focus algorithm, * the camera device will report the current AF status in {@link CaptureResult#CONTROL_AF_STATE android.control.afState} * in result metadata.

    @@ -987,8 +1002,10 @@ public class CaptureResult extends CameraMetadata> { * {@link CameraCharacteristics#CONTROL_AF_AVAILABLE_MODES android.control.afAvailableModes}

    *

    This key is available on all devices.

    * + * @see CaptureRequest#CONTROL_AE_MODE * @see CameraCharacteristics#CONTROL_AF_AVAILABLE_MODES * @see CaptureResult#CONTROL_AF_STATE + * @see CaptureRequest#CONTROL_AF_TRIGGER * @see CaptureRequest#CONTROL_MODE * @see CameraCharacteristics#LENS_INFO_MINIMUM_FOCUS_DISTANCE * @see #CONTROL_AF_MODE_OFF @@ -1519,7 +1536,10 @@ public class CaptureResult extends CameraMetadata> { *

    When set to the ON mode, the camera device's auto-white balance * routine is enabled, overriding the application's selected * {@link CaptureRequest#COLOR_CORRECTION_TRANSFORM android.colorCorrection.transform}, {@link CaptureRequest#COLOR_CORRECTION_GAINS android.colorCorrection.gains} and - * {@link CaptureRequest#COLOR_CORRECTION_MODE android.colorCorrection.mode}.

    + * {@link CaptureRequest#COLOR_CORRECTION_MODE android.colorCorrection.mode}. Note that when {@link CaptureRequest#CONTROL_AE_MODE android.control.aeMode} + * is OFF, the behavior of AWB is device dependent. It is recommened to + * also set AWB mode to OFF or lock AWB by using {@link CaptureRequest#CONTROL_AWB_LOCK android.control.awbLock} before + * setting AE mode to OFF.

    *

    When set to the OFF mode, the camera device's auto-white balance * routine is disabled. The application manually controls the white * balance by {@link CaptureRequest#COLOR_CORRECTION_TRANSFORM android.colorCorrection.transform}, {@link CaptureRequest#COLOR_CORRECTION_GAINS android.colorCorrection.gains} @@ -1550,7 +1570,9 @@ public class CaptureResult extends CameraMetadata> { * @see CaptureRequest#COLOR_CORRECTION_GAINS * @see CaptureRequest#COLOR_CORRECTION_MODE * @see CaptureRequest#COLOR_CORRECTION_TRANSFORM + * @see CaptureRequest#CONTROL_AE_MODE * @see CameraCharacteristics#CONTROL_AWB_AVAILABLE_MODES + * @see CaptureRequest#CONTROL_AWB_LOCK * @see CaptureRequest#CONTROL_MODE * @see #CONTROL_AWB_MODE_OFF * @see #CONTROL_AWB_MODE_AUTO @@ -1898,6 +1920,7 @@ public class CaptureResult extends CameraMetadata> { *

  • {@link #CONTROL_SCENE_MODE_CANDLELIGHT CANDLELIGHT}
  • *
  • {@link #CONTROL_SCENE_MODE_BARCODE BARCODE}
  • *
  • {@link #CONTROL_SCENE_MODE_HIGH_SPEED_VIDEO HIGH_SPEED_VIDEO}
  • + *
  • {@link #CONTROL_SCENE_MODE_HDR HDR}
  • *

    *

    Available values for this device:
    * {@link CameraCharacteristics#CONTROL_AVAILABLE_SCENE_MODES android.control.availableSceneModes}

    @@ -1926,6 +1949,7 @@ public class CaptureResult extends CameraMetadata> { * @see #CONTROL_SCENE_MODE_CANDLELIGHT * @see #CONTROL_SCENE_MODE_BARCODE * @see #CONTROL_SCENE_MODE_HIGH_SPEED_VIDEO + * @see #CONTROL_SCENE_MODE_HDR */ @PublicKey public static final Key CONTROL_SCENE_MODE = diff --git a/core/java/android/hardware/camera2/DngCreator.java b/core/java/android/hardware/camera2/DngCreator.java index 6fc99ac1b9f66095999cda9eb9facce64fde2bf9..33d539c25e736a76608c82396c4387f16382de47 100644 --- a/core/java/android/hardware/camera2/DngCreator.java +++ b/core/java/android/hardware/camera2/DngCreator.java @@ -530,9 +530,9 @@ public final class DngCreator implements AutoCloseable { int uPixStride = uPlane.getPixelStride(); byte[] yuvPixel = { 0, 0, 0 }; - byte[] yFullRow = new byte[yPixStride * width]; - byte[] uFullRow = new byte[uPixStride * width / 2]; - byte[] vFullRow = new byte[vPixStride * width / 2]; + byte[] yFullRow = new byte[yPixStride * (width - 1) + 1]; + byte[] uFullRow = new byte[uPixStride * (width / 2 - 1) + 1]; + byte[] vFullRow = new byte[vPixStride * (width / 2 - 1) + 1]; byte[] finalRow = new byte[BYTES_PER_RGB_PIX * width]; for (int i = 0; i < height; i++) { int halfH = i / 2; diff --git a/core/java/android/hardware/camera2/legacy/GLThreadManager.java b/core/java/android/hardware/camera2/legacy/GLThreadManager.java index 64c532bfb9c674076c83263f99b9f9eaa37af8e8..b160d2a9445d1bd74a5cb47bd3b073eda358f7b6 100644 --- a/core/java/android/hardware/camera2/legacy/GLThreadManager.java +++ b/core/java/android/hardware/camera2/legacy/GLThreadManager.java @@ -22,6 +22,8 @@ import android.os.ConditionVariable; import android.os.Handler; import android.os.Message; import android.util.Log; +import android.util.Pair; +import android.util.Size; import android.view.Surface; import java.util.Collection; @@ -57,11 +59,11 @@ public class GLThreadManager { */ private static class ConfigureHolder { public final ConditionVariable condition; - public final Collection surfaces; + public final Collection> surfaces; public final CaptureCollector collector; - public ConfigureHolder(ConditionVariable condition, Collection surfaces, - CaptureCollector collector) { + public ConfigureHolder(ConditionVariable condition, Collection> surfaces, CaptureCollector collector) { this.condition = condition; this.surfaces = surfaces; this.collector = collector; @@ -202,10 +204,12 @@ public class GLThreadManager { * Configure the GL renderer for the given set of output surfaces, and block until * this configuration has been applied. * - * @param surfaces a collection of {@link android.view.Surface}s to configure. + * @param surfaces a collection of pairs of {@link android.view.Surface}s and their + * corresponding sizes to configure. * @param collector a {@link CaptureCollector} to retrieve requests from. */ - public void setConfigurationAndWait(Collection surfaces, CaptureCollector collector) { + public void setConfigurationAndWait(Collection> surfaces, + CaptureCollector collector) { checkNotNull(collector, "collector must not be null"); Handler handler = mGLHandlerThread.getHandler(); diff --git a/core/java/android/hardware/camera2/legacy/LegacyCameraDevice.java b/core/java/android/hardware/camera2/legacy/LegacyCameraDevice.java index 3a976ba8b862ae85c337ed8f20c4f92e18aa5b50..367a078c3d74956ccc492a3d98d9b0338c63b011 100644 --- a/core/java/android/hardware/camera2/legacy/LegacyCameraDevice.java +++ b/core/java/android/hardware/camera2/legacy/LegacyCameraDevice.java @@ -24,7 +24,6 @@ import android.hardware.camera2.CaptureRequest; import android.hardware.camera2.impl.CameraDeviceImpl; import android.hardware.camera2.impl.CaptureResultExtras; import android.hardware.camera2.ICameraDeviceCallbacks; -import android.hardware.camera2.params.StreamConfiguration; import android.hardware.camera2.params.StreamConfigurationMap; import android.hardware.camera2.utils.ArrayUtils; import android.hardware.camera2.utils.CameraBinderDecorator; @@ -36,6 +35,7 @@ import android.os.Handler; import android.os.HandlerThread; import android.os.RemoteException; import android.util.Log; +import android.util.Pair; import android.util.Size; import android.view.Surface; @@ -78,6 +78,15 @@ public class LegacyCameraDevice implements AutoCloseable { private final Handler mResultHandler; private static final int ILLEGAL_VALUE = -1; + // Keep up to date with values in hardware/libhardware/include/hardware/gralloc.h + private static final int GRALLOC_USAGE_RENDERSCRIPT = 0x00100000; + private static final int GRALLOC_USAGE_SW_READ_OFTEN = 0x00000003; + private static final int GRALLOC_USAGE_HW_TEXTURE = 0x00000100; + private static final int GRALLOC_USAGE_HW_COMPOSER = 0x00000800; + private static final int GRALLOC_USAGE_HW_VIDEO_ENCODER = 0x00010000; + + public static final int MAX_DIMEN_FOR_ROUNDING = 1080; // maximum allowed width for rounding + private CaptureResultExtras getExtrasFromRequest(RequestHolder holder) { if (holder == null) { return new CaptureResultExtras(ILLEGAL_VALUE, ILLEGAL_VALUE, ILLEGAL_VALUE, @@ -276,6 +285,7 @@ public class LegacyCameraDevice implements AutoCloseable { * on success. */ public int configureOutputs(List outputs) { + List> sizedSurfaces = new ArrayList<>(); if (outputs != null) { for (Surface output : outputs) { if (output == null) { @@ -289,16 +299,18 @@ public class LegacyCameraDevice implements AutoCloseable { try { Size s = getSurfaceSize(output); int surfaceType = detectSurfaceType(output); - Size[] sizes = streamConfigurations.getOutputSizes(surfaceType); + boolean flexibleConsumer = isFlexibleConsumer(output); + + Size[] sizes = streamConfigurations.getOutputSizes(surfaceType); if (sizes == null) { // WAR: Override default format to IMPLEMENTATION_DEFINED for b/9487482 if ((surfaceType >= LegacyMetadataMapper.HAL_PIXEL_FORMAT_RGBA_8888 && surfaceType <= LegacyMetadataMapper.HAL_PIXEL_FORMAT_BGRA_8888)) { - // YUV_420_888 is always present in LEGACY for all IMPLEMENTATION_DEFINED - // output sizes, and is publicly visible in the API (i.e. - // {@code #getOutputSizes} works here). + // YUV_420_888 is always present in LEGACY for all + // IMPLEMENTATION_DEFINED output sizes, and is publicly visible in the + // API (i.e. {@code #getOutputSizes} works here). sizes = streamConfigurations.getOutputSizes(ImageFormat.YUV_420_888); } else if (surfaceType == LegacyMetadataMapper.HAL_PIXEL_FORMAT_BLOB) { sizes = streamConfigurations.getOutputSizes(ImageFormat.JPEG); @@ -306,12 +318,18 @@ public class LegacyCameraDevice implements AutoCloseable { } if (!ArrayUtils.contains(sizes, s)) { - String reason = (sizes == null) ? "format is invalid." : - ("size not in valid set: " + Arrays.toString(sizes)); - Log.e(TAG, String.format("Surface with size (w=%d, h=%d) and format 0x%x is" - + " not valid, %s", s.getWidth(), s.getHeight(), surfaceType, - reason)); - return BAD_VALUE; + if (flexibleConsumer && (s = findClosestSize(s, sizes)) != null) { + sizedSurfaces.add(new Pair<>(output, s)); + } else { + String reason = (sizes == null) ? "format is invalid." : + ("size not in valid set: " + Arrays.toString(sizes)); + Log.e(TAG, String.format("Surface with size (w=%d, h=%d) and format " + + "0x%x is not valid, %s", s.getWidth(), s.getHeight(), + surfaceType, reason)); + return BAD_VALUE; + } + } else { + sizedSurfaces.add(new Pair<>(output, s)); } } catch (BufferQueueAbandonedException e) { Log.e(TAG, "Surface bufferqueue is abandoned, cannot configure as output: ", e); @@ -323,7 +341,7 @@ public class LegacyCameraDevice implements AutoCloseable { boolean success = false; if (mDeviceState.setConfiguring()) { - mRequestThreadManager.configure(outputs); + mRequestThreadManager.configure(sizedSurfaces); success = mDeviceState.setIdle(); } @@ -473,6 +491,31 @@ public class LegacyCameraDevice implements AutoCloseable { } } + static long findEuclidDistSquare(Size a, Size b) { + long d0 = a.getWidth() - b.getWidth(); + long d1 = a.getHeight() - b.getHeight(); + return d0 * d0 + d1 * d1; + } + + // Keep up to date with rounding behavior in + // frameworks/av/services/camera/libcameraservice/api2/CameraDeviceClient.cpp + static Size findClosestSize(Size size, Size[] supportedSizes) { + if (size == null || supportedSizes == null) { + return null; + } + Size bestSize = null; + for (Size s : supportedSizes) { + if (s.equals(size)) { + return size; + } else if (s.getWidth() <= MAX_DIMEN_FOR_ROUNDING && (bestSize == null || + LegacyCameraDevice.findEuclidDistSquare(size, s) < + LegacyCameraDevice.findEuclidDistSquare(bestSize, s))) { + bestSize = s; + } + } + return bestSize; + } + /** * Query the surface for its currently configured default buffer size. * @param surface a non-{@code null} {@code Surface} @@ -481,7 +524,7 @@ public class LegacyCameraDevice implements AutoCloseable { * @throws NullPointerException if the {@code surface} was {@code null} * @throws IllegalStateException if the {@code surface} was invalid */ - static Size getSurfaceSize(Surface surface) throws BufferQueueAbandonedException { + public static Size getSurfaceSize(Surface surface) throws BufferQueueAbandonedException { checkNotNull(surface); int[] dimens = new int[2]; @@ -490,7 +533,31 @@ public class LegacyCameraDevice implements AutoCloseable { return new Size(dimens[0], dimens[1]); } - static int detectSurfaceType(Surface surface) throws BufferQueueAbandonedException { + public static boolean isFlexibleConsumer(Surface output) { + int usageFlags = detectSurfaceUsageFlags(output); + + // Keep up to date with allowed consumer types in + // frameworks/av/services/camera/libcameraservice/api2/CameraDeviceClient.cpp + int disallowedFlags = GRALLOC_USAGE_HW_VIDEO_ENCODER | GRALLOC_USAGE_RENDERSCRIPT; + int allowedFlags = GRALLOC_USAGE_HW_TEXTURE | GRALLOC_USAGE_SW_READ_OFTEN | + GRALLOC_USAGE_HW_COMPOSER; + boolean flexibleConsumer = ((usageFlags & disallowedFlags) == 0 && + (usageFlags & allowedFlags) != 0); + return flexibleConsumer; + } + + /** + * Query the surface for its currently configured usage flags + */ + static int detectSurfaceUsageFlags(Surface surface) { + checkNotNull(surface); + return nativeDetectSurfaceUsageFlags(surface); + } + + /** + * Query the surface for its currently configured format + */ + public static int detectSurfaceType(Surface surface) throws BufferQueueAbandonedException { checkNotNull(surface); return LegacyExceptionUtils.throwOnError(nativeDetectSurfaceType(surface)); } @@ -608,5 +675,7 @@ public class LegacyCameraDevice implements AutoCloseable { private static native int nativeSetNextTimestamp(Surface surface, long timestamp); + private static native int nativeDetectSurfaceUsageFlags(Surface surface); + static native int nativeGetJpegFooterSize(); } diff --git a/core/java/android/hardware/camera2/legacy/LegacyMetadataMapper.java b/core/java/android/hardware/camera2/legacy/LegacyMetadataMapper.java index 03540e12a428b4161144476109d76e2480d04c60..347db05b930c3301134319a3035a0e062bb005a9 100644 --- a/core/java/android/hardware/camera2/legacy/LegacyMetadataMapper.java +++ b/core/java/android/hardware/camera2/legacy/LegacyMetadataMapper.java @@ -328,15 +328,15 @@ public class LegacyMetadataMapper { appendStreamConfig(availableStreamConfigs, ImageFormat.YUV_420_888, previewSizes); for (int format : p.getSupportedPreviewFormats()) { - if (ImageFormat.isPublicFormat(format)) { + if (ImageFormat.isPublicFormat(format) && format != ImageFormat.NV21) { appendStreamConfig(availableStreamConfigs, format, previewSizes); - } else { + } else if (VERBOSE) { /* * Do not add any formats unknown to us * (since it would fail runtime checks in StreamConfigurationMap) */ - Log.w(TAG, - String.format("mapStreamConfigs - Skipping non-public format %x", format)); + Log.v(TAG, + String.format("mapStreamConfigs - Skipping format %x", format)); } } @@ -389,8 +389,8 @@ public class LegacyMetadataMapper { int j = 0; for (String mode : antiBandingModes) { int convertedMode = convertAntiBandingMode(mode); - if (convertedMode == -1) { - Log.w(TAG, "Antibanding mode " + ((mode == null) ? "NULL" : mode) + + if (VERBOSE && convertedMode == -1) { + Log.v(TAG, "Antibanding mode " + ((mode == null) ? "NULL" : mode) + " not supported, skipping..."); } else { modes[j++] = convertedMode; diff --git a/core/java/android/hardware/camera2/legacy/ParameterUtils.java b/core/java/android/hardware/camera2/legacy/ParameterUtils.java index 98adcea8cb97f31be1e162d1db53e2b8ea457f6f..3b10eb58df3b7a6e83fd29cbe912cafcc0da6cd9 100644 --- a/core/java/android/hardware/camera2/legacy/ParameterUtils.java +++ b/core/java/android/hardware/camera2/legacy/ParameterUtils.java @@ -918,7 +918,9 @@ public class ParameterUtils { convertCameraAreaToActiveArrayRectangle(activeArray, zoomData, fakeArea); Point leftEye = face.leftEye, rightEye = face.rightEye, mouth = face.mouth; - if (leftEye != null && rightEye != null && mouth != null) { + if (leftEye != null && rightEye != null && mouth != null && leftEye.x != -2000 && + leftEye.y != -2000 && rightEye.x != -2000 && rightEye.y != -2000 && + mouth.x != -2000 && mouth.y != -2000) { leftEye = convertCameraPointToActiveArrayPoint(activeArray, zoomData, leftEye, /*usePreviewCrop*/true); rightEye = convertCameraPointToActiveArrayPoint(activeArray, zoomData, diff --git a/core/java/android/hardware/camera2/legacy/RequestThreadManager.java b/core/java/android/hardware/camera2/legacy/RequestThreadManager.java index 35deb71e4bcf794d01e45316ddcef3cd978a75c7..f1f2f0c466c40c850d9ec7f1b501c15acf839d2c 100644 --- a/core/java/android/hardware/camera2/legacy/RequestThreadManager.java +++ b/core/java/android/hardware/camera2/legacy/RequestThreadManager.java @@ -41,8 +41,10 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; +import java.util.Iterator; import java.util.List; import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; import static com.android.internal.util.Preconditions.*; @@ -67,7 +69,7 @@ public class RequestThreadManager { // For slightly more spammy messages that will get repeated every frame private static final boolean VERBOSE = Log.isLoggable(LegacyCameraDevice.DEBUG_PROP, Log.VERBOSE); - private final Camera mCamera; + private Camera mCamera; private final CameraCharacteristics mCharacteristics; private final CameraDeviceState mDeviceState; @@ -82,8 +84,8 @@ public class RequestThreadManager { private static final int MAX_IN_FLIGHT_REQUESTS = 2; private static final int PREVIEW_FRAME_TIMEOUT = 1000; // ms - private static final int JPEG_FRAME_TIMEOUT = 3000; // ms (same as CTS for API2) - private static final int REQUEST_COMPLETE_TIMEOUT = 3000; // ms (same as JPEG timeout) + private static final int JPEG_FRAME_TIMEOUT = 4000; // ms (same as CTS for API2) + private static final int REQUEST_COMPLETE_TIMEOUT = JPEG_FRAME_TIMEOUT; // ms (same as JPEG timeout) private static final float ASPECT_RATIO_TOLERANCE = 0.01f; private boolean mPreviewRunning = false; @@ -107,6 +109,8 @@ public class RequestThreadManager { private final FpsCounter mPrevCounter = new FpsCounter("Incoming Preview"); private final FpsCounter mRequestCounter = new FpsCounter("Incoming Requests"); + private final AtomicBoolean mQuit = new AtomicBoolean(false); + // Stuff JPEGs into HAL_PIXEL_FORMAT_RGBA_8888 gralloc buffers to get around SW write // limitations for (b/17379185). private static final boolean USE_BLOB_FORMAT_OVERRIDE = true; @@ -116,9 +120,10 @@ public class RequestThreadManager { */ private static class ConfigureHolder { public final ConditionVariable condition; - public final Collection surfaces; + public final Collection> surfaces; - public ConfigureHolder(ConditionVariable condition, Collection surfaces) { + public ConfigureHolder(ConditionVariable condition, Collection> surfaces) { this.condition = condition; this.surfaces = surfaces; } @@ -317,13 +322,21 @@ public class RequestThreadManager { startPreview(); } - private void configureOutputs(Collection outputs) { + private void configureOutputs(Collection> outputs) { if (DEBUG) { String outputsStr = outputs == null ? "null" : (outputs.size() + " surfaces"); Log.d(TAG, "configureOutputs with " + outputsStr); } - stopPreview(); + try { + stopPreview(); + } catch (RuntimeException e) { + Log.e(TAG, "Received device exception in configure call: ", e); + mDeviceState.setError( + CameraDeviceImpl.CameraDeviceCallbacks.ERROR_CAMERA_DEVICE); + return; + } + /* * Try to release the previous preview's surface texture earlier if we end up * using a different one; this also reduces the likelihood of getting into a deadlock @@ -333,6 +346,11 @@ public class RequestThreadManager { mCamera.setPreviewTexture(/*surfaceTexture*/null); } catch (IOException e) { Log.w(TAG, "Failed to clear prior SurfaceTexture, may cause GL deadlock: ", e); + } catch (RuntimeException e) { + Log.e(TAG, "Received device exception in configure call: ", e); + mDeviceState.setError( + CameraDeviceImpl.CameraDeviceCallbacks.ERROR_CAMERA_DEVICE); + return; } if (mGLThreadManager != null) { @@ -346,10 +364,15 @@ public class RequestThreadManager { mJpegSurfaceIds.clear(); mPreviewTexture = null; + List previewOutputSizes = new ArrayList<>(); + List callbackOutputSizes = new ArrayList<>(); + int facing = mCharacteristics.get(CameraCharacteristics.LENS_FACING); int orientation = mCharacteristics.get(CameraCharacteristics.SENSOR_ORIENTATION); if (outputs != null) { - for (Surface s : outputs) { + for (Pair outPair : outputs) { + Surface s = outPair.first; + Size outSize = outPair.second; try { int format = LegacyCameraDevice.detectSurfaceType(s); LegacyCameraDevice.setSurfaceOrientation(s, facing, orientation); @@ -362,9 +385,11 @@ public class RequestThreadManager { } mJpegSurfaceIds.add(LegacyCameraDevice.getSurfaceId(s)); mCallbackOutputs.add(s); + callbackOutputSizes.add(outSize); break; default: mPreviewOutputs.add(s); + previewOutputSizes.add(outSize); break; } } catch (LegacyExceptionUtils.BufferQueueAbandonedException e) { @@ -391,18 +416,9 @@ public class RequestThreadManager { mParams.setPreviewFpsRange(bestRange[Camera.Parameters.PREVIEW_FPS_MIN_INDEX], bestRange[Camera.Parameters.PREVIEW_FPS_MAX_INDEX]); - if (mPreviewOutputs.size() > 0) { - List outputSizes = new ArrayList<>(outputs.size()); - for (Surface s : mPreviewOutputs) { - try { - Size size = LegacyCameraDevice.getSurfaceSize(s); - outputSizes.add(size); - } catch (LegacyExceptionUtils.BufferQueueAbandonedException e) { - Log.w(TAG, "Surface abandoned, skipping...", e); - } - } + if (previewOutputSizes.size() > 0) { - Size largestOutput = SizeAreaComparator.findLargestByArea(outputSizes); + Size largestOutput = SizeAreaComparator.findLargestByArea(previewOutputSizes); // Find largest jpeg dimension - assume to have the same aspect ratio as sensor. Size largestJpegDimen = ParameterUtils.getLargestSupportedJpegSizeByArea(mParams); @@ -439,7 +455,8 @@ public class RequestThreadManager { } } - Size smallestSupportedJpegSize = calculatePictureSize(mCallbackOutputs, mParams); + Size smallestSupportedJpegSize = calculatePictureSize(mCallbackOutputs, + callbackOutputSizes, mParams); if (smallestSupportedJpegSize != null) { /* * Set takePicture size to the smallest supported JPEG size large enough @@ -457,14 +474,26 @@ public class RequestThreadManager { mGLThreadManager.start(); } mGLThreadManager.waitUntilStarted(); - mGLThreadManager.setConfigurationAndWait(mPreviewOutputs, mCaptureCollector); + List> previews = new ArrayList<>(); + Iterator previewSizeIter = previewOutputSizes.iterator(); + for (Surface p : mPreviewOutputs) { + previews.add(new Pair<>(p, previewSizeIter.next())); + } + mGLThreadManager.setConfigurationAndWait(previews, mCaptureCollector); mGLThreadManager.allowNewFrames(); mPreviewTexture = mGLThreadManager.getCurrentSurfaceTexture(); if (mPreviewTexture != null) { mPreviewTexture.setOnFrameAvailableListener(mPreviewCallback); } - mCamera.setParameters(mParams); + try { + mCamera.setParameters(mParams); + } catch (RuntimeException e) { + Log.e(TAG, "Received device exception while configuring: ", e); + mDeviceState.setError( + CameraDeviceImpl.CameraDeviceCallbacks.ERROR_CAMERA_DEVICE); + + } } private void resetJpegSurfaceFormats(Collection surfaces) { @@ -499,26 +528,25 @@ public class RequestThreadManager { * {@code null} if the {@code callbackOutputs} did not have any {@code JPEG} * surfaces. */ - private Size calculatePictureSize( - Collection callbackOutputs, Camera.Parameters params) { + private Size calculatePictureSize( List callbackOutputs, + List callbackSizes, Camera.Parameters params) { /* * Find the largest JPEG size (if any), from the configured outputs: * - the api1 picture size should be set to the smallest legal size that's at least as large * as the largest configured JPEG size */ - List configuredJpegSizes = new ArrayList(); + if (callbackOutputs.size() != callbackSizes.size()) { + throw new IllegalStateException("Input collections must be same length"); + } + List configuredJpegSizes = new ArrayList<>(); + Iterator sizeIterator = callbackSizes.iterator(); for (Surface callbackSurface : callbackOutputs) { - try { - + Size jpegSize = sizeIterator.next(); if (!LegacyCameraDevice.containsSurfaceId(callbackSurface, mJpegSurfaceIds)) { continue; // Ignore non-JPEG callback formats } - Size jpegSize = LegacyCameraDevice.getSurfaceSize(callbackSurface); configuredJpegSizes.add(jpegSize); - } catch (LegacyExceptionUtils.BufferQueueAbandonedException e) { - Log.w(TAG, "Surface abandoned, skipping...", e); - } } if (!configuredJpegSizes.isEmpty()) { /* @@ -788,7 +816,7 @@ public class RequestThreadManager { } } catch (IOException e) { - Log.e(TAG, "Received device exception: ", e); + Log.e(TAG, "Received device exception during capture call: ", e); mDeviceState.setError( CameraDeviceImpl.CameraDeviceCallbacks.ERROR_CAMERA_DEVICE); break; @@ -797,6 +825,11 @@ public class RequestThreadManager { mDeviceState.setError( CameraDeviceImpl.CameraDeviceCallbacks.ERROR_CAMERA_DEVICE); break; + } catch (RuntimeException e) { + Log.e(TAG, "Received device exception during capture call: ", e); + mDeviceState.setError( + CameraDeviceImpl.CameraDeviceCallbacks.ERROR_CAMERA_DEVICE); + break; } if (paramsChanged) { @@ -873,9 +906,11 @@ public class RequestThreadManager { } if (mGLThreadManager != null) { mGLThreadManager.quit(); + mGLThreadManager = null; } if (mCamera != null) { mCamera.release(); + mCamera = null; } resetJpegSurfaceFormats(mCallbackOutputs); break; @@ -937,14 +972,16 @@ public class RequestThreadManager { * Quit the request thread, and clean up everything. */ public void quit() { - Handler handler = mRequestThread.waitAndGetHandler(); - handler.sendMessageAtFrontOfQueue(handler.obtainMessage(MSG_CLEANUP)); - mRequestThread.quitSafely(); - try { - mRequestThread.join(); - } catch (InterruptedException e) { - Log.e(TAG, String.format("Thread %s (%d) interrupted while quitting.", - mRequestThread.getName(), mRequestThread.getId())); + if (!mQuit.getAndSet(true)) { // Avoid sending messages on dead thread's handler. + Handler handler = mRequestThread.waitAndGetHandler(); + handler.sendMessageAtFrontOfQueue(handler.obtainMessage(MSG_CLEANUP)); + mRequestThread.quitSafely(); + try { + mRequestThread.join(); + } catch (InterruptedException e) { + Log.e(TAG, String.format("Thread %s (%d) interrupted while quitting.", + mRequestThread.getName(), mRequestThread.getId())); + } } } @@ -994,7 +1031,7 @@ public class RequestThreadManager { * * @param outputs a {@link java.util.Collection} of outputs to configure. */ - public void configure(Collection outputs) { + public void configure(Collection> outputs) { Handler handler = mRequestThread.waitAndGetHandler(); final ConditionVariable condition = new ConditionVariable(/*closed*/false); ConfigureHolder holder = new ConfigureHolder(condition, outputs); diff --git a/core/java/android/hardware/camera2/legacy/SurfaceTextureRenderer.java b/core/java/android/hardware/camera2/legacy/SurfaceTextureRenderer.java index c0d1d5e563c2368cc26d1e359a9138702d123323..615b2c8604d2fca3b56c77ef31e83bd7b31c5edd 100644 --- a/core/java/android/hardware/camera2/legacy/SurfaceTextureRenderer.java +++ b/core/java/android/hardware/camera2/legacy/SurfaceTextureRenderer.java @@ -58,6 +58,11 @@ public class SurfaceTextureRenderer { private static final int GLES_VERSION = 2; private static final int PBUFFER_PIXEL_BYTES = 4; + private static final int FLIP_TYPE_NONE = 0; + private static final int FLIP_TYPE_HORIZONTAL = 1; + private static final int FLIP_TYPE_VERTICAL = 2; + private static final int FLIP_TYPE_BOTH = FLIP_TYPE_HORIZONTAL | FLIP_TYPE_VERTICAL; + private EGLDisplay mEGLDisplay = EGL14.EGL_NO_DISPLAY; private EGLContext mEGLContext = EGL14.EGL_NO_CONTEXT; private EGLConfig mConfigs; @@ -82,8 +87,8 @@ public class SurfaceTextureRenderer { private static final int TRIANGLE_VERTICES_DATA_POS_OFFSET = 0; private static final int TRIANGLE_VERTICES_DATA_UV_OFFSET = 3; - // Sampling is mirrored across the vertical axis to undo horizontal flip from the front camera - private static final float[] sFrontCameraTriangleVertices = { + // Sampling is mirrored across the horizontal axis + private static final float[] sHorizontalFlipTriangleVertices = { // X, Y, Z, U, V -1.0f, -1.0f, 0, 1.f, 0.f, 1.0f, -1.0f, 0, 0.f, 0.f, @@ -91,8 +96,26 @@ public class SurfaceTextureRenderer { 1.0f, 1.0f, 0, 0.f, 1.f, }; + // Sampling is mirrored across the vertical axis + private static final float[] sVerticalFlipTriangleVertices = { + // X, Y, Z, U, V + -1.0f, -1.0f, 0, 0.f, 1.f, + 1.0f, -1.0f, 0, 1.f, 1.f, + -1.0f, 1.0f, 0, 0.f, 0.f, + 1.0f, 1.0f, 0, 1.f, 0.f, + }; + + // Sampling is mirrored across the both axes + private static final float[] sBothFlipTriangleVertices = { + // X, Y, Z, U, V + -1.0f, -1.0f, 0, 1.f, 1.f, + 1.0f, -1.0f, 0, 0.f, 1.f, + -1.0f, 1.0f, 0, 1.f, 0.f, + 1.0f, 1.0f, 0, 0.f, 0.f, + }; + // Sampling is 1:1 for a straight copy for the back camera - private static final float[] sBackCameraTriangleVertices = { + private static final float[] sRegularTriangleVertices = { // X, Y, Z, U, V -1.0f, -1.0f, 0, 0.f, 0.f, 1.0f, -1.0f, 0, 1.f, 0.f, @@ -100,7 +123,11 @@ public class SurfaceTextureRenderer { 1.0f, 1.0f, 0, 1.f, 1.f, }; - private FloatBuffer mTriangleVertices; + private FloatBuffer mRegularTriangleVertices; + private FloatBuffer mHorizontalFlipTriangleVertices; + private FloatBuffer mVerticalFlipTriangleVertices; + private FloatBuffer mBothFlipTriangleVertices; + private final int mFacing; /** * As used in this file, this vertex shader maps a unit square to the view, and @@ -148,15 +175,27 @@ public class SurfaceTextureRenderer { private static final String LEGACY_PERF_PROPERTY = "persist.camera.legacy_perf"; public SurfaceTextureRenderer(int facing) { - if (facing == CameraCharacteristics.LENS_FACING_BACK) { - mTriangleVertices = ByteBuffer.allocateDirect(sBackCameraTriangleVertices.length * - FLOAT_SIZE_BYTES).order(ByteOrder.nativeOrder()).asFloatBuffer(); - mTriangleVertices.put(sBackCameraTriangleVertices).position(0); - } else { - mTriangleVertices = ByteBuffer.allocateDirect(sFrontCameraTriangleVertices.length * - FLOAT_SIZE_BYTES).order(ByteOrder.nativeOrder()).asFloatBuffer(); - mTriangleVertices.put(sFrontCameraTriangleVertices).position(0); - } + mFacing = facing; + + mRegularTriangleVertices = ByteBuffer.allocateDirect(sRegularTriangleVertices.length * + FLOAT_SIZE_BYTES).order(ByteOrder.nativeOrder()).asFloatBuffer(); + mRegularTriangleVertices.put(sRegularTriangleVertices).position(0); + + mHorizontalFlipTriangleVertices = ByteBuffer.allocateDirect( + sHorizontalFlipTriangleVertices.length * FLOAT_SIZE_BYTES). + order(ByteOrder.nativeOrder()).asFloatBuffer(); + mHorizontalFlipTriangleVertices.put(sHorizontalFlipTriangleVertices).position(0); + + mVerticalFlipTriangleVertices = ByteBuffer.allocateDirect( + sVerticalFlipTriangleVertices.length * FLOAT_SIZE_BYTES). + order(ByteOrder.nativeOrder()).asFloatBuffer(); + mVerticalFlipTriangleVertices.put(sVerticalFlipTriangleVertices).position(0); + + mBothFlipTriangleVertices = ByteBuffer.allocateDirect( + sBothFlipTriangleVertices.length * FLOAT_SIZE_BYTES). + order(ByteOrder.nativeOrder()).asFloatBuffer(); + mBothFlipTriangleVertices.put(sBothFlipTriangleVertices).position(0); + Matrix.setIdentityM(mSTMatrix, 0); } @@ -209,7 +248,7 @@ public class SurfaceTextureRenderer { return program; } - private void drawFrame(SurfaceTexture st, int width, int height) { + private void drawFrame(SurfaceTexture st, int width, int height, int flipType) { checkGlError("onDrawFrame start"); st.getTransformMatrix(mSTMatrix); @@ -230,21 +269,23 @@ public class SurfaceTextureRenderer { throw new IllegalStateException("Illegal intermediate texture with dimension of 0"); } - // Letterbox or pillerbox output dimensions into intermediate dimensions. + // Letterbox or pillar-box output dimensions into intermediate dimensions. RectF intermediate = new RectF(/*left*/0, /*top*/0, /*right*/texWidth, /*bottom*/texHeight); RectF output = new RectF(/*left*/0, /*top*/0, /*right*/width, /*bottom*/height); android.graphics.Matrix boxingXform = new android.graphics.Matrix(); boxingXform.setRectToRect(output, intermediate, android.graphics.Matrix.ScaleToFit.CENTER); boxingXform.mapRect(output); - // Find scaling factor from pillerboxed/letterboxed output dimensions to intermediate + // Find scaling factor from pillar-boxed/letter-boxed output dimensions to intermediate // buffer dimensions. float scaleX = intermediate.width() / output.width(); float scaleY = intermediate.height() / output.height(); - // Scale opposite dimension in clip coordinates so output is letterboxed/pillerboxed into - // the intermediate dimensions (rather than vice-versa). - Matrix.scaleM(mMVPMatrix, /*offset*/0, /*x*/scaleY, /*y*/scaleX, /*z*/1); + // Intermediate texture is implicitly scaled to 'fill' the output dimensions in clip space + // coordinates in the shader. To avoid stretching, we need to scale the larger dimension + // of the intermediate buffer so that the output buffer is actually letter-boxed + // or pillar-boxed into the intermediate buffer after clipping. + Matrix.scaleM(mMVPMatrix, /*offset*/0, /*x*/scaleX, /*y*/scaleY, /*z*/1); if (DEBUG) { Log.d(TAG, "Scaling factors (S_x = " + scaleX + ",S_y = " + scaleY + ") used for " + @@ -266,16 +307,32 @@ public class SurfaceTextureRenderer { GLES20.glActiveTexture(GLES20.GL_TEXTURE0); GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, mTextureID); - mTriangleVertices.position(TRIANGLE_VERTICES_DATA_POS_OFFSET); + FloatBuffer triangleVertices; + switch(flipType) { + case FLIP_TYPE_HORIZONTAL: + triangleVertices = mHorizontalFlipTriangleVertices; + break; + case FLIP_TYPE_VERTICAL: + triangleVertices = mVerticalFlipTriangleVertices; + break; + case FLIP_TYPE_BOTH: + triangleVertices = mBothFlipTriangleVertices; + break; + default: + triangleVertices = mRegularTriangleVertices; + break; + } + + triangleVertices.position(TRIANGLE_VERTICES_DATA_POS_OFFSET); GLES20.glVertexAttribPointer(maPositionHandle, VERTEX_POS_SIZE, GLES20.GL_FLOAT, - /*normalized*/ false, TRIANGLE_VERTICES_DATA_STRIDE_BYTES, mTriangleVertices); + /*normalized*/ false, TRIANGLE_VERTICES_DATA_STRIDE_BYTES, triangleVertices); checkGlError("glVertexAttribPointer maPosition"); GLES20.glEnableVertexAttribArray(maPositionHandle); checkGlError("glEnableVertexAttribArray maPositionHandle"); - mTriangleVertices.position(TRIANGLE_VERTICES_DATA_UV_OFFSET); + triangleVertices.position(TRIANGLE_VERTICES_DATA_UV_OFFSET); GLES20.glVertexAttribPointer(maTextureHandle, VERTEX_UV_SIZE, GLES20.GL_FLOAT, - /*normalized*/ false, TRIANGLE_VERTICES_DATA_STRIDE_BYTES, mTriangleVertices); + /*normalized*/ false, TRIANGLE_VERTICES_DATA_STRIDE_BYTES, triangleVertices); checkGlError("glVertexAttribPointer maTextureHandle"); GLES20.glEnableVertexAttribArray(maTextureHandle); checkGlError("glEnableVertexAttribArray maTextureHandle"); @@ -397,16 +454,9 @@ public class SurfaceTextureRenderer { EGL14.EGL_NONE }; for (EGLSurfaceHolder holder : surfaces) { - try { - Size size = LegacyCameraDevice.getSurfaceSize(holder.surface); - holder.width = size.getWidth(); - holder.height = size.getHeight(); - holder.eglSurface = EGL14.eglCreateWindowSurface(mEGLDisplay, mConfigs, - holder.surface, surfaceAttribs, /*offset*/ 0); - checkEglError("eglCreateWindowSurface"); - } catch (LegacyExceptionUtils.BufferQueueAbandonedException e) { - Log.w(TAG, "Surface abandoned, skipping...", e); - } + holder.eglSurface = EGL14.eglCreateWindowSurface(mEGLDisplay, mConfigs, + holder.surface, surfaceAttribs, /*offset*/ 0); + checkEglError("eglCreateWindowSurface"); } } @@ -417,24 +467,17 @@ public class SurfaceTextureRenderer { int maxLength = 0; for (EGLSurfaceHolder holder : surfaces) { - try { - Size size = LegacyCameraDevice.getSurfaceSize(holder.surface); - int length = size.getWidth() * size.getHeight(); - // Find max surface size, ensure PBuffer can hold this many pixels - maxLength = (length > maxLength) ? length : maxLength; - int[] surfaceAttribs = { - EGL14.EGL_WIDTH, size.getWidth(), - EGL14.EGL_HEIGHT, size.getHeight(), - EGL14.EGL_NONE - }; - holder.width = size.getWidth(); - holder.height = size.getHeight(); - holder.eglSurface = - EGL14.eglCreatePbufferSurface(mEGLDisplay, mConfigs, surfaceAttribs, 0); - checkEglError("eglCreatePbufferSurface"); - } catch (LegacyExceptionUtils.BufferQueueAbandonedException e) { - Log.w(TAG, "Surface abandoned, skipping...", e); - } + int length = holder.width * holder.height; + // Find max surface size, ensure PBuffer can hold this many pixels + maxLength = (length > maxLength) ? length : maxLength; + int[] surfaceAttribs = { + EGL14.EGL_WIDTH, holder.width, + EGL14.EGL_HEIGHT, holder.height, + EGL14.EGL_NONE + }; + holder.eglSurface = + EGL14.eglCreatePbufferSurface(mEGLDisplay, mConfigs, surfaceAttribs, 0); + checkEglError("eglCreatePbufferSurface"); } mPBufferPixels = ByteBuffer.allocateDirect(maxLength * PBUFFER_PIXEL_BYTES) .order(ByteOrder.nativeOrder()); @@ -569,7 +612,7 @@ public class SurfaceTextureRenderer { * * @param surfaces a {@link Collection} of surfaces. */ - public void configureSurfaces(Collection surfaces) { + public void configureSurfaces(Collection> surfaces) { releaseEGLContext(); if (surfaces == null || surfaces.size() == 0) { @@ -577,18 +620,20 @@ public class SurfaceTextureRenderer { return; } - for (Surface s : surfaces) { + for (Pair p : surfaces) { + Surface s = p.first; + Size surfaceSize = p.second; // If pixel conversions aren't handled by egl, use a pbuffer try { + EGLSurfaceHolder holder = new EGLSurfaceHolder(); + holder.surface = s; + holder.width = surfaceSize.getWidth(); + holder.height = surfaceSize.getHeight(); if (LegacyCameraDevice.needsConversion(s)) { // Always override to YV12 output for YUV surface formats. LegacyCameraDevice.setSurfaceFormat(s, ImageFormat.YV12); - EGLSurfaceHolder holder = new EGLSurfaceHolder(); - holder.surface = s; mConversionSurfaces.add(holder); } else { - EGLSurfaceHolder holder = new EGLSurfaceHolder(); - holder.surface = s; mSurfaces.add(holder); } } catch (LegacyExceptionUtils.BufferQueueAbandonedException e) { @@ -672,12 +717,15 @@ public class SurfaceTextureRenderer { List targetSurfaceIds = LegacyCameraDevice.getSurfaceIds(targetSurfaces); for (EGLSurfaceHolder holder : mSurfaces) { if (LegacyCameraDevice.containsSurfaceId(holder.surface, targetSurfaceIds)) { - makeCurrent(holder.eglSurface); - try { + try{ LegacyCameraDevice.setSurfaceDimens(holder.surface, holder.width, holder.height); + makeCurrent(holder.eglSurface); + LegacyCameraDevice.setNextTimestamp(holder.surface, captureHolder.second); - drawFrame(mSurfaceTexture, holder.width, holder.height); + drawFrame(mSurfaceTexture, holder.width, holder.height, + (mFacing == CameraCharacteristics.LENS_FACING_FRONT) ? + FLIP_TYPE_HORIZONTAL : FLIP_TYPE_NONE); swapBuffers(holder.eglSurface); } catch (LegacyExceptionUtils.BufferQueueAbandonedException e) { Log.w(TAG, "Surface abandoned, dropping frame. ", e); @@ -687,7 +735,10 @@ public class SurfaceTextureRenderer { for (EGLSurfaceHolder holder : mConversionSurfaces) { if (LegacyCameraDevice.containsSurfaceId(holder.surface, targetSurfaceIds)) { makeCurrent(holder.eglSurface); - drawFrame(mSurfaceTexture, holder.width, holder.height); + // glReadPixels reads from the bottom of the buffer, so add an extra vertical flip + drawFrame(mSurfaceTexture, holder.width, holder.height, + (mFacing == CameraCharacteristics.LENS_FACING_FRONT) ? + FLIP_TYPE_BOTH : FLIP_TYPE_VERTICAL); mPBufferPixels.clear(); GLES20.glReadPixels(/*x*/ 0, /*y*/ 0, holder.width, holder.height, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, mPBufferPixels); @@ -695,10 +746,11 @@ public class SurfaceTextureRenderer { try { int format = LegacyCameraDevice.detectSurfaceType(holder.surface); + LegacyCameraDevice.setSurfaceDimens(holder.surface, holder.width, + holder.height); LegacyCameraDevice.setNextTimestamp(holder.surface, captureHolder.second); LegacyCameraDevice.produceFrame(holder.surface, mPBufferPixels.array(), holder.width, holder.height, format); - swapBuffers(holder.eglSurface); } catch (LegacyExceptionUtils.BufferQueueAbandonedException e) { Log.w(TAG, "Surface abandoned, dropping frame. ", e); } diff --git a/core/java/android/hardware/camera2/params/StreamConfigurationMap.java b/core/java/android/hardware/camera2/params/StreamConfigurationMap.java index 5d226e393f9f28900bf0272b1c9519c89d53c585..479c842e24d5e46fbc1fc3a433ba263e98e1d76c 100644 --- a/core/java/android/hardware/camera2/params/StreamConfigurationMap.java +++ b/core/java/android/hardware/camera2/params/StreamConfigurationMap.java @@ -22,6 +22,9 @@ import android.hardware.camera2.CameraCharacteristics; import android.hardware.camera2.CameraDevice; import android.hardware.camera2.CaptureRequest; import android.hardware.camera2.utils.HashCodeHelpers; +import android.hardware.camera2.legacy.LegacyCameraDevice; +import android.hardware.camera2.legacy.LegacyMetadataMapper; +import android.hardware.camera2.legacy.LegacyExceptionUtils.BufferQueueAbandonedException; import android.view.Surface; import android.util.Log; import android.util.Range; @@ -292,13 +295,21 @@ public final class StreamConfigurationMap { * * * - * This is not an exhaustive list; see the particular class's documentation for further + *

    Surfaces from flexible sources will return true even if the exact size of the Surface does + * not match a camera-supported size, as long as the format (or class) is supported and the + * camera device supports a size that is equal to or less than 1080p in that format. If such as + * Surface is used to create a capture session, it will have its size rounded to the nearest + * supported size, below or equal to 1080p. Flexible sources include SurfaceView, SurfaceTexture, + * and ImageReader.

    + * + *

    This is not an exhaustive list; see the particular class's documentation for further * possible reasons of incompatibility.

    * * @param surface a non-{@code null} {@link Surface} object reference * @return {@code true} if this is supported, {@code false} otherwise * * @throws NullPointerException if {@code surface} was {@code null} + * @throws IllegalArgumentException if the Surface endpoint is no longer valid * * @see CameraDevice#createCaptureSession * @see #isOutputSupportedFor(Class) @@ -306,9 +317,37 @@ public final class StreamConfigurationMap { public boolean isOutputSupportedFor(Surface surface) { checkNotNull(surface, "surface must not be null"); - throw new UnsupportedOperationException("Not implemented yet"); + Size surfaceSize; + int surfaceFormat = -1; + try { + surfaceSize = LegacyCameraDevice.getSurfaceSize(surface); + surfaceFormat = LegacyCameraDevice.detectSurfaceType(surface); + } catch(BufferQueueAbandonedException e) { + throw new IllegalArgumentException("Abandoned surface", e); + } + + // See if consumer is flexible. + boolean isFlexible = LegacyCameraDevice.isFlexibleConsumer(surface); - // TODO: JNI function that checks the Surface's IGraphicBufferProducer state + // Override RGB formats to IMPLEMENTATION_DEFINED, b/9487482 + if ((surfaceFormat >= LegacyMetadataMapper.HAL_PIXEL_FORMAT_RGBA_8888 && + surfaceFormat <= LegacyMetadataMapper.HAL_PIXEL_FORMAT_BGRA_8888)) { + surfaceFormat = LegacyMetadataMapper.HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED; + } + + for (StreamConfiguration config : mConfigurations) { + if (config.getFormat() == surfaceFormat && config.isOutput()) { + // Mathing format, either need exact size match, or a flexible consumer + // and a size no bigger than MAX_DIMEN_FOR_ROUNDING + if (config.getSize().equals(surfaceSize)) { + return true; + } else if (isFlexible && + (config.getSize().getWidth() <= LegacyCameraDevice.MAX_DIMEN_FOR_ROUNDING)) { + return true; + } + } + } + return false; } /** @@ -1027,7 +1066,8 @@ public final class StreamConfigurationMap { int i = 0; for (int format : getFormatsMap(output).keySet()) { - if (format != HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED) { + if (format != HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED && + format != HAL_PIXEL_FORMAT_RAW_OPAQUE) { formats[i++] = format; } } @@ -1089,6 +1129,10 @@ public final class StreamConfigurationMap { if (formatsMap.containsKey(HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED)) { size -= 1; } + if (formatsMap.containsKey(HAL_PIXEL_FORMAT_RAW_OPAQUE)) { + size -= 1; + } + return size; } diff --git a/core/java/android/hardware/camera2/utils/ArrayUtils.java b/core/java/android/hardware/camera2/utils/ArrayUtils.java index 5a78bbd4b9498e0c74ce20fa9dcd221c39671ac2..79a335ccb2e236fe0916515e44bdd06e3bbab7ab 100644 --- a/core/java/android/hardware/camera2/utils/ArrayUtils.java +++ b/core/java/android/hardware/camera2/utils/ArrayUtils.java @@ -117,7 +117,7 @@ public class ArrayUtils { // Guard against unexpected values if (strIndex < 0) { - Log.w(TAG, "Ignoring invalid value " + str); + if (VERBOSE) Log.v(TAG, "Ignoring invalid value " + str); continue; } diff --git a/core/java/android/hardware/display/DisplayManagerInternal.java b/core/java/android/hardware/display/DisplayManagerInternal.java index 8447dde333d1d0fc6f1f11942a18500b1257bdcd..bb16215322ee99c790a79da07b4f496aa36331d3 100644 --- a/core/java/android/hardware/display/DisplayManagerInternal.java +++ b/core/java/android/hardware/display/DisplayManagerInternal.java @@ -172,9 +172,12 @@ public abstract class DisplayManagerInternal { // If true, enables automatic brightness control. public boolean useAutoBrightness; - //If true, scales the brightness to half of desired. + // If true, scales the brightness to half of desired. public boolean lowPowerMode; + // If true, applies a brightness boost. + public boolean boostScreenBrightness; + // If true, prevents the screen from completely turning on if it is currently off. // The display does not enter a "ready" state if this flag is true and screen on is // blocked. The window manager policy blocks screen on while it prepares the keyguard to @@ -216,6 +219,7 @@ public abstract class DisplayManagerInternal { useAutoBrightness = other.useAutoBrightness; blockScreenOn = other.blockScreenOn; lowPowerMode = other.lowPowerMode; + boostScreenBrightness = other.boostScreenBrightness; dozeScreenBrightness = other.dozeScreenBrightness; dozeScreenState = other.dozeScreenState; } @@ -235,6 +239,7 @@ public abstract class DisplayManagerInternal { && useAutoBrightness == other.useAutoBrightness && blockScreenOn == other.blockScreenOn && lowPowerMode == other.lowPowerMode + && boostScreenBrightness == other.boostScreenBrightness && dozeScreenBrightness == other.dozeScreenBrightness && dozeScreenState == other.dozeScreenState; } @@ -253,6 +258,7 @@ public abstract class DisplayManagerInternal { + ", useAutoBrightness=" + useAutoBrightness + ", blockScreenOn=" + blockScreenOn + ", lowPowerMode=" + lowPowerMode + + ", boostScreenBrightness=" + boostScreenBrightness + ", dozeScreenBrightness=" + dozeScreenBrightness + ", dozeScreenState=" + Display.stateToString(dozeScreenState); } diff --git a/core/java/android/hardware/hdmi/HdmiClient.java b/core/java/android/hardware/hdmi/HdmiClient.java index aba90e47dd9c413f04dbf7aac252234cb362c4ec..45a79e1f3cae38ef6ced5bff446c0ac26c2c7d6b 100644 --- a/core/java/android/hardware/hdmi/HdmiClient.java +++ b/core/java/android/hardware/hdmi/HdmiClient.java @@ -3,13 +3,12 @@ package android.hardware.hdmi; import android.annotation.NonNull; import android.annotation.SystemApi; import android.hardware.hdmi.HdmiControlManager.VendorCommandListener; -import android.hardware.hdmi.IHdmiVendorCommandListener; import android.os.RemoteException; import android.util.Log; /** * Parent for classes of various HDMI-CEC device type used to access - * {@link HdmiControlService}. Contains methods and data used in common. + * the HDMI control system service. Contains methods and data used in common. * * @hide */ @@ -17,11 +16,13 @@ import android.util.Log; public abstract class HdmiClient { private static final String TAG = "HdmiClient"; - protected final IHdmiControlService mService; + /* package */ final IHdmiControlService mService; - protected abstract int getDeviceType(); + private IHdmiVendorCommandListener mIHdmiVendorCommandListener; - public HdmiClient(IHdmiControlService service) { + /* package */ abstract int getDeviceType(); + + /* package */ HdmiClient(IHdmiControlService service) { mService = service; } @@ -41,7 +42,7 @@ public abstract class HdmiClient { } /** - * Send a key event to other logical device. + * Sends a key event to other logical device. * * @param keyCode key code to send. Defined in {@link android.view.KeyEvent}. * @param isPressed true if this is key press event @@ -55,7 +56,7 @@ public abstract class HdmiClient { } /** - * Send vendor-specific command. + * Sends vendor-specific command. * * @param targetAddress address of the target device * @param params vendor-specific parameter. For <Vendor Command With ID> do not @@ -72,18 +73,23 @@ public abstract class HdmiClient { } /** - * Add a listener used to receive incoming vendor-specific command. + * Sets a listener used to receive incoming vendor-specific command. * * @param listener listener object */ - public void addVendorCommandListener(@NonNull VendorCommandListener listener) { + public void setVendorCommandListener(@NonNull VendorCommandListener listener) { if (listener == null) { throw new IllegalArgumentException("listener cannot be null"); } + if (mIHdmiVendorCommandListener != null) { + throw new IllegalStateException("listener was already set"); + } try { - mService.addVendorCommandListener(getListenerWrapper(listener), getDeviceType()); + IHdmiVendorCommandListener wrappedListener = getListenerWrapper(listener); + mService.addVendorCommandListener(wrappedListener, getDeviceType()); + mIHdmiVendorCommandListener = wrappedListener; } catch (RemoteException e) { - Log.e(TAG, "failed to add vendor command listener: ", e); + Log.e(TAG, "failed to set vendor command listener: ", e); } } @@ -91,8 +97,13 @@ public abstract class HdmiClient { final VendorCommandListener listener) { return new IHdmiVendorCommandListener.Stub() { @Override - public void onReceived(int srcAddress, byte[] params, boolean hasVendorId) { - listener.onReceived(srcAddress, params, hasVendorId); + public void onReceived(int srcAddress, int destAddress, byte[] params, + boolean hasVendorId) { + listener.onReceived(srcAddress, destAddress, params, hasVendorId); + } + @Override + public void onControlStateChanged(boolean enabled, int reason) { + listener.onControlStateChanged(enabled, reason); } }; } diff --git a/core/java/android/hardware/hdmi/HdmiControlManager.java b/core/java/android/hardware/hdmi/HdmiControlManager.java index 30f3576648c1ce242a35d6724dcf79bf5229daa6..308a21918ba9313bd94f2a7581c568cdf5adb633 100644 --- a/core/java/android/hardware/hdmi/HdmiControlManager.java +++ b/core/java/android/hardware/hdmi/HdmiControlManager.java @@ -21,6 +21,8 @@ import android.annotation.SdkConstant; import android.annotation.SdkConstant.SdkConstantType; import android.annotation.SystemApi; import android.os.RemoteException; +import android.util.ArrayMap; +import android.util.Log; /** * The {@link HdmiControlManager} class is used to send HDMI control messages @@ -36,6 +38,8 @@ import android.os.RemoteException; */ @SystemApi public final class HdmiControlManager { + private static final String TAG = "HdmiControlManager"; + @Nullable private final IHdmiControlService mService; /** @@ -56,7 +60,7 @@ public final class HdmiControlManager { /** * Message used by TV to receive volume status from Audio Receiver. It should check volume value - * that is retrieved from extra value with the key {@link #EXTRA_MESSAGE_EXTRAM_PARAM1}. If the + * that is retrieved from extra value with the key {@link #EXTRA_MESSAGE_EXTRA_PARAM1}. If the * value is in range of [0,100], it is current volume of Audio Receiver. And there is another * value, {@link #AVR_VOLUME_MUTED}, which is used to inform volume mute. */ @@ -71,7 +75,7 @@ public final class HdmiControlManager { * Used as an extra field in the intent {@link #ACTION_OSD_MESSAGE}. Contains the extra value * of the message. */ - public static final String EXTRA_MESSAGE_EXTRAM_PARAM1 = + public static final String EXTRA_MESSAGE_EXTRA_PARAM1 = "android.hardware.hdmi.extra.MESSAGE_EXTRA_PARAM1"; /** @@ -236,16 +240,24 @@ public final class HdmiControlManager { /** Clear timer error - CEC is disabled. */ public static final int CLEAR_TIMER_STATUS_CEC_DISABLE = 0xA2; + /** The HdmiControlService is started. */ + public static final int CONTROL_STATE_CHANGED_REASON_START = 0; + /** The state of HdmiControlService is changed by changing of settings. */ + public static final int CONTROL_STATE_CHANGED_REASON_SETTING = 1; + /** The HdmiControlService is enabled to wake up. */ + public static final int CONTROL_STATE_CHANGED_REASON_WAKEUP = 2; + /** The HdmiControlService will be disabled to standby. */ + public static final int CONTROL_STATE_CHANGED_REASON_STANDBY = 3; + // True if we have a logical device of type playback hosted in the system. private final boolean mHasPlaybackDevice; // True if we have a logical device of type TV hosted in the system. private final boolean mHasTvDevice; /** - * @hide - hide this constructor because it has a parameter of type - * IHdmiControlService, which is a system private class. The right way - * to create an instance of this class is using the factory - * Context.getSystemService. + * {@hide} - hide this constructor because it has a parameter of type IHdmiControlService, + * which is a system private class. The right way to create an instance of this class is + * using the factory Context.getSystemService. */ public HdmiControlManager(IHdmiControlService service) { mService = service; @@ -331,6 +343,9 @@ public final class HdmiControlManager { void onReceived(HdmiHotplugEvent event); } + private final ArrayMap + mHotplugEventListeners = new ArrayMap<>(); + /** * Listener used to get vendor-specific commands. */ @@ -339,11 +354,29 @@ public final class HdmiControlManager { * Called when a vendor command is received. * * @param srcAddress source logical address + * @param destAddress destination logical address * @param params vendor-specific parameters * @param hasVendorId {@code true} if the command is <Vendor Command * With ID>. The first 3 bytes of params is vendor id. */ - void onReceived(int srcAddress, byte[] params, boolean hasVendorId); + void onReceived(int srcAddress, int destAddress, byte[] params, boolean hasVendorId); + + /** + * The callback is called: + *
      + *
    • before HdmiControlService is disabled. + *
    • after HdmiControlService is enabled and the local address is assigned. + *
    + * The client shouldn't hold the thread too long since this is a blocking call. + * + * @param enabled {@code true} if HdmiControlService is enabled. + * @param reason the reason code why the state of HdmiControlService is changed. + * @see #CONTROL_STATE_CHANGED_REASON_START + * @see #CONTROL_STATE_CHANGED_REASON_SETTING + * @see #CONTROL_STATE_CHANGED_REASON_WAKEUP + * @see #CONTROL_STATE_CHANGED_REASON_STANDBY + */ + void onControlStateChanged(boolean enabled, int reason); } /** @@ -357,12 +390,19 @@ public final class HdmiControlManager { */ public void addHotplugEventListener(HotplugEventListener listener) { if (mService == null) { + Log.e(TAG, "HdmiControlService is not available"); + return; + } + if (mHotplugEventListeners.containsKey(listener)) { + Log.e(TAG, "listener is already registered"); return; } + IHdmiHotplugEventListener wrappedListener = getHotplugEventListenerWrapper(listener); + mHotplugEventListeners.put(listener, wrappedListener); try { - mService.addHotplugEventListener(getHotplugEventListenerWrapper(listener)); + mService.addHotplugEventListener(wrappedListener); } catch (RemoteException e) { - // Do nothing. + Log.e(TAG, "failed to add hotplug event listener: ", e); } } @@ -373,12 +413,18 @@ public final class HdmiControlManager { */ public void removeHotplugEventListener(HotplugEventListener listener) { if (mService == null) { + Log.e(TAG, "HdmiControlService is not available"); + return; + } + IHdmiHotplugEventListener wrappedListener = mHotplugEventListeners.remove(listener); + if (wrappedListener == null) { + Log.e(TAG, "tried to remove not-registered listener"); return; } try { - mService.removeHotplugEventListener(getHotplugEventListenerWrapper(listener)); + mService.removeHotplugEventListener(wrappedListener); } catch (RemoteException e) { - // Do nothing. + Log.e(TAG, "failed to remove hotplug event listener: ", e); } } diff --git a/core/java/android/hardware/hdmi/HdmiDeviceInfo.java b/core/java/android/hardware/hdmi/HdmiDeviceInfo.java index 7abea3696f44b72d218c2cfa4d33e6c4a14b7679..48ea9a63e2d61c433807fc3b915c6c9230fc4678 100644 --- a/core/java/android/hardware/hdmi/HdmiDeviceInfo.java +++ b/core/java/android/hardware/hdmi/HdmiDeviceInfo.java @@ -77,10 +77,19 @@ public class HdmiDeviceInfo implements Parcelable { /** Invalid port ID */ public static final int PORT_INVALID = -1; + /** Invalid device ID */ + public static final int ID_INVALID = 0xFFFF; + + /** Device info used to indicate an inactivated device. */ + public static final HdmiDeviceInfo INACTIVE_DEVICE = new HdmiDeviceInfo(); + private static final int HDMI_DEVICE_TYPE_CEC = 0; private static final int HDMI_DEVICE_TYPE_MHL = 1; private static final int HDMI_DEVICE_TYPE_HARDWARE = 2; + // Type used to indicate the device that has relinquished its active source status. + private static final int HDMI_DEVICE_TYPE_INACTIVE = 100; + // Offset used for id value. MHL devices, for instance, will be assigned the value from // ID_OFFSET_MHL. private static final int ID_OFFSET_CEC = 0x0; @@ -130,6 +139,8 @@ public class HdmiDeviceInfo implements Parcelable { return new HdmiDeviceInfo(physicalAddress, portId, adopterId, deviceId); case HDMI_DEVICE_TYPE_HARDWARE: return new HdmiDeviceInfo(physicalAddress, portId); + case HDMI_DEVICE_TYPE_INACTIVE: + return HdmiDeviceInfo.INACTIVE_DEVICE; default: return null; } @@ -208,7 +219,6 @@ public class HdmiDeviceInfo implements Parcelable { mDeviceId = -1; mAdopterId = -1; - } /** @@ -237,14 +247,36 @@ public class HdmiDeviceInfo implements Parcelable { } /** - * Return the id of the device. + * Constructor. Used to initialize the instance representing an inactivated device. + * Can be passed input change listener to indicate the active source yielded + * its status, hence the listener should take an appropriate action such as + * switching to other input. + */ + public HdmiDeviceInfo() { + mHdmiDeviceType = HDMI_DEVICE_TYPE_INACTIVE; + mPhysicalAddress = PATH_INVALID; + mId = ID_INVALID; + + mLogicalAddress = -1; + mDeviceType = DEVICE_INACTIVE; + mPortId = PORT_INVALID; + mDevicePowerStatus = HdmiControlManager.POWER_STATUS_UNKNOWN; + mDisplayName = "Inactive"; + mVendorId = 0; + + mDeviceId = -1; + mAdopterId = -1; + } + + /** + * Returns the id of the device. */ public int getId() { return mId; } /** - * Return the id to be used for CEC device. + * Returns the id to be used for CEC device. * * @param address logical address of CEC device * @return id for CEC device @@ -255,7 +287,7 @@ public class HdmiDeviceInfo implements Parcelable { } /** - * Return the id to be used for MHL device. + * Returns the id to be used for MHL device. * * @param portId port which the MHL device is connected to * @return id for MHL device @@ -266,7 +298,7 @@ public class HdmiDeviceInfo implements Parcelable { } /** - * Return the id to be used for hardware port. + * Returns the id to be used for hardware port. * * @param portId port id * @return id for hardware port @@ -276,28 +308,28 @@ public class HdmiDeviceInfo implements Parcelable { } /** - * Return the CEC logical address of the device. + * Returns the CEC logical address of the device. */ public int getLogicalAddress() { return mLogicalAddress; } /** - * Return the physical address of the device. + * Returns the physical address of the device. */ public int getPhysicalAddress() { return mPhysicalAddress; } /** - * Return the port ID. + * Returns the port ID. */ public int getPortId() { return mPortId; } /** - * Return CEC type of the device. For more details, refer constants between {@link #DEVICE_TV} + * Returns CEC type of the device. For more details, refer constants between {@link #DEVICE_TV} * and {@link #DEVICE_INACTIVE}. */ public int getDeviceType() { @@ -305,7 +337,7 @@ public class HdmiDeviceInfo implements Parcelable { } /** - * Return device's power status. It should be one of the following values. + * Returns device's power status. It should be one of the following values. *
      *
    • {@link HdmiControlManager#POWER_STATUS_ON} *
    • {@link HdmiControlManager#POWER_STATUS_STANDBY} @@ -319,30 +351,36 @@ public class HdmiDeviceInfo implements Parcelable { } /** - * Return MHL device id. Return -1 for non-MHL device. + * Returns MHL device id. Return -1 for non-MHL device. */ public int getDeviceId() { return mDeviceId; } /** - * Return MHL adopter id. Return -1 for non-MHL device. + * Returns MHL adopter id. Return -1 for non-MHL device. */ public int getAdopterId() { return mAdopterId; } /** - * Return {@code true} if the device is of a type that can be an input source. + * Returns {@code true} if the device is of a type that can be an input source. */ public boolean isSourceType() { - return mDeviceType == DEVICE_PLAYBACK - || mDeviceType == DEVICE_RECORDER - || mDeviceType == DEVICE_TUNER; + if (isCecDevice()) { + return mDeviceType == DEVICE_PLAYBACK + || mDeviceType == DEVICE_RECORDER + || mDeviceType == DEVICE_TUNER; + } else if (isMhlDevice()) { + return true; + } else { + return false; + } } /** - * Return {@code true} if the device represents an HDMI-CEC device. {@code false} if the device + * Returns {@code true} if the device represents an HDMI-CEC device. {@code false} if the device * is either MHL or other device. */ public boolean isCecDevice() { @@ -350,7 +388,7 @@ public class HdmiDeviceInfo implements Parcelable { } /** - * Return {@code true} if the device represents an MHL device. {@code false} if the device is + * Returns {@code true} if the device represents an MHL device. {@code false} if the device is * either CEC or other device. */ public boolean isMhlDevice() { @@ -358,14 +396,22 @@ public class HdmiDeviceInfo implements Parcelable { } /** - * Return display (OSD) name of the device. + * Return {@code true} if the device represents an inactivated device that relinquishes + * its status as active source by <Active Source> (HDMI-CEC) or Content-off (MHL). + */ + public boolean isInactivated() { + return mHdmiDeviceType == HDMI_DEVICE_TYPE_INACTIVE; + } + + /** + * Returns display (OSD) name of the device. */ public String getDisplayName() { return mDisplayName; } /** - * Return vendor id of the device. Vendor id is used to distinguish devices built by other + * Returns vendor id of the device. Vendor id is used to distinguish devices built by other * manufactures. This is required for vendor-specific command on CEC standard. */ public int getVendorId() { @@ -373,7 +419,7 @@ public class HdmiDeviceInfo implements Parcelable { } /** - * Describe the kinds of special objects contained in this Parcelable's marshalled + * Describes the kinds of special objects contained in this Parcelable's marshalled * representation. */ @Override @@ -382,7 +428,7 @@ public class HdmiDeviceInfo implements Parcelable { } /** - * Serialize this object into a {@link Parcel}. + * Serializes this object into a {@link Parcel}. * * @param dest The Parcel in which the object should be written. * @param flags Additional flags about how the object should be written. May be 0 or @@ -405,6 +451,8 @@ public class HdmiDeviceInfo implements Parcelable { dest.writeInt(mDeviceId); dest.writeInt(mAdopterId); break; + case HDMI_DEVICE_TYPE_INACTIVE: + // flow through default: // no-op } @@ -432,6 +480,9 @@ public class HdmiDeviceInfo implements Parcelable { case HDMI_DEVICE_TYPE_HARDWARE: s.append("Hardware: "); break; + case HDMI_DEVICE_TYPE_INACTIVE: + s.append("Inactivated: "); + break; default: return ""; } diff --git a/core/java/android/hardware/hdmi/HdmiHotplugEvent.java b/core/java/android/hardware/hdmi/HdmiHotplugEvent.java index 7be4bc57a3298f62b848ad6385082c0fea66ece4..94767428d031ad4cc639652b2da2d23c51a5a317 100644 --- a/core/java/android/hardware/hdmi/HdmiHotplugEvent.java +++ b/core/java/android/hardware/hdmi/HdmiHotplugEvent.java @@ -44,7 +44,7 @@ public final class HdmiHotplugEvent implements Parcelable { } /** - * Return the port number for which the event occurred. + * Returns the port number for which the event occurred. * * @return port number */ @@ -53,7 +53,7 @@ public final class HdmiHotplugEvent implements Parcelable { } /** - * Return the connection status associated with this event + * Returns the connection status associated with this event * * @return true if the device gets connected; otherwise false */ @@ -62,7 +62,7 @@ public final class HdmiHotplugEvent implements Parcelable { } /** - * Describe the kinds of special objects contained in this Parcelable's + * Describes the kinds of special objects contained in this Parcelable's * marshalled representation. */ @Override @@ -71,7 +71,7 @@ public final class HdmiHotplugEvent implements Parcelable { } /** - * Flatten this object in to a Parcel. + * Flattens this object in to a Parcel. * * @param dest The Parcel in which the object should be written. * @param flags Additional flags about how the object should be written. @@ -86,17 +86,19 @@ public final class HdmiHotplugEvent implements Parcelable { public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { /** - * Rebuild a {@link HdmiHotplugEvent} previously stored with + * Rebuilds a {@link HdmiHotplugEvent} previously stored with * {@link Parcelable#writeToParcel(Parcel, int)}. * * @param p {@link HdmiHotplugEvent} object to read the Rating from * @return a new {@link HdmiHotplugEvent} created from the data in the parcel */ + @Override public HdmiHotplugEvent createFromParcel(Parcel p) { int port = p.readInt(); boolean connected = p.readByte() == 1; return new HdmiHotplugEvent(port, connected); } + @Override public HdmiHotplugEvent[] newArray(int size) { return new HdmiHotplugEvent[size]; } diff --git a/core/java/android/hardware/hdmi/HdmiPlaybackClient.java b/core/java/android/hardware/hdmi/HdmiPlaybackClient.java index 85ccb7455216a180b8582411a6361bdd92f0c7c9..263d6b1872ff62b59d9df92f9c367e72a0c928f6 100644 --- a/core/java/android/hardware/hdmi/HdmiPlaybackClient.java +++ b/core/java/android/hardware/hdmi/HdmiPlaybackClient.java @@ -64,12 +64,12 @@ public final class HdmiPlaybackClient extends HdmiClient { public void onComplete(int status); } - HdmiPlaybackClient(IHdmiControlService service) { + /* package */ HdmiPlaybackClient(IHdmiControlService service) { super(service); } /** - * Perform the feature 'one touch play' from playback device to turn on display + * Performs the feature 'one touch play' from playback device to turn on display * and switch the input. * * @param callback {@link OneTouchPlayCallback} object to get informed @@ -90,7 +90,7 @@ public final class HdmiPlaybackClient extends HdmiClient { } /** - * Get the status of display device connected through HDMI bus. + * Gets the status of display device connected through HDMI bus. * * @param callback {@link DisplayStatusCallback} object to get informed * of the result diff --git a/core/java/android/hardware/hdmi/HdmiPortInfo.java b/core/java/android/hardware/hdmi/HdmiPortInfo.java index 2ec6126eb7b1374e0954b2dc7447dd17e96a3b1e..1f0f45a91917f6406e16bf13cfe068bd129f1023 100644 --- a/core/java/android/hardware/hdmi/HdmiPortInfo.java +++ b/core/java/android/hardware/hdmi/HdmiPortInfo.java @@ -114,7 +114,7 @@ public final class HdmiPortInfo implements Parcelable { } /** - * Describe the kinds of special objects contained in this Parcelable's + * Describes the kinds of special objects contained in this Parcelable's * marshalled representation. */ @Override @@ -136,7 +136,7 @@ public final class HdmiPortInfo implements Parcelable { boolean cec = (source.readInt() == 1); boolean arc = (source.readInt() == 1); boolean mhl = (source.readInt() == 1); - return new HdmiPortInfo(id, type, address, cec, arc, mhl); + return new HdmiPortInfo(id, type, address, cec, mhl, arc); } @Override @@ -146,7 +146,7 @@ public final class HdmiPortInfo implements Parcelable { }; /** - * Serialize this object into a {@link Parcel}. + * Serializes this object into a {@link Parcel}. * * @param dest The Parcel in which the object should be written. * @param flags Additional flags about how the object should be written. @@ -172,4 +172,15 @@ public final class HdmiPortInfo implements Parcelable { s.append("mhl: ").append(mMhlSupported); return s.toString(); } + + @Override + public boolean equals(Object o) { + if (!(o instanceof HdmiPortInfo)) { + return false; + } + final HdmiPortInfo other = (HdmiPortInfo) o; + return mId == other.mId && mType == other.mType && mAddress == other.mAddress + && mCecSupported == other.mCecSupported && mArcSupported == other.mArcSupported + && mMhlSupported == other.mMhlSupported; + } } diff --git a/core/java/android/hardware/hdmi/HdmiRecordListener.java b/core/java/android/hardware/hdmi/HdmiRecordListener.java index f6a348a65f68dc27170d06fd7baf272d83d2bc38..90b77681ea96e771437e55a7d51fa26d0b16d2c3 100644 --- a/core/java/android/hardware/hdmi/HdmiRecordListener.java +++ b/core/java/android/hardware/hdmi/HdmiRecordListener.java @@ -25,7 +25,7 @@ import android.hardware.hdmi.HdmiRecordSources.RecordSource; */ @SystemApi public abstract class HdmiRecordListener { - protected HdmiRecordListener() {} + public HdmiRecordListener() {} /** * Called when TV received one touch record request from record device. The client of this @@ -34,11 +34,13 @@ public abstract class HdmiRecordListener { * @param recorderAddress * @return record source to be used for recording. Null if no device is available. */ - public abstract RecordSource getOneTouchRecordSource(int recorderAddress); + public abstract RecordSource onOneTouchRecordSourceRequested(int recorderAddress); /** * Called when one touch record is started or failed during initialization. * + * @param recorderAddress An address of recorder that reports result of one touch record + * request * @param result result code. For more details, please look at all constants starting with * "ONE_TOUCH_RECORD_". Only * {@link HdmiControlManager#ONE_TOUCH_RECORD_RECORDING_CURRENTLY_SELECTED_SOURCE}, @@ -47,15 +49,17 @@ public abstract class HdmiRecordListener { * {@link HdmiControlManager#ONE_TOUCH_RECORD_RECORDING_EXTERNAL_INPUT} mean normal * start of recording; otherwise, describes failure. */ - public void onOneTouchRecordResult(int result) { + public void onOneTouchRecordResult(int recorderAddress, int result) { } /** * Called when timer recording is started or failed during initialization. * + * @param recorderAddress An address of recorder that reports result of timer recording + * request * @param data timer status data. For more details, look at {@link TimerStatusData}. */ - public void onTimerRecordingResult(TimerStatusData data) { + public void onTimerRecordingResult(int recorderAddress, TimerStatusData data) { } /** @@ -230,6 +234,8 @@ public abstract class HdmiRecordListener { /** * Called when receiving result for clear timer recording request. * + * @param recorderAddress An address of recorder that reports result of clear timer recording + * request * @param result result of clear timer. It should be one of * {@link HdmiControlManager#CLEAR_TIMER_STATUS_TIMER_NOT_CLEARED_RECORDING} * {@link HdmiControlManager#CLEAR_TIMER_STATUS_TIMER_NOT_CLEARED_NO_MATCHING}, @@ -239,6 +245,6 @@ public abstract class HdmiRecordListener { * {@link HdmiControlManager#CLEAR_TIMER_STATUS_FAIL_TO_CLEAR_SELECTED_SOURCE}, * {@link HdmiControlManager#CLEAR_TIMER_STATUS_CEC_DISABLE}. */ - public void onClearTimerRecordingResult(int result) { + public void onClearTimerRecordingResult(int recorderAddress, int result) { } } diff --git a/core/java/android/hardware/hdmi/HdmiRecordSources.java b/core/java/android/hardware/hdmi/HdmiRecordSources.java index dcc41fadfa3836db00e8ef49850149229362d601..7e94b8919c5ccd21e4a0de2ce0483ac56afc6b4f 100644 --- a/core/java/android/hardware/hdmi/HdmiRecordSources.java +++ b/core/java/android/hardware/hdmi/HdmiRecordSources.java @@ -55,23 +55,25 @@ public final class HdmiRecordSources { /** * Base class for each record source. + * @hide */ - static abstract class RecordSource { - protected final int mSourceType; - protected final int mExtraDataSize; + @SystemApi + public static abstract class RecordSource { + /* package */ final int mSourceType; + /* package */ final int mExtraDataSize; - protected RecordSource(int sourceType, int extraDataSize) { + /* package */ RecordSource(int sourceType, int extraDataSize) { mSourceType = sourceType; mExtraDataSize = extraDataSize; } - abstract int extraParamToByteArray(byte[] data, int index); + /* package */ abstract int extraParamToByteArray(byte[] data, int index); - final int getDataSize(boolean includeType) { + /* package */ final int getDataSize(boolean includeType) { return includeType ? mExtraDataSize + 1 : mExtraDataSize; } - final int toByteArray(boolean includeType, byte[] data, int index) { + /* package */ final int toByteArray(boolean includeType, byte[] data, int index) { if (includeType) { // 1 to 8 bytes (depends on source). // {[Record Source Type]} | @@ -92,7 +94,7 @@ public final class HdmiRecordSources { // ---- Own source ----------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------- /** - * Create {@link OwnSource} of own source. + * Creates {@link OwnSource} of own source. */ public static OwnSource ofOwnSource() { return new OwnSource(); @@ -309,7 +311,7 @@ public final class HdmiRecordSources { */ public static final class DigitalChannelData implements DigitalServiceIdentification { /** Identifies the logical or virtual channel number of a service. */ - private ChannelIdentifier mChannelIdentifier; + private final ChannelIdentifier mChannelIdentifier; public static DigitalChannelData ofTwoNumbers(int majorNumber, int minorNumber) { return new DigitalChannelData( @@ -336,7 +338,7 @@ public final class HdmiRecordSources { } /** - * Create {@link DigitalServiceSource} with channel type. + * Creates {@link DigitalServiceSource} with channel type. * * @param broadcastSystem digital broadcast system. It should be one of *
        @@ -387,7 +389,7 @@ public final class HdmiRecordSources { } /** - * Create {@link DigitalServiceSource} of ARIB type. + * Creates {@link DigitalServiceSource} of ARIB type. * * @param aribType ARIB type. It should be one of *
          @@ -418,7 +420,7 @@ public final class HdmiRecordSources { } /** - * Create {@link DigitalServiceSource} of ATSC type. + * Creates {@link DigitalServiceSource} of ATSC type. * * @param atscType ATSC type. It should be one of *
            @@ -449,7 +451,7 @@ public final class HdmiRecordSources { } /** - * Create {@link DigitalServiceSource} of ATSC type. + * Creates {@link DigitalServiceSource} of ATSC type. * * @param dvbType DVB type. It should be one of *
              @@ -570,7 +572,7 @@ public final class HdmiRecordSources { public static final int BROADCAST_SYSTEM_PAL_OTHER_SYSTEM = 31; /** - * Create {@link AnalogueServiceSource} of analogue service. + * Creates {@link AnalogueServiceSource} of analogue service. * * @param broadcastType * @param frequency @@ -613,7 +615,7 @@ public final class HdmiRecordSources { */ @SystemApi public static final class AnalogueServiceSource extends RecordSource { - static final int EXTRA_DATA_SIZE = 4; + /* package */ static final int EXTRA_DATA_SIZE = 4; /** Indicates the Analogue broadcast type. */ private final int mBroadcastType; @@ -633,7 +635,7 @@ public final class HdmiRecordSources { } @Override - protected int extraParamToByteArray(byte[] data, int index) { + /* package */ int extraParamToByteArray(byte[] data, int index) { // [Analogue Broadcast Type] - 1 byte data[index] = (byte) mBroadcastType; // [Analogue Frequency] - 2 bytes @@ -649,7 +651,7 @@ public final class HdmiRecordSources { // ---- External plug data --------------------------------------------------------------------- // --------------------------------------------------------------------------------------------- /** - * Create {@link ExternalPlugData} of external plug type. + * Creates {@link ExternalPlugData} of external plug type. * * @param plugNumber plug number. It should be in range of [1, 255] * @hide @@ -693,7 +695,7 @@ public final class HdmiRecordSources { // ---- External physical address -------------------------------------------------------------- // --------------------------------------------------------------------------------------------- /** - * Create {@link ExternalPhysicalAddress} of external physical address. + * Creates {@link ExternalPhysicalAddress} of external physical address. * * @param physicalAddress * @hide @@ -752,11 +754,13 @@ public final class HdmiRecordSources { } /** - * Check the byte array of record source. + * Checks the byte array of record source. * @hide */ @SystemApi public static boolean checkRecordSource(byte[] recordSource) { + if (recordSource == null || recordSource.length == 0) return false; + int recordSourceType = recordSource[0]; int extraDataSize = recordSource.length - 1; switch (recordSourceType) { diff --git a/core/java/android/hardware/hdmi/HdmiTimerRecordSources.java b/core/java/android/hardware/hdmi/HdmiTimerRecordSources.java index 178070762ba7b681234bfaddd9999a2ba0989c40..6fe13ca8e375a9813fbbe5e24c1f2f76ef9c4d54 100644 --- a/core/java/android/hardware/hdmi/HdmiTimerRecordSources.java +++ b/core/java/android/hardware/hdmi/HdmiTimerRecordSources.java @@ -67,7 +67,7 @@ public class HdmiTimerRecordSources { private HdmiTimerRecordSources() {} /** - * Create {@link TimerRecordSource} for digital source which is used for <Set Digital + * Creates {@link TimerRecordSource} for digital source which is used for <Set Digital * Timer>. * * @param timerInfo timer info used for timer recording @@ -82,7 +82,7 @@ public class HdmiTimerRecordSources { } /** - * Create {@link TimerRecordSource} for analogue source which is used for <Set Analogue + * Creates {@link TimerRecordSource} for analogue source which is used for <Set Analogue * Timer>. * * @param timerInfo timer info used for timer recording @@ -97,7 +97,7 @@ public class HdmiTimerRecordSources { } /** - * Create {@link TimerRecordSource} for external plug which is used for <Set External + * Creates {@link TimerRecordSource} for external plug which is used for <Set External * Timer>. * * @param timerInfo timer info used for timer recording @@ -112,7 +112,7 @@ public class HdmiTimerRecordSources { } /** - * Create {@link TimerRecordSource} for external physical address which is used for <Set + * Creates {@link TimerRecordSource} for external physical address which is used for <Set * External Timer>. * * @param timerInfo timer info used for timer recording @@ -140,7 +140,7 @@ public class HdmiTimerRecordSources { } /** - * Create {@link Duration} for time value. + * Creates {@link Duration} for time value. * * @param hour hour in range of [0, 23] * @param minute minute in range of [0, 60] @@ -162,7 +162,7 @@ public class HdmiTimerRecordSources { } /** - * Create {@link Duration} for duration value. + * Creates {@link Duration} for duration value. * * @param hour hour in range of [0, 99] * @param minute minute in range of [0, 59] @@ -183,22 +183,27 @@ public class HdmiTimerRecordSources { } } - private static class TimeUnit { - protected final int mHour; - protected final int mMinute; + /** + * Base class for time-related information. + * @hide + */ + @SystemApi + /* package */ static class TimeUnit { + /* package */ final int mHour; + /* package */ final int mMinute; - protected TimeUnit(int hour, int minute) { + /* package */ TimeUnit(int hour, int minute) { mHour = hour; mMinute = minute; } - protected int toByteArray(byte[] data, int index) { + /* package */ int toByteArray(byte[] data, int index) { data[index] = toBcdByte(mHour); data[index + 1] = toBcdByte(mMinute); return 2; } - protected static byte toBcdByte(int value) { + /* package */ static byte toBcdByte(int value) { int digitOfTen = (value / 10) % 10; int digitOfOne = value % 10; return (byte) ((digitOfTen << 4) | digitOfOne); @@ -247,7 +252,7 @@ public class HdmiTimerRecordSources { RECORDING_SEQUENCE_REPEAT_SATUREDAY); /** - * Create {@link TimerInfo} with the given information. + * Creates {@link TimerInfo} with the given information. * * @param dayOfMonth day of month * @param monthOfYear month of year @@ -426,7 +431,7 @@ public class HdmiTimerRecordSources { } /** - * Check the byte array of timer record source. + * Checks the byte array of timer record source. * @param sourcetype * @param recordSource * @hide diff --git a/core/java/android/hardware/hdmi/HdmiTvClient.java b/core/java/android/hardware/hdmi/HdmiTvClient.java index 9d92fd9c7fbdbcb1b364f8de5421ef572c132c40..cef17dd4f1974f5b7d90c8805f4778639a1b3253 100644 --- a/core/java/android/hardware/hdmi/HdmiTvClient.java +++ b/core/java/android/hardware/hdmi/HdmiTvClient.java @@ -24,6 +24,9 @@ import android.util.Log; import libcore.util.EmptyArray; +import java.util.Collections; +import java.util.List; + /** * HdmiTvClient represents HDMI-CEC logical device of type TV in the Android system * which acts as TV/Display. It provides with methods that manage, interact with other @@ -40,13 +43,13 @@ public final class HdmiTvClient extends HdmiClient { */ public static final int VENDOR_DATA_SIZE = 16; - HdmiTvClient(IHdmiControlService service) { + /* package */ HdmiTvClient(IHdmiControlService service) { super(service); } // Factory method for HdmiTvClient. // Declared package-private. Accessed by HdmiControlManager only. - static HdmiTvClient create(IHdmiControlService service) { + /* package */ static HdmiTvClient create(IHdmiControlService service) { return new HdmiTvClient(service); } @@ -68,7 +71,7 @@ public final class HdmiTvClient extends HdmiClient { } /** - * Select a CEC logical device to be a new active source. + * Selects a CEC logical device to be a new active source. * * @param logicalAddress logical address of the device to select * @param callback callback to get the result with @@ -95,7 +98,7 @@ public final class HdmiTvClient extends HdmiClient { } /** - * Select a HDMI port to be a new route path. + * Selects a HDMI port to be a new route path. * * @param portId HDMI port to select * @param callback callback to get the result with @@ -125,7 +128,7 @@ public final class HdmiTvClient extends HdmiClient { } /** - * Set the listener used to get informed of the input change event. + * Sets the listener used to get informed of the input change event. * * @param listener listener object */ @@ -150,7 +153,22 @@ public final class HdmiTvClient extends HdmiClient { } /** - * Set system audio volume + * Returns all the CEC devices connected to TV. + * + * @return list of {@link HdmiDeviceInfo} for connected CEC devices. + * Empty list is returned if there is none. + */ + public List getDeviceList() { + try { + return mService.getDeviceList(); + } catch (RemoteException e) { + Log.e("TAG", "Failed to call getDeviceList():", e); + return Collections.emptyList(); + } + } + + /** + * Sets system audio volume * * @param oldIndex current volume index * @param newIndex volume index to be set @@ -165,7 +183,7 @@ public final class HdmiTvClient extends HdmiClient { } /** - * Set system audio mute status + * Sets system audio mute status * * @param mute {@code true} if muted; otherwise, {@code false} */ @@ -178,7 +196,7 @@ public final class HdmiTvClient extends HdmiClient { } /** - * Set record listener + * Sets record listener * * @param listener */ @@ -198,7 +216,7 @@ public final class HdmiTvClient extends HdmiClient { @Override public byte[] getOneTouchRecordSource(int recorderAddress) { HdmiRecordSources.RecordSource source = - callback.getOneTouchRecordSource(recorderAddress); + callback.onOneTouchRecordSourceRequested(recorderAddress); if (source == null) { return EmptyArray.BYTE; } @@ -208,31 +226,31 @@ public final class HdmiTvClient extends HdmiClient { } @Override - public void onOneTouchRecordResult(int result) { - callback.onOneTouchRecordResult(result); + public void onOneTouchRecordResult(int recorderAddress, int result) { + callback.onOneTouchRecordResult(recorderAddress, result); } @Override - public void onTimerRecordingResult(int result) { - callback.onTimerRecordingResult( + public void onTimerRecordingResult(int recorderAddress, int result) { + callback.onTimerRecordingResult(recorderAddress, HdmiRecordListener.TimerStatusData.parseFrom(result)); } @Override - public void onClearTimerRecordingResult(int result) { - callback.onClearTimerRecordingResult(result); + public void onClearTimerRecordingResult(int recorderAddress, int result) { + callback.onClearTimerRecordingResult(recorderAddress, result); } }; } /** - * Start one touch recording with the given recorder address and recorder source. + * Starts one touch recording with the given recorder address and recorder source. *

              * Usage *

                    * HdmiTvClient tvClient = ....;
                    * // for own source.
              -     * OwnSource ownSource = ownHdmiRecordSources.ownSource();
              +     * OwnSource ownSource = HdmiRecordSources.ofOwnSource();
                    * tvClient.startOneTouchRecord(recorderAddress, ownSource);
                    * 
              */ @@ -251,7 +269,7 @@ public final class HdmiTvClient extends HdmiClient { } /** - * Stop one touch record. + * Stops one touch record. * * @param recorderAddress recorder address where recoding will be stopped */ @@ -264,7 +282,7 @@ public final class HdmiTvClient extends HdmiClient { } /** - * Start timer recording with the given recoder address and recorder source. + * Starts timer recording with the given recoder address and recorder source. *

              * Usage *

              @@ -313,7 +331,7 @@ public final class HdmiTvClient extends HdmiClient {
                   }
               
                   /**
              -     * Clear timer recording with the given recorder address and recording source.
              +     * Clears timer recording with the given recorder address and recording source.
                    * For more details, please refer {@link #startTimerRecording(int, int, TimerRecordSource)}.
                    */
                   public void clearTimerRecording(int recorderAddress, int sourceType, TimerRecordSource source) {
              @@ -339,7 +357,7 @@ public final class HdmiTvClient extends HdmiClient {
                   }
               
                   /**
              -     * Set {@link HdmiMhlVendorCommandListener} to get incoming MHL vendor command.
              +     * Sets {@link HdmiMhlVendorCommandListener} to get incoming MHL vendor command.
                    *
                    * @param listener to receive incoming MHL vendor command
                    */
              @@ -365,7 +383,7 @@ public final class HdmiTvClient extends HdmiClient {
                   }
               
                   /**
              -     * Send MHL vendor command to the device connected to a port of the given portId.
              +     * Sends MHL vendor command to the device connected to a port of the given portId.
                    *
                    * @param portId id of port to send MHL vendor command
                    * @param offset offset in the in given data
              diff --git a/core/java/android/hardware/hdmi/IHdmiControlService.aidl b/core/java/android/hardware/hdmi/IHdmiControlService.aidl
              index 4866a9a9b6e21fec39ad0f218ccf746617ee8801..c1e924e59735112a7fa2284efb3272bfa6eb433c 100644
              --- a/core/java/android/hardware/hdmi/IHdmiControlService.aidl
              +++ b/core/java/android/hardware/hdmi/IHdmiControlService.aidl
              @@ -59,6 +59,7 @@ interface IHdmiControlService {
                   void setSystemAudioMute(boolean mute);
                   void setInputChangeListener(IHdmiInputChangeListener listener);
                   List getInputDevices();
              +    List getDeviceList();
                   void sendVendorCommand(int deviceType, int targetAddress, in byte[] params,
                           boolean hasVendorId);
                   void addVendorCommandListener(IHdmiVendorCommandListener listener, int deviceType);
              diff --git a/core/java/android/hardware/hdmi/IHdmiRecordListener.aidl b/core/java/android/hardware/hdmi/IHdmiRecordListener.aidl
              index 44d90658372195a4774dd6591f57e0bc7457a8d6..d2deb381672a717393f6e60ebed863982bb8f68e 100644
              --- a/core/java/android/hardware/hdmi/IHdmiRecordListener.aidl
              +++ b/core/java/android/hardware/hdmi/IHdmiRecordListener.aidl
              @@ -31,19 +31,25 @@ package android.hardware.hdmi;
                    /**
                     * Called when one touch record is started or failed during initialization.
                     *
              +      * @param recorderAddress An address of recorder that reports result of one touch record
              +      *            request
                     * @param result result code for one touch record
                     */
              -     void onOneTouchRecordResult(int result);
              +     void onOneTouchRecordResult(int recorderAddress, int result);
                    /**
                     * Called when timer recording is started or failed during initialization.
              -
              +      *
              +      * @param recorderAddress An address of recorder that reports result of timer recording
              +      *            request
                     * @param result result code for timer recording
                     */
              -     void onTimerRecordingResult(int result);
              +     void onTimerRecordingResult(int recorderAddress, int result);
                    /**
                     * Called when receiving result for clear timer recording request.
                     *
              -      * @param result result of clear timer.
              +      * @param recorderAddress An address of recorder that reports result of clear timer recording
              +      *            request
              +      * @param result result of clear timer
                     */
              -     void onClearTimerRecordingResult(int result);
              +     void onClearTimerRecordingResult(int recorderAddress, int result);
                }
              \ No newline at end of file
              diff --git a/core/java/android/hardware/hdmi/IHdmiVendorCommandListener.aidl b/core/java/android/hardware/hdmi/IHdmiVendorCommandListener.aidl
              index 55cc9257667a04b59aa4f118b71f66beae9579aa..c708d2030bb093605697ac4bcee2da73ae47966a 100644
              --- a/core/java/android/hardware/hdmi/IHdmiVendorCommandListener.aidl
              +++ b/core/java/android/hardware/hdmi/IHdmiVendorCommandListener.aidl
              @@ -22,6 +22,7 @@ package android.hardware.hdmi;
                *
                * @hide
                */
              -oneway interface IHdmiVendorCommandListener {
              -    void onReceived(int logicalAddress, in byte[] operands, boolean hasVendorId);
              +interface IHdmiVendorCommandListener {
              +    void onReceived(int logicalAddress, int destAddress, in byte[] operands, boolean hasVendorId);
              +    void onControlStateChanged(boolean enabled, int reason);
               }
              diff --git a/core/java/android/hardware/location/GeofenceHardwareImpl.java b/core/java/android/hardware/location/GeofenceHardwareImpl.java
              index 5c7a8da5f98420a9e10c3586801ae76d4725ab8b..6e5d0648a6a55e14684084c798dada73b9410157 100644
              --- a/core/java/android/hardware/location/GeofenceHardwareImpl.java
              +++ b/core/java/android/hardware/location/GeofenceHardwareImpl.java
              @@ -23,6 +23,7 @@ import android.location.IGpsGeofenceHardware;
               import android.location.Location;
               import android.os.Handler;
               import android.os.IBinder;
              +import android.os.IInterface;
               import android.os.Message;
               import android.os.PowerManager;
               import android.os.RemoteException;
              @@ -30,6 +31,7 @@ import android.util.Log;
               import android.util.SparseArray;
               
               import java.util.ArrayList;
              +import java.util.Iterator;
               
               /**
                * This class manages the geofences which are handled by hardware.
              @@ -558,8 +560,34 @@ public final class GeofenceHardwareImpl {
                                       try {
                                           callback.onGeofenceRemove(geofenceId, msg.arg2);
                                       } catch (RemoteException e) {}
              +                        IBinder callbackBinder = callback.asBinder();
              +                        boolean callbackInUse = false;
                                       synchronized (mGeofences) {
                                           mGeofences.remove(geofenceId);
              +                            // Check if the underlying binder is still useful for other geofences,
              +                            // if no, unlink the DeathRecipient to avoid memory leak.
              +                            for (int i = 0; i < mGeofences.size(); i++) {
              +                                 if (mGeofences.valueAt(i).asBinder() == callbackBinder) {
              +                                     callbackInUse = true;
              +                                     break;
              +                                 }
              +                            }
              +                        }
              +
              +                        // Remove the reaper associated with this binder.
              +                        if (!callbackInUse) {
              +                            for (Iterator iterator = mReapers.iterator();
              +                                    iterator.hasNext();) {
              +                                Reaper reaper = iterator.next();
              +                                if (reaper.mCallback != null &&
              +                                        reaper.mCallback.asBinder() == callbackBinder) {
              +                                    iterator.remove();
              +                                    reaper.unlinkToDeath();
              +                                    if (DEBUG) Log.d(TAG, String.format("Removed reaper %s " +
              +                                          "because binder %s is no longer needed.",
              +                                          reaper, callbackBinder));
              +                                }
              +                            }
                                       }
                                   }
                                   releaseWakeLock();
              @@ -803,8 +831,9 @@ public final class GeofenceHardwareImpl {
                       @Override
                       public int hashCode() {
                           int result = 17;
              -            result = 31 * result + (mCallback != null ? mCallback.hashCode() : 0);
              -            result = 31 * result + (mMonitorCallback != null ? mMonitorCallback.hashCode() : 0);
              +            result = 31 * result + (mCallback != null ? mCallback.asBinder().hashCode() : 0);
              +            result = 31 * result + (mMonitorCallback != null
              +                    ? mMonitorCallback.asBinder().hashCode() : 0);
                           result = 31 * result + mMonitoringType;
                           return result;
                       }
              @@ -815,9 +844,38 @@ public final class GeofenceHardwareImpl {
                           if (obj == this) return true;
               
                           Reaper rhs = (Reaper) obj;
              -            return rhs.mCallback == mCallback && rhs.mMonitorCallback == mMonitorCallback &&
              +            return binderEquals(rhs.mCallback, mCallback) &&
              +                    binderEquals(rhs.mMonitorCallback, mMonitorCallback) &&
                                   rhs.mMonitoringType == mMonitoringType;
                       }
              +
              +        /**
              +         * Compares the underlying Binder of the given two IInterface objects and returns true if
              +         * they equals. null values are accepted.
              +         */
              +        private boolean binderEquals(IInterface left, IInterface right) {
              +          if (left == null) {
              +            return right == null;
              +          } else {
              +            return right == null ? false : left.asBinder() == right.asBinder();
              +          }
              +        }
              +
              +        /**
              +         * Unlinks this DeathRecipient.
              +         */
              +        private boolean unlinkToDeath() {
              +          if (mMonitorCallback != null) {
              +            return mMonitorCallback.asBinder().unlinkToDeath(this, 0);
              +          } else if (mCallback != null) {
              +            return mCallback.asBinder().unlinkToDeath(this, 0);
              +          }
              +          return true;
              +        }
              +
              +        private boolean callbackEquals(IGeofenceHardwareCallback cb) {
              +          return mCallback != null && mCallback.asBinder() == cb.asBinder();
              +        }
                   }
               
                   int getAllowedResolutionLevel(int pid, int uid) {
              diff --git a/core/java/android/hardware/soundtrigger/SoundTrigger.java b/core/java/android/hardware/soundtrigger/SoundTrigger.java
              index 746ead29bf2efe08686c5e427ebf5cb642711ee7..c85e97b5c27b4bf279d65e41d687981e8790c65c 100644
              --- a/core/java/android/hardware/soundtrigger/SoundTrigger.java
              +++ b/core/java/android/hardware/soundtrigger/SoundTrigger.java
              @@ -211,6 +211,43 @@ public class SoundTrigger {
                           this.type = type;
                           this.data = data;
                       }
              +
              +        @Override
              +        public int hashCode() {
              +            final int prime = 31;
              +            int result = 1;
              +            result = prime * result + Arrays.hashCode(data);
              +            result = prime * result + type;
              +            result = prime * result + ((uuid == null) ? 0 : uuid.hashCode());
              +            result = prime * result + ((vendorUuid == null) ? 0 : vendorUuid.hashCode());
              +            return result;
              +        }
              +
              +        @Override
              +        public boolean equals(Object obj) {
              +            if (this == obj)
              +                return true;
              +            if (obj == null)
              +                return false;
              +            if (!(obj instanceof SoundModel))
              +                return false;
              +            SoundModel other = (SoundModel) obj;
              +            if (!Arrays.equals(data, other.data))
              +                return false;
              +            if (type != other.type)
              +                return false;
              +            if (uuid == null) {
              +                if (other.uuid != null)
              +                    return false;
              +            } else if (!uuid.equals(other.uuid))
              +                return false;
              +            if (vendorUuid == null) {
              +                if (other.vendorUuid != null)
              +                    return false;
              +            } else if (!vendorUuid.equals(other.vendorUuid))
              +                return false;
              +            return true;
              +        }
                   }
               
                   /*****************************************************************************
              @@ -395,6 +432,28 @@ public class SoundTrigger {
                                   + ", uuid=" + uuid + ", vendorUuid=" + vendorUuid
                                   + ", type=" + type + ", data=" + (data == null ? 0 : data.length) + "]";
                       }
              +
              +        @Override
              +        public int hashCode() {
              +            final int prime = 31;
              +            int result = super.hashCode();
              +            result = prime * result + Arrays.hashCode(keyphrases);
              +            return result;
              +        }
              +
              +        @Override
              +        public boolean equals(Object obj) {
              +            if (this == obj)
              +                return true;
              +            if (!super.equals(obj))
              +                return false;
              +            if (!(obj instanceof KeyphraseSoundModel))
              +                return false;
              +            KeyphraseSoundModel other = (KeyphraseSoundModel) obj;
              +            if (!Arrays.equals(keyphrases, other.keyphrases))
              +                return false;
              +            return true;
              +        }
                   }
               
                   /**
              diff --git a/core/java/android/inputmethodservice/KeyboardView.java b/core/java/android/inputmethodservice/KeyboardView.java
              index af75a0ab2047d189c4729e1bb88d00c961728d80..b777e8c6f389ee195b5f3d0c61754e0e50e005c2 100644
              --- a/core/java/android/inputmethodservice/KeyboardView.java
              +++ b/core/java/android/inputmethodservice/KeyboardView.java
              @@ -31,6 +31,7 @@ import android.inputmethodservice.Keyboard.Key;
               import android.media.AudioManager;
               import android.os.Handler;
               import android.os.Message;
              +import android.os.UserHandle;
               import android.provider.Settings;
               import android.util.AttributeSet;
               import android.util.TypedValue;
              @@ -980,8 +981,9 @@ public class KeyboardView extends View implements View.OnClickListener {
                           onInitializeAccessibilityEvent(event);
                           String text = null;
                           // This is very efficient since the properties are cached.
              -            final boolean speakPassword = Settings.Secure.getInt(mContext.getContentResolver(),
              -                    Settings.Secure.ACCESSIBILITY_SPEAK_PASSWORD, 0) != 0;
              +            final boolean speakPassword = Settings.Secure.getIntForUser(
              +                    mContext.getContentResolver(), Settings.Secure.ACCESSIBILITY_SPEAK_PASSWORD, 0,
              +                    UserHandle.USER_CURRENT_OR_SELF) != 0;
                           // Add text only if password announcement is enabled or if headset is
                           // used to avoid leaking passwords.
                           if (speakPassword || mAudioManager.isBluetoothA2dpOn()
              diff --git a/core/java/android/net/BaseNetworkStateTracker.java b/core/java/android/net/BaseNetworkStateTracker.java
              index 58d00487802c122a259791c0ab13700c7956ac4d..e4e5b1e35d6c8aa9b1529be1fe16bc30019619ff 100644
              --- a/core/java/android/net/BaseNetworkStateTracker.java
              +++ b/core/java/android/net/BaseNetworkStateTracker.java
              @@ -169,16 +169,6 @@ public abstract class BaseNetworkStateTracker implements NetworkStateTracker {
                       // Base tracker doesn't handle dependencies
                   }
               
              -    @Override
              -    public void addStackedLink(LinkProperties link) {
              -        mLinkProperties.addStackedLink(link);
              -    }
              -
              -    @Override
              -    public void removeStackedLink(LinkProperties link) {
              -        mLinkProperties.removeStackedLink(link);
              -    }
              -
                   @Override
                   public void supplyMessenger(Messenger messenger) {
                       // not supported on this network
              diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java
              index 9194ca8d610d4828b1980530e0449b674e955977..eb2df0bf0dd60e1f2de17803bd2d70e48c12323c 100644
              --- a/core/java/android/net/ConnectivityManager.java
              +++ b/core/java/android/net/ConnectivityManager.java
              @@ -37,6 +37,7 @@ import android.os.Messenger;
               import android.os.RemoteException;
               import android.os.ServiceManager;
               import android.provider.Settings;
              +import android.telephony.SubscriptionManager;
               import android.telephony.TelephonyManager;
               import android.util.ArrayMap;
               import android.util.Log;
              @@ -71,7 +72,6 @@ import libcore.net.event.NetworkEventDispatcher;
                */
               public class ConnectivityManager {
                   private static final String TAG = "ConnectivityManager";
              -    private static final boolean LEGACY_DBG = true; // STOPSHIP
               
                   /**
                    * A change in network connectivity has occurred. A default connection has either
              @@ -101,7 +101,7 @@ public class ConnectivityManager {
               
                   /**
                    * Identical to {@link #CONNECTIVITY_ACTION} broadcast, but sent without any
              -     * applicable {@link Settings.Global#CONNECTIVITY_CHANGE_DELAY}.
              +     * historic {@link Settings.Global#CONNECTIVITY_CHANGE_DELAY}.
                    *
                    * @hide
                    */
              @@ -428,18 +428,6 @@ public class ConnectivityManager {
                   @Deprecated
                   public static final int DEFAULT_NETWORK_PREFERENCE = TYPE_WIFI;
               
              -    /**
              -     * Default value for {@link Settings.Global#CONNECTIVITY_CHANGE_DELAY} in
              -     * milliseconds.  This was introduced because IPv6 routes seem to take a
              -     * moment to settle - trying network activity before the routes are adjusted
              -     * can lead to packets using the wrong interface or having the wrong IP address.
              -     * This delay is a bit crude, but in the future hopefully we will have kernel
              -     * notifications letting us know when it's safe to use the new network.
              -     *
              -     * @hide
              -     */
              -    public static final int CONNECTIVITY_CHANGE_DELAY_DEFAULT = 3000;
              -
                   /**
                    * @hide
                    */
              @@ -453,6 +441,13 @@ public class ConnectivityManager {
                   public static final int NETID_UNSET = 0;
               
                   private final IConnectivityManager mService;
              +    /**
              +     * A kludge to facilitate static access where a Context pointer isn't available, like in the
              +     * case of the static set/getProcessDefaultNetwork methods and from the Network class.
              +     * TODO: Remove this after deprecating the static methods in favor of non-static methods or
              +     * methods that take a Context argument.
              +     */
              +    private static ConnectivityManager sInstance;
               
                   private INetworkManagementService mNMService;
               
              @@ -721,6 +716,19 @@ public class ConnectivityManager {
                       }
                   }
               
              +    /**
              +     * Returns an array of of {@link NetworkCapabilities} objects, representing
              +     * the Networks that applications run by the given user will use by default.
              +     * @hide
              +     */
              +    public NetworkCapabilities[] getDefaultNetworkCapabilitiesForUser(int userId) {
              +        try {
              +            return mService.getDefaultNetworkCapabilitiesForUser(userId);
              +        } catch (RemoteException e) {
              +            return null;
              +        }
              +    }
              +
                   /**
                    * Returns details about the Provisioning or currently active default data network. When
                    * connected, this network is the default route for outgoing connections.
              @@ -880,14 +888,6 @@ public class ConnectivityManager {
               
                       NetworkRequest request = null;
                       synchronized (sLegacyRequests) {
              -            if (LEGACY_DBG) {
              -                Log.d(TAG, "Looking for legacyRequest for netCap with hash: " + netCap + " (" +
              -                        netCap.hashCode() + ")");
              -                Log.d(TAG, "sLegacyRequests has:");
              -                for (NetworkCapabilities nc : sLegacyRequests.keySet()) {
              -                    Log.d(TAG, "  " + nc + " (" + nc.hashCode() + ")");
              -                }
              -            }
                           LegacyRequest l = sLegacyRequests.get(netCap);
                           if (l != null) {
                               Log.d(TAG, "renewing startUsingNetworkFeature request " + l.networkRequest);
              @@ -933,10 +933,8 @@ public class ConnectivityManager {
                           return -1;
                       }
               
              -        NetworkCallback networkCallback = removeRequestForFeature(netCap);
              -        if (networkCallback != null) {
              +        if (removeRequestForFeature(netCap)) {
                           Log.d(TAG, "stopUsingNetworkFeature for " + networkType + ", " + feature);
              -            unregisterNetworkCallback(networkCallback);
                       }
                       return 1;
                   }
              @@ -1012,60 +1010,57 @@ public class ConnectivityManager {
                       return null;
                   }
               
              +    /**
              +     * Guess what the network request was trying to say so that the resulting
              +     * network is accessible via the legacy (deprecated) API such as
              +     * requestRouteToHost.
              +     * This means we should try to be fairly preceise about transport and
              +     * capability but ignore things such as networkSpecifier.
              +     * If the request has more than one transport or capability it doesn't
              +     * match the old legacy requests (they selected only single transport/capability)
              +     * so this function cannot map the request to a single legacy type and
              +     * the resulting network will not be available to the legacy APIs.
              +     *
              +     * TODO - This should be removed when the legacy APIs are removed.
              +     */
                   private int inferLegacyTypeForNetworkCapabilities(NetworkCapabilities netCap) {
                       if (netCap == null) {
                           return TYPE_NONE;
                       }
              +
                       if (!netCap.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {
                           return TYPE_NONE;
                       }
              +
              +        String type = null;
              +        int result = TYPE_NONE;
              +
                       if (netCap.hasCapability(NetworkCapabilities.NET_CAPABILITY_CBS)) {
              -            if (netCap.equals(networkCapabilitiesForFeature(TYPE_MOBILE, "enableCBS"))) {
              -                return TYPE_MOBILE_CBS;
              -            } else {
              -                return TYPE_NONE;
              -            }
              -        }
              -        if (netCap.hasCapability(NetworkCapabilities.NET_CAPABILITY_IMS)) {
              -            if (netCap.equals(networkCapabilitiesForFeature(TYPE_MOBILE, "enableIMS"))) {
              -                return TYPE_MOBILE_IMS;
              -            } else {
              -                return TYPE_NONE;
              -            }
              -        }
              -        if (netCap.hasCapability(NetworkCapabilities.NET_CAPABILITY_FOTA)) {
              -            if (netCap.equals(networkCapabilitiesForFeature(TYPE_MOBILE, "enableFOTA"))) {
              -                return TYPE_MOBILE_FOTA;
              -            } else {
              -                return TYPE_NONE;
              -            }
              -        }
              -        if (netCap.hasCapability(NetworkCapabilities.NET_CAPABILITY_DUN)) {
              -            if (netCap.equals(networkCapabilitiesForFeature(TYPE_MOBILE, "enableDUN"))) {
              -                return TYPE_MOBILE_DUN;
              -            } else {
              -                return TYPE_NONE;
              -            }
              -        }
              -        if (netCap.hasCapability(NetworkCapabilities.NET_CAPABILITY_SUPL)) {
              -            if (netCap.equals(networkCapabilitiesForFeature(TYPE_MOBILE, "enableSUPL"))) {
              -                return TYPE_MOBILE_SUPL;
              -            } else {
              -                return TYPE_NONE;
              -            }
              -        }
              -        if (netCap.hasCapability(NetworkCapabilities.NET_CAPABILITY_MMS)) {
              -            if (netCap.equals(networkCapabilitiesForFeature(TYPE_MOBILE, "enableMMS"))) {
              -                return TYPE_MOBILE_MMS;
              -            } else {
              -                return TYPE_NONE;
              -            }
              -        }
              -        if (netCap.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)) {
              -            if (netCap.equals(networkCapabilitiesForFeature(TYPE_MOBILE, "enableHIPRI"))) {
              -                return TYPE_MOBILE_HIPRI;
              -            } else {
              -                return TYPE_NONE;
              +            type = "enableCBS";
              +            result = TYPE_MOBILE_CBS;
              +        } else if (netCap.hasCapability(NetworkCapabilities.NET_CAPABILITY_IMS)) {
              +            type = "enableIMS";
              +            result = TYPE_MOBILE_IMS;
              +        } else if (netCap.hasCapability(NetworkCapabilities.NET_CAPABILITY_FOTA)) {
              +            type = "enableFOTA";
              +            result = TYPE_MOBILE_FOTA;
              +        } else if (netCap.hasCapability(NetworkCapabilities.NET_CAPABILITY_DUN)) {
              +            type = "enableDUN";
              +            result = TYPE_MOBILE_DUN;
              +        } else if (netCap.hasCapability(NetworkCapabilities.NET_CAPABILITY_SUPL)) {
              +            type = "enableSUPL";
              +            result = TYPE_MOBILE_SUPL;
              +        } else if (netCap.hasCapability(NetworkCapabilities.NET_CAPABILITY_MMS)) {
              +            type = "enableMMS";
              +            result = TYPE_MOBILE_MMS;
              +        } else if (netCap.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)) {
              +            type = "enableHIPRI";
              +            result = TYPE_MOBILE_HIPRI;
              +        }
              +        if (type != null) {
              +            NetworkCapabilities testCap = networkCapabilitiesForFeature(TYPE_MOBILE, type);
              +            if (testCap.equalsNetCapabilities(netCap) && testCap.equalsTransportTypes(netCap)) {
              +                return result;
                           }
                       }
                       return TYPE_NONE;
              @@ -1106,6 +1101,14 @@ public class ConnectivityManager {
                       int expireSequenceNumber;
                       Network currentNetwork;
                       int delay = -1;
              +
              +        private void clearDnsBinding() {
              +            if (currentNetwork != null) {
              +                currentNetwork = null;
              +                setProcessDefaultNetworkForHostResolution(null);
              +            }
              +        }
              +
                       NetworkCallback networkCallback = new NetworkCallback() {
                           @Override
                           public void onAvailable(Network network) {
              @@ -1115,10 +1118,7 @@ public class ConnectivityManager {
                           }
                           @Override
                           public void onLost(Network network) {
              -                if (network.equals(currentNetwork)) {
              -                    currentNetwork = null;
              -                    setProcessDefaultNetworkForHostResolution(null);
              -                }
              +                if (network.equals(currentNetwork)) clearDnsBinding();
                               Log.d(TAG, "startUsingNetworkFeature lost Network:" + network);
                           }
                       };
              @@ -1147,10 +1147,7 @@ public class ConnectivityManager {
                           LegacyRequest l = sLegacyRequests.get(netCap);
                           if (l == null) return;
                           ourSeqNum = l.expireSequenceNumber;
              -            if (l.expireSequenceNumber == sequenceNum) {
              -                unregisterNetworkCallback(l.networkCallback);
              -                sLegacyRequests.remove(netCap);
              -            }
              +            if (l.expireSequenceNumber == sequenceNum) removeRequestForFeature(netCap);
                       }
                       Log.d(TAG, "expireRequest with " + ourSeqNum + ", " + sequenceNum);
                   }
              @@ -1181,12 +1178,15 @@ public class ConnectivityManager {
                       }
                   }
               
              -    private NetworkCallback removeRequestForFeature(NetworkCapabilities netCap) {
              +    private boolean removeRequestForFeature(NetworkCapabilities netCap) {
              +        final LegacyRequest l;
                       synchronized (sLegacyRequests) {
              -            LegacyRequest l = sLegacyRequests.remove(netCap);
              -            if (l == null) return null;
              -            return l.networkCallback;
              +            l = sLegacyRequests.remove(netCap);
                       }
              +        if (l == null) return false;
              +        unregisterNetworkCallback(l.networkCallback);
              +        l.clearDnsBinding();
              +        return true;
                   }
               
                   /**
              @@ -1294,9 +1294,15 @@ public class ConnectivityManager {
                       if (b != null) {
                           try {
                               ITelephony it = ITelephony.Stub.asInterface(b);
              -                return it.getDataEnabled();
              +                int subId = SubscriptionManager.getDefaultDataSubId();
              +                Log.d("ConnectivityManager", "getMobileDataEnabled()+ subId=" + subId);
              +                boolean retVal = it.getDataEnabled(subId);
              +                Log.d("ConnectivityManager", "getMobileDataEnabled()- subId=" + subId
              +                        + " retVal=" + retVal);
              +                return retVal;
                           } catch (RemoteException e) { }
                       }
              +        Log.d("ConnectivityManager", "getMobileDataEnabled()- remote exception retVal=false");
                       return false;
                   }
               
              @@ -1396,6 +1402,7 @@ public class ConnectivityManager {
                    */
                   public ConnectivityManager(IConnectivityManager service) {
                       mService = checkNotNull(service, "missing IConnectivityManager");
              +        sInstance = this;
                   }
               
                   /** {@hide} */
              @@ -1417,6 +1424,18 @@ public class ConnectivityManager {
                       }
                   }
               
              +    /**
              +     * @deprecated - use getSystemService. This is a kludge to support static access in certain
              +     *               situations where a Context pointer is unavailable.
              +     * @hide
              +     */
              +    public static ConnectivityManager getInstance() {
              +        if (sInstance == null) {
              +            throw new IllegalStateException("No ConnectivityManager yet constructed");
              +        }
              +        return sInstance;
              +    }
              +
                   /**
                    * Get the set of tetherable, available interfaces.  This list is limited by
                    * device configuration and current interface existence.
              @@ -1748,20 +1767,26 @@ public class ConnectivityManager {
                   }
               
                   /**
              -     * Get the HTTP proxy settings for the current default network.  Note that
              -     * if a global proxy is set, it will override any per-network setting.
              +     * Get the current default HTTP proxy settings.  If a global proxy is set it will be returned,
              +     * otherwise if this process is bound to a {@link Network} using
              +     * {@link #setProcessDefaultNetwork} then that {@code Network}'s proxy is returned, otherwise
              +     * the default network's proxy is returned.
                    *
                    * @return the {@link ProxyInfo} for the current HTTP proxy, or {@code null} if no
                    *        HTTP proxy is active.
              -     *
              -     * 

              This method requires the call to hold the permission - * {@link android.Manifest.permission#ACCESS_NETWORK_STATE}. - * {@hide} - * @deprecated Deprecated in favor of {@link #getLinkProperties} + * @hide */ - public ProxyInfo getProxy() { + public ProxyInfo getDefaultProxy() { + final Network network = getProcessDefaultNetwork(); + if (network != null) { + final ProxyInfo globalProxy = getGlobalProxy(); + if (globalProxy != null) return globalProxy; + final LinkProperties lp = getLinkProperties(network); + if (lp != null) return lp.getHttpProxy(); + return null; + } try { - return mService.getProxy(); + return mService.getDefaultProxy(); } catch (RemoteException e) { return null; } @@ -1923,45 +1948,6 @@ public class ConnectivityManager { return null; } - /** - * get the information about a specific network link - * @hide - */ - public LinkQualityInfo getLinkQualityInfo(int networkType) { - try { - LinkQualityInfo li = mService.getLinkQualityInfo(networkType); - return li; - } catch (RemoteException e) { - return null; - } - } - - /** - * get the information of currently active network link - * @hide - */ - public LinkQualityInfo getActiveLinkQualityInfo() { - try { - LinkQualityInfo li = mService.getActiveLinkQualityInfo(); - return li; - } catch (RemoteException e) { - return null; - } - } - - /** - * get the information of all network links - * @hide - */ - public LinkQualityInfo[] getAllLinkQualityInfo() { - try { - LinkQualityInfo[] li = mService.getAllLinkQualityInfo(); - return li; - } catch (RemoteException e) { - return null; - } - } - /** * Set sign in error notification to visible or in visible * @@ -2381,26 +2367,27 @@ public class ConnectivityManager { /** * The lookup key for a {@link Network} object included with the intent after - * succesfully finding a network for the applications request. Retrieve it with + * successfully finding a network for the applications request. Retrieve it with * {@link android.content.Intent#getParcelableExtra(String)}. - * @hide + *

              + * Note that if you intend to invoke (@link #setProcessDefaultNetwork(Network)) or + * {@link Network#openConnection(java.net.URL)} then you must get a + * ConnectivityManager instance before doing so. */ - public static final String EXTRA_NETWORK_REQUEST_NETWORK = "networkRequestNetwork"; + public static final String EXTRA_NETWORK = "android.net.extra.NETWORK"; /** * The lookup key for a {@link NetworkRequest} object included with the intent after - * succesfully finding a network for the applications request. Retrieve it with + * successfully finding a network for the applications request. Retrieve it with * {@link android.content.Intent#getParcelableExtra(String)}. - * @hide */ - public static final String EXTRA_NETWORK_REQUEST_NETWORK_REQUEST = - "networkRequestNetworkRequest"; + public static final String EXTRA_NETWORK_REQUEST = "android.net.extra.NETWORK_REQUEST"; /** * Request a network to satisfy a set of {@link NetworkCapabilities}. * - * This function behavies identically to the version that takes a NetworkCallback, but instead + * This function behaves identically to the version that takes a NetworkCallback, but instead * of {@link NetworkCallback} a {@link PendingIntent} is used. This means * the request may outlive the calling application and get called back when a suitable * network is found. @@ -2410,8 +2397,8 @@ public class ConnectivityManager { * <receiver> tag in an AndroidManifest.xml file *

              * The operation Intent is delivered with two extras, a {@link Network} typed - * extra called {@link #EXTRA_NETWORK_REQUEST_NETWORK} and a {@link NetworkRequest} - * typed extra called {@link #EXTRA_NETWORK_REQUEST_NETWORK_REQUEST} containing + * extra called {@link #EXTRA_NETWORK} and a {@link NetworkRequest} + * typed extra called {@link #EXTRA_NETWORK_REQUEST} containing * the original requests parameters. It is important to create a new, * {@link NetworkCallback} based request before completing the processing of the * Intent to reserve the network or it will be released shortly after the Intent @@ -2421,20 +2408,45 @@ public class ConnectivityManager { * two Intents defined by {@link Intent#filterEquals}), then it will be removed and * replaced by this one, effectively releasing the previous {@link NetworkRequest}. *

              - * The request may be released normally by calling {@link #unregisterNetworkCallback}. + * The request may be released normally by calling + * {@link #releaseNetworkRequest(android.app.PendingIntent)}. * * @param request {@link NetworkRequest} describing this request. * @param operation Action to perform when the network is available (corresponds * to the {@link NetworkCallback#onAvailable} call. Typically - * comes from {@link PendingIntent#getBroadcast}. - * @hide + * comes from {@link PendingIntent#getBroadcast}. Cannot be null. */ public void requestNetwork(NetworkRequest request, PendingIntent operation) { + checkPendingIntent(operation); try { mService.pendingRequestForNetwork(request.networkCapabilities, operation); } catch (RemoteException e) {} } + /** + * Removes a request made via {@link #requestNetwork(NetworkRequest, android.app.PendingIntent)} + *

              + * This method has the same behavior as {@link #unregisterNetworkCallback} with respect to + * releasing network resources and disconnecting. + * + * @param operation A PendingIntent equal (as defined by {@link Intent#filterEquals}) to the + * PendingIntent passed to + * {@link #requestNetwork(NetworkRequest, android.app.PendingIntent)} with the + * corresponding NetworkRequest you'd like to remove. Cannot be null. + */ + public void releaseNetworkRequest(PendingIntent operation) { + checkPendingIntent(operation); + try { + mService.releasePendingNetworkRequest(operation); + } catch (RemoteException e) {} + } + + private void checkPendingIntent(PendingIntent intent) { + if (intent == null) { + throw new IllegalArgumentException("PendingIntent cannot be null."); + } + } + /** * Registers to receive notifications about all networks which satisfy the given * {@link NetworkRequest}. The callbacks will continue to be called until @@ -2451,7 +2463,7 @@ public class ConnectivityManager { /** * Unregisters callbacks about and possibly releases networks originating from * {@link #requestNetwork} and {@link #registerNetworkCallback} calls. If the - * given {@code NetworkCallback} had previosuly been used with {@code #requestNetwork}, + * given {@code NetworkCallback} had previously been used with {@code #requestNetwork}, * any networks that had been connected to only to satisfy that request will be * disconnected. * @@ -2491,6 +2503,9 @@ public class ConnectivityManager { return true; } if (NetworkUtils.bindProcessToNetwork(netId)) { + // Set HTTP proxy system properties to match network. + // TODO: Deprecate this static method and replace it with a non-static version. + Proxy.setHttpProxySystemProperty(getInstance().getDefaultProxy()); // Must flush DNS cache as new network may have different DNS resolutions. InetAddress.clearDnsCache(); // Must flush socket pool as idle sockets will be bound to previous network and may diff --git a/core/java/android/net/EthernetManager.java b/core/java/android/net/EthernetManager.java index d965f27c8feabdeacd75d740e867270d179c0263..f45737a66e09ae0c0317822f988a84c8bae58d1a 100644 --- a/core/java/android/net/EthernetManager.java +++ b/core/java/android/net/EthernetManager.java @@ -18,11 +18,14 @@ package android.net; import android.content.Context; import android.net.IEthernetManager; +import android.net.IEthernetServiceListener; import android.net.IpConfiguration; -import android.net.IpConfiguration.IpAssignment; -import android.net.IpConfiguration.ProxySettings; +import android.os.Handler; +import android.os.Message; import android.os.RemoteException; +import java.util.ArrayList; + /** * A class representing the IP configuration of the Ethernet network. * @@ -30,9 +33,41 @@ import android.os.RemoteException; */ public class EthernetManager { private static final String TAG = "EthernetManager"; + private static final int MSG_AVAILABILITY_CHANGED = 1000; private final Context mContext; private final IEthernetManager mService; + private final Handler mHandler = new Handler() { + @Override + public void handleMessage(Message msg) { + if (msg.what == MSG_AVAILABILITY_CHANGED) { + boolean isAvailable = (msg.arg1 == 1); + for (Listener listener : mListeners) { + listener.onAvailabilityChanged(isAvailable); + } + } + } + }; + private final ArrayList mListeners = new ArrayList(); + private final IEthernetServiceListener.Stub mServiceListener = + new IEthernetServiceListener.Stub() { + @Override + public void onAvailabilityChanged(boolean isAvailable) { + mHandler.obtainMessage( + MSG_AVAILABILITY_CHANGED, isAvailable ? 1 : 0, 0, null).sendToTarget(); + } + }; + + /** + * A listener interface to receive notification on changes in Ethernet. + */ + public interface Listener { + /** + * Called when Ethernet port's availability is changed. + * @param isAvailable {@code true} if one or more Ethernet port exists. + */ + public void onAvailabilityChanged(boolean isAvailable); + } /** * Create a new EthernetManager instance. @@ -50,12 +85,9 @@ public class EthernetManager { * @return the Ethernet Configuration, contained in {@link IpConfiguration}. */ public IpConfiguration getConfiguration() { - if (mService == null) { - return new IpConfiguration(); - } try { return mService.getConfiguration(); - } catch (RemoteException e) { + } catch (NullPointerException | RemoteException e) { return new IpConfiguration(); } } @@ -64,12 +96,57 @@ public class EthernetManager { * Set Ethernet configuration. */ public void setConfiguration(IpConfiguration config) { - if (mService == null) { - return; - } try { mService.setConfiguration(config); - } catch (RemoteException e) { + } catch (NullPointerException | RemoteException e) { + } + } + + /** + * Indicates whether the system currently has one or more + * Ethernet interfaces. + */ + public boolean isAvailable() { + try { + return mService.isAvailable(); + } catch (NullPointerException | RemoteException e) { + return false; + } + } + + /** + * Adds a listener. + * @param listener A {@link Listener} to add. + * @throws IllegalArgumentException If the listener is null. + */ + public void addListener(Listener listener) { + if (listener == null) { + throw new IllegalArgumentException("listener must not be null"); + } + mListeners.add(listener); + if (mListeners.size() == 1) { + try { + mService.addListener(mServiceListener); + } catch (NullPointerException | RemoteException e) { + } + } + } + + /** + * Removes a listener. + * @param listener A {@link Listener} to remove. + * @throws IllegalArgumentException If the listener is null. + */ + public void removeListener(Listener listener) { + if (listener == null) { + throw new IllegalArgumentException("listener must not be null"); + } + mListeners.remove(listener); + if (mListeners.isEmpty()) { + try { + mService.removeListener(mServiceListener); + } catch (NullPointerException | RemoteException e) { + } } } } diff --git a/core/java/android/net/IConnectivityManager.aidl b/core/java/android/net/IConnectivityManager.aidl index a983d88226c8d46ea80016906f85a97e198ee71f..46af112d1d495448ade9fcc754d2af371a336c55 100644 --- a/core/java/android/net/IConnectivityManager.aidl +++ b/core/java/android/net/IConnectivityManager.aidl @@ -17,7 +17,6 @@ package android.net; import android.app.PendingIntent; -import android.net.LinkQualityInfo; import android.net.LinkProperties; import android.net.Network; import android.net.NetworkCapabilities; @@ -50,6 +49,7 @@ interface IConnectivityManager NetworkInfo[] getAllNetworkInfo(); Network getNetworkForType(int networkType); Network[] getAllNetworks(); + NetworkCapabilities[] getDefaultNetworkCapabilitiesForUser(int userId); NetworkInfo getProvisioningOrActiveNetworkInfo(); @@ -68,9 +68,6 @@ interface IConnectivityManager boolean requestRouteToHostAddress(int networkType, in byte[] hostAddress); - /** Policy control over specific {@link NetworkStateTracker}. */ - void setPolicyDataEnable(int networkType, boolean enabled); - int tether(String iface); int untether(String iface); @@ -103,7 +100,7 @@ interface IConnectivityManager void setGlobalProxy(in ProxyInfo p); - ProxyInfo getProxy(); + ProxyInfo getDefaultProxy(); void setDataDependency(int networkType, boolean met); @@ -133,12 +130,6 @@ interface IConnectivityManager String getMobileRedirectedProvisioningUrl(); - LinkQualityInfo getLinkQualityInfo(int networkType); - - LinkQualityInfo getActiveLinkQualityInfo(); - - LinkQualityInfo[] getAllLinkQualityInfo(); - void setProvisioningNotificationVisible(boolean visible, int networkType, in String action); void setAirplaneMode(boolean enable); @@ -156,6 +147,8 @@ interface IConnectivityManager NetworkRequest pendingRequestForNetwork(in NetworkCapabilities networkCapabilities, in PendingIntent operation); + void releasePendingNetworkRequest(in PendingIntent operation); + NetworkRequest listenForNetwork(in NetworkCapabilities networkCapabilities, in Messenger messenger, in IBinder binder); @@ -168,4 +161,5 @@ interface IConnectivityManager boolean addVpnAddress(String address, int prefixLength); boolean removeVpnAddress(String address, int prefixLength); + boolean setUnderlyingNetworksForVpn(in Network[] networks); } diff --git a/core/java/android/net/IEthernetManager.aidl b/core/java/android/net/IEthernetManager.aidl index 3fa08f81a8fd423f2ebd34976a526bb2e9ac5c53..7a92eb955ace641ef2bf7b2251aa3b738afd6c8c 100644 --- a/core/java/android/net/IEthernetManager.aidl +++ b/core/java/android/net/IEthernetManager.aidl @@ -17,6 +17,7 @@ package android.net; import android.net.IpConfiguration; +import android.net.IEthernetServiceListener; /** * Interface that answers queries about, and allows changing @@ -27,4 +28,7 @@ interface IEthernetManager { IpConfiguration getConfiguration(); void setConfiguration(in IpConfiguration config); + boolean isAvailable(); + void addListener(in IEthernetServiceListener listener); + void removeListener(in IEthernetServiceListener listener); } diff --git a/core/java/com/android/internal/widget/ILockSettingsObserver.aidl b/core/java/android/net/IEthernetServiceListener.aidl similarity index 80% rename from core/java/com/android/internal/widget/ILockSettingsObserver.aidl rename to core/java/android/net/IEthernetServiceListener.aidl index 6c354d8917a99b25828c1b89e5c535ddfcfafb98..356690e8f7a6a3009daf9c5a08a6d1fb602002b5 100644 --- a/core/java/com/android/internal/widget/ILockSettingsObserver.aidl +++ b/core/java/android/net/IEthernetServiceListener.aidl @@ -14,9 +14,10 @@ * limitations under the License. */ -package com.android.internal.widget; +package android.net; -/** {@hide} */ -oneway interface ILockSettingsObserver { - void onLockSettingChanged(in String key, in int userId); +/** @hide */ +oneway interface IEthernetServiceListener +{ + void onAvailabilityChanged(boolean isAvailable); } diff --git a/core/java/android/net/INetworkStatsService.aidl b/core/java/android/net/INetworkStatsService.aidl index b7b87318554ccd1f2ac1648f6abe42db99e2b234..2c3881c4f7a1a1caed039bae593ae9fe5b03ddcf 100644 --- a/core/java/android/net/INetworkStatsService.aidl +++ b/core/java/android/net/INetworkStatsService.aidl @@ -40,8 +40,12 @@ interface INetworkStatsService { /** Mark given UID as being in foreground for stats purposes. */ void setUidForeground(int uid, boolean uidForeground); + + /** Force update of ifaces. */ + void forceUpdateIfaces(); /** Force update of statistics. */ void forceUpdate(); + /** Advise persistance threshold; may be overridden internally. */ void advisePersistThreshold(long thresholdBytes); diff --git a/core/java/android/net/LinkAddress.java b/core/java/android/net/LinkAddress.java index c387055741f47f11db6b534638c409a028f48053..384ab1c8f50cc97208fc5eedf4b21e2b44265645 100644 --- a/core/java/android/net/LinkAddress.java +++ b/core/java/android/net/LinkAddress.java @@ -21,12 +21,14 @@ import android.os.Parcelable; import android.util.Pair; import java.net.Inet4Address; +import java.net.Inet6Address; import java.net.InetAddress; import java.net.InterfaceAddress; import java.net.UnknownHostException; import static android.system.OsConstants.IFA_F_DADFAILED; import static android.system.OsConstants.IFA_F_DEPRECATED; +import static android.system.OsConstants.IFA_F_OPTIMISTIC; import static android.system.OsConstants.IFA_F_TENTATIVE; import static android.system.OsConstants.RT_SCOPE_HOST; import static android.system.OsConstants.RT_SCOPE_LINK; @@ -92,6 +94,20 @@ public class LinkAddress implements Parcelable { return RT_SCOPE_UNIVERSE; } + /** + * Utility function to check if |address| is a Unique Local IPv6 Unicast Address + * (a.k.a. "ULA"; RFC 4193). + * + * Per RFC 4193 section 8, fc00::/7 identifies these addresses. + */ + private boolean isIPv6ULA() { + if (address != null && address instanceof Inet6Address) { + byte[] bytes = address.getAddress(); + return ((bytes[0] & (byte)0xfc) == (byte)0xfc); + } + return false; + } + /** * Utility function for the constructors. */ @@ -268,8 +284,16 @@ public class LinkAddress implements Parcelable { * @hide */ public boolean isGlobalPreferred() { + /** + * Note that addresses flagged as IFA_F_OPTIMISTIC are + * simultaneously flagged as IFA_F_TENTATIVE (when the tentative + * state has cleared either DAD has succeeded or failed, and both + * flags are cleared regardless). + */ return (scope == RT_SCOPE_UNIVERSE && - (flags & (IFA_F_DADFAILED | IFA_F_DEPRECATED | IFA_F_TENTATIVE)) == 0L); + !isIPv6ULA() && + (flags & (IFA_F_DADFAILED | IFA_F_DEPRECATED)) == 0L && + ((flags & IFA_F_TENTATIVE) == 0L || (flags & IFA_F_OPTIMISTIC) != 0L)); } /** diff --git a/core/java/android/net/LinkProperties.java b/core/java/android/net/LinkProperties.java index 662c57627f59c5ab7d576b9be93f07d5fc02b088..8b0dfc95fef0c1fa4264bfac85616d691a5d1e85 100644 --- a/core/java/android/net/LinkProperties.java +++ b/core/java/android/net/LinkProperties.java @@ -493,16 +493,16 @@ public final class LinkProperties implements Parcelable { /** * Removes a stacked link. * - * If there a stacked link with the same interfacename as link, it is + * If there is a stacked link with the given interface name, it is * removed. Otherwise, nothing changes. * - * @param link The link to remove. + * @param iface The interface name of the link to remove. * @return true if the link was removed, false otherwise. * @hide */ - public boolean removeStackedLink(LinkProperties link) { - if (link != null && link.getInterfaceName() != null) { - LinkProperties removed = mStackedLinks.remove(link.getInterfaceName()); + public boolean removeStackedLink(String iface) { + if (iface != null) { + LinkProperties removed = mStackedLinks.remove(iface); return removed != null; } return false; @@ -675,17 +675,38 @@ public final class LinkProperties implements Parcelable { } /** - * Returns true if this link is provisioned for global connectivity. For IPv6, this requires an - * IP address, default route, and DNS server. For IPv4, this requires only an IPv4 address, - * because WifiStateMachine accepts static configurations that only specify an address but not - * DNS servers or a default route. + * Returns true if this link is provisioned for global IPv4 connectivity. + * This requires an IP address, default route, and DNS server. + * + * @return {@code true} if the link is provisioned, {@code false} otherwise. + */ + private boolean hasIPv4() { + return (hasIPv4Address() && + hasIPv4DefaultRoute() && + hasIPv4DnsServer()); + } + + /** + * Returns true if this link is provisioned for global IPv6 connectivity. + * This requires an IP address, default route, and DNS server. + * + * @return {@code true} if the link is provisioned, {@code false} otherwise. + */ + private boolean hasIPv6() { + return (hasGlobalIPv6Address() && + hasIPv6DefaultRoute() && + hasIPv6DnsServer()); + } + + /** + * Returns true if this link is provisioned for global connectivity, + * for at least one Internet Protocol family. * * @return {@code true} if the link is provisioned, {@code false} otherwise. * @hide */ public boolean isProvisioned() { - return (hasIPv4Address() || - (hasGlobalIPv6Address() && hasIPv6DefaultRoute() && hasIPv6DnsServer())); + return (hasIPv4() || hasIPv6()); } /** diff --git a/core/java/android/net/MobileDataStateTracker.java b/core/java/android/net/MobileDataStateTracker.java index d8012fee5beb37b3808c019d6c2dcbf6a2088ac3..40b7e066ddeeab36e2ff907e1d1bdf5f2a0d5753 100644 --- a/core/java/android/net/MobileDataStateTracker.java +++ b/core/java/android/net/MobileDataStateTracker.java @@ -660,16 +660,6 @@ public class MobileDataStateTracker extends BaseNetworkStateTracker { return retVal; } - @Override - public void addStackedLink(LinkProperties link) { - mLinkProperties.addStackedLink(link); - } - - @Override - public void removeStackedLink(LinkProperties link) { - mLinkProperties.removeStackedLink(link); - } - @Override public String toString() { final CharArrayWriter writer = new CharArrayWriter(); diff --git a/core/java/android/net/Network.java b/core/java/android/net/Network.java index ddb8e941f57f71562cf83ee96a6446deae165e07..dfe2413a08cf36f20bc6bdacc8e15024c6dea53e 100644 --- a/core/java/android/net/Network.java +++ b/core/java/android/net/Network.java @@ -20,10 +20,13 @@ import android.os.Parcelable; import android.os.Parcel; import android.system.ErrnoException; +import java.io.FileDescriptor; import java.io.IOException; +import java.net.DatagramSocket; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.MalformedURLException; +import java.net.ProxySelector; import java.net.Socket; import java.net.SocketAddress; import java.net.SocketException; @@ -240,16 +243,46 @@ public class Network implements Parcelable { * @see java.net.URL#openConnection() */ public URLConnection openConnection(URL url) throws IOException { + final ConnectivityManager cm = ConnectivityManager.getInstance(); + // TODO: Should this be optimized to avoid fetching the global proxy for every request? + ProxyInfo proxyInfo = cm.getGlobalProxy(); + if (proxyInfo == null) { + // TODO: Should this be optimized to avoid fetching LinkProperties for every request? + final LinkProperties lp = cm.getLinkProperties(this); + if (lp != null) proxyInfo = lp.getHttpProxy(); + } + java.net.Proxy proxy = null; + if (proxyInfo != null) { + proxy = proxyInfo.makeProxy(); + } else { + proxy = java.net.Proxy.NO_PROXY; + } + return openConnection(url, proxy); + } + + /** + * Opens the specified {@link URL} on this {@code Network}, such that all traffic will be sent + * on this Network. The URL protocol must be {@code HTTP} or {@code HTTPS}. + * + * @param proxy the proxy through which the connection will be established. + * @return a {@code URLConnection} to the resource referred to by this URL. + * @throws MalformedURLException if the URL protocol is not HTTP or HTTPS. + * @throws IllegalArgumentException if the argument proxy is null. + * @throws IOException if an error occurs while opening the connection. + * @see java.net.URL#openConnection() + * @hide + */ + public URLConnection openConnection(URL url, java.net.Proxy proxy) throws IOException { + if (proxy == null) throw new IllegalArgumentException("proxy is null"); maybeInitHttpClient(); String protocol = url.getProtocol(); OkUrlFactory okUrlFactory; // TODO: HttpHandler creates OkUrlFactory instances that share the default ResponseCache. // Could this cause unexpected behavior? - // TODO: Should the network's proxy be specified? if (protocol.equals("http")) { - okUrlFactory = HttpHandler.createHttpOkUrlFactory(null /* proxy */); + okUrlFactory = HttpHandler.createHttpOkUrlFactory(proxy); } else if (protocol.equals("https")) { - okUrlFactory = HttpsHandler.createHttpsOkUrlFactory(null /* proxy */); + okUrlFactory = HttpsHandler.createHttpsOkUrlFactory(proxy); } else { // OkHttp only supports HTTP and HTTPS and returns a null URLStreamHandler if // passed another protocol. @@ -264,19 +297,41 @@ public class Network implements Parcelable { return okUrlFactory.open(url); } + /** + * Binds the specified {@link DatagramSocket} to this {@code Network}. All data traffic on the + * socket will be sent on this {@code Network}, irrespective of any process-wide network binding + * set by {@link ConnectivityManager#setProcessDefaultNetwork}. The socket must not be + * connected. + */ + public void bindSocket(DatagramSocket socket) throws IOException { + // Apparently, the kernel doesn't update a connected UDP socket's routing upon mark changes. + if (socket.isConnected()) { + throw new SocketException("Socket is connected"); + } + // Query a property of the underlying socket to ensure that the socket's file descriptor + // exists, is available to bind to a network and is not closed. + socket.getReuseAddress(); + bindSocketFd(socket.getFileDescriptor$()); + } + /** * Binds the specified {@link Socket} to this {@code Network}. All data traffic on the socket * will be sent on this {@code Network}, irrespective of any process-wide network binding set by * {@link ConnectivityManager#setProcessDefaultNetwork}. The socket must not be connected. */ public void bindSocket(Socket socket) throws IOException { + // Apparently, the kernel doesn't update a connected TCP socket's routing upon mark changes. if (socket.isConnected()) { throw new SocketException("Socket is connected"); } - // Query a property of the underlying socket to ensure the underlying - // socket exists so a file descriptor is available to bind to a network. + // Query a property of the underlying socket to ensure that the socket's file descriptor + // exists, is available to bind to a network and is not closed. socket.getReuseAddress(); - int err = NetworkUtils.bindSocketToNetwork(socket.getFileDescriptor$().getInt$(), netId); + bindSocketFd(socket.getFileDescriptor$()); + } + + private void bindSocketFd(FileDescriptor fd) throws IOException { + int err = NetworkUtils.bindSocketToNetwork(fd.getInt$(), netId); if (err != 0) { // bindSocketToNetwork returns negative errno. throw new ErrnoException("Binding socket to network " + netId, -err) diff --git a/core/java/android/net/NetworkCapabilities.java b/core/java/android/net/NetworkCapabilities.java index 53f9fcdd93c0afbd4db9b5cb8809b22244f1bbe8..a7f9c5bcc0ab0683a19278f7d2aa78d4d790bcd6 100644 --- a/core/java/android/net/NetworkCapabilities.java +++ b/core/java/android/net/NetworkCapabilities.java @@ -19,16 +19,7 @@ package android.net; import android.os.Parcel; import android.os.Parcelable; import android.text.TextUtils; -import android.util.Log; - import java.lang.IllegalArgumentException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; /** * This class represents the capabilities of a network. This is used both to specify @@ -36,15 +27,12 @@ import java.util.Set; * * Note that this replaces the old {@link ConnectivityManager#TYPE_MOBILE} method * of network selection. Rather than indicate a need for Wi-Fi because an application - * needs high bandwidth and risk obselence when a new, fast network appears (like LTE), + * needs high bandwidth and risk obsolescence when a new, fast network appears (like LTE), * the application should specify it needs high bandwidth. Similarly if an application * needs an unmetered network for a bulk transfer it can specify that rather than assuming * all cellular based connections are metered and all Wi-Fi based connections are not. */ public final class NetworkCapabilities implements Parcelable { - private static final String TAG = "NetworkCapabilities"; - private static final boolean DBG = false; - /** * @hide */ @@ -166,9 +154,16 @@ public final class NetworkCapabilities implements Parcelable { */ public static final int NET_CAPABILITY_NOT_VPN = 15; + /** + * Indicates that connectivity on this network was successfully validated. For example, for a + * network with NET_CAPABILITY_INTERNET, it means that Internet connectivity was successfully + * detected. + * @hide + */ + public static final int NET_CAPABILITY_VALIDATED = 16; private static final int MIN_NET_CAPABILITY = NET_CAPABILITY_MMS; - private static final int MAX_NET_CAPABILITY = NET_CAPABILITY_NOT_VPN; + private static final int MAX_NET_CAPABILITY = NET_CAPABILITY_VALIDATED; /** * Adds the given capability to this {@code NetworkCapability} instance. @@ -247,7 +242,8 @@ public final class NetworkCapabilities implements Parcelable { return ((nc.mNetworkCapabilities & this.mNetworkCapabilities) == this.mNetworkCapabilities); } - private boolean equalsNetCapabilities(NetworkCapabilities nc) { + /** @hide */ + public boolean equalsNetCapabilities(NetworkCapabilities nc) { return (nc.mNetworkCapabilities == this.mNetworkCapabilities); } @@ -356,7 +352,8 @@ public final class NetworkCapabilities implements Parcelable { return ((this.mTransportTypes == 0) || ((this.mTransportTypes & nc.mTransportTypes) != 0)); } - private boolean equalsTransportTypes(NetworkCapabilities nc) { + /** @hide */ + public boolean equalsTransportTypes(NetworkCapabilities nc) { return (nc.mTransportTypes == this.mTransportTypes); } @@ -541,9 +538,11 @@ public final class NetworkCapabilities implements Parcelable { (TextUtils.isEmpty(mNetworkSpecifier) ? 0 : mNetworkSpecifier.hashCode() * 17)); } + @Override public int describeContents() { return 0; } + @Override public void writeToParcel(Parcel dest, int flags) { dest.writeLong(mNetworkCapabilities); dest.writeLong(mTransportTypes); @@ -553,6 +552,7 @@ public final class NetworkCapabilities implements Parcelable { } public static final Creator CREATOR = new Creator() { + @Override public NetworkCapabilities createFromParcel(Parcel in) { NetworkCapabilities netCap = new NetworkCapabilities(); @@ -563,11 +563,13 @@ public final class NetworkCapabilities implements Parcelable { netCap.mNetworkSpecifier = in.readString(); return netCap; } + @Override public NetworkCapabilities[] newArray(int size) { return new NetworkCapabilities[size]; } }; + @Override public String toString() { int[] types = getTransportTypes(); String transports = (types.length > 0 ? " Transports: " : ""); diff --git a/core/java/android/net/NetworkFactory.java b/core/java/android/net/NetworkFactory.java index 6ddd8b3aa79c0462d0f82f5c80c0bd47d2bb0831..64d0fcf76c06b041c4fcf1aa79fb70f8095d6723 100644 --- a/core/java/android/net/NetworkFactory.java +++ b/core/java/android/net/NetworkFactory.java @@ -219,16 +219,21 @@ public class NetworkFactory extends Handler { } private void evalRequest(NetworkRequestInfo n) { + if (VDBG) log("evalRequest"); if (n.requested == false && n.score < mScore && n.request.networkCapabilities.satisfiedByNetworkCapabilities( mCapabilityFilter) && acceptRequest(n.request, n.score)) { + if (VDBG) log(" needNetworkFor"); needNetworkFor(n.request, n.score); n.requested = true; } else if (n.requested == true && (n.score > mScore || n.request.networkCapabilities.satisfiedByNetworkCapabilities( mCapabilityFilter) == false || acceptRequest(n.request, n.score) == false)) { + if (VDBG) log(" releaseNetworkFor"); releaseNetworkFor(n.request); n.requested = false; + } else { + if (VDBG) log(" done"); } } @@ -274,4 +279,12 @@ public class NetworkFactory extends Handler { protected void log(String s) { Log.d(LOG_TAG, s); } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder("{").append(LOG_TAG).append(" - ScoreFilter="). + append(mScore).append(", Filter=").append(mCapabilityFilter).append(", requests="). + append(mNetworkRequests.size()).append("}"); + return sb.toString(); + } } diff --git a/core/java/android/net/NetworkIdentity.java b/core/java/android/net/NetworkIdentity.java index 36dd2fdfbcf1e0dfbfd02a88cc11213055e13438..a9de23ef1b22c10bffdfcd191bbe97026c0f369b 100644 --- a/core/java/android/net/NetworkIdentity.java +++ b/core/java/android/net/NetworkIdentity.java @@ -25,6 +25,7 @@ import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.os.Build; import android.telephony.TelephonyManager; +import android.util.Slog; import java.util.Objects; @@ -34,11 +35,17 @@ import java.util.Objects; * * @hide */ -public class NetworkIdentity { +public class NetworkIdentity implements Comparable { + private static final String TAG = "NetworkIdentity"; + /** * When enabled, combine all {@link #mSubType} together under * {@link #SUBTYPE_COMBINED}. + * + * @deprecated we no longer offer to collect statistics on a per-subtype + * basis; this is always disabled. */ + @Deprecated public static final boolean COMBINE_SUBTYPE_ENABLED = true; public static final int SUBTYPE_COMBINED = -1; @@ -76,7 +83,7 @@ public class NetworkIdentity { @Override public String toString() { - final StringBuilder builder = new StringBuilder("["); + final StringBuilder builder = new StringBuilder("{"); builder.append("type=").append(getNetworkTypeName(mType)); builder.append(", subType="); if (COMBINE_SUBTYPE_ENABLED) { @@ -95,7 +102,7 @@ public class NetworkIdentity { if (mRoaming) { builder.append(", ROAMING"); } - return builder.append("]").toString(); + return builder.append("}").toString(); } public int getType() { @@ -132,6 +139,18 @@ public class NetworkIdentity { } } + /** + * Scrub given IMSI on production builds. + */ + public static String[] scrubSubscriberId(String[] subscriberId) { + if (subscriberId == null) return null; + final String[] res = new String[subscriberId.length]; + for (int i = 0; i < res.length; i++) { + res[i] = NetworkIdentity.scrubSubscriberId(subscriberId[i]); + } + return res; + } + /** * Build a {@link NetworkIdentity} from the given {@link NetworkState}, * assuming that any mobile networks are using the current IMSI. @@ -140,23 +159,18 @@ public class NetworkIdentity { final int type = state.networkInfo.getType(); final int subType = state.networkInfo.getSubtype(); - // TODO: consider moving subscriberId over to LinkCapabilities, so it - // comes from an authoritative source. - String subscriberId = null; String networkId = null; boolean roaming = false; if (isNetworkTypeMobile(type)) { - final TelephonyManager telephony = (TelephonyManager) context.getSystemService( - Context.TELEPHONY_SERVICE); - roaming = telephony.isNetworkRoaming(); - if (state.subscriberId != null) { - subscriberId = state.subscriberId; - } else { - subscriberId = telephony.getSubscriberId(); + if (state.subscriberId == null) { + Slog.w(TAG, "Active mobile network without subscriber!"); } + subscriberId = state.subscriberId; + roaming = state.networkInfo.isRoaming(); + } else if (type == TYPE_WIFI) { if (state.networkId != null) { networkId = state.networkId; @@ -170,4 +184,22 @@ public class NetworkIdentity { return new NetworkIdentity(type, subType, subscriberId, networkId, roaming); } + + @Override + public int compareTo(NetworkIdentity another) { + int res = Integer.compare(mType, another.mType); + if (res == 0) { + res = Integer.compare(mSubType, another.mSubType); + } + if (res == 0 && mSubscriberId != null && another.mSubscriberId != null) { + res = mSubscriberId.compareTo(another.mSubscriberId); + } + if (res == 0 && mNetworkId != null && another.mNetworkId != null) { + res = mNetworkId.compareTo(another.mNetworkId); + } + if (res == 0) { + res = Boolean.compare(mRoaming, another.mRoaming); + } + return res; + } } diff --git a/core/java/android/net/NetworkMisc.java b/core/java/android/net/NetworkMisc.java index 5d2a43d0f3c995760dce79053031eee31872425e..b92c9e3c5d9f79a7c0d985c807c7077d379df769 100644 --- a/core/java/android/net/NetworkMisc.java +++ b/core/java/android/net/NetworkMisc.java @@ -20,15 +20,18 @@ import android.os.Parcel; import android.os.Parcelable; /** - * A grab-bag of information (metadata, policies, properties, etc) about a {@link Network}. + * A grab-bag of information (metadata, policies, properties, etc) about a + * {@link Network}. Since this contains PII, it should not be sent outside the + * system. * * @hide */ public class NetworkMisc implements Parcelable { /** - * If the {@link Network} is a VPN, whether apps are allowed to bypass the VPN. This is set by - * a {@link VpnService} and used by {@link ConnectivityService} when creating a VPN. + * If the {@link Network} is a VPN, whether apps are allowed to bypass the + * VPN. This is set by a {@link VpnService} and used by + * {@link ConnectivityManager} when creating a VPN. */ public boolean allowBypass; @@ -41,6 +44,11 @@ public class NetworkMisc implements Parcelable { */ public boolean explicitlySelected; + /** + * For mobile networks, this is the subscriber ID (such as IMSI). + */ + public String subscriberId; + public NetworkMisc() { } @@ -48,6 +56,7 @@ public class NetworkMisc implements Parcelable { if (nm != null) { allowBypass = nm.allowBypass; explicitlySelected = nm.explicitlySelected; + subscriberId = nm.subscriberId; } } @@ -60,6 +69,7 @@ public class NetworkMisc implements Parcelable { public void writeToParcel(Parcel out, int flags) { out.writeInt(allowBypass ? 1 : 0); out.writeInt(explicitlySelected ? 1 : 0); + out.writeString(subscriberId); } public static final Creator CREATOR = new Creator() { @@ -68,6 +78,7 @@ public class NetworkMisc implements Parcelable { NetworkMisc networkMisc = new NetworkMisc(); networkMisc.allowBypass = in.readInt() != 0; networkMisc.explicitlySelected = in.readInt() != 0; + networkMisc.subscriberId = in.readString(); return networkMisc; } diff --git a/core/java/android/net/NetworkPolicy.java b/core/java/android/net/NetworkPolicy.java index 10c686b9e211a0176a0cfa06657c2f9accffe79f..e88bc26851e71601cc05f561d96eb06393cb8fb9 100644 --- a/core/java/android/net/NetworkPolicy.java +++ b/core/java/android/net/NetworkPolicy.java @@ -35,7 +35,7 @@ public class NetworkPolicy implements Parcelable, Comparable { public static final long LIMIT_DISABLED = -1; public static final long SNOOZE_NEVER = -1; - public final NetworkTemplate template; + public NetworkTemplate template; public int cycleDay; public String cycleTimezone; public long warningBytes; diff --git a/core/java/android/net/NetworkScoreManager.java b/core/java/android/net/NetworkScoreManager.java index 3f68a4431d256f5f870b8adb18b10e325f48a42a..a939ccee4ca7e47abe3f7ba54c9babea21f20d8b 100644 --- a/core/java/android/net/NetworkScoreManager.java +++ b/core/java/android/net/NetworkScoreManager.java @@ -41,10 +41,10 @@ import android.os.UserHandle; *

                *
              • Declares the {@link android.Manifest.permission#SCORE_NETWORKS} permission. *
              • Includes a receiver for {@link #ACTION_SCORE_NETWORKS} guarded by the - * {@link android.Manifest.permission#BROADCAST_SCORE_NETWORKS} permission which scores networks - * and (eventually) calls {@link #updateScores} with the results. If this receiver specifies an - * android:label attribute, this label will be used when referring to the application throughout - * system settings; otherwise, the application label will be used. + * {@link android.Manifest.permission#BROADCAST_NETWORK_PRIVILEGED} permission which scores + * networks and (eventually) calls {@link #updateScores} with the results. If this receiver + * specifies an android:label attribute, this label will be used when referring to the + * application throughout system settings; otherwise, the application label will be used. *
              * *

              The system keeps track of an active scorer application; at any time, only this application @@ -192,12 +192,15 @@ public class NetworkScoreManager { /** * Set the active scorer to a new package and clear existing scores. * + *

              Should never be called directly without obtaining user consent. This can be done by using + * the {@link #ACTION_CHANGE_ACTIVE} broadcast, or using a custom configuration activity. + * * @return true if the operation succeeded, or false if the new package is not a valid scorer. * @throws SecurityException if the caller does not hold the - * {@link android.Manifest.permission#BROADCAST_SCORE_NETWORKS} permission indicating - * that it can manage scorer applications. + * {@link android.Manifest.permission#SCORE_NETWORKS} permission. * @hide */ + @SystemApi public boolean setActiveScorer(String packageName) throws SecurityException { try { return mService.setActiveScorer(packageName); @@ -228,7 +231,7 @@ public class NetworkScoreManager { * * @return true if the broadcast was sent, or false if there is no active scorer. * @throws SecurityException if the caller does not hold the - * {@link android.Manifest.permission#BROADCAST_SCORE_NETWORKS} permission. + * {@link android.Manifest.permission#BROADCAST_NETWORK_PRIVILEGED} permission. * @hide */ public boolean requestScores(NetworkKey[] networks) throws SecurityException { @@ -252,7 +255,7 @@ public class NetworkScoreManager { * @param networkType the type of network this cache can handle. See {@link NetworkKey#type}. * @param scoreCache implementation of {@link INetworkScoreCache} to store the scores. * @throws SecurityException if the caller does not hold the - * {@link android.Manifest.permission#BROADCAST_SCORE_NETWORKS} permission. + * {@link android.Manifest.permission#BROADCAST_NETWORK_PRIVILEGED} permission. * @throws IllegalArgumentException if a score cache is already registered for this type. * @hide */ diff --git a/core/java/android/net/NetworkScorerAppManager.java b/core/java/android/net/NetworkScorerAppManager.java index c33f5ecf59c48ca0326b53da376c2dc7e71f2c25..46f7194a0d8e3d42a70bb38669be7fa221586849 100644 --- a/core/java/android/net/NetworkScorerAppManager.java +++ b/core/java/android/net/NetworkScorerAppManager.java @@ -79,7 +79,7 @@ public final class NetworkScorerAppManager { *

                *
              • Declares the {@link android.Manifest.permission#SCORE_NETWORKS} permission. *
              • Includes a receiver for {@link NetworkScoreManager#ACTION_SCORE_NETWORKS} guarded by the - * {@link android.Manifest.permission#BROADCAST_SCORE_NETWORKS} permission. + * {@link android.Manifest.permission#BROADCAST_NETWORK_PRIVILEGED} permission. *
              * * @return the list of scorers, or the empty list if there are no valid scorers. @@ -98,8 +98,8 @@ public final class NetworkScorerAppManager { // Should never happen with queryBroadcastReceivers, but invalid nonetheless. continue; } - if (!permission.BROADCAST_SCORE_NETWORKS.equals(receiverInfo.permission)) { - // Receiver doesn't require the BROADCAST_SCORE_NETWORKS permission, which means + if (!permission.BROADCAST_NETWORK_PRIVILEGED.equals(receiverInfo.permission)) { + // Receiver doesn't require the BROADCAST_NETWORK_PRIVILEGED permission, which means // anyone could trigger network scoring and flood the framework with score requests. continue; } diff --git a/core/java/android/net/NetworkState.java b/core/java/android/net/NetworkState.java index 2e0e9e432b545e7b1d3786d37212b585e5b542ca..933287f6341f4873870ebaa8383a2c965112d4e8 100644 --- a/core/java/android/net/NetworkState.java +++ b/core/java/android/net/NetworkState.java @@ -29,20 +29,17 @@ public class NetworkState implements Parcelable { public final NetworkInfo networkInfo; public final LinkProperties linkProperties; public final NetworkCapabilities networkCapabilities; - /** Currently only used by testing. */ + public final Network network; public final String subscriberId; public final String networkId; public NetworkState(NetworkInfo networkInfo, LinkProperties linkProperties, - NetworkCapabilities networkCapabilities) { - this(networkInfo, linkProperties, networkCapabilities, null, null); - } - - public NetworkState(NetworkInfo networkInfo, LinkProperties linkProperties, - NetworkCapabilities networkCapabilities, String subscriberId, String networkId) { + NetworkCapabilities networkCapabilities, Network network, String subscriberId, + String networkId) { this.networkInfo = networkInfo; this.linkProperties = linkProperties; this.networkCapabilities = networkCapabilities; + this.network = network; this.subscriberId = subscriberId; this.networkId = networkId; } @@ -51,6 +48,7 @@ public class NetworkState implements Parcelable { networkInfo = in.readParcelable(null); linkProperties = in.readParcelable(null); networkCapabilities = in.readParcelable(null); + network = in.readParcelable(null); subscriberId = in.readString(); networkId = in.readString(); } @@ -65,6 +63,7 @@ public class NetworkState implements Parcelable { out.writeParcelable(networkInfo, flags); out.writeParcelable(linkProperties, flags); out.writeParcelable(networkCapabilities, flags); + out.writeParcelable(network, flags); out.writeString(subscriberId); out.writeString(networkId); } @@ -80,5 +79,4 @@ public class NetworkState implements Parcelable { return new NetworkState[size]; } }; - } diff --git a/core/java/android/net/NetworkStateTracker.java b/core/java/android/net/NetworkStateTracker.java index 35500cc1cdb6a1425cdea5e5a407ea4d4e794cb7..c80782c4fd602e0dfb1a5369b4512e45d4f49245 100644 --- a/core/java/android/net/NetworkStateTracker.java +++ b/core/java/android/net/NetworkStateTracker.java @@ -216,16 +216,6 @@ public interface NetworkStateTracker { */ public void setDependencyMet(boolean met); - /** - * Informs the state tracker that another interface is stacked on top of it. - **/ - public void addStackedLink(LinkProperties link); - - /** - * Informs the state tracker that a stacked interface has been removed. - **/ - public void removeStackedLink(LinkProperties link); - /* * Called once to setup async channel between this and * the underlying network specific code. diff --git a/core/java/android/net/NetworkStats.java b/core/java/android/net/NetworkStats.java index ea5dfd184f2916465ce9f7cff60257081749f69c..2afe578b6b6ff6daa4d592f6d2e94557f54d7641 100644 --- a/core/java/android/net/NetworkStats.java +++ b/core/java/android/net/NetworkStats.java @@ -732,6 +732,22 @@ public class NetworkStats implements Parcelable { } } + /** + * Return text description of {@link #set} value. + */ + public static String setToCheckinString(int set) { + switch (set) { + case SET_ALL: + return "all"; + case SET_DEFAULT: + return "def"; + case SET_FOREGROUND: + return "fg"; + default: + return "unk"; + } + } + /** * Return text description of {@link #tag} value. */ diff --git a/core/java/android/net/NetworkStatsHistory.java b/core/java/android/net/NetworkStatsHistory.java index 62d8738ba6dd311859d6cd81c1d7af095c5a281a..4a4accbba502e4548edb028ab08aa8bed53131d5 100644 --- a/core/java/android/net/NetworkStatsHistory.java +++ b/core/java/android/net/NetworkStatsHistory.java @@ -26,6 +26,7 @@ import static android.net.NetworkStatsHistory.DataStreamUtils.writeVarLongArray; import static android.net.NetworkStatsHistory.Entry.UNKNOWN; import static android.net.NetworkStatsHistory.ParcelUtils.readLongArray; import static android.net.NetworkStatsHistory.ParcelUtils.writeLongArray; +import static android.text.format.DateUtils.SECOND_IN_MILLIS; import static com.android.internal.util.ArrayUtils.total; import android.os.Parcel; @@ -38,6 +39,7 @@ import java.io.CharArrayWriter; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; +import java.io.PrintWriter; import java.net.ProtocolException; import java.util.Arrays; import java.util.Random; @@ -573,8 +575,22 @@ public class NetworkStatsHistory implements Parcelable { return (long) (start + (r.nextFloat() * (end - start))); } + /** + * Quickly determine if this history intersects with given window. + */ + public boolean intersects(long start, long end) { + final long dataStart = getStart(); + final long dataEnd = getEnd(); + if (start >= dataStart && start <= dataEnd) return true; + if (end >= dataStart && end <= dataEnd) return true; + if (dataStart >= start && dataStart <= end) return true; + if (dataEnd >= start && dataEnd <= end) return true; + return false; + } + public void dump(IndentingPrintWriter pw, boolean fullHistory) { - pw.print("NetworkStatsHistory: bucketDuration="); pw.println(bucketDuration); + pw.print("NetworkStatsHistory: bucketDuration="); + pw.println(bucketDuration / SECOND_IN_MILLIS); pw.increaseIndent(); final int start = fullHistory ? 0 : Math.max(0, bucketCount - 32); @@ -583,19 +599,35 @@ public class NetworkStatsHistory implements Parcelable { } for (int i = start; i < bucketCount; i++) { - pw.print("bucketStart="); pw.print(bucketStart[i]); - if (activeTime != null) { pw.print(" activeTime="); pw.print(activeTime[i]); } - if (rxBytes != null) { pw.print(" rxBytes="); pw.print(rxBytes[i]); } - if (rxPackets != null) { pw.print(" rxPackets="); pw.print(rxPackets[i]); } - if (txBytes != null) { pw.print(" txBytes="); pw.print(txBytes[i]); } - if (txPackets != null) { pw.print(" txPackets="); pw.print(txPackets[i]); } - if (operations != null) { pw.print(" operations="); pw.print(operations[i]); } + pw.print("st="); pw.print(bucketStart[i] / SECOND_IN_MILLIS); + if (rxBytes != null) { pw.print(" rb="); pw.print(rxBytes[i]); } + if (rxPackets != null) { pw.print(" rp="); pw.print(rxPackets[i]); } + if (txBytes != null) { pw.print(" tb="); pw.print(txBytes[i]); } + if (txPackets != null) { pw.print(" tp="); pw.print(txPackets[i]); } + if (operations != null) { pw.print(" op="); pw.print(operations[i]); } pw.println(); } pw.decreaseIndent(); } + public void dumpCheckin(PrintWriter pw) { + pw.print("d,"); + pw.print(bucketDuration / SECOND_IN_MILLIS); + pw.println(); + + for (int i = 0; i < bucketCount; i++) { + pw.print("b,"); + pw.print(bucketStart[i] / SECOND_IN_MILLIS); pw.print(','); + if (rxBytes != null) { pw.print(rxBytes[i]); } else { pw.print("*"); } pw.print(','); + if (rxPackets != null) { pw.print(rxPackets[i]); } else { pw.print("*"); } pw.print(','); + if (txBytes != null) { pw.print(txBytes[i]); } else { pw.print("*"); } pw.print(','); + if (txPackets != null) { pw.print(txPackets[i]); } else { pw.print("*"); } pw.print(','); + if (operations != null) { pw.print(operations[i]); } else { pw.print("*"); } + pw.println(); + } + } + @Override public String toString() { final CharArrayWriter writer = new CharArrayWriter(); diff --git a/core/java/android/net/NetworkTemplate.java b/core/java/android/net/NetworkTemplate.java index 27197cc8a3064d6cc59627e3301c52f84b95533e..57eef834311afbfdfa9d87e8056d5938e6401266 100644 --- a/core/java/android/net/NetworkTemplate.java +++ b/core/java/android/net/NetworkTemplate.java @@ -16,12 +16,12 @@ package android.net; +import static android.net.ConnectivityManager.TYPE_BLUETOOTH; import static android.net.ConnectivityManager.TYPE_ETHERNET; import static android.net.ConnectivityManager.TYPE_WIFI; import static android.net.ConnectivityManager.TYPE_WIFI_P2P; import static android.net.ConnectivityManager.TYPE_WIMAX; import static android.net.NetworkIdentity.COMBINE_SUBTYPE_ENABLED; -import static android.net.NetworkIdentity.scrubSubscriberId; import static android.net.wifi.WifiInfo.removeDoubleQuotes; import static android.telephony.TelephonyManager.NETWORK_CLASS_2_G; import static android.telephony.TelephonyManager.NETWORK_CLASS_3_G; @@ -34,9 +34,11 @@ import android.content.res.Resources; import android.os.Parcel; import android.os.Parcelable; -import java.util.Objects; - import com.android.internal.annotations.VisibleForTesting; +import com.android.internal.util.ArrayUtils; + +import java.util.Arrays; +import java.util.Objects; /** * Template definition used to generically match {@link NetworkIdentity}, @@ -47,12 +49,15 @@ import com.android.internal.annotations.VisibleForTesting; public class NetworkTemplate implements Parcelable { public static final int MATCH_MOBILE_ALL = 1; + @Deprecated public static final int MATCH_MOBILE_3G_LOWER = 2; + @Deprecated public static final int MATCH_MOBILE_4G = 3; public static final int MATCH_WIFI = 4; public static final int MATCH_ETHERNET = 5; public static final int MATCH_MOBILE_WILDCARD = 6; public static final int MATCH_WIFI_WILDCARD = 7; + public static final int MATCH_BLUETOOTH = 8; /** * Set of {@link NetworkInfo#getType()} that reflect data usage. @@ -134,19 +139,45 @@ public class NetworkTemplate implements Parcelable { return new NetworkTemplate(MATCH_ETHERNET, null, null); } + /** + * Template to combine all {@link ConnectivityManager#TYPE_BLUETOOTH} style + * networks together. + */ + public static NetworkTemplate buildTemplateBluetooth() { + return new NetworkTemplate(MATCH_BLUETOOTH, null, null); + } + private final int mMatchRule; private final String mSubscriberId; + + /** + * Ugh, templates are designed to target a single subscriber, but we might + * need to match several "merged" subscribers. These are the subscribers + * that should be considered to match this template. + *

              + * Since the merge set is dynamic, it should not be persisted or + * used for determining equality. + */ + private final String[] mMatchSubscriberIds; + private final String mNetworkId; public NetworkTemplate(int matchRule, String subscriberId, String networkId) { + this(matchRule, subscriberId, new String[] { subscriberId }, networkId); + } + + public NetworkTemplate(int matchRule, String subscriberId, String[] matchSubscriberIds, + String networkId) { mMatchRule = matchRule; mSubscriberId = subscriberId; + mMatchSubscriberIds = matchSubscriberIds; mNetworkId = networkId; } private NetworkTemplate(Parcel in) { mMatchRule = in.readInt(); mSubscriberId = in.readString(); + mMatchSubscriberIds = in.createStringArray(); mNetworkId = in.readString(); } @@ -154,6 +185,7 @@ public class NetworkTemplate implements Parcelable { public void writeToParcel(Parcel dest, int flags) { dest.writeInt(mMatchRule); dest.writeString(mSubscriberId); + dest.writeStringArray(mMatchSubscriberIds); dest.writeString(mNetworkId); } @@ -167,7 +199,12 @@ public class NetworkTemplate implements Parcelable { final StringBuilder builder = new StringBuilder("NetworkTemplate: "); builder.append("matchRule=").append(getMatchRuleName(mMatchRule)); if (mSubscriberId != null) { - builder.append(", subscriberId=").append(scrubSubscriberId(mSubscriberId)); + builder.append(", subscriberId=").append( + NetworkIdentity.scrubSubscriberId(mSubscriberId)); + } + if (mMatchSubscriberIds != null) { + builder.append(", matchSubscriberIds=").append( + Arrays.toString(NetworkIdentity.scrubSubscriberId(mMatchSubscriberIds))); } if (mNetworkId != null) { builder.append(", networkId=").append(mNetworkId); @@ -191,6 +228,18 @@ public class NetworkTemplate implements Parcelable { return false; } + public boolean isMatchRuleMobile() { + switch (mMatchRule) { + case MATCH_MOBILE_3G_LOWER: + case MATCH_MOBILE_4G: + case MATCH_MOBILE_ALL: + case MATCH_MOBILE_WILDCARD: + return true; + default: + return false; + } + } + public int getMatchRule() { return mMatchRule; } @@ -222,6 +271,8 @@ public class NetworkTemplate implements Parcelable { return matchesMobileWildcard(ident); case MATCH_WIFI_WILDCARD: return matchesWifiWildcard(ident); + case MATCH_BLUETOOTH: + return matchesBluetooth(ident); default: throw new IllegalArgumentException("unknown network template"); } @@ -235,14 +286,16 @@ public class NetworkTemplate implements Parcelable { // TODO: consider matching against WiMAX subscriber identity return true; } else { - return ((sForceAllNetworkTypes || contains(DATA_USAGE_NETWORK_TYPES, ident.mType)) - && Objects.equals(mSubscriberId, ident.mSubscriberId)); + final boolean matchesType = (sForceAllNetworkTypes + || contains(DATA_USAGE_NETWORK_TYPES, ident.mType)); + return matchesType && ArrayUtils.contains(mMatchSubscriberIds, ident.mSubscriberId); } } /** * Check if mobile network classified 3G or lower with matching IMSI. */ + @Deprecated private boolean matchesMobile3gLower(NetworkIdentity ident) { ensureSubtypeAvailable(); if (ident.mType == TYPE_WIMAX) { @@ -261,6 +314,7 @@ public class NetworkTemplate implements Parcelable { /** * Check if mobile network classified 4G with matching IMSI. */ + @Deprecated private boolean matchesMobile4g(NetworkIdentity ident) { ensureSubtypeAvailable(); if (ident.mType == TYPE_WIMAX) { @@ -316,6 +370,16 @@ public class NetworkTemplate implements Parcelable { } } + /** + * Check if matches Bluetooth network template. + */ + private boolean matchesBluetooth(NetworkIdentity ident) { + if (ident.mType == TYPE_BLUETOOTH) { + return true; + } + return false; + } + private static String getMatchRuleName(int matchRule) { switch (matchRule) { case MATCH_MOBILE_3G_LOWER: @@ -332,6 +396,8 @@ public class NetworkTemplate implements Parcelable { return "MOBILE_WILDCARD"; case MATCH_WIFI_WILDCARD: return "WIFI_WILDCARD"; + case MATCH_BLUETOOTH: + return "BLUETOOTH"; default: return "UNKNOWN"; } @@ -344,6 +410,27 @@ public class NetworkTemplate implements Parcelable { } } + /** + * Examine the given template and normalize if it refers to a "merged" + * mobile subscriber. We pick the "lowest" merged subscriber as the primary + * for key purposes, and expand the template to match all other merged + * subscribers. + *

              + * For example, given an incoming template matching B, and the currently + * active merge set [A,B], we'd return a new template that primarily matches + * A, but also matches B. + */ + public static NetworkTemplate normalize(NetworkTemplate template, String[] merged) { + if (template.isMatchRuleMobile() && ArrayUtils.contains(merged, template.mSubscriberId)) { + // Requested template subscriber is part of the merge group; return + // a template that matches all merged subscribers. + return new NetworkTemplate(template.mMatchRule, merged[0], merged, + template.mNetworkId); + } else { + return template; + } + } + public static final Creator CREATOR = new Creator() { @Override public NetworkTemplate createFromParcel(Parcel in) { diff --git a/core/java/android/net/Proxy.java b/core/java/android/net/Proxy.java index bc1e4d59dd3b9ae33a068c6b088174bc0f470700..17a84a7e0f219136e383846057933b931356f9eb 100644 --- a/core/java/android/net/Proxy.java +++ b/core/java/android/net/Proxy.java @@ -19,7 +19,6 @@ package android.net; import android.annotation.SdkConstant; import android.annotation.SdkConstant.SdkConstantType; import android.content.Context; -import android.net.ProxyInfo; import android.text.TextUtils; import android.util.Log; diff --git a/core/java/android/net/ProxyInfo.java b/core/java/android/net/ProxyInfo.java index 1534e2c7f4b1d4d91fa7cf5e722eff692e4e8c80..a3cad77fa9059408c76be7270e9bd58d12a7547d 100644 --- a/core/java/android/net/ProxyInfo.java +++ b/core/java/android/net/ProxyInfo.java @@ -36,7 +36,13 @@ import java.util.Locale; * * Other HTTP stacks will need to obtain the proxy info from * {@link Proxy#PROXY_CHANGE_ACTION} broadcast as the extra {@link Proxy#EXTRA_PROXY_INFO}. + * + * @deprecated Please use {@link java.net.URL#openConnection}, {@link java.net.Proxy} and + * friends. The Apache HTTP client is no longer maintained and may be removed in a future + * release. Please visit this webpage + * for further details. */ +@Deprecated public class ProxyInfo implements Parcelable { private String mHost; @@ -254,7 +260,8 @@ public class ProxyInfo implements Parcelable { if (!Uri.EMPTY.equals(mPacFileUrl)) { sb.append("PAC Script: "); sb.append(mPacFileUrl); - } else if (mHost != null) { + } + if (mHost != null) { sb.append("["); sb.append(mHost); sb.append("] "); diff --git a/core/java/android/net/PskKeyManager.java b/core/java/android/net/PskKeyManager.java index d1622823acd997f98136981cca654eac4a0371fe..f82e6355961c436b4c91c03b9a173e926eafc333 100644 --- a/core/java/android/net/PskKeyManager.java +++ b/core/java/android/net/PskKeyManager.java @@ -81,6 +81,13 @@ import javax.net.ssl.SSLEngine; * Subclasses should normally provide their own implementation of {@code getKey} because the default * implementation returns no key, which aborts the handshake. * + *

              Known issues

              + * The implementation of {@code ECDHE_PSK} cipher suites in API Level 21 contains a bug which breaks + * compatibility with other implementations. {@code ECDHE_PSK} cipher suites are enabled by default + * on platforms with API Level 21 when an {@code SSLContext} is initialized with a + * {@code PskKeyManager}. A workaround is to disable {@code ECDHE_PSK} cipher suites on platforms + * with API Level 21. + * *

              Example

              * The following example illustrates how to create an {@code SSLContext} which enables the use of * TLS-PSK in {@code SSLSocket}, {@code SSLServerSocket} and {@code SSLEngine} instances obtained diff --git a/core/java/android/net/RssiCurve.java b/core/java/android/net/RssiCurve.java index f653f37359075c1e21a1b4fa00928af9f28aca92..8ebe9e8da8c39862a7f849052efbc12a406d4aaf 100644 --- a/core/java/android/net/RssiCurve.java +++ b/core/java/android/net/RssiCurve.java @@ -27,8 +27,8 @@ import java.util.Objects; * A curve defining the network score over a range of RSSI values. * *

              For each RSSI bucket, the score may be any byte. Scores have no absolute meaning and are only - * considered relative to other scores assigned by the same scorer. Networks with no score are all - * considered equivalent and ranked below any network with a score. + * considered relative to other scores assigned by the same scorer. Networks with no score are + * treated equivalently to a network with score {@link Byte#MIN_VALUE}, and will not be used. * *

              For example, consider a curve starting at -110 dBm with a bucket width of 10 and the * following buckets: {@code [-20, -10, 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120]}. @@ -52,6 +52,7 @@ import java.util.Objects; */ @SystemApi public class RssiCurve implements Parcelable { + private static final int DEFAULT_ACTIVE_NETWORK_RSSI_BOOST = 25; /** The starting dBm of the curve. */ public final int start; @@ -62,6 +63,15 @@ public class RssiCurve implements Parcelable { /** The score for each RSSI bucket. */ public final byte[] rssiBuckets; + /** + * The RSSI boost to give this network when active, in dBm. + * + *

              When the system is connected to this network, it will pretend that the network has this + * much higher of an RSSI. This is to avoid switching networks when another network has only a + * slightly higher score. + */ + public final int activeNetworkRssiBoost; + /** * Construct a new {@link RssiCurve}. * @@ -70,12 +80,25 @@ public class RssiCurve implements Parcelable { * @param rssiBuckets the score for each RSSI bucket. */ public RssiCurve(int start, int bucketWidth, byte[] rssiBuckets) { + this(start, bucketWidth, rssiBuckets, DEFAULT_ACTIVE_NETWORK_RSSI_BOOST); + } + + /** + * Construct a new {@link RssiCurve}. + * + * @param start the starting dBm of the curve. + * @param bucketWidth the width of each RSSI bucket, in dBm. + * @param rssiBuckets the score for each RSSI bucket. + * @param activeNetworkRssiBoost the RSSI boost to apply when this network is active, in dBm. + */ + public RssiCurve(int start, int bucketWidth, byte[] rssiBuckets, int activeNetworkRssiBoost) { this.start = start; this.bucketWidth = bucketWidth; if (rssiBuckets == null || rssiBuckets.length == 0) { throw new IllegalArgumentException("rssiBuckets must be at least one element large."); } this.rssiBuckets = rssiBuckets; + this.activeNetworkRssiBoost = activeNetworkRssiBoost; } private RssiCurve(Parcel in) { @@ -84,6 +107,7 @@ public class RssiCurve implements Parcelable { int bucketCount = in.readInt(); rssiBuckets = new byte[bucketCount]; in.readByteArray(rssiBuckets); + activeNetworkRssiBoost = in.readInt(); } @Override @@ -97,6 +121,7 @@ public class RssiCurve implements Parcelable { out.writeInt(bucketWidth); out.writeInt(rssiBuckets.length); out.writeByteArray(rssiBuckets); + out.writeInt(activeNetworkRssiBoost); } /** @@ -108,6 +133,23 @@ public class RssiCurve implements Parcelable { * @return the score for the given RSSI. */ public byte lookupScore(int rssi) { + return lookupScore(rssi, false /* isActiveNetwork */); + } + + /** + * Lookup the score for a given RSSI value. + * + * @param rssi The RSSI to lookup. If the RSSI falls below the start of the curve, the score at + * the start of the curve will be returned. If it falls after the end of the curve, the + * score at the end of the curve will be returned. + * @param isActiveNetwork Whether this network is currently active. + * @return the score for the given RSSI. + */ + public byte lookupScore(int rssi, boolean isActiveNetwork) { + if (isActiveNetwork) { + rssi += activeNetworkRssiBoost; + } + int index = (rssi - start) / bucketWidth; // Snap the index to the closest bucket if it falls outside the curve. @@ -136,12 +178,13 @@ public class RssiCurve implements Parcelable { return start == rssiCurve.start && bucketWidth == rssiCurve.bucketWidth && - Arrays.equals(rssiBuckets, rssiCurve.rssiBuckets); + Arrays.equals(rssiBuckets, rssiCurve.rssiBuckets) && + activeNetworkRssiBoost == rssiCurve.activeNetworkRssiBoost; } @Override public int hashCode() { - return Objects.hash(start, bucketWidth, rssiBuckets); + return Objects.hash(start, bucketWidth, rssiBuckets, activeNetworkRssiBoost); } @Override @@ -150,7 +193,9 @@ public class RssiCurve implements Parcelable { sb.append("RssiCurve[start=") .append(start) .append(",bucketWidth=") - .append(bucketWidth); + .append(bucketWidth) + .append(",activeNetworkRssiBoost=") + .append(activeNetworkRssiBoost); sb.append(",buckets="); for (int i = 0; i < rssiBuckets.length; i++) { diff --git a/core/java/android/net/SSLCertificateSocketFactory.java b/core/java/android/net/SSLCertificateSocketFactory.java index 69be4fdc733ec55856d527c64d3e0716bb72206c..6654577f310a0e65641a6bc01f06e9ce2149b0c7 100644 --- a/core/java/android/net/SSLCertificateSocketFactory.java +++ b/core/java/android/net/SSLCertificateSocketFactory.java @@ -154,7 +154,13 @@ public class SSLCertificateSocketFactory extends SSLSocketFactory { * for none. The socket timeout is reset to 0 after the handshake. * @param cache The {@link SSLSessionCache} to use, or null for no cache. * @return a new SocketFactory with the specified parameters + * + * @deprecated Use {@link #getDefault()} along with a {@link javax.net.ssl.HttpsURLConnection} + * instead. The Apache HTTP client is no longer maintained and may be removed in a future + * release. Please visit this webpage + * for further details. */ + @Deprecated public static org.apache.http.conn.ssl.SSLSocketFactory getHttpSocketFactory( int handshakeTimeoutMillis, SSLSessionCache cache) { return new org.apache.http.conn.ssl.SSLSocketFactory( diff --git a/core/java/android/net/VpnService.java b/core/java/android/net/VpnService.java index c8489937f05741fac03e92960f68855157b0a34f..c26af06d9a5154c53e7a1e31b488b296d74890ce 100644 --- a/core/java/android/net/VpnService.java +++ b/core/java/android/net/VpnService.java @@ -19,6 +19,7 @@ package android.net; import static android.system.OsConstants.AF_INET; import static android.system.OsConstants.AF_INET6; +import android.annotation.SystemApi; import android.app.Activity; import android.app.PendingIntent; import android.app.Service; @@ -26,6 +27,7 @@ import android.content.Context; import android.content.Intent; import android.content.pm.IPackageManager; import android.content.pm.PackageManager; +import android.net.Network; import android.net.NetworkUtils; import android.os.Binder; import android.os.IBinder; @@ -163,6 +165,32 @@ public class VpnService extends Service { return VpnConfig.getIntentForConfirmation(); } + /** + * Version of {@link #prepare(Context)} which does not require user consent. + * + *

              Requires {@link android.Manifest.permission#CONTROL_VPN} and should generally not be + * used. Only acceptable in situations where user consent has been obtained through other means. + * + *

              Once this is run, future preparations may be done with the standard prepare method as this + * will authorize the package to prepare the VPN without consent in the future. + * + * @hide + */ + @SystemApi + public static void prepareAndAuthorize(Context context) { + IConnectivityManager cm = getService(); + String packageName = context.getPackageName(); + try { + // Only prepare if we're not already prepared. + if (!cm.prepareVpn(packageName, null)) { + cm.prepareVpn(null, packageName); + } + cm.setVpnPackageAuthorization(true); + } catch (RemoteException e) { + // ignore + } + } + /** * Protect a socket from VPN connections. After protecting, data sent * through this socket will go directly to the underlying network, @@ -260,6 +288,46 @@ public class VpnService extends Service { } } + /** + * Sets the underlying networks used by the VPN for its upstream connections. + * + *

              Used by the system to know the actual networks that carry traffic for apps affected by + * this VPN in order to present this information to the user (e.g., via status bar icons). + * + *

              This method only needs to be called if the VPN has explicitly bound its underlying + * communications channels — such as the socket(s) passed to {@link #protect(int)} — + * to a {@code Network} using APIs such as {@link Network#bindSocket(Socket)} or + * {@link Network#bindSocket(DatagramSocket)}. The VPN should call this method every time + * the set of {@code Network}s it is using changes. + * + *

              {@code networks} is one of the following: + *

                + *
              • a non-empty array: an array of one or more {@link Network}s, in + * decreasing preference order. For example, if this VPN uses both wifi and mobile (cellular) + * networks to carry app traffic, but prefers or uses wifi more than mobile, wifi should appear + * first in the array.
              • + *
              • an empty array: a zero-element array, meaning that the VPN has no + * underlying network connection, and thus, app traffic will not be sent or received.
              • + *
              • null: (default) signifies that the VPN uses whatever is the system's + * default network. I.e., it doesn't use the {@code bindSocket} or {@code bindDatagramSocket} + * APIs mentioned above to send traffic over specific channels.
              • + *
              + * + *

              This call will succeed only if the VPN is currently established. For setting this value + * when the VPN has not yet been established, see {@link Builder#setUnderlyingNetworks}. + * + * @param networks An array of networks the VPN uses to tunnel traffic to/from its servers. + * + * @return {@code true} on success. + */ + public boolean setUnderlyingNetworks(Network[] networks) { + try { + return getService().setUnderlyingNetworksForVpn(networks); + } catch (RemoteException e) { + throw new IllegalStateException(e); + } + } + /** * Return the communication interface to the service. This method returns * {@code null} on {@link Intent}s other than {@link #SERVICE_INTERFACE} @@ -433,7 +501,7 @@ public class VpnService extends Service { } } } - mRoutes.add(new RouteInfo(new LinkAddress(address, prefixLength), null)); + mRoutes.add(new RouteInfo(new IpPrefix(address, prefixLength), null)); mConfig.updateAllowedFamilies(address); return this; } @@ -635,6 +703,20 @@ public class VpnService extends Service { return this; } + /** + * Sets the underlying networks used by the VPN for its upstream connections. + * + * @see VpnService#setUnderlyingNetworks + * + * @param networks An array of networks the VPN uses to tunnel traffic to/from its servers. + * + * @return this {@link Builder} object to facilitate chaining method calls. + */ + public Builder setUnderlyingNetworks(Network[] networks) { + mConfig.underlyingNetworks = networks != null ? networks.clone() : null; + return this; + } + /** * Create a VPN interface using the parameters supplied to this * builder. The interface works on IP packets, and a file descriptor diff --git a/core/java/android/net/http/AndroidHttpClient.java b/core/java/android/net/http/AndroidHttpClient.java index 04f3974f41324157cf17fd1dbc7ff1266f4794a0..a262076662834ecece638c39e9e3d23ba4d1d841 100644 --- a/core/java/android/net/http/AndroidHttpClient.java +++ b/core/java/android/net/http/AndroidHttpClient.java @@ -74,7 +74,13 @@ import java.util.zip.GZIPOutputStream; * To retain cookies, simply add a cookie store to the HttpContext:

              * *
              context.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
              + * + * @deprecated Please use {@link java.net.URLConnection} and friends instead. + * The Apache HTTP client is no longer maintained and may be removed in a future + * release. Please visit this webpage + * for further details. */ +@Deprecated public final class AndroidHttpClient implements HttpClient { // Gzip of data shorter than this probably won't be worthwhile @@ -108,7 +114,13 @@ public final class AndroidHttpClient implements HttpClient { * @param userAgent to report in your HTTP requests * @param context to use for caching SSL sessions (may be null for no caching) * @return AndroidHttpClient for you to use for all your requests. + * + * @deprecated Please use {@link java.net.URLConnection} and friends instead. See + * {@link android.net.SSLCertificateSocketFactory} for SSL cache support. If you'd + * like to set a custom useragent, please use {@link java.net.URLConnection#setRequestProperty(String, String)} + * with {@code field} set to {@code User-Agent}. */ + @Deprecated public static AndroidHttpClient newInstance(String userAgent, Context context) { HttpParams params = new BasicHttpParams(); @@ -148,7 +160,13 @@ public final class AndroidHttpClient implements HttpClient { * Create a new HttpClient with reasonable defaults (which you can update). * @param userAgent to report in your HTTP requests. * @return AndroidHttpClient for you to use for all your requests. + * + * @deprecated Please use {@link java.net.URLConnection} and friends instead. See + * {@link android.net.SSLCertificateSocketFactory} for SSL cache support. If you'd + * like to set a custom useragent, please use {@link java.net.URLConnection#setRequestProperty(String, String)} + * with {@code field} set to {@code User-Agent}. */ + @Deprecated public static AndroidHttpClient newInstance(String userAgent) { return newInstance(userAgent, null /* session cache */); } diff --git a/core/java/android/nfc/BeamShareData.java b/core/java/android/nfc/BeamShareData.java index c30ba14778dad2fc9a86554e63cdb27b5f50b89e..918ec3d5e2c42fc813fb5233cd7f607e2afc0ec9 100644 --- a/core/java/android/nfc/BeamShareData.java +++ b/core/java/android/nfc/BeamShareData.java @@ -3,6 +3,7 @@ package android.nfc; import android.net.Uri; import android.os.Parcel; import android.os.Parcelable; +import android.os.UserHandle; /** * Class to IPC data to be shared over Android Beam. @@ -14,11 +15,13 @@ import android.os.Parcelable; public final class BeamShareData implements Parcelable { public final NdefMessage ndefMessage; public final Uri[] uris; + public final UserHandle userHandle; public final int flags; - public BeamShareData(NdefMessage msg, Uri[] uris, int flags) { + public BeamShareData(NdefMessage msg, Uri[] uris, UserHandle userHandle, int flags) { this.ndefMessage = msg; this.uris = uris; + this.userHandle = userHandle; this.flags = flags; } @@ -35,6 +38,7 @@ public final class BeamShareData implements Parcelable { if (urisLength > 0) { dest.writeTypedArray(uris, 0); } + dest.writeParcelable(userHandle, 0); dest.writeInt(this.flags); } @@ -49,9 +53,10 @@ public final class BeamShareData implements Parcelable { uris = new Uri[numUris]; source.readTypedArray(uris, Uri.CREATOR); } + UserHandle userHandle = source.readParcelable(UserHandle.class.getClassLoader()); int flags = source.readInt(); - return new BeamShareData(msg, uris, flags); + return new BeamShareData(msg, uris, userHandle, flags); } @Override diff --git a/core/java/android/nfc/INfcAdapter.aidl b/core/java/android/nfc/INfcAdapter.aidl index 5b926ad2c194cf35fbb1179e96c488e1ac5d4aef..961a3f41cd5eb7fb19e7708f3b68f7c41fd0558e 100644 --- a/core/java/android/nfc/INfcAdapter.aidl +++ b/core/java/android/nfc/INfcAdapter.aidl @@ -60,4 +60,6 @@ interface INfcAdapter void addNfcUnlockHandler(INfcUnlockHandler unlockHandler, in int[] techList); void removeNfcUnlockHandler(INfcUnlockHandler unlockHandler); + + void verifyNfcPermission(); } diff --git a/core/java/android/nfc/NfcActivityManager.java b/core/java/android/nfc/NfcActivityManager.java index 8643f2ef0802e5372b82b5bc9826ad7f7d375086..d00929505d4388e5bbc5547caac8acf76fd1f265 100644 --- a/core/java/android/nfc/NfcActivityManager.java +++ b/core/java/android/nfc/NfcActivityManager.java @@ -18,12 +18,14 @@ package android.nfc; import android.app.Activity; import android.app.Application; +import android.content.ContentProvider; import android.content.Intent; import android.net.Uri; import android.nfc.NfcAdapter.ReaderCallback; import android.os.Binder; import android.os.Bundle; import android.os.RemoteException; +import android.os.UserHandle; import android.util.Log; import java.util.ArrayList; @@ -252,7 +254,11 @@ public final class NfcActivityManager extends IAppCallback.Stub isResumed = state.resumed; } if (isResumed) { + // requestNfcServiceCallback() verifies permission also requestNfcServiceCallback(); + } else { + // Crash API calls early in case NFC permission is missing + verifyNfcPermission(); } } @@ -266,7 +272,11 @@ public final class NfcActivityManager extends IAppCallback.Stub isResumed = state.resumed; } if (isResumed) { + // requestNfcServiceCallback() verifies permission also requestNfcServiceCallback(); + } else { + // Crash API calls early in case NFC permission is missing + verifyNfcPermission(); } } @@ -279,7 +289,11 @@ public final class NfcActivityManager extends IAppCallback.Stub isResumed = state.resumed; } if (isResumed) { + // requestNfcServiceCallback() verifies permission also requestNfcServiceCallback(); + } else { + // Crash API calls early in case NFC permission is missing + verifyNfcPermission(); } } @@ -293,7 +307,11 @@ public final class NfcActivityManager extends IAppCallback.Stub isResumed = state.resumed; } if (isResumed) { + // requestNfcServiceCallback() verifies permission also requestNfcServiceCallback(); + } else { + // Crash API calls early in case NFC permission is missing + verifyNfcPermission(); } } @@ -306,7 +324,11 @@ public final class NfcActivityManager extends IAppCallback.Stub isResumed = state.resumed; } if (isResumed) { + // requestNfcServiceCallback() verifies permission also requestNfcServiceCallback(); + } else { + // Crash API calls early in case NFC permission is missing + verifyNfcPermission(); } } @@ -322,6 +344,14 @@ public final class NfcActivityManager extends IAppCallback.Stub } } + void verifyNfcPermission() { + try { + NfcAdapter.sService.verifyNfcPermission(); + } catch (RemoteException e) { + mAdapter.attemptDeadServiceRecovery(e); + } + } + /** Callback from NFC service, usually on binder thread */ @Override public BeamShareData createBeamShareData() { @@ -350,19 +380,24 @@ public final class NfcActivityManager extends IAppCallback.Stub if (urisCallback != null) { uris = urisCallback.createBeamUris(mDefaultEvent); if (uris != null) { + ArrayList validUris = new ArrayList(); for (Uri uri : uris) { if (uri == null) { Log.e(TAG, "Uri not allowed to be null."); - return null; + continue; } String scheme = uri.getScheme(); if (scheme == null || (!scheme.equalsIgnoreCase("file") && !scheme.equalsIgnoreCase("content"))) { Log.e(TAG, "Uri needs to have " + "either scheme file or scheme content"); - return null; + continue; } + uri = ContentProvider.maybeAddUserId(uri, UserHandle.myUserId()); + validUris.add(uri); } + + uris = validUris.toArray(new Uri[validUris.size()]); } } if (uris != null && uris.length > 0) { @@ -372,7 +407,7 @@ public final class NfcActivityManager extends IAppCallback.Stub Intent.FLAG_GRANT_READ_URI_PERMISSION); } } - return new BeamShareData(message, uris, flags); + return new BeamShareData(message, uris, UserHandle.CURRENT, flags); } /** Callback from NFC service, usually on binder thread */ diff --git a/core/java/android/os/AsyncTask.java b/core/java/android/os/AsyncTask.java index 4f91d1993305a90a7164164e35c197f252a5b6ad..7785f2bb886c61732efa7a4b14e4e5f22e97c28e 100644 --- a/core/java/android/os/AsyncTask.java +++ b/core/java/android/os/AsyncTask.java @@ -209,9 +209,9 @@ public abstract class AsyncTask { private static final int MESSAGE_POST_RESULT = 0x1; private static final int MESSAGE_POST_PROGRESS = 0x2; - private static final InternalHandler sHandler = new InternalHandler(); - private static volatile Executor sDefaultExecutor = SERIAL_EXECUTOR; + private static InternalHandler sHandler; + private final WorkerRunnable mWorker; private final FutureTask mFuture; @@ -265,9 +265,13 @@ public abstract class AsyncTask { FINISHED, } - /** @hide Used to force static handler to be created. */ - public static void init() { - sHandler.getLooper(); + private static Handler getHandler() { + synchronized (AsyncTask.class) { + if (sHandler == null) { + sHandler = new InternalHandler(); + } + return sHandler; + } } /** @hide */ @@ -315,7 +319,7 @@ public abstract class AsyncTask { private Result postResult(Result result) { @SuppressWarnings("unchecked") - Message message = sHandler.obtainMessage(MESSAGE_POST_RESULT, + Message message = getHandler().obtainMessage(MESSAGE_POST_RESULT, new AsyncTaskResult(this, result)); message.sendToTarget(); return result; @@ -620,7 +624,7 @@ public abstract class AsyncTask { */ protected final void publishProgress(Progress... values) { if (!isCancelled()) { - sHandler.obtainMessage(MESSAGE_POST_PROGRESS, + getHandler().obtainMessage(MESSAGE_POST_PROGRESS, new AsyncTaskResult(this, values)).sendToTarget(); } } @@ -635,10 +639,14 @@ public abstract class AsyncTask { } private static class InternalHandler extends Handler { + public InternalHandler() { + super(Looper.getMainLooper()); + } + @SuppressWarnings({"unchecked", "RawUseOfParameterizedType"}) @Override public void handleMessage(Message msg) { - AsyncTaskResult result = (AsyncTaskResult) msg.obj; + AsyncTaskResult result = (AsyncTaskResult) msg.obj; switch (msg.what) { case MESSAGE_POST_RESULT: // There is only one result diff --git a/core/java/android/os/BaseBundle.java b/core/java/android/os/BaseBundle.java index 9589aac8e4431d3b5b521402ccfa6aee22af24fe..1b02141b988f98be0d2510e03e780bd002fc4955 100644 --- a/core/java/android/os/BaseBundle.java +++ b/core/java/android/os/BaseBundle.java @@ -329,7 +329,7 @@ public class BaseBundle { * @param key a String, or null * @param value a Boolean, or null */ - void putBoolean(String key, boolean value) { + public void putBoolean(String key, boolean value) { unparcel(); mMap.put(key, value); } @@ -497,7 +497,7 @@ public class BaseBundle { * @param key a String, or null * @param value a boolean array object, or null */ - void putBooleanArray(String key, boolean[] value) { + public void putBooleanArray(String key, boolean[] value) { unparcel(); mMap.put(key, value); } @@ -617,7 +617,7 @@ public class BaseBundle { * @param key a String * @return a boolean value */ - boolean getBoolean(String key) { + public boolean getBoolean(String key) { unparcel(); if (DEBUG) Log.d(TAG, "Getting boolean in " + Integer.toHexString(System.identityHashCode(this))); @@ -654,7 +654,7 @@ public class BaseBundle { * @param defaultValue Value to return if key does not exist * @return a boolean value */ - boolean getBoolean(String key, boolean defaultValue) { + public boolean getBoolean(String key, boolean defaultValue) { unparcel(); Object o = mMap.get(key); if (o == null) { @@ -1072,7 +1072,7 @@ public class BaseBundle { * @param key a String, or null * @return a boolean[] value, or null */ - boolean[] getBooleanArray(String key) { + public boolean[] getBooleanArray(String key) { unparcel(); Object o = mMap.get(key); if (o == null) { diff --git a/core/java/android/os/BatteryStats.java b/core/java/android/os/BatteryStats.java index 461469c6be6184547cd13e1edb171e84f81046f3..cd45cfb326ac3885b690b426564a410d6659f8b8 100644 --- a/core/java/android/os/BatteryStats.java +++ b/core/java/android/os/BatteryStats.java @@ -90,11 +90,6 @@ public abstract class BatteryStats implements Parcelable { */ public static final int WIFI_MULTICAST_ENABLED = 7; - /** - * A constant indicating an audio turn on timer - */ - public static final int AUDIO_TURNED_ON = 7; - /** * A constant indicating a video turn on timer */ @@ -130,6 +125,11 @@ public abstract class BatteryStats implements Parcelable { */ public static final int JOB = 14; + /** + * A constant indicating an audio turn on timer + */ + public static final int AUDIO_TURNED_ON = 15; + /** * Include all of the data in the stats, including previously saved data. */ @@ -458,6 +458,20 @@ public abstract class BatteryStats implements Parcelable { */ public abstract int getStarts(int which); + /** + * Returns the number of times the process has crashed. + * + * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT. + */ + public abstract int getNumCrashes(int which); + + /** + * Returns the number of times the process has ANRed. + * + * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT. + */ + public abstract int getNumAnrs(int which); + /** * Returns the cpu time spent in microseconds while the process was in the foreground. * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT. @@ -590,6 +604,7 @@ public abstract class BatteryStats implements Parcelable { public static final byte CMD_CURRENT_TIME = 5; public static final byte CMD_OVERFLOW = 6; public static final byte CMD_RESET = 7; + public static final byte CMD_SHUTDOWN = 8; public byte cmd = CMD_NULL; @@ -694,8 +709,10 @@ public abstract class BatteryStats implements Parcelable { public static final int EVENT_USER_RUNNING = 0x0007; // Events for foreground user. public static final int EVENT_USER_FOREGROUND = 0x0008; + // Events for connectivity changed. + public static final int EVENT_CONNECTIVITY_CHANGED = 0x0009; // Number of event types. - public static final int EVENT_COUNT = 0x0009; + public static final int EVENT_COUNT = 0x000a; // Mask to extract out only the type part of the event. public static final int EVENT_TYPE_MASK = ~(EVENT_FLAG_START|EVENT_FLAG_FINISH); @@ -1106,6 +1123,13 @@ public abstract class BatteryStats implements Parcelable { */ public abstract int getLowPowerModeEnabledCount(int which); + /** + * Returns the number of times that connectivity state changed. + * + * {@hide} + */ + public abstract int getNumConnectivityChange(int which); + /** * Returns the time in microseconds that the phone has been on while the device was * running on battery. @@ -1306,11 +1330,11 @@ public abstract class BatteryStats implements Parcelable { }; public static final String[] HISTORY_EVENT_NAMES = new String[] { - "null", "proc", "fg", "top", "sync", "wake_lock_in", "job", "user", "userfg" + "null", "proc", "fg", "top", "sync", "wake_lock_in", "job", "user", "userfg", "conn" }; public static final String[] HISTORY_EVENT_CHECKIN_NAMES = new String[] { - "Enl", "Epr", "Efg", "Etp", "Esy", "Ewl", "Ejb", "Eur", "Euf" + "Enl", "Epr", "Efg", "Etp", "Esy", "Ewl", "Ejb", "Eur", "Euf", "Ecn" }; /** @@ -1871,6 +1895,7 @@ public abstract class BatteryStats implements Parcelable { final long screenOnTime = getScreenOnTime(rawRealtime, which); final long interactiveTime = getInteractiveTime(rawRealtime, which); final long lowPowerModeEnabledTime = getLowPowerModeEnabledTime(rawRealtime, which); + final int connChanges = getNumConnectivityChange(which); final long phoneOnTime = getPhoneOnTime(rawRealtime, which); final long wifiOnTime = getWifiOnTime(rawRealtime, which); final long wifiRunningTime = getGlobalWifiRunningTime(rawRealtime, which); @@ -1941,7 +1966,7 @@ public abstract class BatteryStats implements Parcelable { fullWakeLockTimeTotal / 1000, partialWakeLockTimeTotal / 1000, 0 /*legacy input event count*/, getMobileRadioActiveTime(rawRealtime, which) / 1000, getMobileRadioActiveAdjustedTime(which) / 1000, interactiveTime / 1000, - lowPowerModeEnabledTime / 1000); + lowPowerModeEnabledTime / 1000, connChanges); // Dump screen brightness stats Object[] args = new Object[NUM_SCREEN_BRIGHTNESS_BINS]; @@ -2271,12 +2296,14 @@ public abstract class BatteryStats implements Parcelable { final long userMillis = ps.getUserTime(which) * 10; final long systemMillis = ps.getSystemTime(which) * 10; final long foregroundMillis = ps.getForegroundTime(which) * 10; - final long starts = ps.getStarts(which); + final int starts = ps.getStarts(which); + final int numCrashes = ps.getNumCrashes(which); + final int numAnrs = ps.getNumAnrs(which); if (userMillis != 0 || systemMillis != 0 || foregroundMillis != 0 - || starts != 0) { + || starts != 0 || numAnrs != 0 || numCrashes != 0) { dumpLine(pw, uid, category, PROCESS_DATA, ent.getKey(), userMillis, - systemMillis, foregroundMillis, starts); + systemMillis, foregroundMillis, starts, numAnrs, numCrashes); } } } @@ -2457,6 +2484,11 @@ public abstract class BatteryStats implements Parcelable { sb.append("("); sb.append(formatRatioLocked(phoneOnTime, whichBatteryRealtime)); sb.append(") "); sb.append(getPhoneOnCount(which)); } + int connChanges = getNumConnectivityChange(which); + if (connChanges != 0) { + pw.print(prefix); + pw.print(" Connectivity changes: "); pw.println(connChanges); + } // Calculate wakelock times across all uids. long fullWakeLockTimeTotalMicros = 0; @@ -3273,11 +3305,13 @@ public abstract class BatteryStats implements Parcelable { systemTime = ps.getSystemTime(which); foregroundTime = ps.getForegroundTime(which); starts = ps.getStarts(which); + final int numCrashes = ps.getNumCrashes(which); + final int numAnrs = ps.getNumAnrs(which); numExcessive = which == STATS_SINCE_CHARGED ? ps.countExcessivePowers() : 0; if (userTime != 0 || systemTime != 0 || foregroundTime != 0 || starts != 0 - || numExcessive != 0) { + || numExcessive != 0 || numCrashes != 0 || numAnrs != 0) { sb.setLength(0); sb.append(prefix); sb.append(" Proc "); sb.append(ent.getKey()); sb.append(":\n"); @@ -3285,9 +3319,26 @@ public abstract class BatteryStats implements Parcelable { formatTime(sb, userTime); sb.append("usr + "); formatTime(sb, systemTime); sb.append("krn ; "); formatTime(sb, foregroundTime); sb.append("fg"); - if (starts != 0) { + if (starts != 0 || numCrashes != 0 || numAnrs != 0) { sb.append("\n"); sb.append(prefix); sb.append(" "); - sb.append(starts); sb.append(" proc starts"); + boolean hasOne = false; + if (starts != 0) { + hasOne = true; + sb.append(starts); sb.append(" starts"); + } + if (numCrashes != 0) { + if (hasOne) { + sb.append(", "); + } + hasOne = true; + sb.append(numCrashes); sb.append(" crashes"); + } + if (numAnrs != 0) { + if (hasOne) { + sb.append(", "); + } + sb.append(numAnrs); sb.append(" anrs"); + } } pw.println(sb.toString()); for (int e=0; e> STEP_LEVEL_INITIAL_MODE_SHIFT; + long modMode = (steps[i] & STEP_LEVEL_MODIFIED_MODE_MASK) + >> STEP_LEVEL_MODIFIED_MODE_SHIFT; + // If the modes of interest didn't change during this step period... + if ((modMode&modesOfInterest) == 0) { + // And the mode values during this period match those we are measuring... + if ((initMode&modesOfInterest) == modeValues) { + // Then this can be used to estimate the total time! + numOfInterest++; + total += steps[i] & STEP_LEVEL_TIME_MASK; + } + } + } + if (numOfInterest <= 0) { + return false; + } + + // The estimated time is the average time we spend in each level, multipled + // by 100 -- the total number of battery levels + long estimatedTime = (total / numOfInterest) * 100; + + pw.print(label); + StringBuilder sb = new StringBuilder(64); + formatTimeMs(sb, estimatedTime); + pw.print(sb); + pw.println(); + + return true; + } + private static boolean dumpDurationSteps(PrintWriter pw, String header, long[] steps, int count, boolean checkin) { if (count <= 0) { @@ -3760,7 +3855,8 @@ public abstract class BatteryStats implements Parcelable { if (histStart >= 0 && !printed) { if (rec.cmd == HistoryItem.CMD_CURRENT_TIME || rec.cmd == HistoryItem.CMD_RESET - || rec.cmd == HistoryItem.CMD_START) { + || rec.cmd == HistoryItem.CMD_START + || rec.cmd == HistoryItem.CMD_SHUTDOWN) { printed = true; hprinter.printNextItem(pw, rec, baseTime, checkin, (flags&DUMP_VERBOSE) != 0); @@ -3923,6 +4019,38 @@ public abstract class BatteryStats implements Parcelable { TimeUtils.formatDuration(timeRemaining / 1000, pw); pw.println(); } + dumpTimeEstimate(pw, " Estimated screen off time: ", + getDischargeStepDurationsArray(), getNumDischargeStepDurations(), + STEP_LEVEL_MODE_SCREEN_STATE|STEP_LEVEL_MODE_POWER_SAVE, + (Display.STATE_OFF-1)); + dumpTimeEstimate(pw, " Estimated screen off power save time: ", + getDischargeStepDurationsArray(), getNumDischargeStepDurations(), + STEP_LEVEL_MODE_SCREEN_STATE|STEP_LEVEL_MODE_POWER_SAVE, + (Display.STATE_OFF-1)|STEP_LEVEL_MODE_POWER_SAVE); + dumpTimeEstimate(pw, " Estimated screen on time: ", + getDischargeStepDurationsArray(), getNumDischargeStepDurations(), + STEP_LEVEL_MODE_SCREEN_STATE|STEP_LEVEL_MODE_POWER_SAVE, + (Display.STATE_ON-1)); + dumpTimeEstimate(pw, " Estimated screen on power save time: ", + getDischargeStepDurationsArray(), getNumDischargeStepDurations(), + STEP_LEVEL_MODE_SCREEN_STATE|STEP_LEVEL_MODE_POWER_SAVE, + (Display.STATE_ON-1)|STEP_LEVEL_MODE_POWER_SAVE); + dumpTimeEstimate(pw, " Estimated screen doze time: ", + getDischargeStepDurationsArray(), getNumDischargeStepDurations(), + STEP_LEVEL_MODE_SCREEN_STATE|STEP_LEVEL_MODE_POWER_SAVE, + (Display.STATE_DOZE-1)); + dumpTimeEstimate(pw, " Estimated screen doze power save time: ", + getDischargeStepDurationsArray(), getNumDischargeStepDurations(), + STEP_LEVEL_MODE_SCREEN_STATE|STEP_LEVEL_MODE_POWER_SAVE, + (Display.STATE_DOZE-1)|STEP_LEVEL_MODE_POWER_SAVE); + dumpTimeEstimate(pw, " Estimated screen doze suspend time: ", + getDischargeStepDurationsArray(), getNumDischargeStepDurations(), + STEP_LEVEL_MODE_SCREEN_STATE|STEP_LEVEL_MODE_POWER_SAVE, + (Display.STATE_DOZE_SUSPEND-1)); + dumpTimeEstimate(pw, " Estimated screen doze suspend power save time: ", + getDischargeStepDurationsArray(), getNumDischargeStepDurations(), + STEP_LEVEL_MODE_SCREEN_STATE|STEP_LEVEL_MODE_POWER_SAVE, + (Display.STATE_DOZE_SUSPEND-1)|STEP_LEVEL_MODE_POWER_SAVE); pw.println(); } if (dumpDurationSteps(pw, "Charge step durations:", getChargeStepDurationsArray(), @@ -3955,7 +4083,7 @@ public abstract class BatteryStats implements Parcelable { prepareForDumpLocked(); dumpLine(pw, 0 /* uid */, "i" /* category */, VERSION_DATA, - "11", getParcelVersion(), getStartPlatformVersion(), getEndPlatformVersion()); + "12", getParcelVersion(), getStartPlatformVersion(), getEndPlatformVersion()); long now = getHistoryBaseTime() + SystemClock.elapsedRealtime(); diff --git a/core/java/android/os/Build.java b/core/java/android/os/Build.java index d1ad313bdf7eb7a408d715a13119b42621d26d26..b2096907226bd7c67cd4f539ef22f9798e2c879b 100644 --- a/core/java/android/os/Build.java +++ b/core/java/android/os/Build.java @@ -20,8 +20,11 @@ import android.text.TextUtils; import android.util.Slog; import com.android.internal.telephony.TelephonyProperties; + import dalvik.system.VMRuntime; +import java.util.Objects; + /** * Information about the current build, extracted from system properties. */ @@ -589,6 +592,11 @@ public class Build { *
            */ public static final int LOLLIPOP = 21; + + /** + * Lollipop with an extra sugar coating on the outside! + */ + public static final int LOLLIPOP_MR1 = 22; } /** The type of build, like "user" or "eng". */ @@ -636,6 +644,32 @@ public class Build { } } + /** + * Check that device fingerprint is defined and that it matches across + * various partitions. + * + * @hide + */ + public static boolean isFingerprintConsistent() { + final String system = SystemProperties.get("ro.build.fingerprint"); + final String vendor = SystemProperties.get("ro.vendor.build.fingerprint"); + + if (TextUtils.isEmpty(system)) { + Slog.e(TAG, "Required ro.build.fingerprint is empty!"); + return false; + } + + if (!TextUtils.isEmpty(vendor)) { + if (!Objects.equals(system, vendor)) { + Slog.e(TAG, "Mismatched fingerprints; system reported " + system + + " but vendor reported " + vendor); + return false; + } + } + + return true; + } + // The following properties only make sense for internal engineering builds. public static final long TIME = getLong("ro.build.date.utc") * 1000; public static final String USER = getString("ro.build.user"); diff --git a/core/java/android/os/Bundle.java b/core/java/android/os/Bundle.java index a9aa570dd5fdca4549736455e5f8c44824677bbc..c5c537263bbd078ad61ae0d986914c40a2a254b1 100644 --- a/core/java/android/os/Bundle.java +++ b/core/java/android/os/Bundle.java @@ -251,18 +251,6 @@ public final class Bundle extends BaseBundle implements Cloneable, Parcelable { return mHasFds; } - /** - * Inserts a Boolean value into the mapping of this Bundle, replacing - * any existing value for the given key. Either key or value may be null. - * - * @param key a String, or null - * @param value a Boolean, or null - */ - @Override - public void putBoolean(String key, boolean value) { - super.putBoolean(key, value); - } - /** * Inserts a byte value into the mapping of this Bundle, replacing * any existing value for the given key. @@ -459,18 +447,6 @@ public final class Bundle extends BaseBundle implements Cloneable, Parcelable { super.putSerializable(key, value); } - /** - * Inserts a boolean array value into the mapping of this Bundle, replacing - * any existing value for the given key. Either key or value may be null. - * - * @param key a String, or null - * @param value a boolean array object, or null - */ - @Override - public void putBooleanArray(String key, boolean[] value) { - super.putBooleanArray(key, value); - } - /** * Inserts a byte array value into the mapping of this Bundle, replacing * any existing value for the given key. Either key or value may be null. @@ -578,31 +554,6 @@ public final class Bundle extends BaseBundle implements Cloneable, Parcelable { mMap.put(key, value); } - /** - * Returns the value associated with the given key, or false if - * no mapping of the desired type exists for the given key. - * - * @param key a String - * @return a boolean value - */ - @Override - public boolean getBoolean(String key) { - return super.getBoolean(key); - } - - /** - * Returns the value associated with the given key, or defaultValue if - * no mapping of the desired type exists for the given key. - * - * @param key a String - * @param defaultValue Value to return if key does not exist - * @return a boolean value - */ - @Override - public boolean getBoolean(String key, boolean defaultValue) { - return super.getBoolean(key, defaultValue); - } - /** * Returns the value associated with the given key, or (byte) 0 if * no mapping of the desired type exists for the given key. @@ -933,19 +884,6 @@ public final class Bundle extends BaseBundle implements Cloneable, Parcelable { return super.getCharSequenceArrayList(key); } - /** - * Returns the value associated with the given key, or null if - * no mapping of the desired type exists for the given key or a null - * value is explicitly associated with the key. - * - * @param key a String, or null - * @return a boolean[] value, or null - */ - @Override - public boolean[] getBooleanArray(String key) { - return super.getBooleanArray(key); - } - /** * Returns the value associated with the given key, or null if * no mapping of the desired type exists for the given key or a null diff --git a/core/java/android/os/ConditionVariable.java b/core/java/android/os/ConditionVariable.java index 07b221c81dba3e01e197e1273b5839aebf1c4995..1e820f94568973283a32ee10af434e0e95a94214 100644 --- a/core/java/android/os/ConditionVariable.java +++ b/core/java/android/os/ConditionVariable.java @@ -109,7 +109,7 @@ public class ConditionVariable *

            * If the condition is already opened, return immediately. * - * @param timeout the minimum time to wait in milliseconds. + * @param timeout the maximum time to wait in milliseconds. * * @return true if the condition was opened, false if the call returns * because of the timeout. diff --git a/core/java/android/os/Debug.java b/core/java/android/os/Debug.java index 9377def545e67f606a4527483c63daafa2c132d9..2d92c7b079bf7b0a137f292b88a26286ed7926e5 100644 --- a/core/java/android/os/Debug.java +++ b/core/java/android/os/Debug.java @@ -165,7 +165,7 @@ public final class Debug public int otherSwappedOut; /** @hide */ - public static final int NUM_OTHER_STATS = 16; + public static final int NUM_OTHER_STATS = 17; /** @hide */ public static final int NUM_DVK_STATS = 8; @@ -296,26 +296,27 @@ public final class Debug case 1: return "Stack"; case 2: return "Cursor"; case 3: return "Ashmem"; - case 4: return "Other dev"; - case 5: return ".so mmap"; - case 6: return ".jar mmap"; - case 7: return ".apk mmap"; - case 8: return ".ttf mmap"; - case 9: return ".dex mmap"; - case 10: return "code mmap"; - case 11: return "image mmap"; - case 12: return "Other mmap"; - case 13: return "Graphics"; - case 14: return "GL"; - case 15: return "Memtrack"; - case 16: return ".Heap"; - case 17: return ".LOS"; - case 18: return ".LinearAlloc"; - case 19: return ".GC"; - case 20: return ".JITCache"; - case 21: return ".Zygote"; - case 22: return ".NonMoving"; - case 23: return ".IndirectRef"; + case 4: return "Gfx dev"; + case 5: return "Other dev"; + case 6: return ".so mmap"; + case 7: return ".jar mmap"; + case 8: return ".apk mmap"; + case 9: return ".ttf mmap"; + case 10: return ".dex mmap"; + case 11: return ".oat mmap"; + case 12: return ".art mmap"; + case 13: return "Other mmap"; + case 14: return "EGL mtrack"; + case 15: return "GL mtrack"; + case 16: return "Other mtrack"; + case 17: return ".Heap"; + case 18: return ".LOS"; + case 19: return ".LinearAlloc"; + case 20: return ".GC"; + case 21: return ".JITCache"; + case 22: return ".Zygote"; + case 23: return ".NonMoving"; + case 24: return ".IndirectRef"; default: return "????"; } } @@ -1073,9 +1074,10 @@ href="{@docRoot}guide/developing/tools/traceview.html">Traceview: A Graphical Lo /** * Retrieves the PSS memory used by the process as given by the * smaps. Optionally supply a long array of 1 entry to also - * receive the uss of the process. @hide + * receive the uss of the process, and another array to also + * retrieve the separate memtrack size. @hide */ - public static native long getPss(int pid, long[] outUss); + public static native long getPss(int pid, long[] outUss, long[] outMemtrack); /** @hide */ public static final int MEMINFO_TOTAL = 0; @@ -1096,7 +1098,15 @@ href="{@docRoot}guide/developing/tools/traceview.html">Traceview: A Graphical Lo /** @hide */ public static final int MEMINFO_ZRAM_TOTAL = 8; /** @hide */ - public static final int MEMINFO_COUNT = 9; + public static final int MEMINFO_MAPPED = 9; + /** @hide */ + public static final int MEMINFO_VM_ALLOC_USED = 10; + /** @hide */ + public static final int MEMINFO_PAGE_TABLES = 11; + /** @hide */ + public static final int MEMINFO_KERNEL_STACK = 12; + /** @hide */ + public static final int MEMINFO_COUNT = 13; /** * Retrieves /proc/meminfo. outSizes is filled with fields diff --git a/core/java/android/os/FileUtils.java b/core/java/android/os/FileUtils.java index fe47f5b84d3f00a6218d301bd9e31e9ece15d47d..0a724a1d881fe32f0e15c2f6fb8c4443948b848c 100644 --- a/core/java/android/os/FileUtils.java +++ b/core/java/android/os/FileUtils.java @@ -17,9 +17,8 @@ package android.os; import android.system.ErrnoException; -import android.text.TextUtils; import android.system.Os; -import android.system.OsConstants; +import android.text.TextUtils; import android.util.Log; import android.util.Slog; @@ -403,20 +402,89 @@ public class FileUtils { return success; } + private static boolean isValidExtFilenameChar(char c) { + switch (c) { + case '\0': + case '/': + return false; + default: + return true; + } + } + /** - * Assert that given filename is valid on ext4. + * Check if given filename is valid for an ext4 filesystem. */ public static boolean isValidExtFilename(String name) { + return (name != null) && name.equals(buildValidExtFilename(name)); + } + + /** + * Mutate the given filename to make it valid for an ext4 filesystem, + * replacing any invalid characters with "_". + */ + public static String buildValidExtFilename(String name) { if (TextUtils.isEmpty(name) || ".".equals(name) || "..".equals(name)) { - return false; + return "(invalid)"; } + final StringBuilder res = new StringBuilder(name.length()); for (int i = 0; i < name.length(); i++) { final char c = name.charAt(i); - if (c == '\0' || c == '/') { + if (isValidExtFilenameChar(c)) { + res.append(c); + } else { + res.append('_'); + } + } + return res.toString(); + } + + private static boolean isValidFatFilenameChar(char c) { + if ((0x00 <= c && c <= 0x1f)) { + return false; + } + switch (c) { + case '"': + case '*': + case '/': + case ':': + case '<': + case '>': + case '?': + case '\\': + case '|': + case 0x7F: return false; + default: + return true; + } + } + + /** + * Check if given filename is valid for a FAT filesystem. + */ + public static boolean isValidFatFilename(String name) { + return (name != null) && name.equals(buildValidFatFilename(name)); + } + + /** + * Mutate the given filename to make it valid for a FAT filesystem, + * replacing any invalid characters with "_". + */ + public static String buildValidFatFilename(String name) { + if (TextUtils.isEmpty(name) || ".".equals(name) || "..".equals(name)) { + return "(invalid)"; + } + final StringBuilder res = new StringBuilder(name.length()); + for (int i = 0; i < name.length(); i++) { + final char c = name.charAt(i); + if (isValidFatFilenameChar(c)) { + res.append(c); + } else { + res.append('_'); } } - return true; + return res.toString(); } public static String rewriteAfterRename(File beforeDir, File afterDir, String path) { diff --git a/core/java/android/os/Handler.java b/core/java/android/os/Handler.java index 52db0609854ee115eec19c53350136f061c5c541..878b7a0e8e10e7f33fddae03c327227404d22c1e 100644 --- a/core/java/android/os/Handler.java +++ b/core/java/android/os/Handler.java @@ -156,7 +156,7 @@ public class Handler { * one that is strictly asynchronous. * * Asynchronous messages represent interrupts or events that do not require global ordering - * with represent to synchronous messages. Asynchronous messages are not subject to + * with respect to synchronous messages. Asynchronous messages are not subject to * the synchronization barriers introduced by {@link MessageQueue#enqueueSyncBarrier(long)}. * * @param async If true, the handler calls {@link Message#setAsynchronous(boolean)} for @@ -176,7 +176,7 @@ public class Handler { * one that is strictly asynchronous. * * Asynchronous messages represent interrupts or events that do not require global ordering - * with represent to synchronous messages. Asynchronous messages are not subject to + * with respect to synchronous messages. Asynchronous messages are not subject to * the synchronization barriers introduced by {@link MessageQueue#enqueueSyncBarrier(long)}. * * @param callback The callback interface in which to handle messages, or null. @@ -214,7 +214,7 @@ public class Handler { * one that is strictly asynchronous. * * Asynchronous messages represent interrupts or events that do not require global ordering - * with represent to synchronous messages. Asynchronous messages are not subject to + * with respect to synchronous messages. Asynchronous messages are not subject to * the synchronization barriers introduced by {@link MessageQueue#enqueueSyncBarrier(long)}. * * @param looper The looper, must not be null. diff --git a/core/java/android/os/INetworkManagementService.aidl b/core/java/android/os/INetworkManagementService.aidl index 07649e7bdb5daac96ab692dd956356175ebc440c..f0660eb7825a4bdb646dd47a440e3c663f840054 100644 --- a/core/java/android/os/INetworkManagementService.aidl +++ b/core/java/android/os/INetworkManagementService.aidl @@ -91,6 +91,11 @@ interface INetworkManagementService */ void enableIpv6(String iface); + /** + * Enables or enables IPv6 ND offload. + */ + void setInterfaceIpv6NdOffload(String iface, boolean enable); + /** * Retrieves the network routes currently configured on the specified * interface @@ -338,19 +343,19 @@ interface INetworkManagementService void removeVpnUidRanges(int netId, in UidRange[] ranges); /** - * Start the clatd (464xlat) service + * Start the clatd (464xlat) service on the given interface. */ void startClatd(String interfaceName); /** - * Stop the clatd (464xlat) service + * Stop the clatd (464xlat) service on the given interface. */ - void stopClatd(); + void stopClatd(String interfaceName); /** - * Determine whether the clatd (464xlat) service has been started + * Determine whether the clatd (464xlat) service has been started on the given interface. */ - boolean isClatdStarted(); + boolean isClatdStarted(String interfaceName); /** * Start listening for mobile activity state changes. diff --git a/core/java/android/os/IPowerManager.aidl b/core/java/android/os/IPowerManager.aidl index 182dbee0a85c67fbcc7b84e414794fb46a242f6e..16dac7d5ff2748e2fc9e2fe273718e3090e8649c 100644 --- a/core/java/android/os/IPowerManager.aidl +++ b/core/java/android/os/IPowerManager.aidl @@ -49,7 +49,7 @@ interface IPowerManager void crash(String message); void setStayOnSetting(int val); - void setMaximumScreenOffTimeoutFromDeviceAdmin(int timeMs); + void boostScreenBrightness(long time); // temporarily overrides the screen brightness settings to allow the user to // see the effect of a settings change without applying it immediately diff --git a/core/java/android/os/Message.java b/core/java/android/os/Message.java index 6a0bddc5ee1be33e82e475827a1f228782843fcc..8c758470c83a252fcb3123b3b7d1646216cb0767 100644 --- a/core/java/android/os/Message.java +++ b/core/java/android/os/Message.java @@ -417,38 +417,42 @@ public final class Message implements Parcelable { } /** - * Returns true if the message is asynchronous. - * - * Asynchronous messages represent interrupts or events that do not require global ordering - * with represent to synchronous messages. Asynchronous messages are not subject to - * the synchronization barriers introduced by {@link MessageQueue#enqueueSyncBarrier(long)}. + * Returns true if the message is asynchronous, meaning that it is not + * subject to {@link Looper} synchronization barriers. * * @return True if the message is asynchronous. * * @see #setAsynchronous(boolean) - * @see MessageQueue#enqueueSyncBarrier(long) - * @see MessageQueue#removeSyncBarrier(int) - * - * @hide */ public boolean isAsynchronous() { return (flags & FLAG_ASYNCHRONOUS) != 0; } /** - * Sets whether the message is asynchronous. - * - * Asynchronous messages represent interrupts or events that do not require global ordering - * with represent to synchronous messages. Asynchronous messages are not subject to - * the synchronization barriers introduced by {@link MessageQueue#enqueueSyncBarrier(long)}. + * Sets whether the message is asynchronous, meaning that it is not + * subject to {@link Looper} synchronization barriers. + *

            + * Certain operations, such as view invalidation, may introduce synchronization + * barriers into the {@link Looper}'s message queue to prevent subsequent messages + * from being delivered until some condition is met. In the case of view invalidation, + * messages which are posted after a call to {@link android.view.View#invalidate} + * are suspended by means of a synchronization barrier until the next frame is + * ready to be drawn. The synchronization barrier ensures that the invalidation + * request is completely handled before resuming. + *

            + * Asynchronous messages are exempt from synchronization barriers. They typically + * represent interrupts, input events, and other signals that must be handled independently + * even while other work has been suspended. + *

            + * Note that asynchronous messages may be delivered out of order with respect to + * synchronous messages although they are always delivered in order among themselves. + * If the relative order of these messages matters then they probably should not be + * asynchronous in the first place. Use with caution. + *

            * * @param async True if the message is asynchronous. * * @see #isAsynchronous() - * @see MessageQueue#enqueueSyncBarrier(long) - * @see MessageQueue#removeSyncBarrier(int) - * - * @hide */ public void setAsynchronous(boolean async) { if (async) { diff --git a/core/java/android/os/Parcel.java b/core/java/android/os/Parcel.java index 5230128fabbdb94be4d3915e89f51f0ab3152db6..3d5215b6f0368f0da790a6c02b3004ba1117ec3b 100644 --- a/core/java/android/os/Parcel.java +++ b/core/java/android/os/Parcel.java @@ -276,7 +276,7 @@ public final class Parcel { private static native byte[] nativeMarshall(long nativePtr); private static native void nativeUnmarshall( - long nativePtr, byte[] data, int offest, int length); + long nativePtr, byte[] data, int offset, int length); private static native void nativeAppendFrom( long thisNativePtr, long otherNativePtr, int offset, int length); private static native boolean nativeHasFileDescriptors(long nativePtr); @@ -340,6 +340,12 @@ public final class Parcel { } } + /** @hide */ + public static native long getGlobalAllocSize(); + + /** @hide */ + public static native long getGlobalAllocCount(); + /** * Returns the total amount of data contained in the parcel. */ @@ -432,8 +438,8 @@ public final class Parcel { /** * Set the bytes in data to be the raw bytes of this Parcel. */ - public final void unmarshall(byte[] data, int offest, int length) { - nativeUnmarshall(mNativePtr, data, offest, length); + public final void unmarshall(byte[] data, int offset, int length) { + nativeUnmarshall(mNativePtr, data, offset, length); } public final void appendFrom(Parcel parcel, int offset, int length) { diff --git a/core/java/android/os/PersistableBundle.java b/core/java/android/os/PersistableBundle.java index c01f6885df1a087d96e34a24ce413c7477084391..3a44428df55d32a17d427397524069530a9fbb66 100644 --- a/core/java/android/os/PersistableBundle.java +++ b/core/java/android/os/PersistableBundle.java @@ -96,7 +96,8 @@ public final class PersistableBundle extends BaseBundle implements Cloneable, Pa !(value instanceof Double) && !(value instanceof String) && !(value instanceof int[]) && !(value instanceof long[]) && !(value instanceof double[]) && !(value instanceof String[]) && - !(value instanceof PersistableBundle) && (value != null)) { + !(value instanceof PersistableBundle) && (value != null) && + !(value instanceof Boolean) && !(value instanceof boolean[])) { throw new IllegalArgumentException("Bad value in PersistableBundle key=" + key + " value=" + value); } diff --git a/core/java/android/os/PowerManager.java b/core/java/android/os/PowerManager.java index 3b6ce53fd62002a8814bba360ea185c93a4e9917..d52dd3006a36600da6a825f7234a612a06e52669 100644 --- a/core/java/android/os/PowerManager.java +++ b/core/java/android/os/PowerManager.java @@ -668,6 +668,28 @@ public final class PowerManager { } } + /** + * Boosts the brightness of the screen to maximum for a predetermined + * period of time. This is used to make the screen more readable in bright + * daylight for a short duration. + *

            + * Requires the {@link android.Manifest.permission#DEVICE_POWER} permission. + *

            + * + * @param time The time when the request to boost was issued, in the + * {@link SystemClock#uptimeMillis()} time base. This timestamp is used to correctly + * order the boost request with other power management functions. It should be set + * to the timestamp of the input event that caused the request to boost. + * + * @hide Requires signature permission. + */ + public void boostScreenBrightness(long time) { + try { + mService.boostScreenBrightness(time); + } catch (RemoteException e) { + } + } + /** * Sets the brightness of the backlights (screen, keyboard, button). *

            @@ -812,6 +834,21 @@ public final class PowerManager { } } + /** + * Turn off the device. + * + * @param confirm If true, shows a shutdown confirmation dialog. + * @param wait If true, this call waits for the shutdown to complete and does not return. + * + * @hide + */ + public void shutdown(boolean confirm, boolean wait) { + try { + mService.shutdown(confirm, wait); + } catch (RemoteException e) { + } + } + /** * Intent that is broadcast when the state of {@link #isPowerSaveMode()} changes. * This broadcast is only sent to registered receivers. diff --git a/core/java/android/os/PowerManagerInternal.java b/core/java/android/os/PowerManagerInternal.java index 14f4a83e29ec3187cc649cd050ce4c71ebadc31c..6f3176874cabaf697799f1fc55a32e4bfcc9385f 100644 --- a/core/java/android/os/PowerManagerInternal.java +++ b/core/java/android/os/PowerManagerInternal.java @@ -24,6 +24,58 @@ import android.view.Display; * @hide Only for use within the system server. */ public abstract class PowerManagerInternal { + /** + * Wakefulness: The device is asleep. It can only be awoken by a call to wakeUp(). + * The screen should be off or in the process of being turned off by the display controller. + * The device typically passes through the dozing state first. + */ + public static final int WAKEFULNESS_ASLEEP = 0; + + /** + * Wakefulness: The device is fully awake. It can be put to sleep by a call to goToSleep(). + * When the user activity timeout expires, the device may start dreaming or go to sleep. + */ + public static final int WAKEFULNESS_AWAKE = 1; + + /** + * Wakefulness: The device is dreaming. It can be awoken by a call to wakeUp(), + * which ends the dream. The device goes to sleep when goToSleep() is called, when + * the dream ends or when unplugged. + * User activity may brighten the screen but does not end the dream. + */ + public static final int WAKEFULNESS_DREAMING = 2; + + /** + * Wakefulness: The device is dozing. It is almost asleep but is allowing a special + * low-power "doze" dream to run which keeps the display on but lets the application + * processor be suspended. It can be awoken by a call to wakeUp() which ends the dream. + * The device fully goes to sleep if the dream cannot be started or ends on its own. + */ + public static final int WAKEFULNESS_DOZING = 3; + + public static String wakefulnessToString(int wakefulness) { + switch (wakefulness) { + case WAKEFULNESS_ASLEEP: + return "Asleep"; + case WAKEFULNESS_AWAKE: + return "Awake"; + case WAKEFULNESS_DREAMING: + return "Dreaming"; + case WAKEFULNESS_DOZING: + return "Dozing"; + default: + return Integer.toString(wakefulness); + } + } + + /** + * Returns true if the wakefulness state represents an interactive state + * as defined by {@link android.os.PowerManager#isInteractive}. + */ + public static boolean isInteractive(int wakefulness) { + return wakefulness == WAKEFULNESS_AWAKE || wakefulness == WAKEFULNESS_DREAMING; + } + /** * Used by the window manager to override the screen brightness based on the * current foreground activity. @@ -55,6 +107,13 @@ public abstract class PowerManagerInternal { */ public abstract void setUserActivityTimeoutOverrideFromWindowManager(long timeoutMillis); + /** + * Used by device administration to set the maximum screen off timeout. + * + * This method must only be called by the device administration policy manager. + */ + public abstract void setMaximumScreenOffTimeoutFromDeviceAdmin(int timeMs); + /** * Used by the dream manager to override certain properties while dozing. * diff --git a/core/java/android/os/UserHandle.java b/core/java/android/os/UserHandle.java index 0ff5f6a26092984d093f91df4757517c293b1ca8..74e064e3949805db21d8b06aed44a776a51bc03f 100644 --- a/core/java/android/os/UserHandle.java +++ b/core/java/android/os/UserHandle.java @@ -45,12 +45,12 @@ public final class UserHandle implements Parcelable { /** @hide A user id to indicate that we would like to send to the current * user, but if this is calling from a user process then we will send it - * to the caller's user instead of failing wiht a security exception */ + * to the caller's user instead of failing with a security exception */ public static final int USER_CURRENT_OR_SELF = -3; /** @hide A user handle to indicate that we would like to send to the current * user, but if this is calling from a user process then we will send it - * to the caller's user instead of failing wiht a security exception */ + * to the caller's user instead of failing with a security exception */ public static final UserHandle CURRENT_OR_SELF = new UserHandle(USER_CURRENT_OR_SELF); /** @hide An undefined user id */ diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java index 3234e7742c3e6288ca1dfa831ff159044b2bc57d..d124a499f66d3e366ecd41175ebb194bd903f237 100644 --- a/core/java/android/os/UserManager.java +++ b/core/java/android/os/UserManager.java @@ -56,6 +56,7 @@ public class UserManager { /** * Specifies if a user is disallowed from changing Wi-Fi * access points. The default value is false. + *

            This restriction has no effect in a managed profile. * *

            Key for user restrictions. *

            Type: Boolean @@ -87,8 +88,10 @@ public class UserManager { public static final String DISALLOW_UNINSTALL_APPS = "no_uninstall_apps"; /** - * Specifies if a user is disallowed from toggling location sharing. + * Specifies if a user is disallowed from turning on location sharing. * The default value is false. + *

            In a managed profile, location sharing always reflects the primary user's setting, but + * can be overridden and forced off by setting this restriction to true in the managed profile. * *

            Key for user restrictions. *

            Type: Boolean @@ -112,6 +115,7 @@ public class UserManager { /** * Specifies if a user is disallowed from configuring bluetooth. * The default value is false. + *

            This restriction has no effect in a managed profile. * *

            Key for user restrictions. *

            Type: Boolean @@ -144,8 +148,10 @@ public class UserManager { public static final String DISALLOW_CONFIG_CREDENTIALS = "no_config_credentials"; /** - * Specifies if a user is disallowed from removing itself and other - * users. The default value is false. + * When set on the primary user this specifies if the user can remove other users. + * When set on a secondary user, this specifies if the user can remove itself. + * This restriction has no effect on managed profiles. + * The default value is false. * *

            Key for user restrictions. *

            Type: Boolean @@ -168,6 +174,7 @@ public class UserManager { /** * Specifies if a user is disallowed from configuring VPN. * The default value is false. + * This restriction has no effect in a managed profile. * *

            Key for user restrictions. *

            Type: Boolean @@ -192,6 +199,8 @@ public class UserManager { * Specifies if a user is disallowed from factory resetting * from Settings. This can only be set by device owners and profile owners on the primary user. * The default value is false. + *

            This restriction has no effect on secondary users and managed profiles since only the + * primary user can factory reset the device. * *

            Key for user restrictions. *

            Type: Boolean @@ -204,6 +213,8 @@ public class UserManager { * Specifies if a user is disallowed from adding new users and * profiles. This can only be set by device owners and profile owners on the primary user. * The default value is false. + *

            This restriction has no effect on secondary users and managed profiles since only the + * primary user can add other users. * *

            Key for user restrictions. *

            Type: Boolean @@ -227,6 +238,8 @@ public class UserManager { * Specifies if a user is disallowed from configuring cell * broadcasts. This can only be set by device owners and profile owners on the primary user. * The default value is false. + *

            This restriction has no effect on secondary users and managed profiles since only the + * primary user can configure cell broadcasts. * *

            Key for user restrictions. *

            Type: Boolean @@ -239,6 +252,8 @@ public class UserManager { * Specifies if a user is disallowed from configuring mobile * networks. This can only be set by device owners and profile owners on the primary user. * The default value is false. + *

            This restriction has no effect on secondary users and managed profiles since only the + * primary user can configure mobile networks. * *

            Key for user restrictions. *

            Type: Boolean @@ -307,6 +322,8 @@ public class UserManager { * Specifies that the user is not allowed to make outgoing * phone calls. Emergency calls are still permitted. * The default value is false. + *

            This restriction has no effect on managed profiles since call intents are normally + * forwarded to the primary user. * *

            Key for user restrictions. *

            Type: Boolean @@ -367,10 +384,29 @@ public class UserManager { *

            Type: Boolean * @see #setUserRestrictions(Bundle) * @see #getUserRestrictions() - * @hide */ public static final String DISALLOW_OUTGOING_BEAM = "no_outgoing_beam"; + /** + * Application restriction key that is used to indicate the pending arrival + * of real restrictions for the app. + * + *

            + * Applications that support restrictions should check for the presence of this key. + * A true value indicates that restrictions may be applied in the near + * future but are not available yet. It is the responsibility of any + * management application that sets this flag to update it when the final + * restrictions are enforced. + * + *

            Key for application restrictions. + *

            Type: Boolean + * @see android.app.admin.DevicePolicyManager#setApplicationRestrictions( + * android.content.ComponentName, String, Bundle) + * @see android.app.admin.DevicePolicyManager#getApplicationRestrictions( + * android.content.ComponentName, String) + */ + public static final String KEY_RESTRICTIONS_PENDING = "restrictions_pending"; + /** @hide */ public static final int PIN_VERIFICATION_FAILED_INCORRECT = -3; /** @hide */ diff --git a/core/java/android/os/storage/IMountService.java b/core/java/android/os/storage/IMountService.java index cf407f401844ae6e44c516d8ddd497381ad55f8a..116110eba74d10f5f7a5eaafc5d56058bff15b6e 100644 --- a/core/java/android/os/storage/IMountService.java +++ b/core/java/android/os/storage/IMountService.java @@ -856,6 +856,38 @@ public interface IMountService extends IInterface { } return _result; } + + @Override + public long lastMaintenance() throws RemoteException { + Parcel _data = Parcel.obtain(); + Parcel _reply = Parcel.obtain(); + long _result; + try { + _data.writeInterfaceToken(DESCRIPTOR); + mRemote.transact(Stub.TRANSACTION_lastMaintenance, _data, _reply, 0); + _reply.readException(); + _result = _reply.readLong(); + } finally { + _reply.recycle(); + _data.recycle(); + } + return _result; + } + + @Override + public void runMaintenance() throws RemoteException { + Parcel _data = Parcel.obtain(); + Parcel _reply = Parcel.obtain(); + try { + _data.writeInterfaceToken(DESCRIPTOR); + mRemote.transact(Stub.TRANSACTION_runMaintenance, _data, _reply, 0); + _reply.readException(); + } finally { + _reply.recycle(); + _data.recycle(); + } + return; + } } private static final String DESCRIPTOR = "IMountService"; @@ -942,6 +974,10 @@ public interface IMountService extends IInterface { static final int TRANSACTION_resizeSecureContainer = IBinder.FIRST_CALL_TRANSACTION + 40; + static final int TRANSACTION_lastMaintenance = IBinder.FIRST_CALL_TRANSACTION + 41; + + static final int TRANSACTION_runMaintenance = IBinder.FIRST_CALL_TRANSACTION + 42; + /** * Cast an IBinder object into an IMountService interface, generating a * proxy if needed. @@ -1347,6 +1383,19 @@ public interface IMountService extends IInterface { reply.writeInt(resultCode); return true; } + case TRANSACTION_lastMaintenance: { + data.enforceInterface(DESCRIPTOR); + long lastMaintenance = lastMaintenance(); + reply.writeNoException(); + reply.writeLong(lastMaintenance); + return true; + } + case TRANSACTION_runMaintenance: { + data.enforceInterface(DESCRIPTOR); + runMaintenance(); + reply.writeNoException(); + return true; + } } return super.onTransact(code, data, reply, flags); } @@ -1617,4 +1666,18 @@ public interface IMountService extends IInterface { public String getField(String field) throws RemoteException; public int resizeSecureContainer(String id, int sizeMb, String key) throws RemoteException; + + /** + * Report the time of the last maintenance operation such as fstrim. + * @return Timestamp of the last maintenance operation, in the + * System.currentTimeMillis() time base + * @throws RemoteException + */ + public long lastMaintenance() throws RemoteException; + + /** + * Kick off an immediate maintenance operation + * @throws RemoteException + */ + public void runMaintenance() throws RemoteException; } diff --git a/core/java/android/preference/ListPreference.java b/core/java/android/preference/ListPreference.java index 8081a5496399ce95b09166c9f9465d80c4cc58c6..9482a72a2f7c833620fb893544b07704395a9f10 100644 --- a/core/java/android/preference/ListPreference.java +++ b/core/java/android/preference/ListPreference.java @@ -162,10 +162,10 @@ public class ListPreference extends DialogPreference { @Override public CharSequence getSummary() { final CharSequence entry = getEntry(); - if (mSummary == null || entry == null) { + if (mSummary == null) { return super.getSummary(); } else { - return String.format(mSummary, entry); + return String.format(mSummary, entry == null ? "" : entry); } } diff --git a/core/java/android/preference/Preference.java b/core/java/android/preference/Preference.java index 56d5617a67125f82cfa53d5879a8137291bbec47..0224c7310a09bca09a05c99f6a448a985862019c 100644 --- a/core/java/android/preference/Preference.java +++ b/core/java/android/preference/Preference.java @@ -215,7 +215,7 @@ public class Preference implements Comparable { final TypedArray a = context.obtainStyledAttributes( attrs, com.android.internal.R.styleable.Preference, defStyleAttr, defStyleRes); - for (int i = a.getIndexCount(); i >= 0; i--) { + for (int i = a.getIndexCount() - 1; i >= 0; i--) { int attr = a.getIndex(i); switch (attr) { case com.android.internal.R.styleable.Preference_icon: diff --git a/core/java/android/preference/PreferenceManager.java b/core/java/android/preference/PreferenceManager.java index ad940c6fc987631a11adc22d2a91604bd5127075..0a0e625514cca36d5c91aa420a64fdb04f790d1d 100644 --- a/core/java/android/preference/PreferenceManager.java +++ b/core/java/android/preference/PreferenceManager.java @@ -156,7 +156,7 @@ public class PreferenceManager { * should be used ANY time a preference will be displayed, since some preference * types need an Activity for managed queries. */ - private PreferenceManager(Context context) { + /*package*/ PreferenceManager(Context context) { init(context); } diff --git a/core/java/android/preference/SeekBarVolumizer.java b/core/java/android/preference/SeekBarVolumizer.java index 671f722fac108d5335aa2887600c3160b3009a5a..c3dd4cec72ff4f7d1bb1f1cfa0175998e4d89daf 100644 --- a/core/java/android/preference/SeekBarVolumizer.java +++ b/core/java/android/preference/SeekBarVolumizer.java @@ -44,24 +44,30 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Handler.Callba public interface Callback { void onSampleStarting(SeekBarVolumizer sbv); + void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch); + void onMuted(boolean muted); } private final Context mContext; - private final Handler mHandler; private final H mUiHandler = new H(); private final Callback mCallback; private final Uri mDefaultUri; private final AudioManager mAudioManager; private final int mStreamType; private final int mMaxStreamVolume; + private boolean mAffectedByRingerMode; + private boolean mNotificationOrRing; private final Receiver mReceiver = new Receiver(); - private final Observer mVolumeObserver; + private Handler mHandler; + private Observer mVolumeObserver; private int mOriginalStreamVolume; private Ringtone mRingtone; private int mLastProgress = -1; + private boolean mMuted; private SeekBar mSeekBar; private int mVolumeBeforeMute = -1; + private int mRingerMode; private static final int MSG_SET_STREAM_VOLUME = 0; private static final int MSG_START_SAMPLE = 1; @@ -69,22 +75,22 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Handler.Callba private static final int MSG_INIT_SAMPLE = 3; private static final int CHECK_RINGTONE_PLAYBACK_DELAY_MS = 1000; - public SeekBarVolumizer(Context context, int streamType, Uri defaultUri, - Callback callback) { + public SeekBarVolumizer(Context context, int streamType, Uri defaultUri, Callback callback) { mContext = context; mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); mStreamType = streamType; + mAffectedByRingerMode = mAudioManager.isStreamAffectedByRingerMode(mStreamType); + mNotificationOrRing = isNotificationOrRing(mStreamType); + if (mNotificationOrRing) { + mRingerMode = mAudioManager.getRingerModeInternal(); + } mMaxStreamVolume = mAudioManager.getStreamMaxVolume(mStreamType); - HandlerThread thread = new HandlerThread(TAG + ".CallbackHandler"); - thread.start(); - mHandler = new Handler(thread.getLooper(), this); mCallback = callback; mOriginalStreamVolume = mAudioManager.getStreamVolume(mStreamType); - mVolumeObserver = new Observer(mHandler); - mContext.getContentResolver().registerContentObserver( - System.getUriFor(System.VOLUME_SETTINGS[mStreamType]), - false, mVolumeObserver); - mReceiver.setListening(true); + mMuted = mAudioManager.isStreamMute(mStreamType); + if (mCallback != null) { + mCallback.onMuted(mMuted); + } if (defaultUri == null) { if (mStreamType == AudioManager.STREAM_RING) { defaultUri = Settings.System.DEFAULT_RINGTONE_URI; @@ -95,7 +101,10 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Handler.Callba } } mDefaultUri = defaultUri; - mHandler.sendEmptyMessage(MSG_INIT_SAMPLE); + } + + private static boolean isNotificationOrRing(int stream) { + return stream == AudioManager.STREAM_RING || stream == AudioManager.STREAM_NOTIFICATION; } public void setSeekBar(SeekBar seekBar) { @@ -105,10 +114,23 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Handler.Callba mSeekBar = seekBar; mSeekBar.setOnSeekBarChangeListener(null); mSeekBar.setMax(mMaxStreamVolume); - mSeekBar.setProgress(mLastProgress > -1 ? mLastProgress : mOriginalStreamVolume); + updateSeekBar(); mSeekBar.setOnSeekBarChangeListener(this); } + protected void updateSeekBar() { + if (mNotificationOrRing && mRingerMode == AudioManager.RINGER_MODE_VIBRATE) { + mSeekBar.setEnabled(true); + mSeekBar.setProgress(0); + } else if (mMuted) { + mSeekBar.setEnabled(false); + mSeekBar.setProgress(0); + } else { + mSeekBar.setEnabled(true); + mSeekBar.setProgress(mLastProgress > -1 ? mLastProgress : mOriginalStreamVolume); + } + } + @Override public boolean handleMessage(Message msg) { switch (msg.what) { @@ -139,6 +161,7 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Handler.Callba } private void postStartSample() { + if (mHandler == null) return; mHandler.removeMessages(MSG_START_SAMPLE); mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_START_SAMPLE), isSamplePlaying() ? CHECK_RINGTONE_PLAYBACK_DELAY_MS : 0); @@ -159,7 +182,8 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Handler.Callba } } - void postStopSample() { + private void postStopSample() { + if (mHandler == null) return; // remove pending delayed start messages mHandler.removeMessages(MSG_START_SAMPLE); mHandler.removeMessages(MSG_STOP_SAMPLE); @@ -173,27 +197,44 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Handler.Callba } public void stop() { + if (mHandler == null) return; // already stopped postStopSample(); mContext.getContentResolver().unregisterContentObserver(mVolumeObserver); - mSeekBar.setOnSeekBarChangeListener(null); mReceiver.setListening(false); + mSeekBar.setOnSeekBarChangeListener(null); mHandler.getLooper().quitSafely(); + mHandler = null; + mVolumeObserver = null; + } + + public void start() { + if (mHandler != null) return; // already started + HandlerThread thread = new HandlerThread(TAG + ".CallbackHandler"); + thread.start(); + mHandler = new Handler(thread.getLooper(), this); + mHandler.sendEmptyMessage(MSG_INIT_SAMPLE); + mVolumeObserver = new Observer(mHandler); + mContext.getContentResolver().registerContentObserver( + System.getUriFor(System.VOLUME_SETTINGS[mStreamType]), + false, mVolumeObserver); + mReceiver.setListening(true); } public void revertVolume() { mAudioManager.setStreamVolume(mStreamType, mOriginalStreamVolume, 0); } - public void onProgressChanged(SeekBar seekBar, int progress, - boolean fromTouch) { - if (!fromTouch) { - return; + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch) { + if (fromTouch) { + postSetVolume(progress); + } + if (mCallback != null) { + mCallback.onProgressChanged(seekBar, progress, fromTouch); } - - postSetVolume(progress); } - void postSetVolume(int progress) { + private void postSetVolume(int progress) { + if (mHandler == null) return; // Do the volume changing separately to give responsive UI mLastProgress = progress; mHandler.removeMessages(MSG_SET_STREAM_VOLUME); @@ -266,14 +307,29 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Handler.Callba public void handleMessage(Message msg) { if (msg.what == UPDATE_SLIDER) { if (mSeekBar != null) { - mSeekBar.setProgress(msg.arg1); - mLastProgress = mSeekBar.getProgress(); + mLastProgress = msg.arg1; + final boolean muted = msg.arg2 != 0; + if (muted != mMuted) { + mMuted = muted; + if (mCallback != null) { + mCallback.onMuted(mMuted); + } + } + updateSeekBar(); } } } - public void postUpdateSlider(int volume) { - obtainMessage(UPDATE_SLIDER, volume, 0).sendToTarget(); + public void postUpdateSlider(int volume, boolean mute) { + obtainMessage(UPDATE_SLIDER, volume, mute ? 1 : 0).sendToTarget(); + } + } + + private void updateSlider() { + if (mSeekBar != null && mAudioManager != null) { + final int volume = mAudioManager.getStreamVolume(mStreamType); + final boolean mute = mAudioManager.isStreamMute(mStreamType); + mUiHandler.postUpdateSlider(volume, mute); } } @@ -285,10 +341,7 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Handler.Callba @Override public void onChange(boolean selfChange) { super.onChange(selfChange); - if (mSeekBar != null && mAudioManager != null) { - final int volume = mAudioManager.getStreamVolume(mStreamType); - mUiHandler.postUpdateSlider(volume); - } + updateSlider(); } } @@ -300,6 +353,7 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Handler.Callba mListening = listening; if (listening) { final IntentFilter filter = new IntentFilter(AudioManager.VOLUME_CHANGED_ACTION); + filter.addAction(AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION); mContext.registerReceiver(this, filter); } else { mContext.unregisterReceiver(this); @@ -308,11 +362,23 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Handler.Callba @Override public void onReceive(Context context, Intent intent) { - if (!AudioManager.VOLUME_CHANGED_ACTION.equals(intent.getAction())) return; - final int streamType = intent.getIntExtra(AudioManager.EXTRA_VOLUME_STREAM_TYPE, -1); - final int streamValue = intent.getIntExtra(AudioManager.EXTRA_VOLUME_STREAM_VALUE, -1); - if (mSeekBar != null && streamType == mStreamType && streamValue != -1) { - mUiHandler.postUpdateSlider(streamValue); + final String action = intent.getAction(); + if (AudioManager.VOLUME_CHANGED_ACTION.equals(action)) { + int streamType = intent.getIntExtra(AudioManager.EXTRA_VOLUME_STREAM_TYPE, -1); + int streamValue = intent.getIntExtra(AudioManager.EXTRA_VOLUME_STREAM_VALUE, -1); + final boolean streamMatch = mNotificationOrRing ? isNotificationOrRing(streamType) + : (streamType == mStreamType); + if (mSeekBar != null && streamMatch && streamValue != -1) { + final boolean muted = mAudioManager.isStreamMute(mStreamType); + mUiHandler.postUpdateSlider(streamValue, muted); + } + } else if (AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION.equals(action)) { + if (mNotificationOrRing) { + mRingerMode = mAudioManager.getRingerModeInternal(); + } + if (mAffectedByRingerMode) { + updateSlider(); + } } } } diff --git a/core/java/android/preference/VolumePreference.java b/core/java/android/preference/VolumePreference.java index df9e10e6d2614d92dae5d983709aed7d6ae71966..a2da01bffc2b3ec1e0b6e5b8a8438df1c77b7acf 100644 --- a/core/java/android/preference/VolumePreference.java +++ b/core/java/android/preference/VolumePreference.java @@ -67,6 +67,7 @@ public class VolumePreference extends SeekBarDialogPreference implements final SeekBar seekBar = (SeekBar) view.findViewById(com.android.internal.R.id.seekbar); mSeekBarVolumizer = new SeekBarVolumizer(getContext(), mStreamType, null, this); + mSeekBarVolumizer.start(); mSeekBarVolumizer.setSeekBar(seekBar); getPreferenceManager().registerOnActivityStopListener(this); @@ -116,7 +117,7 @@ public class VolumePreference extends SeekBarDialogPreference implements public void onActivityStop() { if (mSeekBarVolumizer != null) { - mSeekBarVolumizer.postStopSample(); + mSeekBarVolumizer.stopSample(); } } @@ -148,6 +149,16 @@ public class VolumePreference extends SeekBarDialogPreference implements } } + @Override + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch) { + // noop + } + + @Override + public void onMuted(boolean muted) { + // noop + } + @Override protected Parcelable onSaveInstanceState() { final Parcelable superState = super.onSaveInstanceState(); diff --git a/core/java/android/print/IPrintDocumentAdapter.aidl b/core/java/android/print/IPrintDocumentAdapter.aidl index 9d384fba874df8524bc718ad95e36d2e88a5924e..8f33e0b2c0038c044f18ef70a078b76376f21475 100644 --- a/core/java/android/print/IPrintDocumentAdapter.aidl +++ b/core/java/android/print/IPrintDocumentAdapter.aidl @@ -37,4 +37,5 @@ oneway interface IPrintDocumentAdapter { void write(in PageRange[] pages, in ParcelFileDescriptor fd, IWriteResultCallback callback, int sequence); void finish(); + void kill(String reason); } diff --git a/core/java/android/print/PrintManager.java b/core/java/android/print/PrintManager.java index bf8ac651ed519930663d75ffa564de645fdc7e69..3fb812e401f7345b72f3603da7ef20a809c4cfd8 100644 --- a/core/java/android/print/PrintManager.java +++ b/core/java/android/print/PrintManager.java @@ -633,6 +633,17 @@ public final class PrintManager { } } + @Override + public void kill(String reason) { + synchronized (mLock) { + // If destroyed the handler is null. + if (!isDestroyedLocked()) { + mHandler.obtainMessage(MyHandler.MSG_ON_KILL, + reason).sendToTarget(); + } + } + } + @Override public void onActivityPaused(Activity activity) { /* do nothing */ @@ -719,6 +730,7 @@ public final class PrintManager { public static final int MSG_ON_LAYOUT = 2; public static final int MSG_ON_WRITE = 3; public static final int MSG_ON_FINISH = 4; + public static final int MSG_ON_KILL = 5; public MyHandler(Looper looper) { super(looper, null, true); @@ -794,6 +806,15 @@ public final class PrintManager { } } break; + case MSG_ON_KILL: { + if (DEBUG) { + Log.i(LOG_TAG, "onKill()"); + } + + String reason = (String) message.obj; + throw new RuntimeException(reason); + } + default: { throw new IllegalArgumentException("Unknown message: " + message.what); diff --git a/core/java/android/provider/CallLog.java b/core/java/android/provider/CallLog.java index c8d0fd50c2d3bd19645731bec2490099cae92f78..f023df7de0b4acd65245497c196ec974c7207cf8 100644 --- a/core/java/android/provider/CallLog.java +++ b/core/java/android/provider/CallLog.java @@ -391,6 +391,7 @@ public class CallLog { start, duration, dataUsage, false); } + /** * Adds a call to the call log. * @@ -463,6 +464,7 @@ public class CallLog { values.put(PHONE_ACCOUNT_COMPONENT_NAME, accountComponentString); values.put(PHONE_ACCOUNT_ID, accountId); values.put(NEW, Integer.valueOf(1)); + if (callType == MISSED_TYPE) { values.put(IS_READ, Integer.valueOf(0)); } @@ -592,7 +594,7 @@ public class CallLog { resolver.update(feedbackUri, new ContentValues(), null, null); } - /** + /* * Update the normalized phone number for the given dataId in the ContactsProvider, based * on the user's current country. */ @@ -601,18 +603,15 @@ public class CallLog { if (TextUtils.isEmpty(number) || TextUtils.isEmpty(dataId)) { return; } - final String countryIso = getCurrentCountryIso(context); if (TextUtils.isEmpty(countryIso)) { return; } - final String normalizedNumber = PhoneNumberUtils.formatNumberToE164(number, getCurrentCountryIso(context)); if (TextUtils.isEmpty(normalizedNumber)) { return; } - final ContentValues values = new ContentValues(); values.put(Phone.NORMALIZED_NUMBER, normalizedNumber); resolver.update(Data.CONTENT_URI, values, Data._ID + "=?", new String[] {dataId}); diff --git a/core/java/android/provider/DocumentsProvider.java b/core/java/android/provider/DocumentsProvider.java index 932e8730399fc5fa76d4a45365b0161a9381f6ce..13164719a5fbda61e668479919acb23d284e8d4b 100644 --- a/core/java/android/provider/DocumentsProvider.java +++ b/core/java/android/provider/DocumentsProvider.java @@ -637,7 +637,7 @@ public abstract class DocumentsProvider extends ContentProvider { final Bundle out = new Bundle(); try { if (METHOD_CREATE_DOCUMENT.equals(method)) { - enforceWritePermissionInner(documentUri); + enforceWritePermissionInner(documentUri, null); final String mimeType = extras.getString(Document.COLUMN_MIME_TYPE); final String displayName = extras.getString(Document.COLUMN_DISPLAY_NAME); @@ -651,7 +651,7 @@ public abstract class DocumentsProvider extends ContentProvider { out.putParcelable(DocumentsContract.EXTRA_URI, newDocumentUri); } else if (METHOD_RENAME_DOCUMENT.equals(method)) { - enforceWritePermissionInner(documentUri); + enforceWritePermissionInner(documentUri, null); final String displayName = extras.getString(Document.COLUMN_DISPLAY_NAME); final String newDocumentId = renameDocument(documentId, displayName); @@ -675,7 +675,7 @@ public abstract class DocumentsProvider extends ContentProvider { } } else if (METHOD_DELETE_DOCUMENT.equals(method)) { - enforceWritePermissionInner(documentUri); + enforceWritePermissionInner(documentUri, null); deleteDocument(documentId); // Document no longer exists, clean up any grants diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index d08758b93a9558e840dee2814f235c5c708be507..ef0f72f18ed983173ddc685a4f14884c970bcbd3 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -787,11 +787,10 @@ public final class Settings { *

            * Output: Nothing. * @see android.service.notification.NotificationListenerService - * @hide */ @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) public static final String ACTION_NOTIFICATION_LISTENER_SETTINGS - = "android.settings.NOTIFICATION_LISTENER_SETTINGS"; + = "android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS"; /** * @hide @@ -873,8 +872,9 @@ public final class Settings { /** * Activity Action: Show battery saver settings. - * - * @hide + *

            + * In some cases, a matching Activity may not exist, so ensure you safeguard + * against this. */ @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) public static final String ACTION_BATTERY_SAVER_SETTINGS @@ -984,8 +984,8 @@ public final class Settings { * InputDeviceIdentifier. This field is used by some activities to jump straight into the * settings for the given device. *

            - * Example: The {@link #INPUT_METHOD_SETTINGS} intent opens the keyboard layout dialog for the - * given device. + * Example: The {@link #ACTION_INPUT_METHOD_SETTINGS} intent opens the keyboard layout + * dialog for the given device. * @hide */ public static final String EXTRA_INPUT_DEVICE_IDENTIFIER = "input_device_identifier"; @@ -2624,12 +2624,6 @@ public final class Settings { */ public static final String LOCK_TO_APP_ENABLED = "lock_to_app_enabled"; - /** - * Whether lock-to-app will lock the keyguard when exiting. - * @hide - */ - public static final String LOCK_TO_APP_EXIT_LOCKED = "lock_to_app_exit_locked"; - /** * I am the lolrus. *

            @@ -2704,6 +2698,7 @@ public final class Settings { POINTER_SPEED, VIBRATE_WHEN_RINGING, RINGTONE, + LOCK_TO_APP_ENABLED, NOTIFICATION_SOUND }; @@ -3017,7 +3012,6 @@ public final class Settings { MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_ENABLED); MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_GLOBAL_ALERT_BYTES); MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_POLL_INTERVAL); - MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_REPORT_XT_OVER_DEV); MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_SAMPLE_ENABLED); MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_TIME_CACHE_MAX_AGE); MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_UID_BUCKET_DURATION); @@ -3666,6 +3660,12 @@ public final class Settings { public static final String LOCK_BIOMETRIC_WEAK_FLAGS = "lock_biometric_weak_flags"; + /** + * Whether lock-to-app will lock the keyguard when exiting. + * @hide + */ + public static final String LOCK_TO_APP_EXIT_LOCKED = "lock_to_app_exit_locked"; + /** * Whether autolock is enabled (0 = false, 1 = true) */ @@ -4348,6 +4348,16 @@ public final class Settings { public static final String WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS = Global.WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS; + /** + * The number of milliseconds to hold on to a PendingIntent based request. This delay gives + * the receivers of the PendingIntent an opportunity to make a new network request before + * the Network satisfying the request is potentially removed. + * + * @hide + */ + public static final String CONNECTIVITY_RELEASE_PENDING_INTENT_DELAY_MS = + "connectivity_release_pending_intent_delay_ms"; + /** * Whether background data usage is allowed. * @@ -4587,13 +4597,6 @@ public final class Settings { */ public static final String ANR_SHOW_BACKGROUND = "anr_show_background"; - /** - * (Experimental). If nonzero, WebView uses data reduction proxy to save network - * bandwidth. Otherwise, WebView does not use data reduction proxy. - * @hide - */ - public static final String WEBVIEW_DATA_REDUCTION_PROXY = "webview_data_reduction_proxy"; - /** * The {@link ComponentName} string of the service to be used as the voice recognition * service. @@ -4739,8 +4742,8 @@ public final class Settings { public static final String SMS_DEFAULT_APPLICATION = "sms_default_application"; /** - * Name of a package that the current user has explicitly allowed to see all of that - * user's notifications. + * Names of the packages that the current user has explicitly allowed to + * see all of the user's notifications, separated by ':'. * * @hide */ @@ -4823,7 +4826,7 @@ public final class Settings { * The timeout in milliseconds before the device fully goes to sleep after * a period of inactivity. This value sets an upper bound on how long the device * will stay awake or dreaming without user activity. It should generally - * be longer than {@link #SCREEN_OFF_TIMEOUT} as otherwise the device + * be longer than {@link Settings.System#SCREEN_OFF_TIMEOUT} as otherwise the device * will sleep before it ever has a chance to dream. *

            * Use -1 to disable this timeout. @@ -5013,10 +5016,19 @@ public final class Settings { default: throw new IllegalArgumentException("Invalid location mode: " + mode); } - boolean gpsSuccess = Settings.Secure.setLocationProviderEnabledForUser( - cr, LocationManager.GPS_PROVIDER, gps, userId); + // Note it's important that we set the NLP mode first. The Google implementation + // of NLP clears its NLP consent setting any time it receives a + // LocationManager.PROVIDERS_CHANGED_ACTION broadcast and NLP is disabled. Also, + // it shows an NLP consent dialog any time it receives the broadcast, NLP is + // enabled, and the NLP consent is not set. If 1) we were to enable GPS first, + // 2) a setup wizard has its own NLP consent UI that sets the NLP consent setting, + // and 3) the receiver happened to complete before we enabled NLP, then the Google + // NLP would detect the attempt to enable NLP and show a redundant NLP consent + // dialog. Then the people who wrote the setup wizard would be sad. boolean nlpSuccess = Settings.Secure.setLocationProviderEnabledForUser( cr, LocationManager.NETWORK_PROVIDER, network, userId); + boolean gpsSuccess = Settings.Secure.setLocationProviderEnabledForUser( + cr, LocationManager.GPS_PROVIDER, gps, userId); return gpsSuccess && nlpSuccess; } } @@ -5085,6 +5097,13 @@ public final class Settings { */ public static final String AIRPLANE_MODE_ON = "airplane_mode_on"; + /** + * Whether Theater Mode is on. + * {@hide} + */ + @SystemApi + public static final String THEATER_MODE_ON = "theater_mode_on"; + /** * Constant for use in AIRPLANE_MODE_RADIOS to specify Bluetooth radio. */ @@ -5447,8 +5466,6 @@ public final class Settings { public static final String NETSTATS_GLOBAL_ALERT_BYTES = "netstats_global_alert_bytes"; /** {@hide} */ public static final String NETSTATS_SAMPLE_ENABLED = "netstats_sample_enabled"; - /** {@hide} */ - public static final String NETSTATS_REPORT_XT_OVER_DEV = "netstats_report_xt_over_dev"; /** {@hide} */ public static final String NETSTATS_DEV_BUCKET_DURATION = "netstats_dev_bucket_duration"; @@ -5543,6 +5560,13 @@ public final class Settings { */ public static final String PACKAGE_VERIFIER_INCLUDE_ADB = "verifier_verify_adb_installs"; + /** + * Time since last fstrim (milliseconds) after which we force one to happen + * during device startup. If unset, the default is 3 days. + * @hide + */ + public static final String FSTRIM_MANDATORY_INTERVAL = "fstrim_mandatory_interval"; + /** * The interval in milliseconds at which to check packet counts on the * mobile data interface when screen is on, to detect possible data @@ -5900,6 +5924,18 @@ public final class Settings { */ public static final String WIFI_REENABLE_DELAY_MS = "wifi_reenable_delay"; + /** + * Timeout for ephemeral networks when all known BSSIDs go out of range. We will disconnect + * from an ephemeral network if there is no BSSID for that network with a non-null score that + * has been seen in this time period. + * + * If this is less than or equal to zero, we use a more conservative behavior and only check + * for a non-null score from the currently connected or target BSSID. + * @hide + */ + public static final String WIFI_EPHEMERAL_OUT_OF_RANGE_TIMEOUT_MS = + "wifi_ephemeral_out_of_range_timeout_ms"; + /** * The number of milliseconds to delay when checking for data stalls during * non-aggressive detection. (screen is turned off.) @@ -6105,7 +6141,7 @@ public final class Settings { /** * The number of milliseconds to delay before sending out - * {@link ConnectivityManager#CONNECTIVITY_ACTION} broadcasts. + * {@link ConnectivityManager#CONNECTIVITY_ACTION} broadcasts. Ignored. * * @hide */ @@ -6349,6 +6385,14 @@ public final class Settings { public static final String PREFERRED_NETWORK_MODE = "preferred_network_mode"; + /** + * Setting to 1 will hide carrier network settings. + * Default is 0. + * @hide + */ + public static final String HIDE_CARRIER_NETWORK_SETTINGS = + "hide_carrier_network_settings"; + /** * Name of an application package to be debugged. */ @@ -6571,6 +6615,31 @@ public final class Settings { */ public static final String REQUIRE_PASSWORD_TO_DECRYPT = "require_password_to_decrypt"; + /** + * Whether the Volte/VT is enabled + *

            + * Type: int (0 for false, 1 for true) + * @hide + */ + public static final String ENHANCED_4G_MODE_ENABLED = "volte_vt_enabled"; + + /** + * Global override to disable VoLTE (independent of user setting) + *

            + * Type: int (1 for disable VoLTE, 0 to use user configuration) + * @hide + */ + public static final String VOLTE_FEATURE_DISABLED = "volte_feature_disabled"; + + /** + * Whether user can enable/disable LTE as a preferred network. A carrier might control + * this via gservices, OMA-DM, carrier app, etc. + *

            + * Type: int (0 for false, 1 for true) + * @hide + */ + public static final String LTE_SERVICE_FORCED = "lte_service_forced"; + /** * Settings to backup. This is here so that it's in the same place as the settings * keys and easy to update. @@ -6602,7 +6671,8 @@ public final class Settings { WIFI_NUM_OPEN_NETWORKS_KEPT, EMERGENCY_TONE, CALL_AUTO_RETRY, - DOCK_AUDIO_MEDIA_ENABLED + DOCK_AUDIO_MEDIA_ENABLED, + LOW_POWER_MODE_TRIGGER_LEVEL }; // Populated lazily, guarded by class object: diff --git a/core/java/android/service/carrier/CarrierMessagingService.java b/core/java/android/service/carrier/CarrierMessagingService.java new file mode 100644 index 0000000000000000000000000000000000000000..3d6ebcacec739d0f575ccf84a485fe7409d95590 --- /dev/null +++ b/core/java/android/service/carrier/CarrierMessagingService.java @@ -0,0 +1,417 @@ +/* + * Copyright (C) 2014 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.service.carrier; + +import android.annotation.NonNull; +import android.annotation.Nullable; +import android.annotation.SdkConstant; +import android.app.Service; +import android.content.Intent; +import android.net.Uri; +import android.os.IBinder; +import android.os.Parcel; +import android.os.Parcelable; +import android.os.RemoteException; + +import java.util.ArrayList; +import java.util.List; + +/** + * A service that receives calls from the system when new SMS and MMS are + * sent or received. + *

            To extend this class, you must declare the service in your manifest file with + * the {@link android.Manifest.permission#BIND_CARRIER_MESSAGING_SERVICE} permission + * and include an intent filter with the {@link #SERVICE_INTERFACE} action. For example:

            + *
            + * <service android:name=".MyMessagingService"
            + *          android:label="@string/service_name"
            + *          android:permission="android.permission.BIND_CARRIER_MESSAGING_SERVICE">
            + *     <intent-filter>
            + *         <action android:name="android.service.carrier.CarrierMessagingService" />
            + *     </intent-filter>
            + * </service>
            + */ +public abstract class CarrierMessagingService extends Service { + /** + * The {@link android.content.Intent} that must be declared as handled by the service. + */ + @SdkConstant(SdkConstant.SdkConstantType.SERVICE_ACTION) + public static final String SERVICE_INTERFACE + = "android.service.carrier.CarrierMessagingService"; + + /** + * Indicates that an SMS or MMS message was successfully sent. + */ + public static final int SEND_STATUS_OK = 0; + + /** + * SMS/MMS sending failed. We should retry via the carrier network. + */ + public static final int SEND_STATUS_RETRY_ON_CARRIER_NETWORK = 1; + + /** + * SMS/MMS sending failed. We should not retry via the carrier network. + */ + public static final int SEND_STATUS_ERROR = 2; + + /** + * Successfully downloaded an MMS message. + */ + public static final int DOWNLOAD_STATUS_OK = 0; + + /** + * MMS downloading failed. We should retry via the carrier network. + */ + public static final int DOWNLOAD_STATUS_RETRY_ON_CARRIER_NETWORK = 1; + + /** + * MMS downloading failed. We should not retry via the carrier network. + */ + public static final int DOWNLOAD_STATUS_ERROR = 2; + + private final ICarrierMessagingWrapper mWrapper = new ICarrierMessagingWrapper(); + + /** + * Override this method to filter inbound SMS messages. + * + * @param pdu the PDUs of the message + * @param format the format of the PDUs, typically "3gpp" or "3gpp2" + * @param destPort the destination port of a binary SMS, this will be -1 for text SMS + * @param subId SMS subscription ID of the SIM + * @param callback result callback. Call with {@code true} to keep an inbound SMS message and + * deliver to SMS apps, and {@code false} to drop the message. + */ + public void onFilterSms(@NonNull MessagePdu pdu, @NonNull String format, int destPort, + int subId, @NonNull ResultCallback callback) { + // optional + try { + callback.onReceiveResult(true); + } catch (RemoteException ex) { + } + } + + /** + * Override this method to intercept text SMSs sent from the device. + * + * @param text the text to send + * @param subId SMS subscription ID of the SIM + * @param destAddress phone number of the recipient of the message + * @param callback result callback. Call with a {@link SendSmsResult}. + */ + public void onSendTextSms( + @NonNull String text, int subId, @NonNull String destAddress, + @NonNull ResultCallback callback) { + // optional + try { + callback.onReceiveResult(new SendSmsResult(SEND_STATUS_RETRY_ON_CARRIER_NETWORK, 0)); + } catch (RemoteException ex) { + } + } + + /** + * Override this method to intercept binary SMSs sent from the device. + * + * @param data the binary content + * @param subId SMS subscription ID of the SIM + * @param destAddress phone number of the recipient of the message + * @param destPort the destination port + * @param callback result callback. Call with a {@link SendSmsResult}. + */ + public void onSendDataSms(@NonNull byte[] data, int subId, + @NonNull String destAddress, int destPort, + @NonNull ResultCallback callback) { + // optional + try { + callback.onReceiveResult(new SendSmsResult(SEND_STATUS_RETRY_ON_CARRIER_NETWORK, 0)); + } catch (RemoteException ex) { + } + } + + /** + * Override this method to intercept long SMSs sent from the device. + * + * @param parts a {@link List} of the message parts + * @param subId SMS subscription ID of the SIM + * @param destAddress phone number of the recipient of the message + * @param callback result callback. Call with a {@link SendMultipartSmsResult}. + */ + public void onSendMultipartTextSms(@NonNull List parts, + int subId, @NonNull String destAddress, + @NonNull ResultCallback callback) { + // optional + try { + callback.onReceiveResult( + new SendMultipartSmsResult(SEND_STATUS_RETRY_ON_CARRIER_NETWORK, null)); + } catch (RemoteException ex) { + } + } + + /** + * Override this method to intercept MMSs sent from the device. + * + * @param pduUri the content provider URI of the PDU to send + * @param subId SMS subscription ID of the SIM + * @param location the optional URI to send this MMS PDU. If this is {code null}, + * the PDU should be sent to the default MMSC URL. + * @param callback result callback. Call with a {@link SendMmsResult}. + */ + public void onSendMms(@NonNull Uri pduUri, int subId, + @Nullable Uri location, @NonNull ResultCallback callback) { + // optional + try { + callback.onReceiveResult(new SendMmsResult(SEND_STATUS_RETRY_ON_CARRIER_NETWORK, null)); + } catch (RemoteException ex) { + } + } + + /** + * Override this method to download MMSs received. + * + * @param contentUri the content provider URI of the PDU to be downloaded. + * @param subId SMS subscription ID of the SIM + * @param location the URI of the message to be downloaded. + * @param callback result callback. Call with a status code which is one of + * {@link #DOWNLOAD_STATUS_OK}, + * {@link #DOWNLOAD_STATUS_RETRY_ON_CARRIER_NETWORK}, or {@link #DOWNLOAD_STATUS_ERROR}. + */ + public void onDownloadMms(@NonNull Uri contentUri, int subId, @NonNull Uri location, + @NonNull ResultCallback callback) { + // optional + try { + callback.onReceiveResult(DOWNLOAD_STATUS_RETRY_ON_CARRIER_NETWORK); + } catch (RemoteException ex) { + } + } + + @Override + public @Nullable IBinder onBind(@NonNull Intent intent) { + if (!SERVICE_INTERFACE.equals(intent.getAction())) { + return null; + } + return mWrapper; + } + + /** + * The result of sending an MMS. + */ + public static final class SendMmsResult { + private int mSendStatus; + private byte[] mSendConfPdu; + + /** + * Constructs a SendMmsResult with the MMS send result, and the SendConf PDU. + * + * @param sendStatus send status, one of {@link #SEND_STATUS_OK}, + * {@link #SEND_STATUS_RETRY_ON_CARRIER_NETWORK}, and + * {@link #SEND_STATUS_ERROR} + * @param sendConfPdu a possibly {code null} SendConf PDU, which confirms that the message + * was sent. sendConfPdu is ignored if the {@code result} is not + * {@link #SEND_STATUS_OK}. + */ + public SendMmsResult(int sendStatus, @Nullable byte[] sendConfPdu) { + mSendStatus = sendStatus; + mSendConfPdu = sendConfPdu; + } + + /** + * Returns the send status of the just-sent MMS. + * + * @return the send status which is one of {@link #SEND_STATUS_OK}, + * {@link #SEND_STATUS_RETRY_ON_CARRIER_NETWORK}, and {@link #SEND_STATUS_ERROR} + */ + public int getSendStatus() { + return mSendStatus; + } + + /** + * Returns the SendConf PDU, which confirms that the message was sent. + * + * @return the SendConf PDU + */ + public @Nullable byte[] getSendConfPdu() { + return mSendConfPdu; + } + } + + /** + * The result of sending an SMS. + */ + public static final class SendSmsResult { + private final int mSendStatus; + private final int mMessageRef; + + /** + * Constructs a SendSmsResult with the send status and message reference for the + * just-sent SMS. + * + * @param sendStatus send status, one of {@link #SEND_STATUS_OK}, + * {@link #SEND_STATUS_RETRY_ON_CARRIER_NETWORK}, and {@link #SEND_STATUS_ERROR}. + * @param messageRef message reference of the just-sent SMS. This field is applicable only + * if send status is {@link #SEND_STATUS_OK}. + */ + public SendSmsResult(int sendStatus, int messageRef) { + mSendStatus = sendStatus; + mMessageRef = messageRef; + } + + /** + * Returns the message reference of the just-sent SMS. + * + * @return the message reference + */ + public int getMessageRef() { + return mMessageRef; + } + + /** + * Returns the send status of the just-sent SMS. + * + * @return the send status + */ + public int getSendStatus() { + return mSendStatus; + } + } + + /** + * The result of sending a multipart SMS. + */ + public static final class SendMultipartSmsResult { + private final int mSendStatus; + private final int[] mMessageRefs; + + /** + * Constructs a SendMultipartSmsResult with the send status and message references for the + * just-sent multipart SMS. + * + * @param sendStatus send status, one of {@link #SEND_STATUS_OK}, + * {@link #SEND_STATUS_RETRY_ON_CARRIER_NETWORK}, and {@link #SEND_STATUS_ERROR}. + * @param messageRefs an array of message references, one for each part of the + * multipart SMS. This field is applicable only if send status is + * {@link #SEND_STATUS_OK}. + */ + public SendMultipartSmsResult(int sendStatus, @Nullable int[] messageRefs) { + mSendStatus = sendStatus; + mMessageRefs = messageRefs; + } + + /** + * Returns the message references of the just-sent multipart SMS. + * + * @return the message references, one for each part of the multipart SMS + */ + public @Nullable int[] getMessageRefs() { + return mMessageRefs; + } + + /** + * Returns the send status of the just-sent SMS. + * + * @return the send status + */ + public int getSendStatus() { + return mSendStatus; + } + } + + /** + * A callback interface used to provide results asynchronously. + */ + public interface ResultCallback { + /** + * Invoked when the result is available. + * + * @param result the result + */ + public void onReceiveResult(@NonNull T result) throws RemoteException; + }; + + /** + * A wrapper around ICarrierMessagingService to enable the carrier messaging app to implement + * methods it cares about in the {@link ICarrierMessagingService} interface. + */ + private class ICarrierMessagingWrapper extends ICarrierMessagingService.Stub { + @Override + public void filterSms(MessagePdu pdu, String format, int destPort, + int subId, final ICarrierMessagingCallback callback) { + onFilterSms(pdu, format, destPort, subId, new ResultCallback() { + @Override + public void onReceiveResult(final Boolean result) throws RemoteException { + callback.onFilterComplete(result); + } + }); + } + + @Override + public void sendTextSms(String text, int subId, String destAddress, + final ICarrierMessagingCallback callback) { + onSendTextSms(text, subId, destAddress, new ResultCallback() { + @Override + public void onReceiveResult(final SendSmsResult result) throws RemoteException { + callback.onSendSmsComplete(result.getSendStatus(), result.getMessageRef()); + } + }); + } + + @Override + public void sendDataSms(byte[] data, int subId, String destAddress, int destPort, + final ICarrierMessagingCallback callback) { + onSendDataSms(data, subId, destAddress, destPort, new ResultCallback() { + @Override + public void onReceiveResult(final SendSmsResult result) throws RemoteException { + callback.onSendSmsComplete(result.getSendStatus(), result.getMessageRef()); + } + }); + } + + @Override + public void sendMultipartTextSms(List parts, int subId, String destAddress, + final ICarrierMessagingCallback callback) { + onSendMultipartTextSms(parts, subId, destAddress, + new ResultCallback() { + @Override + public void onReceiveResult(final SendMultipartSmsResult result) + throws RemoteException { + callback.onSendMultipartSmsComplete( + result.getSendStatus(), result.getMessageRefs()); + } + }); + } + + @Override + public void sendMms(Uri pduUri, int subId, Uri location, + final ICarrierMessagingCallback callback) { + onSendMms(pduUri, subId, location, new ResultCallback() { + @Override + public void onReceiveResult(final SendMmsResult result) throws RemoteException { + callback.onSendMmsComplete(result.getSendStatus(), result.getSendConfPdu()); + } + }); + } + + @Override + public void downloadMms(Uri pduUri, int subId, Uri location, + final ICarrierMessagingCallback callback) { + onDownloadMms(pduUri, subId, location, new ResultCallback() { + @Override + public void onReceiveResult(Integer result) throws RemoteException { + callback.onDownloadMmsComplete(result); + } + }); + } + } +} diff --git a/core/java/android/service/carrier/ICarrierMessagingCallback.aidl b/core/java/android/service/carrier/ICarrierMessagingCallback.aidl new file mode 100644 index 0000000000000000000000000000000000000000..6118a20ca006089b1d0452f341c706770843a6dc --- /dev/null +++ b/core/java/android/service/carrier/ICarrierMessagingCallback.aidl @@ -0,0 +1,30 @@ +/** + * Copyright (c) 2014, 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.service.carrier; + +/** + * Callback interface definition for the Carrier Messaging Service client to get informed of the + * result of various API invocations. + * @hide + */ +oneway interface ICarrierMessagingCallback { + void onFilterComplete(boolean keepMessage); + void onSendSmsComplete(int result, int messageRef); + void onSendMultipartSmsComplete(int result, in int[] messageRefs); + void onSendMmsComplete(int result, in byte[] sendConfPdu); + void onDownloadMmsComplete(int result); +} diff --git a/core/java/android/service/carrier/ICarrierMessagingService.aidl b/core/java/android/service/carrier/ICarrierMessagingService.aidl new file mode 100644 index 0000000000000000000000000000000000000000..40a9047da4428864dccbcaeef3f1e7f11b3004f4 --- /dev/null +++ b/core/java/android/service/carrier/ICarrierMessagingService.aidl @@ -0,0 +1,110 @@ +/** + * Copyright (c) 2014, 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.service.carrier; + +import android.net.Uri; +import android.service.carrier.ICarrierMessagingCallback; +import android.service.carrier.MessagePdu; + +/** + *

            Note: + * This service can only be implemented by a carrier privileged app. + * @hide + */ +oneway interface ICarrierMessagingService { + /** + * Request filtering an incoming SMS message. + * The service will call callback.onFilterComplete with the filtering result. + * + * @param pdu the PDUs of the message + * @param format the format of the PDUs, typically "3gpp" or "3gpp2" + * @param destPort the destination port of a data SMS. It will be -1 for text SMS + * @param subId SMS subscription ID of the SIM + * @param callback the callback to notify upon completion + */ + void filterSms( + in MessagePdu pdu, String format, int destPort, int subId, + in ICarrierMessagingCallback callback); + + /** + * Request sending a new text SMS from the device. + * The service will call {@link ICarrierMessagingCallback#onSendSmsComplete} with the send + * status. + * + * @param text the text to send + * @param subId SMS subscription ID of the SIM + * @param destAddress phone number of the recipient of the message + * @param callback the callback to notify upon completion + */ + void sendTextSms(String text, int subId, String destAddress, + in ICarrierMessagingCallback callback); + + /** + * Request sending a new data SMS from the device. + * The service will call {@link ICarrierMessagingCallback#onSendSmsComplete} with the send + * status. + * + * @param data the data to send + * @param subId SMS subscription ID of the SIM + * @param destAddress phone number of the recipient of the message + * @param destPort port number of the recipient of the message + * @param callback the callback to notify upon completion + */ + void sendDataSms(in byte[] data, int subId, String destAddress, int destPort, + in ICarrierMessagingCallback callback); + + /** + * Request sending a new multi-part text SMS from the device. + * The service will call {@link ICarrierMessagingCallback#onSendMultipartSmsComplete} + * with the send status. + * + * @param parts the parts of the multi-part text SMS to send + * @param subId SMS subscription ID of the SIM + * @param destAddress phone number of the recipient of the message + * @param callback the callback to notify upon completion + */ + void sendMultipartTextSms(in List parts, int subId, String destAddress, + in ICarrierMessagingCallback callback); + + /** + * Request sending a new MMS PDU from the device. + * The service will call {@link ICarrierMessagingCallback#onSendMmsComplete} with the send + * status. + * + * @param pduUri the content provider URI of the PDU to send + * @param subId SMS subscription ID of the SIM + * @param location the optional URI to send this MMS PDU. If this is {code null}, + * the PDU should be sent to the default MMSC URL. + * @param callback the callback to notify upon completion + */ + void sendMms(in Uri pduUri, int subId, in Uri location, + in ICarrierMessagingCallback callback); + + /** + * Request downloading a new MMS. + * The service will call {@link ICarrierMessagingCallback#onDownloadMmsComplete} with the + * download status. + * + * @param pduUri the content provider URI of the PDU to be downloaded. + * @param subId SMS subscription ID of the SIM + * @param location the URI of the message to be downloaded. + * @param callback the callback to notify upon completion + */ + void downloadMms(in Uri pduUri, int subId, in Uri location, + in ICarrierMessagingCallback callback); +} + diff --git a/core/java/android/service/carrier/MessagePdu.aidl b/core/java/android/service/carrier/MessagePdu.aidl new file mode 100644 index 0000000000000000000000000000000000000000..f0528a5465e6909a29b6340b23f7ea0f3725c0d9 --- /dev/null +++ b/core/java/android/service/carrier/MessagePdu.aidl @@ -0,0 +1,19 @@ +/** + * Copyright (c) 2014, 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.service.carrier; + +parcelable MessagePdu; diff --git a/core/java/android/service/carrier/MessagePdu.java b/core/java/android/service/carrier/MessagePdu.java new file mode 100644 index 0000000000000000000000000000000000000000..ca18e53274ba88207096d7cbcbdcd8cc16dcefb0 --- /dev/null +++ b/core/java/android/service/carrier/MessagePdu.java @@ -0,0 +1,97 @@ +/* + * Copyright (C) 2014 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.service.carrier; + +import android.annotation.NonNull; +import android.os.Parcel; +import android.os.Parcelable; + +import java.util.ArrayList; +import java.util.List; + +/** + * A parcelable list of PDUs representing contents of a possibly multi-part SMS. + */ +public final class MessagePdu implements Parcelable { + private static final int NULL_LENGTH = -1; + + private final List mPduList; + + /** + * Constructs a MessagePdu with the list of message PDUs. + * + * @param pduList the list of message PDUs + */ + public MessagePdu(@NonNull List pduList) { + if (pduList == null || pduList.contains(null)) { + throw new IllegalArgumentException("pduList must not be null or contain nulls"); + } + mPduList = pduList; + } + + /** + * Returns the contents of a possibly multi-part SMS. + * + * @return the list of PDUs + */ + public @NonNull List getPdus() { + return mPduList; + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + if (mPduList == null) { + dest.writeInt(NULL_LENGTH); + } else { + dest.writeInt(mPduList.size()); + for (byte[] messagePdu : mPduList) { + dest.writeByteArray(messagePdu); + } + } + } + + /** + * Constructs a {@link MessagePdu} from a {@link Parcel}. + */ + public static final Parcelable.Creator CREATOR + = new Parcelable.Creator() { + @Override + public MessagePdu createFromParcel(Parcel source) { + int size = source.readInt(); + List pduList; + if (size == NULL_LENGTH) { + pduList = null; + } else { + pduList = new ArrayList<>(size); + for (int i = 0; i < size; i++) { + pduList.add(source.createByteArray()); + } + } + return new MessagePdu(pduList); + } + + @Override + public MessagePdu[] newArray(int size) { + return new MessagePdu[size]; + } + }; +} diff --git a/core/java/android/service/notification/Condition.java b/core/java/android/service/notification/Condition.java index 3a91d1a7f08779b228e142dc91a55a9867dbb7e9..80bdbf19ab40b6af965634f87420f4aaa2a7de72 100644 --- a/core/java/android/service/notification/Condition.java +++ b/core/java/android/service/notification/Condition.java @@ -160,7 +160,7 @@ public class Condition implements Parcelable { } public static boolean isValidId(Uri id, String pkg) { - return id != null && id.getScheme().equals(SCHEME) && id.getAuthority().equals(pkg); + return id != null && SCHEME.equals(id.getScheme()) && pkg.equals(id.getAuthority()); } public static final Parcelable.Creator CREATOR diff --git a/core/java/android/service/notification/ZenModeConfig.java b/core/java/android/service/notification/ZenModeConfig.java index 882a3c83d7acb1dea995b42316818a7d7bc0201d..979a01bc18a8946f21ce5fef84b0c38d775ec194 100644 --- a/core/java/android/service/notification/ZenModeConfig.java +++ b/core/java/android/service/notification/ZenModeConfig.java @@ -17,11 +17,13 @@ package android.service.notification; import android.content.ComponentName; +import android.content.Context; import android.content.res.Resources; import android.net.Uri; import android.os.Parcel; import android.os.Parcelable; import android.text.TextUtils; +import android.text.format.DateFormat; import android.util.Slog; import org.xmlpull.v1.XmlPullParser; @@ -32,8 +34,11 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; +import java.util.Locale; import java.util.Objects; +import com.android.internal.R; + /** * Persisted configuration for zen mode. * @@ -59,7 +64,7 @@ public class ZenModeConfig implements Parcelable { public static final int[] MINUTE_BUCKETS = new int[] { 15, 30, 45, 60, 120, 180, 240, 480 }; private static final int SECONDS_MS = 1000; private static final int MINUTES_MS = 60 * SECONDS_MS; - private static final int ZERO_VALUE_MS = 20 * SECONDS_MS; + private static final int ZERO_VALUE_MS = 10 * SECONDS_MS; private static final boolean DEFAULT_ALLOW_EVENTS = true; @@ -73,6 +78,7 @@ public class ZenModeConfig implements Parcelable { private static final String ALLOW_ATT_EVENTS = "events"; private static final String SLEEP_TAG = "sleep"; private static final String SLEEP_ATT_MODE = "mode"; + private static final String SLEEP_ATT_NONE = "none"; private static final String SLEEP_ATT_START_HR = "startHour"; private static final String SLEEP_ATT_START_MIN = "startMin"; @@ -102,6 +108,7 @@ public class ZenModeConfig implements Parcelable { public int sleepStartMinute; // 0-59 public int sleepEndHour; public int sleepEndMinute; + public boolean sleepNone; // false = priority, true = none public ComponentName[] conditionComponents; public Uri[] conditionIds; public Condition exitCondition; @@ -120,6 +127,7 @@ public class ZenModeConfig implements Parcelable { sleepStartMinute = source.readInt(); sleepEndHour = source.readInt(); sleepEndMinute = source.readInt(); + sleepNone = source.readInt() == 1; int len = source.readInt(); if (len > 0) { conditionComponents = new ComponentName[len]; @@ -150,6 +158,7 @@ public class ZenModeConfig implements Parcelable { dest.writeInt(sleepStartMinute); dest.writeInt(sleepEndHour); dest.writeInt(sleepEndMinute); + dest.writeInt(sleepNone ? 1 : 0); if (conditionComponents != null && conditionComponents.length > 0) { dest.writeInt(conditionComponents.length); dest.writeTypedArray(conditionComponents, 0); @@ -177,6 +186,7 @@ public class ZenModeConfig implements Parcelable { .append(",sleepMode=").append(sleepMode) .append(",sleepStart=").append(sleepStartHour).append('.').append(sleepStartMinute) .append(",sleepEnd=").append(sleepEndHour).append('.').append(sleepEndMinute) + .append(",sleepNone=").append(sleepNone) .append(",conditionComponents=") .append(conditionComponents == null ? null : TextUtils.join(",", conditionComponents)) .append(",conditionIds=") @@ -209,6 +219,7 @@ public class ZenModeConfig implements Parcelable { && other.allowFrom == allowFrom && other.allowEvents == allowEvents && Objects.equals(other.sleepMode, sleepMode) + && other.sleepNone == sleepNone && other.sleepStartHour == sleepStartHour && other.sleepStartMinute == sleepStartMinute && other.sleepEndHour == sleepEndHour @@ -221,7 +232,7 @@ public class ZenModeConfig implements Parcelable { @Override public int hashCode() { - return Objects.hash(allowCalls, allowMessages, allowFrom, allowEvents, sleepMode, + return Objects.hash(allowCalls, allowMessages, allowFrom, allowEvents, sleepMode, sleepNone, sleepStartHour, sleepStartMinute, sleepEndHour, sleepEndMinute, Arrays.hashCode(conditionComponents), Arrays.hashCode(conditionIds), exitCondition, exitConditionComponent); @@ -297,6 +308,7 @@ public class ZenModeConfig implements Parcelable { } else if (SLEEP_TAG.equals(tag)) { final String mode = parser.getAttributeValue(null, SLEEP_ATT_MODE); rt.sleepMode = isValidSleepMode(mode)? mode : null; + rt.sleepNone = safeBoolean(parser, SLEEP_ATT_NONE, false); final int startHour = safeInt(parser, SLEEP_ATT_START_HR, 0); final int startMinute = safeInt(parser, SLEEP_ATT_START_MIN, 0); final int endHour = safeInt(parser, SLEEP_ATT_END_HR, 0); @@ -340,6 +352,7 @@ public class ZenModeConfig implements Parcelable { if (sleepMode != null) { out.attribute(null, SLEEP_ATT_MODE, sleepMode); } + out.attribute(null, SLEEP_ATT_NONE, Boolean.toString(sleepNone)); out.attribute(null, SLEEP_ATT_START_HR, Integer.toString(sleepStartHour)); out.attribute(null, SLEEP_ATT_START_MIN, Integer.toString(sleepStartMinute)); out.attribute(null, SLEEP_ATT_END_HR, Integer.toString(sleepEndHour)); @@ -458,31 +471,48 @@ public class ZenModeConfig implements Parcelable { downtime.startMinute = sleepStartMinute; downtime.endHour = sleepEndHour; downtime.endMinute = sleepEndMinute; + downtime.mode = sleepMode; + downtime.none = sleepNone; return downtime; } - public static Condition toTimeCondition(int minutesFromNow) { + public static Condition toTimeCondition(Context context, int minutesFromNow, int userHandle) { final long now = System.currentTimeMillis(); final long millis = minutesFromNow == 0 ? ZERO_VALUE_MS : minutesFromNow * MINUTES_MS; - return toTimeCondition(now + millis, minutesFromNow); + return toTimeCondition(context, now + millis, minutesFromNow, now, userHandle); } - public static Condition toTimeCondition(long time, int minutes) { - final int num = minutes < 60 ? minutes : Math.round(minutes / 60f); - final int resId = minutes < 60 - ? com.android.internal.R.plurals.zen_mode_duration_minutes - : com.android.internal.R.plurals.zen_mode_duration_hours; - final String caption = Resources.getSystem().getQuantityString(resId, num, num); + public static Condition toTimeCondition(Context context, long time, int minutes, long now, + int userHandle) { + final int num, summaryResId, line1ResId; + if (minutes < 60) { + // display as minutes + num = minutes; + summaryResId = R.plurals.zen_mode_duration_minutes_summary; + line1ResId = R.plurals.zen_mode_duration_minutes; + } else { + // display as hours + num = Math.round(minutes / 60f); + summaryResId = com.android.internal.R.plurals.zen_mode_duration_hours_summary; + line1ResId = com.android.internal.R.plurals.zen_mode_duration_hours; + } + final String skeleton = DateFormat.is24HourFormat(context, userHandle) ? "Hm" : "hma"; + final String pattern = DateFormat.getBestDateTimePattern(Locale.getDefault(), skeleton); + final CharSequence formattedTime = DateFormat.format(pattern, time); + final Resources res = context.getResources(); + final String summary = res.getQuantityString(summaryResId, num, num, formattedTime); + final String line1 = res.getQuantityString(line1ResId, num, num, formattedTime); + final String line2 = res.getString(R.string.zen_mode_until, formattedTime); final Uri id = toCountdownConditionId(time); - return new Condition(id, caption, "", "", 0, Condition.STATE_TRUE, + return new Condition(id, summary, line1, line2, 0, Condition.STATE_TRUE, Condition.FLAG_RELEVANT_NOW); } // For built-in conditions - private static final String SYSTEM_AUTHORITY = "android"; + public static final String SYSTEM_AUTHORITY = "android"; // Built-in countdown conditions, e.g. condition://android/countdown/1399917958951 - private static final String COUNTDOWN_PATH = "countdown"; + public static final String COUNTDOWN_PATH = "countdown"; public static Uri toCountdownConditionId(long time) { return new Uri.Builder().scheme(Condition.SCHEME) @@ -508,8 +538,9 @@ public class ZenModeConfig implements Parcelable { return tryParseCountdownConditionId(conditionId) != 0; } - // Built-in downtime conditions, e.g. condition://android/downtime?start=10.00&end=7.00 - private static final String DOWNTIME_PATH = "downtime"; + // Built-in downtime conditions + // e.g. condition://android/downtime?start=10.00&end=7.00&mode=days%3A5%2C6&none=false + public static final String DOWNTIME_PATH = "downtime"; public static Uri toDowntimeConditionId(DowntimeInfo downtime) { return new Uri.Builder().scheme(Condition.SCHEME) @@ -517,6 +548,8 @@ public class ZenModeConfig implements Parcelable { .appendPath(DOWNTIME_PATH) .appendQueryParameter("start", downtime.startHour + "." + downtime.startMinute) .appendQueryParameter("end", downtime.endHour + "." + downtime.endMinute) + .appendQueryParameter("mode", downtime.mode) + .appendQueryParameter("none", Boolean.toString(downtime.none)) .build(); } @@ -534,6 +567,8 @@ public class ZenModeConfig implements Parcelable { downtime.startMinute = start[1]; downtime.endHour = end[0]; downtime.endMinute = end[1]; + downtime.mode = conditionId.getQueryParameter("mode"); + downtime.none = Boolean.toString(true).equals(conditionId.getQueryParameter("none")); return downtime; } @@ -555,6 +590,8 @@ public class ZenModeConfig implements Parcelable { public int startMinute; // 0-59 public int endHour; public int endMinute; + public String mode; + public boolean none; @Override public int hashCode() { @@ -568,7 +605,12 @@ public class ZenModeConfig implements Parcelable { return startHour == other.startHour && startMinute == other.startMinute && endHour == other.endHour - && endMinute == other.endMinute; + && endMinute == other.endMinute + && Objects.equals(mode, other.mode) + && none == other.none; } } + + // built-in next alarm conditions + public static final String NEXT_ALARM_PATH = "next_alarm"; } diff --git a/core/java/android/service/trust/ITrustAgentService.aidl b/core/java/android/service/trust/ITrustAgentService.aidl index bd80a3fa4a862f210ef40c73846d088260982641..f07d0d032ed12c04fd27ee867b2e1a13b0a6d29f 100644 --- a/core/java/android/service/trust/ITrustAgentService.aidl +++ b/core/java/android/service/trust/ITrustAgentService.aidl @@ -15,7 +15,7 @@ */ package android.service.trust; -import android.os.Bundle; +import android.os.PersistableBundle; import android.service.trust.ITrustAgentServiceCallback; /** @@ -25,6 +25,8 @@ import android.service.trust.ITrustAgentServiceCallback; interface ITrustAgentService { oneway void onUnlockAttempt(boolean successful); oneway void onTrustTimeout(); + oneway void onDeviceLocked(); + oneway void onDeviceUnlocked(); + oneway void onConfigure(in List options, IBinder token); oneway void setCallback(ITrustAgentServiceCallback callback); - oneway void setTrustAgentFeaturesEnabled(in Bundle options, IBinder token); } diff --git a/core/java/android/service/trust/ITrustAgentServiceCallback.aidl b/core/java/android/service/trust/ITrustAgentServiceCallback.aidl index b107bccb4f84c42d2791593cb164a813e7797689..76b2be0a6760cff04a253ac43852ba1035d24e17 100644 --- a/core/java/android/service/trust/ITrustAgentServiceCallback.aidl +++ b/core/java/android/service/trust/ITrustAgentServiceCallback.aidl @@ -27,5 +27,5 @@ oneway interface ITrustAgentServiceCallback { void grantTrust(CharSequence message, long durationMs, boolean initiatedByUser); void revokeTrust(); void setManagingTrust(boolean managingTrust); - void onSetTrustAgentFeaturesEnabledCompleted(boolean result, IBinder token); + void onConfigureCompleted(boolean result, IBinder token); } diff --git a/core/java/android/service/trust/TrustAgentService.java b/core/java/android/service/trust/TrustAgentService.java index 3ef5b3701b36f3004ce85a0ea4ba501b825ea074..62fa9789eb647150f6debe62fc9289ae782a1a3d 100644 --- a/core/java/android/service/trust/TrustAgentService.java +++ b/core/java/android/service/trust/TrustAgentService.java @@ -29,11 +29,14 @@ import android.os.Bundle; import android.os.Handler; import android.os.IBinder; import android.os.Message; +import android.os.PersistableBundle; import android.os.RemoteException; import android.os.SystemClock; import android.util.Log; import android.util.Slog; +import java.util.List; + /** * A service that notifies the system about whether it believes the environment of the device * to be trusted. @@ -86,16 +89,23 @@ public class TrustAgentService extends Service { */ public static final String TRUST_AGENT_META_DATA = "android.service.trust.trustagent"; - /** - * A white list of features that the given trust agent should support when otherwise disabled - * by device policy. - * @hide - */ - public static final String KEY_FEATURES = "trust_agent_features"; - private static final int MSG_UNLOCK_ATTEMPT = 1; - private static final int MSG_SET_TRUST_AGENT_FEATURES_ENABLED = 2; + private static final int MSG_CONFIGURE = 2; private static final int MSG_TRUST_TIMEOUT = 3; + private static final int MSG_DEVICE_LOCKED = 4; + private static final int MSG_DEVICE_UNLOCKED = 5; + + /** + * Class containing raw data for a given configuration request. + */ + private static final class ConfigurationData { + final IBinder token; + final List options; + ConfigurationData(List opts, IBinder t) { + options = opts; + token = t; + } + } private ITrustAgentServiceCallback mCallback; @@ -112,13 +122,12 @@ public class TrustAgentService extends Service { case MSG_UNLOCK_ATTEMPT: onUnlockAttempt(msg.arg1 != 0); break; - case MSG_SET_TRUST_AGENT_FEATURES_ENABLED: - Bundle features = msg.peekData(); - IBinder token = (IBinder) msg.obj; - boolean result = onSetTrustAgentFeaturesEnabled(features); + case MSG_CONFIGURE: + ConfigurationData data = (ConfigurationData) msg.obj; + boolean result = onConfigure(data.options); try { synchronized (mLock) { - mCallback.onSetTrustAgentFeaturesEnabledCompleted(result, token); + mCallback.onConfigureCompleted(result, data.token); } } catch (RemoteException e) { onError("calling onSetTrustAgentFeaturesEnabledCompleted()"); @@ -127,6 +136,12 @@ public class TrustAgentService extends Service { case MSG_TRUST_TIMEOUT: onTrustTimeout(); break; + case MSG_DEVICE_LOCKED: + onDeviceLocked(); + break; + case MSG_DEVICE_UNLOCKED: + onDeviceUnlocked(); + break; } } }; @@ -166,28 +181,35 @@ public class TrustAgentService extends Service { public void onTrustTimeout() { } + /** + * Called when the device enters a state where a PIN, pattern or + * password must be entered to unlock it. + */ + public void onDeviceLocked() { + } + + /** + * Called when the device leaves a state where a PIN, pattern or + * password must be entered to unlock it. + */ + public void onDeviceUnlocked() { + } + private void onError(String msg) { Slog.v(TAG, "Remote exception while " + msg); } /** - * Called when device policy wants to restrict features in the agent in response to - * {@link DevicePolicyManager#setTrustAgentFeaturesEnabled(ComponentName, ComponentName, java.util.List) }. - * Agents that support this feature should overload this method and return 'true'. - * - * The list of options can be obtained by calling - * options.getStringArrayList({@link #KEY_FEATURES}). Presence of a feature string in the list - * means it should be enabled ("white-listed"). Absence of the feature means it should be - * disabled. An empty list means all features should be disabled. + * Called when device policy admin wants to enable specific options for agent in response to + * {@link DevicePolicyManager#setKeyguardDisabledFeatures(ComponentName, int)} and + * {@link DevicePolicyManager#setTrustAgentConfiguration(ComponentName, ComponentName, + * PersistableBundle)}. + *

            Agents that support configuration options should overload this method and return 'true'. * - * This function is only called if {@link DevicePolicyManager#KEYGUARD_DISABLE_TRUST_AGENTS} is - * set. - * - * @param options Option feature bundle. - * @return true if the {@link TrustAgentService} supports this feature. - * @hide + * @param options bundle containing all options or null if none. + * @return true if the {@link TrustAgentService} supports configuration options. */ - public boolean onSetTrustAgentFeaturesEnabled(Bundle options) { + public boolean onConfigure(List options) { return false; } @@ -294,6 +316,22 @@ public class TrustAgentService extends Service { mHandler.sendEmptyMessage(MSG_TRUST_TIMEOUT); } + @Override /* Binder API */ + public void onConfigure(List args, IBinder token) { + mHandler.obtainMessage(MSG_CONFIGURE, new ConfigurationData(args, token)) + .sendToTarget(); + } + + @Override + public void onDeviceLocked() throws RemoteException { + mHandler.obtainMessage(MSG_DEVICE_LOCKED).sendToTarget(); + } + + @Override + public void onDeviceUnlocked() throws RemoteException { + mHandler.obtainMessage(MSG_DEVICE_UNLOCKED).sendToTarget(); + } + @Override /* Binder API */ public void setCallback(ITrustAgentServiceCallback callback) { synchronized (mLock) { @@ -313,13 +351,6 @@ public class TrustAgentService extends Service { } } } - - @Override /* Binder API */ - public void setTrustAgentFeaturesEnabled(Bundle features, IBinder token) { - Message msg = mHandler.obtainMessage(MSG_SET_TRUST_AGENT_FEATURES_ENABLED, token); - msg.setData(features); - msg.sendToTarget(); - } } } diff --git a/core/java/android/service/wallpaper/WallpaperService.java b/core/java/android/service/wallpaper/WallpaperService.java index 26e9a3031b3b413aa347da50376542c4f026161e..9496b5316764a07ec200d83313a79b930afcf1b6 100644 --- a/core/java/android/service/wallpaper/WallpaperService.java +++ b/core/java/android/service/wallpaper/WallpaperService.java @@ -23,6 +23,7 @@ import android.util.DisplayMetrics; import android.util.TypedValue; import android.view.ViewRootImpl; import android.view.WindowInsets; + import com.android.internal.R; import com.android.internal.os.HandlerCaller; import com.android.internal.view.BaseIWindow; @@ -32,18 +33,17 @@ import android.annotation.SdkConstant; import android.annotation.SdkConstant.SdkConstantType; import android.app.Service; import android.app.WallpaperManager; -import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; -import android.content.IntentFilter; import android.content.res.Configuration; import android.graphics.PixelFormat; import android.graphics.Rect; +import android.hardware.display.DisplayManager; +import android.hardware.display.DisplayManager.DisplayListener; import android.os.Bundle; import android.os.IBinder; import android.os.Looper; import android.os.Message; -import android.os.PowerManager; import android.os.RemoteException; import android.util.Log; import android.view.Display; @@ -139,7 +139,6 @@ public abstract class WallpaperService extends Service { boolean mInitializing = true; boolean mVisible; - boolean mScreenOn = true; boolean mReportedVisible; boolean mDestroyed; @@ -191,20 +190,10 @@ public abstract class WallpaperService extends Service { float mPendingYOffsetStep; boolean mPendingSync; MotionEvent mPendingMove; - - final BroadcastReceiver mReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - if (Intent.ACTION_SCREEN_ON.equals(intent.getAction())) { - mScreenOn = true; - reportVisibility(); - } else if (Intent.ACTION_SCREEN_OFF.equals(intent.getAction())) { - mScreenOn = false; - reportVisibility(); - } - } - }; - + + DisplayManager mDisplayManager; + Display mDisplay; + final BaseSurfaceHolder mSurfaceHolder = new BaseSurfaceHolder() { { mRequestedFormat = PixelFormat.RGBX_8888; @@ -536,8 +525,8 @@ public abstract class WallpaperService extends Service { out.print(prefix); out.print("mInitializing="); out.print(mInitializing); out.print(" mDestroyed="); out.println(mDestroyed); out.print(prefix); out.print("mVisible="); out.print(mVisible); - out.print(" mScreenOn="); out.print(mScreenOn); out.print(" mReportedVisible="); out.println(mReportedVisible); + out.print(prefix); out.print("mDisplay="); out.println(mDisplay); out.print(prefix); out.print("mCreated="); out.print(mCreated); out.print(" mSurfaceCreated="); out.print(mSurfaceCreated); out.print(" mIsCreating="); out.print(mIsCreating); @@ -549,7 +538,7 @@ public abstract class WallpaperService extends Service { out.print(prefix); out.print("mType="); out.print(mType); out.print(" mWindowFlags="); out.print(mWindowFlags); out.print(" mCurWindowFlags="); out.println(mCurWindowFlags); - out.print(" mWindowPrivateFlags="); out.print(mWindowPrivateFlags); + out.print(prefix); out.print("mWindowPrivateFlags="); out.print(mWindowPrivateFlags); out.print(" mCurWindowPrivateFlags="); out.println(mCurWindowPrivateFlags); out.print(prefix); out.print("mVisibleInsets="); out.print(mVisibleInsets.toShortString()); @@ -675,7 +664,8 @@ public abstract class WallpaperService extends Service { com.android.internal.R.style.Animation_Wallpaper; mInputChannel = new InputChannel(); if (mSession.addToDisplay(mWindow, mWindow.mSeq, mLayout, View.VISIBLE, - Display.DEFAULT_DISPLAY, mContentInsets, mInputChannel) < 0) { + Display.DEFAULT_DISPLAY, mContentInsets, mStableInsets, + mInputChannel) < 0) { Log.w(TAG, "Failed to add window while updating wallpaper surface."); return; } @@ -875,13 +865,10 @@ public abstract class WallpaperService extends Service { mWindow.setSession(mSession); - mScreenOn = ((PowerManager)getSystemService(Context.POWER_SERVICE)).isScreenOn(); + mDisplayManager = (DisplayManager)getSystemService(Context.DISPLAY_SERVICE); + mDisplayManager.registerDisplayListener(mDisplayListener, mCaller.getHandler()); + mDisplay = mDisplayManager.getDisplay(Display.DEFAULT_DISPLAY); - IntentFilter filter = new IntentFilter(); - filter.addAction(Intent.ACTION_SCREEN_ON); - filter.addAction(Intent.ACTION_SCREEN_OFF); - registerReceiver(mReceiver, filter); - if (DEBUG) Log.v(TAG, "onCreate(): " + this); onCreate(mSurfaceHolder); @@ -920,7 +907,8 @@ public abstract class WallpaperService extends Service { void reportVisibility() { if (!mDestroyed) { - boolean visible = mVisible && mScreenOn; + boolean visible = mVisible + & mDisplay != null && mDisplay.getState() != Display.STATE_OFF; if (mReportedVisible != visible) { mReportedVisible = visible; if (DEBUG) Log.v(TAG, "onVisibilityChanged(" + visible @@ -1023,7 +1011,11 @@ public abstract class WallpaperService extends Service { } mDestroyed = true; - + + if (mDisplayManager != null) { + mDisplayManager.unregisterDisplayListener(mDisplayListener); + } + if (mVisible) { mVisible = false; if (DEBUG) Log.v(TAG, "onVisibilityChanged(false): " + this); @@ -1034,9 +1026,7 @@ public abstract class WallpaperService extends Service { if (DEBUG) Log.v(TAG, "onDestroy(): " + this); onDestroy(); - - unregisterReceiver(mReceiver); - + if (mCreated) { try { if (DEBUG) Log.v(TAG, "Removing window and destroying surface " @@ -1061,8 +1051,25 @@ public abstract class WallpaperService extends Service { } } } + + private final DisplayListener mDisplayListener = new DisplayListener() { + @Override + public void onDisplayChanged(int displayId) { + if (mDisplay.getDisplayId() == displayId) { + reportVisibility(); + } + } + + @Override + public void onDisplayRemoved(int displayId) { + } + + @Override + public void onDisplayAdded(int displayId) { + } + }; } - + class IWallpaperEngineWrapper extends IWallpaperEngine.Stub implements HandlerCaller.Callback { private final HandlerCaller mCaller; diff --git a/core/java/android/text/StaticLayout.java b/core/java/android/text/StaticLayout.java index 2853b01f1d947870625932be6097a77c256dfe9d..07505a9a72f19e051d5f21540cfeec06a1bfe421 100644 --- a/core/java/android/text/StaticLayout.java +++ b/core/java/android/text/StaticLayout.java @@ -383,7 +383,6 @@ public class StaticLayout extends Layout { okBottom = fitBottom; } } else { - final boolean moreChars; int endPos; int above, below, top, bottom; float currentTextWidth; @@ -395,7 +394,6 @@ public class StaticLayout extends Layout { top = okTop; bottom = okBottom; currentTextWidth = okWidth; - moreChars = (j + 1 < spanEnd); } else if (fit != here) { endPos = fit; above = fitAscent; @@ -403,7 +401,6 @@ public class StaticLayout extends Layout { top = fitTop; bottom = fitBottom; currentTextWidth = fitWidth; - moreChars = (j + 1 < spanEnd); } else { // must make progress, so take next character endPos = here + 1; @@ -417,15 +414,18 @@ public class StaticLayout extends Layout { top = fmTop; bottom = fmBottom; currentTextWidth = widths[here - paraStart]; - moreChars = (endPos < spanEnd); } - v = out(source, here, endPos, + int ellipseEnd = endPos; + if (mMaximumVisibleLineCount == 1 && ellipsize == TextUtils.TruncateAt.MIDDLE) { + ellipseEnd = paraEnd; + } + v = out(source, here, ellipseEnd, above, below, top, bottom, v, spacingmult, spacingadd, chooseHt,chooseHtv, fm, hasTabOrEmoji, needMultiply, chdirs, dir, easy, bufEnd, includepad, trackpad, chs, widths, paraStart, ellipsize, ellipsizedWidth, - currentTextWidth, paint, moreChars); + currentTextWidth, paint, true); here = endPos; j = here - 1; // restart j-span loop from here, compensating for the j++ @@ -708,7 +708,7 @@ public class StaticLayout extends Layout { int left = 0, right = len; float ravail = (avail - ellipsisWidth) / 2; - for (right = len; right >= 0; right--) { + for (right = len; right > 0; right--) { float w = widths[right - 1 + lineStart - widthStart]; if (w + rsum > ravail) { diff --git a/core/java/android/text/TextLine.java b/core/java/android/text/TextLine.java index c19cf32c45d49eaad95425bee3a668dab5dfb00f..4725581a4021ab7503fd70ec8b32b4811a095d8f 100644 --- a/core/java/android/text/TextLine.java +++ b/core/java/android/text/TextLine.java @@ -100,6 +100,9 @@ class TextLine { tl.mText = null; tl.mPaint = null; tl.mDirections = null; + tl.mSpanned = null; + tl.mTabs = null; + tl.mChars = null; tl.mMetricAffectingSpanSpanSet.recycle(); tl.mCharacterStyleSpanSet.recycle(); diff --git a/core/java/android/text/format/DateFormat.java b/core/java/android/text/format/DateFormat.java index d515e210cda4c28f0184187d38ec2c7dbe0cf2a6..c03f7a6804547d93e2199e68257eab0602f5af15 100755 --- a/core/java/android/text/format/DateFormat.java +++ b/core/java/android/text/format/DateFormat.java @@ -17,6 +17,7 @@ package android.text.format; import android.content.Context; +import android.os.UserHandle; import android.provider.Settings; import android.text.SpannableStringBuilder; import android.text.Spanned; @@ -60,27 +61,45 @@ import libcore.icu.LocaleData; * {@code SimpleDateFormat}. */ public class DateFormat { - /** @deprecated Use a literal {@code '} instead. */ + /** + * @deprecated Use a literal {@code '} instead. + * @removed + */ @Deprecated public static final char QUOTE = '\''; - /** @deprecated Use a literal {@code 'a'} instead. */ + /** + * @deprecated Use a literal {@code 'a'} instead. + * @removed + */ @Deprecated public static final char AM_PM = 'a'; - /** @deprecated Use a literal {@code 'a'} instead; 'A' was always equivalent to 'a'. */ + /** + * @deprecated Use a literal {@code 'a'} instead; 'A' was always equivalent to 'a'. + * @removed + */ @Deprecated public static final char CAPITAL_AM_PM = 'A'; - /** @deprecated Use a literal {@code 'd'} instead. */ + /** + * @deprecated Use a literal {@code 'd'} instead. + * @removed + */ @Deprecated public static final char DATE = 'd'; - /** @deprecated Use a literal {@code 'E'} instead. */ + /** + * @deprecated Use a literal {@code 'E'} instead. + * @removed + */ @Deprecated public static final char DAY = 'E'; - /** @deprecated Use a literal {@code 'h'} instead. */ + /** + * @deprecated Use a literal {@code 'h'} instead. + * @removed + */ @Deprecated public static final char HOUR = 'h'; @@ -88,31 +107,51 @@ public class DateFormat { * @deprecated Use a literal {@code 'H'} (for compatibility with {@link SimpleDateFormat} * and Unicode) or {@code 'k'} (for compatibility with Android releases up to and including * Jelly Bean MR-1) instead. Note that the two are incompatible. + * + * @removed */ @Deprecated public static final char HOUR_OF_DAY = 'k'; - /** @deprecated Use a literal {@code 'm'} instead. */ + /** + * @deprecated Use a literal {@code 'm'} instead. + * @removed + */ @Deprecated public static final char MINUTE = 'm'; - /** @deprecated Use a literal {@code 'M'} instead. */ + /** + * @deprecated Use a literal {@code 'M'} instead. + * @removed + */ @Deprecated public static final char MONTH = 'M'; - /** @deprecated Use a literal {@code 'L'} instead. */ + /** + * @deprecated Use a literal {@code 'L'} instead. + * @removed + */ @Deprecated public static final char STANDALONE_MONTH = 'L'; - /** @deprecated Use a literal {@code 's'} instead. */ + /** + * @deprecated Use a literal {@code 's'} instead. + * @removed + */ @Deprecated public static final char SECONDS = 's'; - /** @deprecated Use a literal {@code 'z'} instead. */ + /** + * @deprecated Use a literal {@code 'z'} instead. + * @removed + */ @Deprecated public static final char TIME_ZONE = 'z'; - /** @deprecated Use a literal {@code 'y'} instead. */ + /** + * @deprecated Use a literal {@code 'y'} instead. + * @removed + */ @Deprecated public static final char YEAR = 'y'; @@ -128,8 +167,20 @@ public class DateFormat { * @return true if 24 hour time format is selected, false otherwise. */ public static boolean is24HourFormat(Context context) { - String value = Settings.System.getString(context.getContentResolver(), - Settings.System.TIME_12_24); + return is24HourFormat(context, UserHandle.myUserId()); + } + + /** + * Returns true if user preference with the given user handle is set to 24-hour format. + * @param context the context to use for the content resolver + * @param userHandle the user handle of the user to query. + * @return true if 24 hour time format is selected, false otherwise. + * + * @hide + */ + public static boolean is24HourFormat(Context context, int userHandle) { + String value = Settings.System.getStringForUser(context.getContentResolver(), + Settings.System.TIME_12_24, userHandle); if (value == null) { Locale locale = context.getResources().getConfiguration().locale; @@ -141,7 +192,7 @@ public class DateFormat { } java.text.DateFormat natural = - java.text.DateFormat.getTimeInstance(java.text.DateFormat.LONG, locale); + java.text.DateFormat.getTimeInstance(java.text.DateFormat.LONG, locale); if (natural instanceof SimpleDateFormat) { SimpleDateFormat sdf = (SimpleDateFormat) natural; @@ -215,8 +266,19 @@ public class DateFormat { * @hide */ public static String getTimeFormatString(Context context) { + return getTimeFormatString(context, UserHandle.myUserId()); + } + + /** + * Returns a String pattern that can be used to format the time according + * to the current locale and the user's 12-/24-hour clock preference. + * @param context the application context + * @param userHandle the user handle of the user to query the format for + * @hide + */ + public static String getTimeFormatString(Context context, int userHandle) { LocaleData d = LocaleData.get(context.getResources().getConfiguration().locale); - return is24HourFormat(context) ? d.timeFormat_Hm : d.timeFormat_hm; + return is24HourFormat(context, userHandle) ? d.timeFormat_Hm : d.timeFormat_hm; } /** @@ -251,9 +313,9 @@ public class DateFormat { } /** - * Gets the current date format stored as a char array. The array will contain - * 3 elements ({@link #DATE}, {@link #MONTH}, and {@link #YEAR}) in the order - * specified by the user's format preference. Note that this order is + * Gets the current date format stored as a char array. Returns a 3 element + * array containing the day ({@code 'd'}), month ({@code 'M'}), and year ({@code 'y'})) + * in the order specified by the user's format preference. Note that this order is * only appropriate for all-numeric dates; spelled-out (MEDIUM and LONG) * dates will generally contain other punctuation, spaces, or words, * not just the day, month, and year, and not necessarily in the same diff --git a/core/java/android/text/format/Formatter.java b/core/java/android/text/format/Formatter.java index b0cbcd224c872f5c9668f54a2e52261b277fc0cc..b467f5a8c67ae728484ca28518e97242f520f549 100644 --- a/core/java/android/text/format/Formatter.java +++ b/core/java/android/text/format/Formatter.java @@ -110,6 +110,7 @@ public final class Formatter { private static final int SECONDS_PER_MINUTE = 60; private static final int SECONDS_PER_HOUR = 60 * 60; private static final int SECONDS_PER_DAY = 24 * 60 * 60; + private static final int MILLIS_PER_MINUTE = 1000 * 60; /** * Returns elapsed time for the given millis, in the following format: @@ -171,4 +172,24 @@ public final class Formatter { return context.getString(com.android.internal.R.string.durationSeconds, seconds); } } + + /** + * Returns elapsed time for the given millis, in the following format: + * 1 day 5 hrs; will include at most two units, can go down to minutes precision. + * @param context the application context + * @param millis the elapsed time in milli seconds + * @return the formatted elapsed time + * @hide + */ + public static String formatShortElapsedTimeRoundingUpToMinutes(Context context, long millis) { + long minutesRoundedUp = (millis + MILLIS_PER_MINUTE - 1) / MILLIS_PER_MINUTE; + + if (minutesRoundedUp == 0) { + return context.getString(com.android.internal.R.string.durationMinutes, 0); + } else if (minutesRoundedUp == 1) { + return context.getString(com.android.internal.R.string.durationMinute, 1); + } + + return formatShortElapsedTime(context, minutesRoundedUp * MILLIS_PER_MINUTE); + } } diff --git a/core/java/android/text/format/Time.java b/core/java/android/text/format/Time.java index 3c90ab639d6c2ed4c5627c958547b73b4b4f5cc0..0c66709ee1c956f7155cb0ae2223f2a255f825ac 100644 --- a/core/java/android/text/format/Time.java +++ b/core/java/android/text/format/Time.java @@ -48,7 +48,10 @@ import libcore.util.ZoneInfoDB; *

          • Much of the formatting / parsing assumes ASCII text and is therefore not suitable for * use with non-ASCII scripts.
          • *
          + * + * @deprecated Use {@link java.util.GregorianCalendar} instead. */ +@Deprecated public class Time { private static final String Y_M_D_T_H_M_S_000 = "%Y-%m-%dT%H:%M:%S.000"; private static final String Y_M_D_T_H_M_S_000_Z = "%Y-%m-%dT%H:%M:%S.000Z"; diff --git a/core/java/android/transition/ChangeBounds.java b/core/java/android/transition/ChangeBounds.java index 0da5fb6d91bc99992aa512dcf3a15b466a9eb3fb..c82587b76fe171eb9c8a8c2351f3207ea5d69ad0 100644 --- a/core/java/android/transition/ChangeBounds.java +++ b/core/java/android/transition/ChangeBounds.java @@ -16,7 +16,9 @@ package android.transition; +import android.animation.AnimatorSet; import android.content.Context; +import android.content.res.TypedArray; import android.graphics.PointF; import android.animation.Animator; @@ -31,11 +33,12 @@ import android.graphics.Rect; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.util.AttributeSet; -import android.util.IntProperty; import android.util.Property; import android.view.View; import android.view.ViewGroup; +import com.android.internal.R; + import java.util.Map; /** @@ -43,17 +46,20 @@ import java.util.Map; * the scene change and animates those changes during the transition. * *

          A ChangeBounds transition can be described in a resource file by using the - * tag changeBounds, along with the other standard + * tag changeBounds, using its attributes of + * {@link android.R.styleable#ChangeBounds} along with the other standard * attributes of {@link android.R.styleable#Transition}.

          */ public class ChangeBounds extends Transition { private static final String PROPNAME_BOUNDS = "android:changeBounds:bounds"; + private static final String PROPNAME_CLIP = "android:changeBounds:clip"; private static final String PROPNAME_PARENT = "android:changeBounds:parent"; private static final String PROPNAME_WINDOW_X = "android:changeBounds:windowX"; private static final String PROPNAME_WINDOW_Y = "android:changeBounds:windowY"; private static final String[] sTransitionProperties = { PROPNAME_BOUNDS, + PROPNAME_CLIP, PROPNAME_PARENT, PROPNAME_WINDOW_X, PROPNAME_WINDOW_Y @@ -77,6 +83,83 @@ public class ChangeBounds extends Transition { } }; + private static final Property TOP_LEFT_PROPERTY = + new Property(PointF.class, "topLeft") { + @Override + public void set(ViewBounds viewBounds, PointF topLeft) { + viewBounds.setTopLeft(topLeft); + } + + @Override + public PointF get(ViewBounds viewBounds) { + return null; + } + }; + + private static final Property BOTTOM_RIGHT_PROPERTY = + new Property(PointF.class, "bottomRight") { + @Override + public void set(ViewBounds viewBounds, PointF bottomRight) { + viewBounds.setBottomRight(bottomRight); + } + + @Override + public PointF get(ViewBounds viewBounds) { + return null; + } + }; + + private static final Property BOTTOM_RIGHT_ONLY_PROPERTY = + new Property(PointF.class, "bottomRight") { + @Override + public void set(View view, PointF bottomRight) { + int left = view.getLeft(); + int top = view.getTop(); + int right = Math.round(bottomRight.x); + int bottom = Math.round(bottomRight.y); + view.setLeftTopRightBottom(left, top, right, bottom); + } + + @Override + public PointF get(View view) { + return null; + } + }; + + private static final Property TOP_LEFT_ONLY_PROPERTY = + new Property(PointF.class, "topLeft") { + @Override + public void set(View view, PointF topLeft) { + int left = Math.round(topLeft.x); + int top = Math.round(topLeft.y); + int right = view.getRight(); + int bottom = view.getBottom(); + view.setLeftTopRightBottom(left, top, right, bottom); + } + + @Override + public PointF get(View view) { + return null; + } + }; + + private static final Property POSITION_PROPERTY = + new Property(PointF.class, "position") { + @Override + public void set(View view, PointF topLeft) { + int left = Math.round(topLeft.x); + int top = Math.round(topLeft.y); + int right = left + view.getWidth(); + int bottom = top + view.getHeight(); + view.setLeftTopRightBottom(left, top, right, bottom); + } + + @Override + public PointF get(View view) { + return null; + } + }; + int[] tempLocation = new int[2]; boolean mResizeClip = false; boolean mReparent = false; @@ -88,6 +171,11 @@ public class ChangeBounds extends Transition { public ChangeBounds(Context context, AttributeSet attrs) { super(context, attrs); + + TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ChangeBounds); + boolean resizeClip = a.getBoolean(R.styleable.ChangeBounds_resizeClip, false); + a.recycle(); + setResizeClip(resizeClip); } @Override @@ -95,10 +183,36 @@ public class ChangeBounds extends Transition { return sTransitionProperties; } + /** + * When resizeClip is true, ChangeBounds resizes the view using the clipBounds + * instead of changing the dimensions of the view during the animation. When + * resizeClip is false, ChangeBounds resizes the View by changing its dimensions. + * + *

          When resizeClip is set to true, the clip bounds is modified by ChangeBounds. Therefore, + * {@link android.transition.ChangeClipBounds} is not compatible with ChangeBounds + * in this mode.

          + * + * @param resizeClip Used to indicate whether the view bounds should be modified or the + * clip bounds should be modified by ChangeBounds. + * @see android.view.View#setClipBounds(android.graphics.Rect) + * @attr ref android.R.styleable#ChangeBounds_resizeClip + */ public void setResizeClip(boolean resizeClip) { mResizeClip = resizeClip; } + /** + * Returns true when the ChangeBounds will resize by changing the clip bounds during the + * view animation or false when bounds are changed. The default value is false. + * + * @return true when the ChangeBounds will resize by changing the clip bounds during the + * view animation or false when bounds are changed. The default value is false. + * @attr ref android.R.styleable#ChangeBounds_resizeClip + */ + public boolean getResizeClip() { + return mResizeClip; + } + /** * Setting this flag tells ChangeBounds to track the before/after parent * of every view using this transition. The flag is not enabled by @@ -127,6 +241,9 @@ public class ChangeBounds extends Transition { values.values.put(PROPNAME_WINDOW_X, tempLocation[0]); values.values.put(PROPNAME_WINDOW_Y, tempLocation[1]); } + if (mResizeClip) { + values.values.put(PROPNAME_CLIP, view.getClipBounds()); + } } } @@ -170,158 +287,149 @@ public class ChangeBounds extends Transition { if (parentMatches(startParent, endParent)) { Rect startBounds = (Rect) startValues.values.get(PROPNAME_BOUNDS); Rect endBounds = (Rect) endValues.values.get(PROPNAME_BOUNDS); - int startLeft = startBounds.left; - int endLeft = endBounds.left; - int startTop = startBounds.top; - int endTop = endBounds.top; - int startRight = startBounds.right; - int endRight = endBounds.right; - int startBottom = startBounds.bottom; - int endBottom = endBounds.bottom; - int startWidth = startRight - startLeft; - int startHeight = startBottom - startTop; - int endWidth = endRight - endLeft; - int endHeight = endBottom - endTop; + final int startLeft = startBounds.left; + final int endLeft = endBounds.left; + final int startTop = startBounds.top; + final int endTop = endBounds.top; + final int startRight = startBounds.right; + final int endRight = endBounds.right; + final int startBottom = startBounds.bottom; + final int endBottom = endBounds.bottom; + final int startWidth = startRight - startLeft; + final int startHeight = startBottom - startTop; + final int endWidth = endRight - endLeft; + final int endHeight = endBottom - endTop; + Rect startClip = (Rect) startValues.values.get(PROPNAME_CLIP); + Rect endClip = (Rect) endValues.values.get(PROPNAME_CLIP); int numChanges = 0; if ((startWidth != 0 && startHeight != 0) || (endWidth != 0 && endHeight != 0)) { if (startLeft != endLeft || startTop != endTop) ++numChanges; if (startRight != endRight || startBottom != endBottom) ++numChanges; } + if ((startClip != null && !startClip.equals(endClip)) || + (startClip == null && endClip != null)) { + ++numChanges; + } if (numChanges > 0) { + Animator anim; if (!mResizeClip) { - Animator anim; - if (startWidth == endWidth && startHeight == endHeight) { - view.offsetLeftAndRight(startLeft - view.getLeft()); - view.offsetTopAndBottom(startTop - view.getTop()); - Path positionPath = getPathMotion().getPath(0, 0, endLeft - startLeft, - endTop - startTop); - anim = ObjectAnimator.ofInt(view, new HorizontalOffsetProperty(), - new VerticalOffsetProperty(), positionPath); - } else { - if (startLeft != endLeft) view.setLeft(startLeft); - if (startTop != endTop) view.setTop(startTop); - if (startRight != endRight) view.setRight(startRight); - if (startBottom != endBottom) view.setBottom(startBottom); - ObjectAnimator topLeftAnimator = null; - if (startLeft != endLeft || startTop != endTop) { + view.setLeftTopRightBottom(startLeft, startTop, startRight, startBottom); + if (numChanges == 2) { + if (startWidth == endWidth && startHeight == endHeight) { + Path topLeftPath = getPathMotion().getPath(startLeft, startTop, endLeft, + endTop); + anim = ObjectAnimator.ofObject(view, POSITION_PROPERTY, null, + topLeftPath); + } else { + final ViewBounds viewBounds = new ViewBounds(view); Path topLeftPath = getPathMotion().getPath(startLeft, startTop, endLeft, endTop); - topLeftAnimator = ObjectAnimator - .ofInt(view, "left", "top", topLeftPath); - } - ObjectAnimator bottomRightAnimator = null; - if (startRight != endRight || startBottom != endBottom) { + ObjectAnimator topLeftAnimator = ObjectAnimator + .ofObject(viewBounds, TOP_LEFT_PROPERTY, null, topLeftPath); + Path bottomRightPath = getPathMotion().getPath(startRight, startBottom, endRight, endBottom); - bottomRightAnimator = ObjectAnimator.ofInt(view, "right", "bottom", - bottomRightPath); + ObjectAnimator bottomRightAnimator = ObjectAnimator.ofObject(viewBounds, + BOTTOM_RIGHT_PROPERTY, null, bottomRightPath); + AnimatorSet set = new AnimatorSet(); + set.playTogether(topLeftAnimator, bottomRightAnimator); + anim = set; + set.addListener(new AnimatorListenerAdapter() { + // We need a strong reference to viewBounds until the + // animator ends. + private ViewBounds mViewBounds = viewBounds; + }); } - anim = TransitionUtils.mergeAnimators(topLeftAnimator, - bottomRightAnimator); - } - if (view.getParent() instanceof ViewGroup) { - final ViewGroup parent = (ViewGroup) view.getParent(); - parent.suppressLayout(true); - TransitionListener transitionListener = new TransitionListenerAdapter() { - boolean mCanceled = false; - - @Override - public void onTransitionCancel(Transition transition) { - parent.suppressLayout(false); - mCanceled = true; - } - - @Override - public void onTransitionEnd(Transition transition) { - if (!mCanceled) { - parent.suppressLayout(false); - } - } - - @Override - public void onTransitionPause(Transition transition) { - parent.suppressLayout(false); - } - - @Override - public void onTransitionResume(Transition transition) { - parent.suppressLayout(true); - } - }; - addListener(transitionListener); + } else if (startLeft != endLeft || startTop != endTop) { + Path topLeftPath = getPathMotion().getPath(startLeft, startTop, + endLeft, endTop); + anim = ObjectAnimator.ofObject(view, TOP_LEFT_ONLY_PROPERTY, null, + topLeftPath); + } else { + Path bottomRight = getPathMotion().getPath(startRight, startBottom, + endRight, endBottom); + anim = ObjectAnimator.ofObject(view, BOTTOM_RIGHT_ONLY_PROPERTY, null, + bottomRight); } - return anim; } else { - if (startWidth != endWidth) view.setRight(endLeft + - Math.max(startWidth, endWidth)); - if (startHeight != endHeight) view.setBottom(endTop + - Math.max(startHeight, endHeight)); - // TODO: don't clobber TX/TY - if (startLeft != endLeft) view.setTranslationX(startLeft - endLeft); - if (startTop != endTop) view.setTranslationY(startTop - endTop); - // Animate location with translationX/Y and size with clip bounds - float transXDelta = endLeft - startLeft; - float transYDelta = endTop - startTop; - int widthDelta = endWidth - startWidth; - int heightDelta = endHeight - startHeight; - numChanges = 0; - if (transXDelta != 0) numChanges++; - if (transYDelta != 0) numChanges++; - if (widthDelta != 0 || heightDelta != 0) numChanges++; - ObjectAnimator translationAnimator = null; - if (transXDelta != 0 || transYDelta != 0) { - Path topLeftPath = getPathMotion().getPath(0, 0, transXDelta, transYDelta); - translationAnimator = ObjectAnimator.ofFloat(view, View.TRANSLATION_X, - View.TRANSLATION_Y, topLeftPath); + int maxWidth = Math.max(startWidth, endWidth); + int maxHeight = Math.max(startHeight, endHeight); + + view.setLeftTopRightBottom(startLeft, startTop, startLeft + maxWidth, + startTop + maxHeight); + + ObjectAnimator positionAnimator = null; + if (startLeft != endLeft || startTop != endTop) { + Path topLeftPath = getPathMotion().getPath(startLeft, startTop, endLeft, + endTop); + positionAnimator = ObjectAnimator.ofObject(view, POSITION_PROPERTY, null, + topLeftPath); + } + final Rect finalClip = endClip; + if (startClip == null) { + startClip = new Rect(0, 0, startWidth, startHeight); + } + if (endClip == null) { + endClip = new Rect(0, 0, endWidth, endHeight); } ObjectAnimator clipAnimator = null; - if (widthDelta != 0 || heightDelta != 0) { - Rect tempStartBounds = new Rect(0, 0, startWidth, startHeight); - Rect tempEndBounds = new Rect(0, 0, endWidth, endHeight); + if (!startClip.equals(endClip)) { + view.setClipBounds(startClip); clipAnimator = ObjectAnimator.ofObject(view, "clipBounds", sRectEvaluator, - tempStartBounds, tempEndBounds); - } - Animator anim = TransitionUtils.mergeAnimators(translationAnimator, - clipAnimator); - if (view.getParent() instanceof ViewGroup) { - final ViewGroup parent = (ViewGroup) view.getParent(); - parent.suppressLayout(true); - TransitionListener transitionListener = new TransitionListenerAdapter() { - boolean mCanceled = false; + startClip, endClip); + clipAnimator.addListener(new AnimatorListenerAdapter() { + private boolean mIsCanceled; @Override - public void onTransitionCancel(Transition transition) { - parent.suppressLayout(false); - mCanceled = true; + public void onAnimationCancel(Animator animation) { + mIsCanceled = true; } @Override - public void onTransitionEnd(Transition transition) { - if (!mCanceled) { - parent.suppressLayout(false); + public void onAnimationEnd(Animator animation) { + if (!mIsCanceled) { + view.setClipBounds(finalClip); + view.setLeftTopRightBottom(endLeft, endTop, endRight, + endBottom); } } + }); + } + anim = TransitionUtils.mergeAnimators(positionAnimator, + clipAnimator); + } + if (view.getParent() instanceof ViewGroup) { + final ViewGroup parent = (ViewGroup) view.getParent(); + parent.suppressLayout(true); + TransitionListener transitionListener = new TransitionListenerAdapter() { + boolean mCanceled = false; - @Override - public void onTransitionPause(Transition transition) { + @Override + public void onTransitionCancel(Transition transition) { + parent.suppressLayout(false); + mCanceled = true; + } + + @Override + public void onTransitionEnd(Transition transition) { + if (!mCanceled) { parent.suppressLayout(false); } + } + + @Override + public void onTransitionPause(Transition transition) { + parent.suppressLayout(false); + } - @Override - public void onTransitionResume(Transition transition) { - parent.suppressLayout(true); - } - }; - addListener(transitionListener); - } - anim.addListener(new AnimatorListenerAdapter() { @Override - public void onAnimationEnd(Animator animation) { - view.setClipBounds(null); + public void onTransitionResume(Transition transition) { + parent.suppressLayout(true); } - }); - return anim; + }; + addListener(transitionListener); } + return anim; } } else { int startX = (Integer) startValues.values.get(PROPNAME_WINDOW_X); @@ -357,47 +465,41 @@ public class ChangeBounds extends Transition { return null; } - private abstract static class OffsetProperty extends IntProperty { - int mPreviousValue; - - public OffsetProperty(String name) { - super(name); - } - - @Override - public void setValue(View view, int value) { - int offset = value - mPreviousValue; - offsetBy(view, offset); - mPreviousValue = value; - } - - @Override - public Integer get(View object) { - return null; - } - - protected abstract void offsetBy(View view, int by); - } - - private static class HorizontalOffsetProperty extends OffsetProperty { - public HorizontalOffsetProperty() { - super("offsetLeftAndRight"); + private static class ViewBounds { + private int mLeft; + private int mTop; + private int mRight; + private int mBottom; + private boolean mIsTopLeftSet; + private boolean mIsBottomRightSet; + private View mView; + + public ViewBounds(View view) { + mView = view; } - @Override - protected void offsetBy(View view, int by) { - view.offsetLeftAndRight(by); + public void setTopLeft(PointF topLeft) { + mLeft = Math.round(topLeft.x); + mTop = Math.round(topLeft.y); + mIsTopLeftSet = true; + if (mIsBottomRightSet) { + setLeftTopRightBottom(); + } } - } - private static class VerticalOffsetProperty extends OffsetProperty { - public VerticalOffsetProperty() { - super("offsetTopAndBottom"); + public void setBottomRight(PointF bottomRight) { + mRight = Math.round(bottomRight.x); + mBottom = Math.round(bottomRight.y); + mIsBottomRightSet = true; + if (mIsTopLeftSet) { + setLeftTopRightBottom(); + } } - @Override - protected void offsetBy(View view, int by) { - view.offsetTopAndBottom(by); + private void setLeftTopRightBottom() { + mView.setLeftTopRightBottom(mLeft, mTop, mRight, mBottom); + mIsTopLeftSet = false; + mIsBottomRightSet = false; } } } diff --git a/core/java/android/transition/ChangeTransform.java b/core/java/android/transition/ChangeTransform.java index 3fd28a6af0f6f084420045ceafe423b91d92ea48..974912167205576ee1f2d8e6596a7242e1720c2d 100644 --- a/core/java/android/transition/ChangeTransform.java +++ b/core/java/android/transition/ChangeTransform.java @@ -17,11 +17,14 @@ package android.transition; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; +import android.animation.FloatArrayEvaluator; import android.animation.ObjectAnimator; -import android.animation.ValueAnimator; +import android.animation.PropertyValuesHolder; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Matrix; +import android.graphics.Path; +import android.graphics.PointF; import android.util.AttributeSet; import android.util.Property; import android.view.GhostView; @@ -56,16 +59,35 @@ public class ChangeTransform extends Transition { PROPNAME_PARENT_MATRIX, }; - private static final Property ANIMATION_MATRIX_PROPERTY = - new Property(Matrix.class, "animationMatrix") { + /** + * This property sets the animation matrix properties that are not translations. + */ + private static final Property NON_TRANSLATIONS_PROPERTY = + new Property(float[].class, "nonTranslations") { @Override - public Matrix get(View object) { + public float[] get(PathAnimatorMatrix object) { return null; } @Override - public void set(View object, Matrix value) { - object.setAnimationMatrix(value); + public void set(PathAnimatorMatrix object, float[] value) { + object.setValues(value); + } + }; + + /** + * This property sets the translation animation matrix properties. + */ + private static final Property TRANSLATIONS_PROPERTY = + new Property(PointF.class, "translations") { + @Override + public PointF get(PathAnimatorMatrix object) { + return null; + } + + @Override + public void set(PathAnimatorMatrix object, PointF value) { + object.setTranslation(value); } }; @@ -261,8 +283,23 @@ public class ChangeTransform extends Transition { final View view = endValues.view; setIdentityTransforms(view); - ObjectAnimator animator = ObjectAnimator.ofObject(view, ANIMATION_MATRIX_PROPERTY, - new TransitionUtils.MatrixEvaluator(), startMatrix, endMatrix); + final float[] startMatrixValues = new float[9]; + startMatrix.getValues(startMatrixValues); + final float[] endMatrixValues = new float[9]; + endMatrix.getValues(endMatrixValues); + final PathAnimatorMatrix pathAnimatorMatrix = + new PathAnimatorMatrix(view, startMatrixValues); + + PropertyValuesHolder valuesProperty = PropertyValuesHolder.ofObject( + NON_TRANSLATIONS_PROPERTY, new FloatArrayEvaluator(new float[9]), + startMatrixValues, endMatrixValues); + Path path = getPathMotion().getPath(startMatrixValues[Matrix.MTRANS_X], + startMatrixValues[Matrix.MTRANS_Y], endMatrixValues[Matrix.MTRANS_X], + endMatrixValues[Matrix.MTRANS_Y]); + PropertyValuesHolder translationProperty = PropertyValuesHolder.ofObject( + TRANSLATIONS_PROPERTY, null, path); + ObjectAnimator animator = ObjectAnimator.ofPropertyValuesHolder(pathAnimatorMatrix, + valuesProperty, translationProperty); final Matrix finalEndMatrix = endMatrix; @@ -285,14 +322,13 @@ public class ChangeTransform extends Transition { view.setTagInternal(R.id.parentMatrix, null); } } - ANIMATION_MATRIX_PROPERTY.set(view, null); + view.setAnimationMatrix(null); transforms.restore(view); } @Override public void onAnimationPause(Animator animation) { - ValueAnimator animator = (ValueAnimator) animation; - Matrix currentMatrix = (Matrix) animator.getAnimatedValue(); + Matrix currentMatrix = pathAnimatorMatrix.getMatrix(); setCurrentMatrix(currentMatrix); } @@ -340,7 +376,7 @@ public class ChangeTransform extends Transition { while (outerTransition.mParent != null) { outerTransition = outerTransition.mParent; } - GhostListener listener = new GhostListener(view, ghostView, endMatrix); + GhostListener listener = new GhostListener(view, startValues.view, ghostView); outerTransition.addListener(listener); if (startValues.view != endValues.view) { @@ -430,13 +466,13 @@ public class ChangeTransform extends Transition { private static class GhostListener extends Transition.TransitionListenerAdapter { private View mView; + private View mStartView; private GhostView mGhostView; - private Matrix mEndMatrix; - public GhostListener(View view, GhostView ghostView, Matrix endMatrix) { + public GhostListener(View view, View startView, GhostView ghostView) { mView = view; + mStartView = startView; mGhostView = ghostView; - mEndMatrix = endMatrix; } @Override @@ -445,6 +481,7 @@ public class ChangeTransform extends Transition { GhostView.removeGhost(mView); mView.setTagInternal(R.id.transitionTransform, null); mView.setTagInternal(R.id.parentMatrix, null); + mStartView.setTransitionAlpha(1); } @Override @@ -457,4 +494,47 @@ public class ChangeTransform extends Transition { mGhostView.setVisibility(View.VISIBLE); } } + + /** + * PathAnimatorMatrix allows the translations and the rest of the matrix to be set + * separately. This allows the PathMotion to affect the translations while scale + * and rotation are evaluated separately. + */ + private static class PathAnimatorMatrix { + private final Matrix mMatrix = new Matrix(); + private final View mView; + private final float[] mValues; + private float mTranslationX; + private float mTranslationY; + + public PathAnimatorMatrix(View view, float[] values) { + mView = view; + mValues = values.clone(); + mTranslationX = mValues[Matrix.MTRANS_X]; + mTranslationY = mValues[Matrix.MTRANS_Y]; + setAnimationMatrix(); + } + + public void setValues(float[] values) { + System.arraycopy(values, 0, mValues, 0, values.length); + setAnimationMatrix(); + } + + public void setTranslation(PointF translation) { + mTranslationX = translation.x; + mTranslationY = translation.y; + setAnimationMatrix(); + } + + private void setAnimationMatrix() { + mValues[Matrix.MTRANS_X] = mTranslationX; + mValues[Matrix.MTRANS_Y] = mTranslationY; + mMatrix.setValues(mValues); + mView.setAnimationMatrix(mMatrix); + } + + public Matrix getMatrix() { + return mMatrix; + } + } } diff --git a/core/java/android/transition/SidePropagation.java b/core/java/android/transition/SidePropagation.java index 46df2a81b359bc30ff1f6f0e3b21836fa289d9f6..5dd1fffa7452e3dcef0a0d525180e2499af4bab6 100644 --- a/core/java/android/transition/SidePropagation.java +++ b/core/java/android/transition/SidePropagation.java @@ -43,8 +43,8 @@ public class SidePropagation extends VisibilityPropagation { * farther from the edge. The default is {@link Gravity#BOTTOM}. * * @param side The side that is used to calculate the transition propagation. Must be one of - * {@link Gravity#LEFT}, {@link Gravity#TOP}, {@link Gravity#RIGHT}, or - * {@link Gravity#BOTTOM}. + * {@link Gravity#LEFT}, {@link Gravity#TOP}, {@link Gravity#RIGHT}, + * {@link Gravity#BOTTOM}, {@link Gravity#START}, or {@link Gravity#END}. */ public void setSide(int side) { mSide = side; @@ -105,7 +105,7 @@ public class SidePropagation extends VisibilityPropagation { epicenterY = (top + bottom) / 2; } - float distance = distance(viewCenterX, viewCenterY, epicenterX, epicenterY, + float distance = distance(sceneRoot, viewCenterX, viewCenterY, epicenterX, epicenterY, left, top, right, bottom); float maxDistance = getMaxDistance(sceneRoot); float distanceFraction = distance/maxDistance; @@ -118,10 +118,20 @@ public class SidePropagation extends VisibilityPropagation { return Math.round(duration * directionMultiplier / mPropagationSpeed * distanceFraction); } - private int distance(int viewX, int viewY, int epicenterX, int epicenterY, + private int distance(View sceneRoot, int viewX, int viewY, int epicenterX, int epicenterY, int left, int top, int right, int bottom) { + final int side; + if (mSide == Gravity.START) { + final boolean isRtl = sceneRoot.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL; + side = isRtl ? Gravity.RIGHT : Gravity.LEFT; + } else if (mSide == Gravity.END) { + final boolean isRtl = sceneRoot.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL; + side = isRtl ? Gravity.LEFT : Gravity.RIGHT; + } else { + side = mSide; + } int distance = 0; - switch (mSide) { + switch (side) { case Gravity.LEFT: distance = right - viewX + Math.abs(epicenterY - viewY); break; @@ -142,6 +152,8 @@ public class SidePropagation extends VisibilityPropagation { switch (mSide) { case Gravity.LEFT: case Gravity.RIGHT: + case Gravity.START: + case Gravity.END: return sceneRoot.getWidth(); default: return sceneRoot.getHeight(); diff --git a/core/java/android/transition/Slide.java b/core/java/android/transition/Slide.java index ae2e4aaec35be36dcbfe8bf515b2a060b52662b5..be1d9070c808bf9bea15f8bb5415048d9e58618e 100644 --- a/core/java/android/transition/Slide.java +++ b/core/java/android/transition/Slide.java @@ -76,6 +76,20 @@ public class Slide extends Visibility { } }; + private static final CalculateSlide sCalculateStart = new CalculateSlideHorizontal() { + @Override + public float getGoneX(ViewGroup sceneRoot, View view) { + final boolean isRtl = sceneRoot.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL; + final float x; + if (isRtl) { + x = view.getTranslationX() + sceneRoot.getWidth(); + } else { + x = view.getTranslationX() - sceneRoot.getWidth(); + } + return x; + } + }; + private static final CalculateSlide sCalculateTop = new CalculateSlideVertical() { @Override public float getGoneY(ViewGroup sceneRoot, View view) { @@ -90,6 +104,20 @@ public class Slide extends Visibility { } }; + private static final CalculateSlide sCalculateEnd = new CalculateSlideHorizontal() { + @Override + public float getGoneX(ViewGroup sceneRoot, View view) { + final boolean isRtl = sceneRoot.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL; + final float x; + if (isRtl) { + x = view.getTranslationX() - sceneRoot.getWidth(); + } else { + x = view.getTranslationX() + sceneRoot.getWidth(); + } + return x; + } + }; + private static final CalculateSlide sCalculateBottom = new CalculateSlideVertical() { @Override public float getGoneY(ViewGroup sceneRoot, View view) { @@ -144,7 +172,8 @@ public class Slide extends Visibility { * * @param slideEdge The edge of the scene to use for Views appearing and disappearing. One of * {@link android.view.Gravity#LEFT}, {@link android.view.Gravity#TOP}, - * {@link android.view.Gravity#RIGHT}, {@link android.view.Gravity#BOTTOM}. + * {@link android.view.Gravity#RIGHT}, {@link android.view.Gravity#BOTTOM}, + * {@link android.view.Gravity#START}, {@link android.view.Gravity#END}. * @attr ref android.R.styleable#Slide_slideEdge */ public void setSlideEdge(int slideEdge) { @@ -161,6 +190,12 @@ public class Slide extends Visibility { case Gravity.BOTTOM: mSlideCalculator = sCalculateBottom; break; + case Gravity.START: + mSlideCalculator = sCalculateStart; + break; + case Gravity.END: + mSlideCalculator = sCalculateEnd; + break; default: throw new IllegalArgumentException("Invalid slide direction"); } @@ -175,7 +210,8 @@ public class Slide extends Visibility { * * @return the edge of the scene to use for Views appearing and disappearing. One of * {@link android.view.Gravity#LEFT}, {@link android.view.Gravity#TOP}, - * {@link android.view.Gravity#RIGHT}, {@link android.view.Gravity#BOTTOM}. + * {@link android.view.Gravity#RIGHT}, {@link android.view.Gravity#BOTTOM}, + * {@link android.view.Gravity#START}, {@link android.view.Gravity#END}. * @attr ref android.R.styleable#Slide_slideEdge */ public int getSlideEdge() { diff --git a/core/java/android/transition/Transition.java b/core/java/android/transition/Transition.java index 6dede46df3113f8f80b218446520f6a04952b169..2705bcf6c70acabc3599cbda9c7d79ba29c7d4cb 100644 --- a/core/java/android/transition/Transition.java +++ b/core/java/android/transition/Transition.java @@ -84,8 +84,8 @@ import com.android.internal.R; * *

          Custom transition classes may be instantiated with a transition tag:

          *
          <transition class="my.app.transition.CustomTransition"/>
          - *

          Custom transition classes loaded from XML must have a public nullary (no argument) - * constructor.

          + *

          Custom transition classes loaded from XML should have a public constructor taking + * a {@link android.content.Context} and {@link android.util.AttributeSet}.

          * *

          Note that attributes for the transition are not required, just as they are * optional when declared in code; Transitions created from XML resources will use @@ -955,7 +955,7 @@ public abstract class Transition implements Cloneable { * Views with different IDs, or no IDs whatsoever, will be ignored. * *

          Note that using ids to specify targets implies that ids should be unique - * within the view hierarchy underneat the scene root.

          + * within the view hierarchy underneath the scene root.

          * * @see View#getId() * @param targetId The id of a target view, must be a positive number. @@ -1790,6 +1790,10 @@ public abstract class Transition implements Cloneable { private static boolean isValueChanged(TransitionValues oldValues, TransitionValues newValues, String key) { + if (oldValues.values.containsKey(key) != newValues.values.containsKey(key)) { + // The transition didn't care about this particular value, so we don't care, either. + return false; + } Object oldValue = oldValues.values.get(key); Object newValue = newValues.values.get(key); boolean changed; diff --git a/core/java/android/transition/TransitionUtils.java b/core/java/android/transition/TransitionUtils.java index 03423ffefaa4b3c715cafbf159ca1dbc7f1faa97..49ceb3b5365e7f758318885b2b36f210ae32fb77 100644 --- a/core/java/android/transition/TransitionUtils.java +++ b/core/java/android/transition/TransitionUtils.java @@ -22,8 +22,10 @@ import android.animation.TypeEvaluator; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Matrix; +import android.graphics.Rect; import android.graphics.RectF; import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; @@ -108,6 +110,35 @@ public class TransitionUtils { return copy; } + /** + * Get a copy of bitmap of given drawable, return null if intrinsic size is zero + */ + public static Bitmap createDrawableBitmap(Drawable drawable) { + int width = drawable.getIntrinsicWidth(); + int height = drawable.getIntrinsicHeight(); + if (width <= 0 || height <= 0) { + return null; + } + float scale = Math.min(1f, ((float)MAX_IMAGE_SIZE) / (width * height)); + if (drawable instanceof BitmapDrawable && scale == 1f) { + // return same bitmap if scale down not needed + return ((BitmapDrawable) drawable).getBitmap(); + } + int bitmapWidth = (int) (width * scale); + int bitmapHeight = (int) (height * scale); + Bitmap bitmap = Bitmap.createBitmap(bitmapWidth, bitmapHeight, Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(bitmap); + Rect existingBounds = drawable.getBounds(); + int left = existingBounds.left; + int top = existingBounds.top; + int right = existingBounds.right; + int bottom = existingBounds.bottom; + drawable.setBounds(0, 0, bitmapWidth, bitmapHeight); + drawable.draw(canvas); + drawable.setBounds(left, top, right, bottom); + return bitmap; + } + /** * Creates a Bitmap of the given view, using the Matrix matrix to transform to the local * coordinates. matrix will be modified during the bitmap creation. diff --git a/core/java/android/transition/Visibility.java b/core/java/android/transition/Visibility.java index f58291f489496b1aa6e3067dd5b368d1d3c029e7..8779229026e41be6faeaf9a98022f5eeec58f776 100644 --- a/core/java/android/transition/Visibility.java +++ b/core/java/android/transition/Visibility.java @@ -63,6 +63,7 @@ public abstract class Visibility extends Transition { private static final String[] sTransitionProperties = { PROPNAME_VISIBILITY, + PROPNAME_PARENT, }; private static class VisibilityInfo { @@ -484,12 +485,19 @@ public abstract class Visibility extends Transition { @Override boolean areValuesChanged(TransitionValues oldValues, TransitionValues newValues) { - VisibilityInfo changeInfo = getVisibilityChangeInfo(oldValues, newValues); if (oldValues == null && newValues == null) { return false; } + if (oldValues != null && newValues != null && + newValues.values.containsKey(PROPNAME_VISIBILITY) != + oldValues.values.containsKey(PROPNAME_VISIBILITY)) { + // The transition wasn't targeted in either the start or end, so it couldn't + // have changed. + return false; + } + VisibilityInfo changeInfo = getVisibilityChangeInfo(oldValues, newValues); return changeInfo.visibilityChange && (changeInfo.startVisibility == View.VISIBLE || - changeInfo.endVisibility == View.VISIBLE); + changeInfo.endVisibility == View.VISIBLE); } /** diff --git a/core/java/android/util/ArrayMap.java b/core/java/android/util/ArrayMap.java index 7c9861f435f4ab3fa0d60a88e2da0e254abb1f81..6ed388515599a303fad5657b21503c591cacd7da 100644 --- a/core/java/android/util/ArrayMap.java +++ b/core/java/android/util/ArrayMap.java @@ -255,7 +255,10 @@ public final class ArrayMap implements Map { } private ArrayMap(boolean immutable) { - mHashes = EmptyArray.INT; + // If this is immutable, use the sentinal EMPTY_IMMUTABLE_INTS + // instance instead of the usual EmptyArray.INT. The reference + // is checked later to see if the array is allowed to grow. + mHashes = immutable ? EMPTY_IMMUTABLE_INTS : EmptyArray.INT; mArray = EmptyArray.OBJECT; mSize = 0; } diff --git a/core/java/android/util/ArraySet.java b/core/java/android/util/ArraySet.java index 423e48b610a721bbf12eea73e69e46514a4b281b..68f725e688bd153e35a229431a26640f9bf35ccb 100644 --- a/core/java/android/util/ArraySet.java +++ b/core/java/android/util/ArraySet.java @@ -245,13 +245,20 @@ public final class ArraySet implements Collection, Set { /** * Create a new ArraySet with the mappings from the given ArraySet. */ - public ArraySet(ArraySet set) { + public ArraySet(ArraySet set) { this(); if (set != null) { addAll(set); } } + /** {@hide} */ + public ArraySet(Collection set) { + this(); + if (set != null) { + addAll(set); + } + } /** * Make the array map empty. All storage is released. diff --git a/core/java/android/util/DisplayMetrics.java b/core/java/android/util/DisplayMetrics.java index c855e579650b628393f44c4e3cdc4084c5f7a6a8..d0e5b9e5aa3334068e07d4d3dbe58f9179bb0478 100644 --- a/core/java/android/util/DisplayMetrics.java +++ b/core/java/android/util/DisplayMetrics.java @@ -61,6 +61,13 @@ public class DisplayMetrics { */ public static final int DENSITY_HIGH = 240; + /** + * Intermediate density for screens that sit between {@link #DENSITY_HIGH} (240dpi) and + * {@link #DENSITY_XHIGH} (320dpi). This is not a density that applications should target, + * instead relying on the system to scale their {@link #DENSITY_XHIGH} assets for them. + */ + public static final int DENSITY_280 = 280; + /** * Standard quantized DPI for extra-high-density screens. */ diff --git a/core/java/android/util/FloatMath.java b/core/java/android/util/FloatMath.java index 90e0636b10c95ca2052b592fc06ce104ac5338cc..8f488af66cff5ae154fc7091565e83321ba1b93b 100644 --- a/core/java/android/util/FloatMath.java +++ b/core/java/android/util/FloatMath.java @@ -24,7 +24,10 @@ package android.util; * became slower and have since been re-implemented to wrap calls to * {@link java.lang.Math}. {@link java.lang.Math} should be used in * preference. + * + * @deprecated Use {@link java.lang.Math} instead. */ +@Deprecated public class FloatMath { /** Prevents instantiation. */ diff --git a/core/java/android/util/IntArray.java b/core/java/android/util/IntArray.java new file mode 100644 index 0000000000000000000000000000000000000000..e8d394747b2af0b2ccbc54722f44a6a24739d5f4 --- /dev/null +++ b/core/java/android/util/IntArray.java @@ -0,0 +1,162 @@ +/* + * Copyright (C) 2014 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.util; + +import com.android.internal.util.ArrayUtils; + +import libcore.util.EmptyArray; + +/** + * Implements a growing array of int primitives. + * + * @hide + */ +public class IntArray implements Cloneable { + private static final int MIN_CAPACITY_INCREMENT = 12; + + private int[] mValues; + private int mSize; + + /** + * Creates an empty IntArray with the default initial capacity. + */ + public IntArray() { + this(10); + } + + /** + * Creates an empty IntArray with the specified initial capacity. + */ + public IntArray(int initialCapacity) { + if (initialCapacity == 0) { + mValues = EmptyArray.INT; + } else { + mValues = ArrayUtils.newUnpaddedIntArray(initialCapacity); + } + mSize = 0; + } + + /** + * Appends the specified value to the end of this array. + */ + public void add(int value) { + add(mSize, value); + } + + /** + * Inserts a value at the specified position in this array. + * + * @throws IndexOutOfBoundsException when index < 0 || index > size() + */ + public void add(int index, int value) { + if (index < 0 || index > mSize) { + throw new IndexOutOfBoundsException(); + } + + ensureCapacity(1); + + if (mSize - index != 0) { + System.arraycopy(mValues, index, mValues, index + 1, mSize - index); + } + + mValues[index] = value; + mSize++; + } + + /** + * Adds the values in the specified array to this array. + */ + public void addAll(IntArray values) { + final int count = values.mSize; + ensureCapacity(count); + + System.arraycopy(values.mValues, 0, mValues, mSize, count); + mSize += count; + } + + /** + * Ensures capacity to append at least count values. + */ + private void ensureCapacity(int count) { + final int currentSize = mSize; + final int minCapacity = currentSize + count; + if (minCapacity >= mValues.length) { + final int targetCap = currentSize + (currentSize < (MIN_CAPACITY_INCREMENT / 2) ? + MIN_CAPACITY_INCREMENT : currentSize >> 1); + final int newCapacity = targetCap > minCapacity ? targetCap : minCapacity; + final int[] newValues = ArrayUtils.newUnpaddedIntArray(newCapacity); + System.arraycopy(mValues, 0, newValues, 0, currentSize); + mValues = newValues; + } + } + + /** + * Removes all values from this array. + */ + public void clear() { + mSize = 0; + } + + @Override + public IntArray clone() throws CloneNotSupportedException { + final IntArray clone = (IntArray) super.clone(); + clone.mValues = mValues.clone(); + return clone; + } + + /** + * Returns the value at the specified position in this array. + */ + public int get(int index) { + if (index >= mSize) { + throw new ArrayIndexOutOfBoundsException(mSize, index); + } + return mValues[index]; + } + + /** + * Returns the index of the first occurrence of the specified value in this + * array, or -1 if this array does not contain the value. + */ + public int indexOf(int value) { + final int n = mSize; + for (int i = 0; i < n; i++) { + if (mValues[i] == value) { + return i; + } + } + return -1; + } + + /** + * Removes the value at the specified index from this array. + */ + public void remove(int index) { + if (index >= mSize) { + throw new ArrayIndexOutOfBoundsException(mSize, index); + } + System.arraycopy(mValues, index + 1, mValues, index, mSize - index - 1); + mSize--; + } + + /** + * Returns the number of values in this array. + */ + public int size() { + return mSize; + } +} diff --git a/core/java/android/util/Log.java b/core/java/android/util/Log.java index a9b357104b3cfab923faa3ae3d16d3d9bcb264ea..121485a1dfbc71eed52890b5021854006cea3dde 100644 --- a/core/java/android/util/Log.java +++ b/core/java/android/util/Log.java @@ -295,6 +295,11 @@ public final class Log { return bytes; } + static void wtfQuiet(int logId, String tag, String msg, boolean system) { + TerribleFailure what = new TerribleFailure(msg, null); + sWtfHandler.onTerribleFailure(tag, what, system); + } + /** * Sets the terrible failure handler, for testing. * diff --git a/core/java/android/util/NtpTrustedTime.java b/core/java/android/util/NtpTrustedTime.java index b18cc3bbabeed11462ce5aae911f62de2c9c60c7..ed2d3c60fcd04d97825c7db684c121443d0434ec 100644 --- a/core/java/android/util/NtpTrustedTime.java +++ b/core/java/android/util/NtpTrustedTime.java @@ -19,6 +19,8 @@ package android.util; import android.content.ContentResolver; import android.content.Context; import android.content.res.Resources; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; import android.net.SntpClient; import android.os.SystemClock; import android.provider.Settings; @@ -35,10 +37,13 @@ public class NtpTrustedTime implements TrustedTime { private static final boolean LOGD = false; private static NtpTrustedTime sSingleton; + private static Context sContext; private final String mServer; private final long mTimeout; + private ConnectivityManager mCM; + private boolean mHasCache; private long mCachedNtpTime; private long mCachedNtpElapsedRealtime; @@ -67,6 +72,7 @@ public class NtpTrustedTime implements TrustedTime { final String server = secureServer != null ? secureServer : defaultServer; sSingleton = new NtpTrustedTime(server, timeout); + sContext = context; } return sSingleton; @@ -79,6 +85,20 @@ public class NtpTrustedTime implements TrustedTime { return false; } + // We can't do this at initialization time: ConnectivityService might not be running yet. + synchronized (this) { + if (mCM == null) { + mCM = (ConnectivityManager) sContext.getSystemService(Context.CONNECTIVITY_SERVICE); + } + } + + final NetworkInfo ni = mCM == null ? null : mCM.getActiveNetworkInfo(); + if (ni == null || !ni.isConnected()) { + if (LOGD) Log.d(TAG, "forceRefresh: no connectivity"); + return false; + } + + if (LOGD) Log.d(TAG, "forceRefresh() from cache miss"); final SntpClient client = new SntpClient(); if (client.requestTime(mServer, (int) mTimeout)) { diff --git a/core/java/android/util/PathParser.java b/core/java/android/util/PathParser.java index 6820f7785ec2046bc3b5f4fbae485f9191d9e1ad..92b19be64803f84e9768fce6059e79841dae9678 100644 --- a/core/java/android/util/PathParser.java +++ b/core/java/android/util/PathParser.java @@ -34,7 +34,11 @@ public class PathParser { Path path = new Path(); PathDataNode[] nodes = createNodesFromPathData(pathData); if (nodes != null) { - PathDataNode.nodesToPath(nodes, path); + try { + PathDataNode.nodesToPath(nodes, path); + } catch (RuntimeException e) { + throw new RuntimeException("Error in parsing " + pathData, e); + } return path; } return null; @@ -128,7 +132,12 @@ public class PathParser { while (end < s.length()) { c = s.charAt(end); - if (((c - 'A') * (c - 'Z') <= 0) || (((c - 'a') * (c - 'z') <= 0))) { + // Note that 'e' or 'E' are not valid path commands, but could be + // used for floating point numbers' scientific notation. + // Therefore, when searching for next command, we should ignore 'e' + // and 'E'. + if ((((c - 'A') * (c - 'Z') <= 0) || ((c - 'a') * (c - 'z') <= 0)) + && c != 'e' && c != 'E') { return end; } end++; @@ -142,9 +151,9 @@ public class PathParser { private static class ExtractFloatResult { // We need to return the position of the next separator and whether the - // next float starts with a '-'. + // next float starts with a '-' or a '.'. int mEndPosition; - boolean mEndWithNegSign; + boolean mEndWithNegOrDot; } /** @@ -179,8 +188,8 @@ public class PathParser { s.substring(startPosition, endPosition)); } - if (result.mEndWithNegSign) { - // Keep the '-' sign with next number. + if (result.mEndWithNegOrDot) { + // Keep the '-' or '.' sign with next number. startPosition = endPosition; } else { startPosition = endPosition + 1; @@ -188,8 +197,7 @@ public class PathParser { } return Arrays.copyOf(results, count); } catch (NumberFormatException e) { - Log.e(LOGTAG, "error in parsing \"" + s + "\""); - throw e; + throw new RuntimeException("error in parsing \"" + s + "\"", e); } } @@ -201,11 +209,15 @@ public class PathParser { * the starting position of next number, whether it is ending with a '-'. */ private static void extract(String s, int start, ExtractFloatResult result) { - // Now looking for ' ', ',' or '-' from the start. + // Now looking for ' ', ',', '.' or '-' from the start. int currentIndex = start; boolean foundSeparator = false; - result.mEndWithNegSign = false; + result.mEndWithNegOrDot = false; + boolean secondDot = false; + boolean isExponential = false; for (; currentIndex < s.length(); currentIndex++) { + boolean isPrevExponential = isExponential; + isExponential = false; char currentChar = s.charAt(currentIndex); switch (currentChar) { case ' ': @@ -213,11 +225,25 @@ public class PathParser { foundSeparator = true; break; case '-': - if (currentIndex != start) { + // The negative sign following a 'e' or 'E' is not a separator. + if (currentIndex != start && !isPrevExponential) { + foundSeparator = true; + result.mEndWithNegOrDot = true; + } + break; + case '.': + if (!secondDot) { + secondDot = true; + } else { + // This is the second dot, and it is considered as a separator. foundSeparator = true; - result.mEndWithNegSign = true; + result.mEndWithNegOrDot = true; } break; + case 'e': + case 'E': + isExponential = true; + break; } if (foundSeparator) { break; @@ -254,7 +280,7 @@ public class PathParser { * @param path The target Path object. */ public static void nodesToPath(PathDataNode[] node, Path path) { - float[] current = new float[4]; + float[] current = new float[6]; char previousCommand = 'm'; for (int i = 0; i < node.length; i++) { addCommand(path, current, previousCommand, node[i].mType, node[i].mParams); @@ -287,6 +313,8 @@ public class PathParser { float currentY = current[1]; float ctrlPointX = current[2]; float ctrlPointY = current[3]; + float currentSegmentStartX = current[4]; + float currentSegmentStartY = current[5]; float reflectiveCtrlPointX; float reflectiveCtrlPointY; @@ -294,7 +322,15 @@ public class PathParser { case 'z': case 'Z': path.close(); - return; + // Path is closed here, but we need to move the pen to the + // closed position. So we cache the segment's starting position, + // and restore it here. + currentX = currentSegmentStartX; + currentY = currentSegmentStartY; + ctrlPointX = currentSegmentStartX; + ctrlPointY = currentSegmentStartY; + path.moveTo(currentX, currentY); + break; case 'm': case 'M': case 'l': @@ -324,17 +360,22 @@ public class PathParser { incr = 7; break; } + for (int k = 0; k < val.length; k += incr) { switch (cmd) { case 'm': // moveto - Start a new sub-path (relative) path.rMoveTo(val[k + 0], val[k + 1]); currentX += val[k + 0]; currentY += val[k + 1]; + currentSegmentStartX = currentX; + currentSegmentStartY = currentY; break; case 'M': // moveto - Start a new sub-path path.moveTo(val[k + 0], val[k + 1]); currentX = val[k + 0]; currentY = val[k + 1]; + currentSegmentStartX = currentX; + currentSegmentStartY = currentY; break; case 'l': // lineto - Draw a line from the current point (relative) path.rLineTo(val[k + 0], val[k + 1]); @@ -346,10 +387,6 @@ public class PathParser { currentX = val[k + 0]; currentY = val[k + 1]; break; - case 'z': // closepath - Close the current subpath - case 'Z': // closepath - Close the current subpath - path.close(); - break; case 'h': // horizontal lineto - Draws a horizontal line (relative) path.rLineTo(val[k + 0], 0); currentX += val[k + 0]; @@ -500,6 +537,8 @@ public class PathParser { current[1] = currentY; current[2] = ctrlPointX; current[3] = ctrlPointY; + current[4] = currentSegmentStartX; + current[5] = currentSegmentStartY; } private static void drawArc(Path p, diff --git a/core/java/android/util/Slog.java b/core/java/android/util/Slog.java index e92b8469fa261a880d6fbb2396d96431490e7334..58a27037e03f8069631e816dc0fbe7c9e9e82962 100644 --- a/core/java/android/util/Slog.java +++ b/core/java/android/util/Slog.java @@ -82,6 +82,13 @@ public final class Slog { return Log.wtf(Log.LOG_ID_SYSTEM, tag, msg, null, false, true); } + /** + * Like {@link #wtf(String, String)}, but does not output anything to the log. + */ + public static void wtfQuiet(String tag, String msg) { + Log.wtfQuiet(Log.LOG_ID_SYSTEM, tag, msg, true); + } + /** * Like {@link Log#wtfStack(String, String)}, but will never cause the caller to crash, and * will always be handled asynchronously. Primarily for use by coding running within diff --git a/core/java/android/util/TypedValue.java b/core/java/android/util/TypedValue.java index 931fb811471614a4c46326f5758a6fa40a17bc09..74d42452503e8eba932571eae4bde55952d16968 100644 --- a/core/java/android/util/TypedValue.java +++ b/core/java/android/util/TypedValue.java @@ -138,6 +138,17 @@ public class TypedValue { /* ------------------------------------------------------------ */ + /** + * {@link #TYPE_NULL} data indicating the value was not specified. + */ + public static final int DATA_NULL_UNDEFINED = 0; + /** + * {@link #TYPE_NULL} data indicating the value was explicitly set to null. + */ + public static final int DATA_NULL_EMPTY = 1; + + /* ------------------------------------------------------------ */ + /** * If {@link #density} is equal to this value, then the density should be * treated as the system's default density value: {@link DisplayMetrics#DENSITY_DEFAULT}. @@ -300,6 +311,18 @@ public class TypedValue { return complexToDimension(data, metrics); } + /** + * Return the complex unit type for this value. For example, a dimen type + * with value 12sp will return {@link #COMPLEX_UNIT_SP}. Only use for values + * whose type is {@link #TYPE_DIMENSION}. + * + * @return The complex unit type. + */ + public int getComplexUnit() + { + return COMPLEX_UNIT_MASK & (data>>TypedValue.COMPLEX_UNIT_SHIFT); + } + /** * Converts an unpacked complex data value holding a dimension to its final floating * point value. The two parameters unit and value diff --git a/core/java/android/view/AccessibilityInteractionController.java b/core/java/android/view/AccessibilityInteractionController.java index 1cadf69d4b7c3b9a2124c670f526dc6427714719..68ad782ddbd9ade06ec3cee2d210ca622b532bfc 100644 --- a/core/java/android/view/AccessibilityInteractionController.java +++ b/core/java/android/view/AccessibilityInteractionController.java @@ -636,95 +636,6 @@ final class AccessibilityInteractionController { } } - public void computeClickPointInScreenClientThread(long accessibilityNodeId, - Region interactiveRegion, int interactionId, - IAccessibilityInteractionConnectionCallback callback, int interrogatingPid, - long interrogatingTid, MagnificationSpec spec) { - Message message = mHandler.obtainMessage(); - message.what = PrivateHandler.MSG_COMPUTE_CLICK_POINT_IN_SCREEN; - - SomeArgs args = SomeArgs.obtain(); - args.argi1 = AccessibilityNodeInfo.getAccessibilityViewId(accessibilityNodeId); - args.argi2 = AccessibilityNodeInfo.getVirtualDescendantId(accessibilityNodeId); - args.argi3 = interactionId; - args.arg1 = callback; - args.arg2 = spec; - args.arg3 = interactiveRegion; - - message.obj = args; - - // If the interrogation is performed by the same thread as the main UI - // thread in this process, set the message as a static reference so - // after this call completes the same thread but in the interrogating - // client can handle the message to generate the result. - if (interrogatingPid == mMyProcessId && interrogatingTid == mMyLooperThreadId) { - AccessibilityInteractionClient.getInstanceForThread( - interrogatingTid).setSameThreadMessage(message); - } else { - mHandler.sendMessage(message); - } - } - - private void computeClickPointInScreenUiThread(Message message) { - SomeArgs args = (SomeArgs) message.obj; - final int accessibilityViewId = args.argi1; - final int virtualDescendantId = args.argi2; - final int interactionId = args.argi3; - final IAccessibilityInteractionConnectionCallback callback = - (IAccessibilityInteractionConnectionCallback) args.arg1; - final MagnificationSpec spec = (MagnificationSpec) args.arg2; - final Region interactiveRegion = (Region) args.arg3; - args.recycle(); - - boolean succeeded = false; - Point point = mTempPoint; - try { - if (mViewRootImpl.mView == null || mViewRootImpl.mAttachInfo == null) { - return; - } - View target = null; - if (accessibilityViewId != AccessibilityNodeInfo.UNDEFINED_ITEM_ID) { - target = findViewByAccessibilityId(accessibilityViewId); - } else { - target = mViewRootImpl.mView; - } - if (target != null && isShown(target)) { - AccessibilityNodeProvider provider = target.getAccessibilityNodeProvider(); - if (provider != null) { - // For virtual views just use the center of the bounds in screen. - AccessibilityNodeInfo node = null; - if (virtualDescendantId != AccessibilityNodeInfo.UNDEFINED_ITEM_ID) { - node = provider.createAccessibilityNodeInfo(virtualDescendantId); - } else { - node = provider.createAccessibilityNodeInfo( - AccessibilityNodeProvider.HOST_VIEW_ID); - } - if (node != null) { - succeeded = true; - Rect boundsInScreen = mTempRect; - node.getBoundsInScreen(boundsInScreen); - point.set(boundsInScreen.centerX(), boundsInScreen.centerY()); - } - } else if (virtualDescendantId == AccessibilityNodeInfo.UNDEFINED_ITEM_ID) { - // For a real view, ask the view to compute the click point. - succeeded = target.computeClickPointInScreenForAccessibility( - interactiveRegion, point); - } - } - } finally { - try { - Point result = null; - if (succeeded) { - applyAppScaleAndMagnificationSpecIfNeeded(point, spec); - result = point; - } - callback.setComputeClickPointInScreenActionResult(result, interactionId); - } catch (RemoteException re) { - /* ignore - the other side will time out */ - } - } - } - private View findViewByAccessibilityId(int accessibilityId) { View root = mViewRootImpl.mView; if (root == null) { @@ -1109,15 +1020,17 @@ final class AccessibilityInteractionController { || accessibilityViewId == providerHost.getAccessibilityViewId()) { final AccessibilityNodeInfo parent; if (virtualDescendantId != AccessibilityNodeInfo.UNDEFINED_ITEM_ID) { - parent = provider.createAccessibilityNodeInfo( - virtualDescendantId); + parent = provider.createAccessibilityNodeInfo(virtualDescendantId); } else { - parent= provider.createAccessibilityNodeInfo( + parent = provider.createAccessibilityNodeInfo( AccessibilityNodeProvider.HOST_VIEW_ID); } - if (parent != null) { - outInfos.add(parent); + if (parent == null) { + // Couldn't obtain the parent, which means we have a + // disconnected sub-tree. Abort prefetch immediately. + return; } + outInfos.add(parent); parentNodeId = parent.getParentNodeId(); accessibilityViewId = AccessibilityNodeInfo.getAccessibilityViewId( parentNodeId); @@ -1199,7 +1112,6 @@ final class AccessibilityInteractionController { private final static int MSG_FIND_ACCESSIBILITY_NODE_INFO_BY_TEXT = 4; private final static int MSG_FIND_FOCUS = 5; private final static int MSG_FOCUS_SEARCH = 6; - private final static int MSG_COMPUTE_CLICK_POINT_IN_SCREEN = 7; public PrivateHandler(Looper looper) { super(looper); @@ -1221,8 +1133,6 @@ final class AccessibilityInteractionController { return "MSG_FIND_FOCUS"; case MSG_FOCUS_SEARCH: return "MSG_FOCUS_SEARCH"; - case MSG_COMPUTE_CLICK_POINT_IN_SCREEN: - return "MSG_COMPUTE_CLICK_POINT_IN_SCREEN"; default: throw new IllegalArgumentException("Unknown message type: " + type); } @@ -1250,9 +1160,6 @@ final class AccessibilityInteractionController { case MSG_FOCUS_SEARCH: { focusSearchUiThread(message); } break; - case MSG_COMPUTE_CLICK_POINT_IN_SCREEN: { - computeClickPointInScreenUiThread(message); - } break; default: throw new IllegalArgumentException("Unknown message type: " + type); } diff --git a/core/java/android/view/DisplayInfo.java b/core/java/android/view/DisplayInfo.java index 56a05fe8dfb9b9fdff6a319fad9c2c37653f5787..9feb681a685208fa08efd7335263fb36063d6cc8 100644 --- a/core/java/android/view/DisplayInfo.java +++ b/core/java/android/view/DisplayInfo.java @@ -58,6 +58,11 @@ public final class DisplayInfo implements Parcelable { */ public String name; + /** + * Unique identifier for the display. Shouldn't be displayed to the user. + */ + public String uniqueId; + /** * The width of the portion of the display that is available to applications, in pixels. * Represents the size of the display minus any system decorations. @@ -257,7 +262,7 @@ public final class DisplayInfo implements Parcelable { && flags == other.flags && type == other.type && Objects.equal(address, other.address) - && Objects.equal(name, other.name) + && Objects.equal(uniqueId, other.uniqueId) && appWidth == other.appWidth && appHeight == other.appHeight && smallestNominalAppWidth == other.smallestNominalAppWidth @@ -293,6 +298,7 @@ public final class DisplayInfo implements Parcelable { type = other.type; address = other.address; name = other.name; + uniqueId = other.uniqueId; appWidth = other.appWidth; appHeight = other.appHeight; smallestNominalAppWidth = other.smallestNominalAppWidth; @@ -348,6 +354,7 @@ public final class DisplayInfo implements Parcelable { state = source.readInt(); ownerUid = source.readInt(); ownerPackageName = source.readString(); + uniqueId = source.readString(); } @Override @@ -380,6 +387,7 @@ public final class DisplayInfo implements Parcelable { dest.writeInt(state); dest.writeInt(ownerUid); dest.writeString(ownerPackageName); + dest.writeString(uniqueId); } @Override @@ -445,6 +453,8 @@ public final class DisplayInfo implements Parcelable { StringBuilder sb = new StringBuilder(); sb.append("DisplayInfo{\""); sb.append(name); + sb.append("\", uniqueId \""); + sb.append(uniqueId); sb.append("\", app "); sb.append(appWidth); sb.append(" x "); diff --git a/core/java/android/view/GLES20Canvas.java b/core/java/android/view/GLES20Canvas.java index 1b57c242b55787b645ace0a315044806e8f48a13..60a489b42ed6a0486eba884a0e090942c519b127 100644 --- a/core/java/android/view/GLES20Canvas.java +++ b/core/java/android/view/GLES20Canvas.java @@ -216,7 +216,7 @@ class GLES20Canvas extends HardwareCanvas { /////////////////////////////////////////////////////////////////////////// @Override - public int callDrawGLFunction(long drawGLFunction) { + public int callDrawGLFunction2(long drawGLFunction) { return nCallDrawGLFunction(mRenderer, drawGLFunction); } @@ -242,7 +242,7 @@ class GLES20Canvas extends HardwareCanvas { void drawHardwareLayer(HardwareLayer layer, float x, float y, Paint paint) { layer.setLayerPaint(paint); - nDrawLayer(mRenderer, layer.getLayer(), x, y); + nDrawLayer(mRenderer, layer.getLayerHandle(), x, y); } private static native void nDrawLayer(long renderer, long layer, float x, float y); @@ -558,7 +558,7 @@ class GLES20Canvas extends HardwareCanvas { Bitmap bitmap = patch.getBitmap(); throwIfCannotDraw(bitmap); final long nativePaint = paint == null ? 0 : paint.mNativePaint; - nDrawPatch(mRenderer, bitmap.mNativeBitmap, bitmap.mBuffer, patch.mNativeChunk, + nDrawPatch(mRenderer, bitmap.mNativeBitmap, patch.mNativeChunk, dst.left, dst.top, dst.right, dst.bottom, nativePaint); } @@ -567,32 +567,31 @@ class GLES20Canvas extends HardwareCanvas { Bitmap bitmap = patch.getBitmap(); throwIfCannotDraw(bitmap); final long nativePaint = paint == null ? 0 : paint.mNativePaint; - nDrawPatch(mRenderer, bitmap.mNativeBitmap, bitmap.mBuffer, patch.mNativeChunk, + nDrawPatch(mRenderer, bitmap.mNativeBitmap, patch.mNativeChunk, dst.left, dst.top, dst.right, dst.bottom, nativePaint); } - private static native void nDrawPatch(long renderer, long bitmap, byte[] buffer, long chunk, + private static native void nDrawPatch(long renderer, long bitmap, long chunk, float left, float top, float right, float bottom, long paint); @Override public void drawBitmap(Bitmap bitmap, float left, float top, Paint paint) { throwIfCannotDraw(bitmap); final long nativePaint = paint == null ? 0 : paint.mNativePaint; - nDrawBitmap(mRenderer, bitmap.mNativeBitmap, bitmap.mBuffer, left, top, nativePaint); + nDrawBitmap(mRenderer, bitmap.mNativeBitmap, left, top, nativePaint); } - private static native void nDrawBitmap(long renderer, long bitmap, byte[] buffer, - float left, float top, long paint); + private static native void nDrawBitmap(long renderer, long bitmap, float left, + float top, long paint); @Override public void drawBitmap(Bitmap bitmap, Matrix matrix, Paint paint) { throwIfCannotDraw(bitmap); final long nativePaint = paint == null ? 0 : paint.mNativePaint; - nDrawBitmap(mRenderer, bitmap.mNativeBitmap, bitmap.mBuffer, - matrix.native_instance, nativePaint); + nDrawBitmap(mRenderer, bitmap.mNativeBitmap, matrix.native_instance, nativePaint); } - private static native void nDrawBitmap(long renderer, long bitmap, byte[] buffer, + private static native void nDrawBitmap(long renderer, long bitmap, long matrix, long paint); @Override @@ -612,7 +611,7 @@ class GLES20Canvas extends HardwareCanvas { bottom = src.bottom; } - nDrawBitmap(mRenderer, bitmap.mNativeBitmap, bitmap.mBuffer, left, top, right, bottom, + nDrawBitmap(mRenderer, bitmap.mNativeBitmap, left, top, right, bottom, dst.left, dst.top, dst.right, dst.bottom, nativePaint); } @@ -633,11 +632,11 @@ class GLES20Canvas extends HardwareCanvas { bottom = src.bottom; } - nDrawBitmap(mRenderer, bitmap.mNativeBitmap, bitmap.mBuffer, left, top, right, bottom, + nDrawBitmap(mRenderer, bitmap.mNativeBitmap, left, top, right, bottom, dst.left, dst.top, dst.right, dst.bottom, nativePaint); } - private static native void nDrawBitmap(long renderer, long bitmap, byte[] buffer, + private static native void nDrawBitmap(long renderer, long bitmap, float srcLeft, float srcTop, float srcRight, float srcBottom, float left, float top, float right, float bottom, long paint); @@ -698,11 +697,11 @@ class GLES20Canvas extends HardwareCanvas { } final long nativePaint = paint == null ? 0 : paint.mNativePaint; - nDrawBitmapMesh(mRenderer, bitmap.mNativeBitmap, bitmap.mBuffer, meshWidth, meshHeight, + nDrawBitmapMesh(mRenderer, bitmap.mNativeBitmap, meshWidth, meshHeight, verts, vertOffset, colors, colorOffset, nativePaint); } - private static native void nDrawBitmapMesh(long renderer, long bitmap, byte[] buffer, + private static native void nDrawBitmapMesh(long renderer, long bitmap, int meshWidth, int meshHeight, float[] verts, int vertOffset, int[] colors, int colorOffset, long paint); @@ -885,6 +884,9 @@ class GLES20Canvas extends HardwareCanvas { @Override public void drawText(CharSequence text, int start, int end, float x, float y, Paint paint) { + if ((start | end | (end - start) | (text.length() - end)) < 0) { + throw new IndexOutOfBoundsException(); + } if (text instanceof String || text instanceof SpannedString || text instanceof SpannableString) { nDrawText(mRenderer, text.toString(), start, end, x, y, paint.mBidiFlags, diff --git a/core/java/android/view/HardwareCanvas.java b/core/java/android/view/HardwareCanvas.java index e3eee71f25c51ac75f60ce00ff405dd124df8bb7..18accb81c37ec5f8b8ed4e57c2affaca0d0be087 100644 --- a/core/java/android/view/HardwareCanvas.java +++ b/core/java/android/view/HardwareCanvas.java @@ -105,10 +105,7 @@ public abstract class HardwareCanvas extends Canvas { * * @hide */ - public int callDrawGLFunction(long drawGLFunction) { - // Noop - this is done in the display list recorder subclass - return RenderNode.STATUS_DONE; - } + public abstract int callDrawGLFunction2(long drawGLFunction); public abstract void drawCircle(CanvasProperty cx, CanvasProperty cy, CanvasProperty radius, CanvasProperty paint); diff --git a/core/java/android/view/HardwareLayer.java b/core/java/android/view/HardwareLayer.java index 0c2e944d94b8fba0469009e32bceb7ad7035ea57..a130bda1bec601adfc162a997603c05ccdf346a2 100644 --- a/core/java/android/view/HardwareLayer.java +++ b/core/java/android/view/HardwareLayer.java @@ -126,8 +126,8 @@ final class HardwareLayer { mRenderer.detachSurfaceTexture(mFinalizer.get()); } - public long getLayer() { - return nGetLayer(mFinalizer.get()); + public long getLayerHandle() { + return mFinalizer.get(); } public void setSurfaceTexture(SurfaceTexture surface) { @@ -153,6 +153,5 @@ final class HardwareLayer { private static native void nUpdateRenderLayer(long layerUpdater, long displayList, int left, int top, int right, int bottom); - private static native long nGetLayer(long layerUpdater); private static native int nGetTexName(long layerUpdater); } diff --git a/core/java/android/view/HardwareRenderer.java b/core/java/android/view/HardwareRenderer.java index 904e33f0aca1c8a90623911226bb14d92c6073f6..c5c3f830fe3e86e521d67d0b8bd8c6732f6e4b8f 100644 --- a/core/java/android/view/HardwareRenderer.java +++ b/core/java/android/view/HardwareRenderer.java @@ -235,7 +235,7 @@ public abstract class HardwareRenderer { * or not the surface used by the HardwareRenderer will be changing. It * Suspends any rendering into the surface, but will not do any destruction */ - abstract void pauseSurface(Surface surface); + abstract boolean pauseSurface(Surface surface); /** * Destroys all hardware rendering resources associated with the specified diff --git a/core/java/android/view/IWindow.aidl b/core/java/android/view/IWindow.aidl index 3e7aae00af6432fae78458c3b9b627d49ad15087..9fc80fcf4235503af6f4198a9cc8192a2b1783e7 100644 --- a/core/java/android/view/IWindow.aidl +++ b/core/java/android/view/IWindow.aidl @@ -85,4 +85,9 @@ oneway interface IWindow { * is done. */ void doneAnimating(); + + /** + * Called for non-application windows when the enter animation has completed. + */ + void dispatchWindowShown(); } diff --git a/core/java/android/view/IWindowManager.aidl b/core/java/android/view/IWindowManager.aidl index 6aa86c7a0bef055d50743b62dd3097b559f4be94..7b20e721832ca8a6b851b4d3d21ecc76ecc9aafc 100644 --- a/core/java/android/view/IWindowManager.aidl +++ b/core/java/android/view/IWindowManager.aidl @@ -96,6 +96,7 @@ interface IWindowManager void overridePendingAppTransitionAspectScaledThumb(in Bitmap srcThumb, int startX, int startY, int targetWidth, int targetHeight, IRemoteCallback startedCallback, boolean scaleUp); + void overridePendingAppTransitionInPlace(String packageName, int anim); void executeAppTransition(); void setAppStartingWindow(IBinder token, String pkg, int theme, in CompatibilityInfo compatInfo, CharSequence nonLocalizedLabel, int labelRes, diff --git a/core/java/android/view/IWindowSession.aidl b/core/java/android/view/IWindowSession.aidl index 037ed281be1899960485b05e9d0a496631988584..7b13e848489ecad1ecac6c13ad9a86d06b59b692 100644 --- a/core/java/android/view/IWindowSession.aidl +++ b/core/java/android/view/IWindowSession.aidl @@ -36,15 +36,16 @@ import android.view.Surface; */ interface IWindowSession { int add(IWindow window, int seq, in WindowManager.LayoutParams attrs, - in int viewVisibility, out Rect outContentInsets, + in int viewVisibility, out Rect outContentInsets, out Rect outStableInsets, out InputChannel outInputChannel); int addToDisplay(IWindow window, int seq, in WindowManager.LayoutParams attrs, in int viewVisibility, in int layerStackId, out Rect outContentInsets, - out InputChannel outInputChannel); + out Rect outStableInsets, out InputChannel outInputChannel); int addWithoutInputChannel(IWindow window, int seq, in WindowManager.LayoutParams attrs, - in int viewVisibility, out Rect outContentInsets); + in int viewVisibility, out Rect outContentInsets, out Rect outStableInsets); int addToDisplayWithoutInputChannel(IWindow window, int seq, in WindowManager.LayoutParams attrs, - in int viewVisibility, in int layerStackId, out Rect outContentInsets); + in int viewVisibility, in int layerStackId, out Rect outContentInsets, + out Rect outStableInsets); void remove(IWindow window); /** diff --git a/core/java/android/view/InputEvent.java b/core/java/android/view/InputEvent.java index 1ecdf3071281ce207f018c9a8c5c0b386a2c3d56..e2ad3ad45c6491bc92a41fa83508f87d32e3df68 100644 --- a/core/java/android/view/InputEvent.java +++ b/core/java/android/view/InputEvent.java @@ -195,6 +195,13 @@ public abstract class InputEvent implements Parcelable { */ public abstract long getEventTimeNano(); + /** + * Marks the input event as being canceled. + * + * @hide + */ + public abstract void cancel(); + /** * Gets the unique sequence number of this event. * Every input event that is created or received by a process has a diff --git a/core/java/android/view/KeyEvent.java b/core/java/android/view/KeyEvent.java index 0701b53e414799655a61c1d6b2c6bd6035e17d75..243a0fc17e52d74258c36d4c71a7ea1ad3c2ccfa 100644 --- a/core/java/android/view/KeyEvent.java +++ b/core/java/android/view/KeyEvent.java @@ -2303,6 +2303,16 @@ public class KeyEvent extends InputEvent implements Parcelable { return (mFlags&FLAG_CANCELED) != 0; } + /** + * Set {@link #FLAG_CANCELED} flag for the key event. + * + * @hide + */ + @Override + public final void cancel() { + mFlags |= FLAG_CANCELED; + } + /** * Call this during {@link Callback#onKeyDown} to have the system track * the key through its final up (possibly including a long press). Note diff --git a/core/java/android/view/MotionEvent.java b/core/java/android/view/MotionEvent.java index ae39b7aeee6defed71328fe4985118e9a7512221..5e45c8fe10dd2c5b9bfbd1f337c328d3efb26ca9 100644 --- a/core/java/android/view/MotionEvent.java +++ b/core/java/android/view/MotionEvent.java @@ -401,6 +401,23 @@ public final class MotionEvent extends InputEvent implements Parcelable { */ public static final int FLAG_TAINTED = 0x80000000; + /** + * Private flag indicating that this event was synthesized by the system and + * should be delivered to the accessibility focused view first. When being + * dispatched such an event is not handled by predecessors of the accessibility + * focused view and after the event reaches that view the flag is cleared and + * normal event dispatch is performed. This ensures that the platform can click + * on any view that has accessibility focus which is semantically equivalent to + * asking the view to perform a click accessibility action but more generic as + * views not implementing click action correctly can still be activated. + * + * @hide + * @see #isTargetAccessibilityFocus() + * @see #setTargetAccessibilityFocus(boolean) + */ + public static final int FLAG_TARGET_ACCESSIBILITY_FOCUS = 0x40000000; + + /** * Flag indicating the motion event intersected the top edge of the screen. */ @@ -1766,6 +1783,20 @@ public final class MotionEvent extends InputEvent implements Parcelable { nativeSetFlags(mNativePtr, tainted ? flags | FLAG_TAINTED : flags & ~FLAG_TAINTED); } + /** @hide */ + public final boolean isTargetAccessibilityFocus() { + final int flags = getFlags(); + return (flags & FLAG_TARGET_ACCESSIBILITY_FOCUS) != 0; + } + + /** @hide */ + public final void setTargetAccessibilityFocus(boolean targetsFocus) { + final int flags = getFlags(); + nativeSetFlags(mNativePtr, targetsFocus + ? flags | FLAG_TARGET_ACCESSIBILITY_FOCUS + : flags & ~FLAG_TARGET_ACCESSIBILITY_FOCUS); + } + /** * Returns the time (in ms) when the user originally pressed down to start * a stream of position events. @@ -3168,6 +3199,12 @@ public final class MotionEvent extends InputEvent implements Parcelable { return ev; } + /** @hide */ + @Override + public final void cancel() { + setAction(ACTION_CANCEL); + } + public void writeToParcel(Parcel out, int flags) { out.writeInt(PARCEL_TOKEN_MOTION_EVENT); nativeWriteToParcel(mNativePtr, out); diff --git a/core/java/android/view/RenderNodeAnimator.java b/core/java/android/view/RenderNodeAnimator.java index debf45de0a4f9f4001aaa691c6255b59f5e91ac0..7b35a3b6cb085c1a167d176a748894cb166d5e33 100644 --- a/core/java/android/view/RenderNodeAnimator.java +++ b/core/java/android/view/RenderNodeAnimator.java @@ -148,6 +148,10 @@ public class RenderNodeAnimator extends Animator { if (mState != STATE_PREPARE) { throw new IllegalStateException("Animator has already started, cannot change it now!"); } + if (mNativePtr == null) { + throw new IllegalStateException("Animator's target has been destroyed " + + "(trying to modify an animation after activity destroy?)"); + } } static boolean isNativeInterpolator(TimeInterpolator interpolator) { @@ -180,7 +184,10 @@ public class RenderNodeAnimator extends Animator { mState = STATE_DELAYED; applyInterpolator(); - if (mStartDelay <= 0 || !mUiThreadHandlesDelay) { + if (mNativePtr == null) { + // It's dead, immediately cancel + cancel(); + } else if (mStartDelay <= 0 || !mUiThreadHandlesDelay) { nSetStartDelay(mNativePtr.get(), mStartDelay); doStart(); } else { @@ -189,9 +196,6 @@ public class RenderNodeAnimator extends Animator { } private void doStart() { - mState = STATE_RUNNING; - nStart(mNativePtr.get(), this); - // Alpha is a special snowflake that has the canonical value stored // in mTransformationInfo instead of in RenderNode, so we need to update // it with the final value here. @@ -201,7 +205,7 @@ public class RenderNodeAnimator extends Animator { mViewTarget.mTransformationInfo.mAlpha = mFinalValue; } - notifyStartListeners(); + moveToRunningState(); if (mViewTarget != null) { // Kick off a frame to start the process @@ -209,6 +213,14 @@ public class RenderNodeAnimator extends Animator { } } + private void moveToRunningState() { + mState = STATE_RUNNING; + if (mNativePtr != null) { + nStart(mNativePtr.get()); + } + notifyStartListeners(); + } + private void notifyStartListeners() { final ArrayList listeners = cloneListeners(); final int numListeners = listeners == null ? 0 : listeners.size(); @@ -219,12 +231,11 @@ public class RenderNodeAnimator extends Animator { @Override public void cancel() { - if (mState != STATE_FINISHED) { + if (mState != STATE_PREPARE && mState != STATE_FINISHED) { if (mState == STATE_DELAYED) { getHelper().removeDelayedAnimation(this); - notifyStartListeners(); + moveToRunningState(); } - nEnd(mNativePtr.get()); final ArrayList listeners = cloneListeners(); final int numListeners = listeners == null ? 0 : listeners.size(); @@ -232,17 +243,27 @@ public class RenderNodeAnimator extends Animator { listeners.get(i).onAnimationCancel(this); } - if (mViewTarget != null) { - // Kick off a frame to flush the state change - mViewTarget.invalidateViewProperty(true, false); - } + end(); } } @Override public void end() { if (mState != STATE_FINISHED) { - nEnd(mNativePtr.get()); + if (mState < STATE_RUNNING) { + getHelper().removeDelayedAnimation(this); + doStart(); + } + if (mNativePtr != null) { + nEnd(mNativePtr.get()); + if (mViewTarget != null) { + // Kick off a frame to flush the state change + mViewTarget.invalidateViewProperty(true, false); + } + } else { + // It's already dead, jump to onFinish + onFinished(); + } } } @@ -270,9 +291,11 @@ public class RenderNodeAnimator extends Animator { } private void setTarget(RenderNode node) { + checkMutable(); if (mTarget != null) { throw new IllegalStateException("Target already set!"); } + nSetListener(mNativePtr.get(), this); mTarget = node; mTarget.addAnimator(this); } @@ -335,6 +358,12 @@ public class RenderNodeAnimator extends Animator { } protected void onFinished() { + if (mState == STATE_PREPARE) { + // Unlikely but possible, the native side has been destroyed + // before we have started. + releaseNativePtr(); + return; + } if (mState == STATE_DELAYED) { getHelper().removeDelayedAnimation(this); notifyStartListeners(); @@ -350,8 +379,14 @@ public class RenderNodeAnimator extends Animator { // Release the native object, as it has a global reference to us. This // breaks the cyclic reference chain, and allows this object to be // GC'd - mNativePtr.release(); - mNativePtr = null; + releaseNativePtr(); + } + + private void releaseNativePtr() { + if (mNativePtr != null) { + mNativePtr.release(); + mNativePtr = null; + } } @SuppressWarnings("unchecked") @@ -473,7 +508,8 @@ public class RenderNodeAnimator extends Animator { private static native void nSetStartDelay(long nativePtr, long startDelay); private static native void nSetInterpolator(long animPtr, long interpolatorPtr); private static native void nSetAllowRunningAsync(long animPtr, boolean mayRunAsync); + private static native void nSetListener(long animPtr, RenderNodeAnimator listener); - private static native void nStart(long animPtr, RenderNodeAnimator finishListener); + private static native void nStart(long animPtr); private static native void nEnd(long animPtr); } diff --git a/core/java/android/view/Surface.java b/core/java/android/view/Surface.java index 3770b8a31922200f1d49ca9d8744aab652fca838..33ce5171bc5723980ef2f5bbb00a60f1b84a5b75 100644 --- a/core/java/android/view/Surface.java +++ b/core/java/android/view/Surface.java @@ -53,6 +53,9 @@ public class Surface implements Parcelable { private static native void nativeAllocateBuffers(long nativeObject); + private static native int nativeGetWidth(long nativeObject); + private static native int nativeGetHeight(long nativeObject); + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override @@ -87,6 +90,8 @@ public class Surface implements Parcelable { // non compatibility mode. private Matrix mCompatibleMatrix; + private HwuiContext mHwuiContext; + /** @hide */ @IntDef({ROTATION_0, ROTATION_90, ROTATION_180, ROTATION_270}) @Retention(RetentionPolicy.SOURCE) @@ -171,6 +176,10 @@ public class Surface implements Parcelable { nativeRelease(mNativeObject); setNativeObjectLocked(0); } + if (mHwuiContext != null) { + mHwuiContext.destroy(); + mHwuiContext = null; + } } } @@ -264,27 +273,66 @@ public class Surface implements Parcelable { * @param canvas The canvas previously obtained from {@link #lockCanvas}. */ public void unlockCanvasAndPost(Canvas canvas) { + synchronized (mLock) { + checkNotReleasedLocked(); + + if (mHwuiContext != null) { + mHwuiContext.unlockAndPost(canvas); + } else { + unlockSwCanvasAndPost(canvas); + } + } + } + + private void unlockSwCanvasAndPost(Canvas canvas) { if (canvas != mCanvas) { throw new IllegalArgumentException("canvas object must be the same instance that " + "was previously returned by lockCanvas"); } + if (mNativeObject != mLockedObject) { + Log.w(TAG, "WARNING: Surface's mNativeObject (0x" + + Long.toHexString(mNativeObject) + ") != mLockedObject (0x" + + Long.toHexString(mLockedObject) +")"); + } + if (mLockedObject == 0) { + throw new IllegalStateException("Surface was not locked"); + } + try { + nativeUnlockCanvasAndPost(mLockedObject, canvas); + } finally { + nativeRelease(mLockedObject); + mLockedObject = 0; + } + } + /** + * Gets a {@link Canvas} for drawing into this surface. + * + * After drawing into the provided {@link Canvas}, the caller must + * invoke {@link #unlockCanvasAndPost} to post the new contents to the surface. + * + * Unlike {@link #lockCanvas(Rect)} this will return a hardware-accelerated + * canvas. See the + * unsupported drawing operations for a list of what is and isn't + * supported in a hardware-accelerated canvas. It is also required to + * fully cover the surface every time {@link #lockHardwareCanvas()} is + * called as the buffer is not preserved between frames. Partial updates + * are not supported. + * + * @return A canvas for drawing into the surface. + * + * @throws IllegalStateException If the canvas cannot be locked. + * @hide + */ + public Canvas lockHardwareCanvas() { synchronized (mLock) { checkNotReleasedLocked(); - if (mNativeObject != mLockedObject) { - Log.w(TAG, "WARNING: Surface's mNativeObject (0x" + - Long.toHexString(mNativeObject) + ") != mLockedObject (0x" + - Long.toHexString(mLockedObject) +")"); - } - if (mLockedObject == 0) { - throw new IllegalStateException("Surface was not locked"); - } - try { - nativeUnlockCanvasAndPost(mLockedObject, canvas); - } finally { - nativeRelease(mLockedObject); - mLockedObject = 0; + if (mHwuiContext == null) { + mHwuiContext = new HwuiContext(); } + return mHwuiContext.lockCanvas( + nativeGetWidth(mNativeObject), + nativeGetHeight(mNativeObject)); } } @@ -415,6 +463,9 @@ public class Surface implements Parcelable { } mNativeObject = ptr; mGenerationId += 1; + if (mHwuiContext != null) { + mHwuiContext.updateSurface(); + } } } @@ -518,4 +569,50 @@ public class Surface implements Parcelable { mOrigMatrix.set(m); } } + + private final class HwuiContext { + private final RenderNode mRenderNode; + private long mHwuiRenderer; + private HardwareCanvas mCanvas; + + HwuiContext() { + mRenderNode = RenderNode.create("HwuiCanvas", null); + mRenderNode.setClipToBounds(false); + mHwuiRenderer = nHwuiCreate(mRenderNode.mNativeRenderNode, mNativeObject); + } + + Canvas lockCanvas(int width, int height) { + if (mCanvas != null) { + throw new IllegalStateException("Surface was already locked!"); + } + mCanvas = mRenderNode.start(width, height); + return mCanvas; + } + + void unlockAndPost(Canvas canvas) { + if (canvas != mCanvas) { + throw new IllegalArgumentException("canvas object must be the same instance that " + + "was previously returned by lockCanvas"); + } + mRenderNode.end(mCanvas); + mCanvas = null; + nHwuiDraw(mHwuiRenderer); + } + + void updateSurface() { + nHwuiSetSurface(mHwuiRenderer, mNativeObject); + } + + void destroy() { + if (mHwuiRenderer != 0) { + nHwuiDestroy(mHwuiRenderer); + mHwuiRenderer = 0; + } + } + } + + private static native long nHwuiCreate(long rootNode, long surface); + private static native void nHwuiSetSurface(long renderer, long surface); + private static native void nHwuiDraw(long renderer); + private static native void nHwuiDestroy(long renderer); } diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java index afc804c68a943cf85ce01c337f38be7740978169..49be57d1bc0a1a8136a219c24ea95d82e985cd0d 100644 --- a/core/java/android/view/SurfaceView.java +++ b/core/java/android/view/SurfaceView.java @@ -496,7 +496,8 @@ public class SurfaceView extends View { mLayout.type = mWindowType; mLayout.gravity = Gravity.START|Gravity.TOP; mSession.addToDisplayWithoutInputChannel(mWindow, mWindow.mSeq, mLayout, - mVisible ? VISIBLE : GONE, display.getDisplayId(), mContentInsets); + mVisible ? VISIBLE : GONE, display.getDisplayId(), mContentInsets, + mStableInsets); } boolean realSizeChanged; diff --git a/core/java/android/view/ThreadedRenderer.java b/core/java/android/view/ThreadedRenderer.java index 1e46517013b948a92dae73851ac3e92905dc4489..ad4a048808c3d70b04fa74efab2feb25614776f7 100644 --- a/core/java/android/view/ThreadedRenderer.java +++ b/core/java/android/view/ThreadedRenderer.java @@ -37,6 +37,7 @@ import android.view.View.AttachInfo; import java.io.FileDescriptor; import java.io.PrintWriter; +import java.util.ArrayList; import java.util.HashSet; /** @@ -66,6 +67,8 @@ public class ThreadedRenderer extends HardwareRenderer { private static final int SYNC_OK = 0; // Needs a ViewRoot invalidate private static final int SYNC_INVALIDATE_REQUIRED = 1 << 0; + // Spoiler: the reward is GPU-accelerated drawing, better find that Surface! + private static final int SYNC_LOST_SURFACE_REWARD_IF_FOUND = 1 << 1; private static final String[] VISUALIZERS = { PROFILE_PROPERTY_VISUALIZE_BARS, @@ -153,8 +156,8 @@ public class ThreadedRenderer extends HardwareRenderer { } @Override - void pauseSurface(Surface surface) { - nPauseSurface(mNativeProxy, surface); + boolean pauseSurface(Surface surface) { + return nPauseSurface(mNativeProxy, surface); } @Override @@ -191,7 +194,8 @@ public class ThreadedRenderer extends HardwareRenderer { final float lightX = width / 2.0f; mWidth = width; mHeight = height; - if (surfaceInsets != null && !surfaceInsets.isEmpty()) { + if (surfaceInsets != null && (surfaceInsets.left != 0 || surfaceInsets.right != 0 + || surfaceInsets.top != 0 || surfaceInsets.bottom != 0)) { mHasInsets = true; mInsetLeft = surfaceInsets.left; mInsetTop = surfaceInsets.top; @@ -255,6 +259,9 @@ public class ThreadedRenderer extends HardwareRenderer { mProfilingEnabled = wantProfiling; changed = true; } + if (changed) { + invalidateRoot(); + } return changed; } @@ -268,7 +275,7 @@ public class ThreadedRenderer extends HardwareRenderer { } private void updateRootDisplayList(View view, HardwareDrawCallbacks callbacks) { - Trace.traceBegin(Trace.TRACE_TAG_VIEW, "getDisplayList"); + Trace.traceBegin(Trace.TRACE_TAG_VIEW, "Record View#draw()"); updateViewTreeDisplayList(view); if (mRootNodeNeedsUpdate || !mRootNode.isValid()) { @@ -332,6 +339,13 @@ public class ThreadedRenderer extends HardwareRenderer { int syncResult = nSyncAndDrawFrame(mNativeProxy, frameTimeNanos, recordDuration, view.getResources().getDisplayMetrics().density); + if ((syncResult & SYNC_LOST_SURFACE_REWARD_IF_FOUND) != 0) { + setEnabled(false); + attachInfo.mViewRootImpl.mSurface.release(); + // Invalidate since we failed to draw. This should fetch a Surface + // if it is still needed or do nothing if we are no longer drawing + attachInfo.mViewRootImpl.invalidate(); + } if ((syncResult & SYNC_INVALIDATE_REQUIRED) != 0) { attachInfo.mViewRootImpl.invalidate(); } @@ -452,11 +466,13 @@ public class ThreadedRenderer extends HardwareRenderer { final LongSparseArray drawables = resources.getPreloadedDrawables(); final int count = drawables.size(); + ArrayList tmpList = new ArrayList(); for (int i = 0; i < count; i++) { - final Bitmap bitmap = drawables.valueAt(i).getBitmap(); - if (bitmap != null && bitmap.getConfig() == Bitmap.Config.ARGB_8888) { - preloadedPointers.add(bitmap.mNativeBitmap); + drawables.valueAt(i).addAtlasableBitmaps(tmpList); + for (int j = 0; j < tmpList.size(); j++) { + preloadedPointers.add(tmpList.get(j).mNativeBitmap); } + tmpList.clear(); } for (int i = 0; i < map.length; i += 4) { @@ -481,7 +497,7 @@ public class ThreadedRenderer extends HardwareRenderer { private static native boolean nInitialize(long nativeProxy, Surface window); private static native void nUpdateSurface(long nativeProxy, Surface window); - private static native void nPauseSurface(long nativeProxy, Surface window); + private static native boolean nPauseSurface(long nativeProxy, Surface window); private static native void nSetup(long nativeProxy, int width, int height, float lightX, float lightY, float lightZ, float lightRadius, int ambientShadowAlpha, int spotShadowAlpha); diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 1ecc8d9067bca2ab679c1f0c61436c39378e9a47..3c058729880a5964fffbb7016f7c08a3774a1b55 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -56,6 +56,7 @@ import android.os.Parcelable; import android.os.RemoteException; import android.os.SystemClock; import android.os.SystemProperties; +import android.os.Trace; import android.text.TextUtils; import android.util.AttributeSet; import android.util.FloatProperty; @@ -2400,12 +2401,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback, */ static final int PFLAG3_NESTED_SCROLLING_ENABLED = 0x80; - /** - * Flag indicating that outline was invalidated and should be rebuilt the next time - * the DisplayList is updated. - */ - static final int PFLAG3_OUTLINE_INVALID = 0x100; - /* End of masks for mPrivateFlags3 */ static final int DRAG_MASK = PFLAG2_DRAG_CAN_ACCEPT | PFLAG2_DRAG_HOVERED; @@ -3108,6 +3103,16 @@ public class View implements Drawable.Callback, KeyEvent.Callback, */ private MatchLabelForPredicate mMatchLabelForPredicate; + /** + * Specifies a view before which this one is visited in accessibility traversal. + */ + private int mAccessibilityTraversalBeforeId = NO_ID; + + /** + * Specifies a view after which this one is visited in accessibility traversal. + */ + private int mAccessibilityTraversalAfterId = NO_ID; + /** * Predicate for matching a view by its id. */ @@ -3229,6 +3234,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, */ private ArrayList mOnLayoutChangeListeners; + protected OnScrollChangeListener mOnScrollChangeListener; + /** * Listeners for attach events. */ @@ -3886,6 +3893,12 @@ public class View implements Drawable.Callback, KeyEvent.Callback, case com.android.internal.R.styleable.View_contentDescription: setContentDescription(a.getString(attr)); break; + case com.android.internal.R.styleable.View_accessibilityTraversalBefore: + setAccessibilityTraversalBefore(a.getResourceId(attr, NO_ID)); + break; + case com.android.internal.R.styleable.View_accessibilityTraversalAfter: + setAccessibilityTraversalAfter(a.getResourceId(attr, NO_ID)); + break; case com.android.internal.R.styleable.View_labelFor: setLabelFor(a.getResourceId(attr, NO_ID)); break; @@ -4605,6 +4618,17 @@ public class View implements Drawable.Callback, KeyEvent.Callback, return mListenerInfo; } + /** + * Register a callback to be invoked when the scroll position of this view + * changed. + * + * @param l The callback that will run. + * @hide Only used internally. + */ + public void setOnScrollChangeListener(OnScrollChangeListener l) { + getListenerInfo().mOnScrollChangeListener = l; + } + /** * Register a callback to be invoked when focus of this view changed. * @@ -5529,12 +5553,23 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } /** - * Gets the location of this view in screen coordintates. + * Gets the location of this view in screen coordinates. * * @param outRect The output location * @hide */ public void getBoundsOnScreen(Rect outRect) { + getBoundsOnScreen(outRect, false); + } + + /** + * Gets the location of this view in screen coordinates. + * + * @param outRect The output location + * @param clipToParent Whether to clip child bounds to the parent ones. + * @hide + */ + public void getBoundsOnScreen(Rect outRect, boolean clipToParent) { if (mAttachInfo == null) { return; } @@ -5554,6 +5589,13 @@ public class View implements Drawable.Callback, KeyEvent.Callback, position.offset(-parentView.mScrollX, -parentView.mScrollY); + if (clipToParent) { + position.left = Math.max(position.left, 0); + position.top = Math.max(position.top, 0); + position.right = Math.min(position.right, parentView.getWidth()); + position.bottom = Math.min(position.bottom, parentView.getHeight()); + } + if (!parentView.hasIdentityMatrix()) { parentView.getMatrix().mapRect(position); } @@ -5585,7 +5627,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, getDrawingRect(bounds); info.setBoundsInParent(bounds); - getBoundsOnScreen(bounds); + getBoundsOnScreen(bounds, true); info.setBoundsInScreen(bounds); ViewParent parent = getParentForAccessibility(); @@ -5598,6 +5640,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, if (rootView == null) { rootView = this; } + View label = rootView.findLabelForView(this, mID); if (label != null) { info.setLabeledBy(label); @@ -5626,6 +5669,30 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } } + if (mAccessibilityTraversalBeforeId != View.NO_ID) { + View rootView = getRootView(); + if (rootView == null) { + rootView = this; + } + View next = rootView.findViewInsideOutShouldExist(this, + mAccessibilityTraversalBeforeId); + if (next != null) { + info.setTraversalBefore(next); + } + } + + if (mAccessibilityTraversalAfterId != View.NO_ID) { + View rootView = getRootView(); + if (rootView == null) { + rootView = this; + } + View next = rootView.findViewInsideOutShouldExist(this, + mAccessibilityTraversalAfterId); + if (next != null) { + info.setTraversalAfter(next); + } + } + info.setVisibleToUser(isVisibleToUser()); info.setPackageName(mContext.getPackageName()); @@ -5755,136 +5822,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback, return false; } - /** - * Computes a point on which a sequence of a down/up event can be sent to - * trigger clicking this view. This method is for the exclusive use by the - * accessibility layer to determine where to send a click event in explore - * by touch mode. - * - * @param interactiveRegion The interactive portion of this window. - * @param outPoint The point to populate. - * @return True of such a point exists. - */ - boolean computeClickPointInScreenForAccessibility(Region interactiveRegion, - Point outPoint) { - // Since the interactive portion of the view is a region but as a view - // may have a transformation matrix which cannot be applied to a - // region we compute the view bounds rectangle and all interactive - // predecessor's and sibling's (siblings of predecessors included) - // rectangles that intersect the view bounds. At the - // end if the view was partially covered by another interactive - // view we compute the view's interactive region and pick a point - // on its boundary path as regions do not offer APIs to get inner - // points. Note that the the code is optimized to fail early and - // avoid unnecessary allocations plus computations. - - // The current approach has edge cases that may produce false - // positives or false negatives. For example, a portion of the - // view may be covered by an interactive descendant of a - // predecessor, which we do not compute. Also a view may be handling - // raw touch events instead registering click listeners, which - // we cannot compute. Despite these limitations this approach will - // work most of the time and it is a huge improvement over just - // blindly sending the down and up events in the center of the - // view. - - // Cannot click on an unattached view. - if (mAttachInfo == null) { - return false; - } - - // Attached to an invisible window means this view is not visible. - if (mAttachInfo.mWindowVisibility != View.VISIBLE) { - return false; - } - - RectF bounds = mAttachInfo.mTmpTransformRect; - bounds.set(0, 0, getWidth(), getHeight()); - List intersections = mAttachInfo.mTmpRectList; - intersections.clear(); - - if (mParent instanceof ViewGroup) { - ViewGroup parentGroup = (ViewGroup) mParent; - if (!parentGroup.translateBoundsAndIntersectionsInWindowCoordinates( - this, bounds, intersections)) { - intersections.clear(); - return false; - } - } - - // Take into account the window location. - final int dx = mAttachInfo.mWindowLeft; - final int dy = mAttachInfo.mWindowTop; - bounds.offset(dx, dy); - offsetRects(intersections, dx, dy); - - if (intersections.isEmpty() && interactiveRegion == null) { - outPoint.set((int) bounds.centerX(), (int) bounds.centerY()); - } else { - // This view is partially covered by other views, then compute - // the not covered region and pick a point on its boundary. - Region region = new Region(); - region.set((int) bounds.left, (int) bounds.top, - (int) bounds.right, (int) bounds.bottom); - - final int intersectionCount = intersections.size(); - for (int i = intersectionCount - 1; i >= 0; i--) { - RectF intersection = intersections.remove(i); - region.op((int) intersection.left, (int) intersection.top, - (int) intersection.right, (int) intersection.bottom, - Region.Op.DIFFERENCE); - } - - // If the view is completely covered, done. - if (region.isEmpty()) { - return false; - } - - // Take into account the interactive portion of the window - // as the rest is covered by other windows. If no such a region - // then the whole window is interactive. - if (interactiveRegion != null) { - region.op(interactiveRegion, Region.Op.INTERSECT); - } - - // If the view is completely covered, done. - if (region.isEmpty()) { - return false; - } - - // Try a shortcut here. - if (region.isRect()) { - Rect regionBounds = mAttachInfo.mTmpInvalRect; - region.getBounds(regionBounds); - outPoint.set(regionBounds.centerX(), regionBounds.centerY()); - return true; - } - - // Get the a point on the region boundary path. - Path path = region.getBoundaryPath(); - PathMeasure pathMeasure = new PathMeasure(path, false); - final float[] coordinates = mAttachInfo.mTmpTransformLocation; - - // Without loss of generality pick a point. - final float point = pathMeasure.getLength() * 0.01f; - if (!pathMeasure.getPosTan(point, coordinates, null)) { - return false; - } - - outPoint.set(Math.round(coordinates[0]), Math.round(coordinates[1])); - } - - return true; - } - - static void offsetRects(List rects, float offsetX, float offsetY) { - final int rectCount = rects.size(); - for (int i = 0; i < rectCount; i++) { - RectF intersection = rects.get(i); - intersection.offset(offsetX, offsetY); - } - } - /** * Returns the delegate for implementing accessibility support via * composition. For more details see {@link AccessibilityDelegate}. @@ -6014,6 +5951,94 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } } + /** + * Sets the id of a view before which this one is visited in accessibility traversal. + * A screen-reader must visit the content of this view before the content of the one + * it precedes. For example, if view B is set to be before view A, then a screen-reader + * will traverse the entire content of B before traversing the entire content of A, + * regardles of what traversal strategy it is using. + *

          + * Views that do not have specified before/after relationships are traversed in order + * determined by the screen-reader. + *

          + *

          + * Setting that this view is before a view that is not important for accessibility + * or if this view is not important for accessibility will have no effect as the + * screen-reader is not aware of unimportant views. + *

          + * + * @param beforeId The id of a view this one precedes in accessibility traversal. + * + * @attr ref android.R.styleable#View_accessibilityTraversalBefore + * + * @see #setImportantForAccessibility(int) + */ + @RemotableViewMethod + public void setAccessibilityTraversalBefore(int beforeId) { + if (mAccessibilityTraversalBeforeId == beforeId) { + return; + } + mAccessibilityTraversalBeforeId = beforeId; + notifyViewAccessibilityStateChangedIfNeeded( + AccessibilityEvent.CONTENT_CHANGE_TYPE_UNDEFINED); + } + + /** + * Gets the id of a view before which this one is visited in accessibility traversal. + * + * @return The id of a view this one precedes in accessibility traversal if + * specified, otherwise {@link #NO_ID}. + * + * @see #setAccessibilityTraversalBefore(int) + */ + public int getAccessibilityTraversalBefore() { + return mAccessibilityTraversalBeforeId; + } + + /** + * Sets the id of a view after which this one is visited in accessibility traversal. + * A screen-reader must visit the content of the other view before the content of this + * one. For example, if view B is set to be after view A, then a screen-reader + * will traverse the entire content of A before traversing the entire content of B, + * regardles of what traversal strategy it is using. + *

          + * Views that do not have specified before/after relationships are traversed in order + * determined by the screen-reader. + *

          + *

          + * Setting that this view is after a view that is not important for accessibility + * or if this view is not important for accessibility will have no effect as the + * screen-reader is not aware of unimportant views. + *

          + * + * @param afterId The id of a view this one succedees in accessibility traversal. + * + * @attr ref android.R.styleable#View_accessibilityTraversalAfter + * + * @see #setImportantForAccessibility(int) + */ + @RemotableViewMethod + public void setAccessibilityTraversalAfter(int afterId) { + if (mAccessibilityTraversalAfterId == afterId) { + return; + } + mAccessibilityTraversalAfterId = afterId; + notifyViewAccessibilityStateChangedIfNeeded( + AccessibilityEvent.CONTENT_CHANGE_TYPE_UNDEFINED); + } + + /** + * Gets the id of a view after which this one is visited in accessibility traversal. + * + * @return The id of a view this one succeedes in accessibility traversal if + * specified, otherwise {@link #NO_ID}. + * + * @see #setAccessibilityTraversalAfter(int) + */ + public int getAccessibilityTraversalAfter() { + return mAccessibilityTraversalAfterId; + } + /** * Gets the id of a view for which this view serves as a label for * accessibility purposes. @@ -6033,11 +6058,16 @@ public class View implements Drawable.Callback, KeyEvent.Callback, */ @RemotableViewMethod public void setLabelFor(int id) { + if (mLabelForId == id) { + return; + } mLabelForId = id; if (mLabelForId != View.NO_ID && mID == View.NO_ID) { mID = generateViewId(); } + notifyViewAccessibilityStateChangedIfNeeded( + AccessibilityEvent.CONTENT_CHANGE_TYPE_UNDEFINED); } /** @@ -7993,6 +8023,34 @@ public class View implements Drawable.Callback, KeyEvent.Callback, mPrivateFlags2 &= ~PFLAG2_SUBTREE_ACCESSIBILITY_STATE_CHANGED; } + /** + * Report an accessibility action to this view's parents for delegated processing. + * + *

          Implementations of {@link #performAccessibilityAction(int, Bundle)} may internally + * call this method to delegate an accessibility action to a supporting parent. If the parent + * returns true from its + * {@link ViewParent#onNestedPrePerformAccessibilityAction(View, int, android.os.Bundle)} + * method this method will return true to signify that the action was consumed.

          + * + *

          This method is useful for implementing nested scrolling child views. If + * {@link #isNestedScrollingEnabled()} returns true and the action is a scrolling action + * a custom view implementation may invoke this method to allow a parent to consume the + * scroll first. If this method returns true the custom view should skip its own scrolling + * behavior.

          + * + * @param action Accessibility action to delegate + * @param arguments Optional action arguments + * @return true if the action was consumed by a parent + */ + public boolean dispatchNestedPrePerformAccessibilityAction(int action, Bundle arguments) { + for (ViewParent p = getParent(); p != null; p = p.getParent()) { + if (p.onNestedPrePerformAccessibilityAction(this, action, arguments)) { + return true; + } + } + return false; + } + /** * Performs the specified accessibility action on the view. For * possible accessibility actions look at {@link AccessibilityNodeInfo}. @@ -8003,6 +8061,11 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * is responsible for handling this call. *

          * + *

          The default implementation will delegate + * {@link AccessibilityNodeInfo#ACTION_SCROLL_BACKWARD} and + * {@link AccessibilityNodeInfo#ACTION_SCROLL_FORWARD} to nested scrolling parents if + * {@link #isNestedScrollingEnabled() nested scrolling is enabled} on this view.

          + * * @param action The action to perform. * @param arguments Optional action arguments. * @return Whether the action was performed. @@ -8019,8 +8082,18 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * @see #performAccessibilityAction(int, Bundle) * * Note: Called from the default {@link AccessibilityDelegate}. + * + * @hide Until we've refactored all accessibility delegation methods. */ - boolean performAccessibilityActionInternal(int action, Bundle arguments) { + public boolean performAccessibilityActionInternal(int action, Bundle arguments) { + if (isNestedScrollingEnabled() + && (action == AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD + || action == AccessibilityNodeInfo.ACTION_SCROLL_FORWARD)) { + if (dispatchNestedPrePerformAccessibilityAction(action, arguments)) { + return true; + } + } + switch (action) { case AccessibilityNodeInfo.ACTION_CLICK: { if (isClickable()) { @@ -8364,6 +8437,16 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * @return True if the event was handled by the view, false otherwise. */ public boolean dispatchTouchEvent(MotionEvent event) { + // If the event should be handled by accessibility focus first. + if (event.isTargetAccessibilityFocus()) { + // We don't have focus or no virtual descendant has it, do not handle the event. + if (!isAccessibilityFocusedViewOrHost()) { + return false; + } + // We have focus and got the event, then use normal event dispatch. + event.setTargetAccessibilityFocus(false); + } + boolean result = false; if (mInputEventConsistencyVerifier != null) { @@ -8406,6 +8489,11 @@ public class View implements Drawable.Callback, KeyEvent.Callback, return result; } + boolean isAccessibilityFocusedViewOrHost() { + return isAccessibilityFocused() || (getViewRootImpl() != null && getViewRootImpl() + .getAccessibilityFocusedHost() == this); + } + /** * Filter the touch event to apply security policies. * @@ -9779,6 +9867,29 @@ public class View implements Drawable.Callback, KeyEvent.Callback, if (ai != null) { ai.mViewScrollChanged = true; } + + if (mListenerInfo != null && mListenerInfo.mOnScrollChangeListener != null) { + mListenerInfo.mOnScrollChangeListener.onScrollChange(this, l, t, oldl, oldt); + } + } + + /** + * Interface definition for a callback to be invoked when the scroll + * position of a view changes. + * + * @hide Only used internally. + */ + public interface OnScrollChangeListener { + /** + * Called when the scroll position of a view changes. + * + * @param v The view whose scroll position has changed. + * @param scrollX Current horizontal scroll origin. + * @param scrollY Current vertical scroll origin. + * @param oldScrollX Previous horizontal scroll origin. + * @param oldScrollY Previous vertical scroll origin. + */ + void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY); } /** @@ -11086,7 +11197,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * @see #setOutlineProvider(ViewOutlineProvider) */ public void invalidateOutline() { - mPrivateFlags3 |= PFLAG3_OUTLINE_INVALID; + rebuildOutline(); notifySubtreeAccessibilityStateChangedIfNeeded(); invalidateViewProperty(false, false); @@ -11657,7 +11768,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, void invalidateInternal(int l, int t, int r, int b, boolean invalidateCache, boolean fullInvalidate) { if (mGhostView != null) { - mGhostView.invalidate(invalidateCache); + mGhostView.invalidate(true); return; } @@ -12765,7 +12876,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Interpolator.Result.FREEZE_END) { cache.state = ScrollabilityCache.OFF; } else { - cache.scrollBar.setAlpha(Math.round(values[0])); + cache.scrollBar.mutate().setAlpha(Math.round(values[0])); } // This will make the scroll bars inval themselves after @@ -12775,7 +12886,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } else { // We're just on -- but we may have been fading before so // reset alpha - cache.scrollBar.setAlpha(255); + cache.scrollBar.mutate().setAlpha(255); } @@ -12989,7 +13100,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } // Should resolve Drawables before Padding because we need the layout direction of the // Drawable to correctly resolve Padding. - if (!isDrawablesResolved()) { + if (!areDrawablesResolved()) { resolveDrawables(); } if (!isPaddingResolved()) { @@ -13253,6 +13364,14 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * @hide */ public void resetResolvedPadding() { + resetResolvedPaddingInternal(); + } + + /** + * Used when we only want to reset *this* view's padding and not trigger overrides + * in ViewGroup that reset children too. + */ + void resetResolvedPaddingInternal() { mPrivateFlags2 &= ~PFLAG2_PADDING_RESOLVED; } @@ -14047,7 +14166,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } else { draw(canvas); } - drawAccessibilityFocus(canvas); } } finally { renderNode.end(canvas); @@ -14213,144 +14331,158 @@ public class View implements Drawable.Callback, KeyEvent.Callback, public void buildDrawingCache(boolean autoScale) { if ((mPrivateFlags & PFLAG_DRAWING_CACHE_VALID) == 0 || (autoScale ? mDrawingCache == null : mUnscaledDrawingCache == null)) { - mCachingFailed = false; + if (Trace.isTagEnabled(Trace.TRACE_TAG_VIEW)) { + Trace.traceBegin(Trace.TRACE_TAG_VIEW, + "buildDrawingCache/SW Layer for " + getClass().getSimpleName()); + } + try { + buildDrawingCacheImpl(autoScale); + } finally { + Trace.traceEnd(Trace.TRACE_TAG_VIEW); + } + } + } - int width = mRight - mLeft; - int height = mBottom - mTop; + /** + * private, internal implementation of buildDrawingCache, used to enable tracing + */ + private void buildDrawingCacheImpl(boolean autoScale) { + mCachingFailed = false; - final AttachInfo attachInfo = mAttachInfo; - final boolean scalingRequired = attachInfo != null && attachInfo.mScalingRequired; + int width = mRight - mLeft; + int height = mBottom - mTop; - if (autoScale && scalingRequired) { - width = (int) ((width * attachInfo.mApplicationScale) + 0.5f); - height = (int) ((height * attachInfo.mApplicationScale) + 0.5f); + final AttachInfo attachInfo = mAttachInfo; + final boolean scalingRequired = attachInfo != null && attachInfo.mScalingRequired; + + if (autoScale && scalingRequired) { + width = (int) ((width * attachInfo.mApplicationScale) + 0.5f); + height = (int) ((height * attachInfo.mApplicationScale) + 0.5f); + } + + final int drawingCacheBackgroundColor = mDrawingCacheBackgroundColor; + final boolean opaque = drawingCacheBackgroundColor != 0 || isOpaque(); + final boolean use32BitCache = attachInfo != null && attachInfo.mUse32BitDrawingCache; + + final long projectedBitmapSize = width * height * (opaque && !use32BitCache ? 2 : 4); + final long drawingCacheSize = + ViewConfiguration.get(mContext).getScaledMaximumDrawingCacheSize(); + if (width <= 0 || height <= 0 || projectedBitmapSize > drawingCacheSize) { + if (width > 0 && height > 0) { + Log.w(VIEW_LOG_TAG, "View too large to fit into drawing cache, needs " + + projectedBitmapSize + " bytes, only " + + drawingCacheSize + " available"); } + destroyDrawingCache(); + mCachingFailed = true; + return; + } - final int drawingCacheBackgroundColor = mDrawingCacheBackgroundColor; - final boolean opaque = drawingCacheBackgroundColor != 0 || isOpaque(); - final boolean use32BitCache = attachInfo != null && attachInfo.mUse32BitDrawingCache; + boolean clear = true; + Bitmap bitmap = autoScale ? mDrawingCache : mUnscaledDrawingCache; - final long projectedBitmapSize = width * height * (opaque && !use32BitCache ? 2 : 4); - final long drawingCacheSize = - ViewConfiguration.get(mContext).getScaledMaximumDrawingCacheSize(); - if (width <= 0 || height <= 0 || projectedBitmapSize > drawingCacheSize) { - if (width > 0 && height > 0) { - Log.w(VIEW_LOG_TAG, "View too large to fit into drawing cache, needs " - + projectedBitmapSize + " bytes, only " - + drawingCacheSize + " available"); + if (bitmap == null || bitmap.getWidth() != width || bitmap.getHeight() != height) { + Bitmap.Config quality; + if (!opaque) { + // Never pick ARGB_4444 because it looks awful + // Keep the DRAWING_CACHE_QUALITY_LOW flag just in case + switch (mViewFlags & DRAWING_CACHE_QUALITY_MASK) { + case DRAWING_CACHE_QUALITY_AUTO: + case DRAWING_CACHE_QUALITY_LOW: + case DRAWING_CACHE_QUALITY_HIGH: + default: + quality = Bitmap.Config.ARGB_8888; + break; } - destroyDrawingCache(); - mCachingFailed = true; - return; + } else { + // Optimization for translucent windows + // If the window is translucent, use a 32 bits bitmap to benefit from memcpy() + quality = use32BitCache ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565; } - boolean clear = true; - Bitmap bitmap = autoScale ? mDrawingCache : mUnscaledDrawingCache; + // Try to cleanup memory + if (bitmap != null) bitmap.recycle(); - if (bitmap == null || bitmap.getWidth() != width || bitmap.getHeight() != height) { - Bitmap.Config quality; - if (!opaque) { - // Never pick ARGB_4444 because it looks awful - // Keep the DRAWING_CACHE_QUALITY_LOW flag just in case - switch (mViewFlags & DRAWING_CACHE_QUALITY_MASK) { - case DRAWING_CACHE_QUALITY_AUTO: - case DRAWING_CACHE_QUALITY_LOW: - case DRAWING_CACHE_QUALITY_HIGH: - default: - quality = Bitmap.Config.ARGB_8888; - break; - } + try { + bitmap = Bitmap.createBitmap(mResources.getDisplayMetrics(), + width, height, quality); + bitmap.setDensity(getResources().getDisplayMetrics().densityDpi); + if (autoScale) { + mDrawingCache = bitmap; } else { - // Optimization for translucent windows - // If the window is translucent, use a 32 bits bitmap to benefit from memcpy() - quality = use32BitCache ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565; + mUnscaledDrawingCache = bitmap; } - - // Try to cleanup memory - if (bitmap != null) bitmap.recycle(); - - try { - bitmap = Bitmap.createBitmap(mResources.getDisplayMetrics(), - width, height, quality); - bitmap.setDensity(getResources().getDisplayMetrics().densityDpi); - if (autoScale) { - mDrawingCache = bitmap; - } else { - mUnscaledDrawingCache = bitmap; - } - if (opaque && use32BitCache) bitmap.setHasAlpha(false); - } catch (OutOfMemoryError e) { - // If there is not enough memory to create the bitmap cache, just - // ignore the issue as bitmap caches are not required to draw the - // view hierarchy - if (autoScale) { - mDrawingCache = null; - } else { - mUnscaledDrawingCache = null; - } - mCachingFailed = true; - return; + if (opaque && use32BitCache) bitmap.setHasAlpha(false); + } catch (OutOfMemoryError e) { + // If there is not enough memory to create the bitmap cache, just + // ignore the issue as bitmap caches are not required to draw the + // view hierarchy + if (autoScale) { + mDrawingCache = null; + } else { + mUnscaledDrawingCache = null; } - - clear = drawingCacheBackgroundColor != 0; + mCachingFailed = true; + return; } - Canvas canvas; - if (attachInfo != null) { - canvas = attachInfo.mCanvas; - if (canvas == null) { - canvas = new Canvas(); - } - canvas.setBitmap(bitmap); - // Temporarily clobber the cached Canvas in case one of our children - // is also using a drawing cache. Without this, the children would - // steal the canvas by attaching their own bitmap to it and bad, bad - // thing would happen (invisible views, corrupted drawings, etc.) - attachInfo.mCanvas = null; - } else { - // This case should hopefully never or seldom happen - canvas = new Canvas(bitmap); - } + clear = drawingCacheBackgroundColor != 0; + } - if (clear) { - bitmap.eraseColor(drawingCacheBackgroundColor); + Canvas canvas; + if (attachInfo != null) { + canvas = attachInfo.mCanvas; + if (canvas == null) { + canvas = new Canvas(); } + canvas.setBitmap(bitmap); + // Temporarily clobber the cached Canvas in case one of our children + // is also using a drawing cache. Without this, the children would + // steal the canvas by attaching their own bitmap to it and bad, bad + // thing would happen (invisible views, corrupted drawings, etc.) + attachInfo.mCanvas = null; + } else { + // This case should hopefully never or seldom happen + canvas = new Canvas(bitmap); + } - computeScroll(); - final int restoreCount = canvas.save(); + if (clear) { + bitmap.eraseColor(drawingCacheBackgroundColor); + } - if (autoScale && scalingRequired) { - final float scale = attachInfo.mApplicationScale; - canvas.scale(scale, scale); - } + computeScroll(); + final int restoreCount = canvas.save(); - canvas.translate(-mScrollX, -mScrollY); + if (autoScale && scalingRequired) { + final float scale = attachInfo.mApplicationScale; + canvas.scale(scale, scale); + } - mPrivateFlags |= PFLAG_DRAWN; - if (mAttachInfo == null || !mAttachInfo.mHardwareAccelerated || - mLayerType != LAYER_TYPE_NONE) { - mPrivateFlags |= PFLAG_DRAWING_CACHE_VALID; - } + canvas.translate(-mScrollX, -mScrollY); - // Fast path for layouts with no backgrounds - if ((mPrivateFlags & PFLAG_SKIP_DRAW) == PFLAG_SKIP_DRAW) { - mPrivateFlags &= ~PFLAG_DIRTY_MASK; - dispatchDraw(canvas); - if (mOverlay != null && !mOverlay.isEmpty()) { - mOverlay.getOverlayView().draw(canvas); - } - } else { - draw(canvas); + mPrivateFlags |= PFLAG_DRAWN; + if (mAttachInfo == null || !mAttachInfo.mHardwareAccelerated || + mLayerType != LAYER_TYPE_NONE) { + mPrivateFlags |= PFLAG_DRAWING_CACHE_VALID; + } + + // Fast path for layouts with no backgrounds + if ((mPrivateFlags & PFLAG_SKIP_DRAW) == PFLAG_SKIP_DRAW) { + mPrivateFlags &= ~PFLAG_DIRTY_MASK; + dispatchDraw(canvas); + if (mOverlay != null && !mOverlay.isEmpty()) { + mOverlay.getOverlayView().draw(canvas); } - drawAccessibilityFocus(canvas); + } else { + draw(canvas); + } - canvas.restoreToCount(restoreCount); - canvas.setBitmap(null); + canvas.restoreToCount(restoreCount); + canvas.setBitmap(null); - if (attachInfo != null) { - // Restore the cached Canvas for our siblings - attachInfo.mCanvas = canvas; - } + if (attachInfo != null) { + // Restore the cached Canvas for our siblings + attachInfo.mCanvas = canvas; } } @@ -14417,7 +14549,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } else { draw(canvas); } - drawAccessibilityFocus(canvas); mPrivateFlags = flags; @@ -14578,27 +14709,21 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * this view, to which future drawing operations will be clipped. */ public void setClipBounds(Rect clipBounds) { + if (clipBounds == mClipBounds + || (clipBounds != null && clipBounds.equals(mClipBounds))) { + return; + } if (clipBounds != null) { - if (clipBounds.equals(mClipBounds)) { - return; - } if (mClipBounds == null) { - invalidate(); mClipBounds = new Rect(clipBounds); } else { - invalidate(Math.min(mClipBounds.left, clipBounds.left), - Math.min(mClipBounds.top, clipBounds.top), - Math.max(mClipBounds.right, clipBounds.right), - Math.max(mClipBounds.bottom, clipBounds.bottom)); mClipBounds.set(clipBounds); } } else { - if (mClipBounds != null) { - invalidate(); - mClipBounds = null; - } + mClipBounds = null; } mRenderNode.setClipBounds(mClipBounds); + invalidateViewProperty(false, false); } /** @@ -14677,10 +14802,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback, */ void setDisplayListProperties(RenderNode renderNode) { if (renderNode != null) { - if ((mPrivateFlags3 & PFLAG3_OUTLINE_INVALID) != 0) { - rebuildOutline(); - mPrivateFlags3 &= ~PFLAG3_OUTLINE_INVALID; - } renderNode.setHasOverlappingRendering(hasOverlappingRendering()); if (mParent instanceof ViewGroup) { renderNode.setClipToBounds( @@ -15015,13 +15136,9 @@ public class View implements Drawable.Callback, KeyEvent.Callback, if ((mPrivateFlags & PFLAG_SKIP_DRAW) == PFLAG_SKIP_DRAW) { mPrivateFlags &= ~PFLAG_DIRTY_MASK; dispatchDraw(canvas); - if (mOverlay != null && !mOverlay.isEmpty()) { - mOverlay.getOverlayView().draw(canvas); - } } else { draw(canvas); } - drawAccessibilityFocus(canvas); } else { mPrivateFlags &= ~PFLAG_DIRTY_MASK; ((HardwareCanvas) canvas).drawRenderNode(renderNode, null, flags); @@ -15272,50 +15389,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } } - /** - * Draws the accessibility focus rect onto the specified canvas. - * - * @param canvas Canvas on which to draw the focus rect - */ - private void drawAccessibilityFocus(Canvas canvas) { - if (mAttachInfo == null) { - return; - } - - final Rect bounds = mAttachInfo.mTmpInvalRect; - final ViewRootImpl viewRoot = getViewRootImpl(); - if (viewRoot == null || viewRoot.getAccessibilityFocusedHost() != this) { - return; - } - - final AccessibilityManager manager = AccessibilityManager.getInstance(mContext); - if (!manager.isEnabled() || !manager.isTouchExplorationEnabled()) { - return; - } - - final Drawable drawable = viewRoot.getAccessibilityFocusedDrawable(); - if (drawable == null) { - return; - } - - final AccessibilityNodeInfo virtualView = viewRoot.getAccessibilityFocusedVirtualView(); - if (virtualView != null) { - virtualView.getBoundsInScreen(bounds); - final int[] offset = mAttachInfo.mTmpLocation; - getLocationOnScreen(offset); - bounds.offset(-offset[0], -offset[1]); - } else { - bounds.set(0, 0, mRight - mLeft, mBottom - mTop); - } - - canvas.save(); - canvas.translate(mScrollX, mScrollY); - canvas.clipRect(bounds, Region.Op.REPLACE); - drawable.setBounds(bounds); - drawable.draw(canvas); - canvas.restore(); - } - /** * Draws the background onto the specified canvas. * @@ -15330,7 +15403,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, if (mBackgroundSizeChanged) { background.setBounds(0, 0, mRight - mLeft, mBottom - mTop); mBackgroundSizeChanged = false; - mPrivateFlags3 |= PFLAG3_OUTLINE_INVALID; + rebuildOutline(); } // Attempt to use a display list if requested. @@ -15338,10 +15411,10 @@ public class View implements Drawable.Callback, KeyEvent.Callback, && mAttachInfo.mHardwareRenderer != null) { mBackgroundRenderNode = getDrawableRenderNode(background, mBackgroundRenderNode); - final RenderNode displayList = mBackgroundRenderNode; - if (displayList != null && displayList.isValid()) { - setBackgroundDisplayListProperties(displayList); - ((HardwareCanvas) canvas).drawRenderNode(displayList); + final RenderNode renderNode = mBackgroundRenderNode; + if (renderNode != null && renderNode.isValid()) { + setBackgroundRenderNodeProperties(renderNode); + ((HardwareCanvas) canvas).drawRenderNode(renderNode); return; } } @@ -15357,14 +15430,9 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } } - /** - * Set up background drawable display list properties. - * - * @param displayList Valid display list for the background drawable - */ - private void setBackgroundDisplayListProperties(RenderNode displayList) { - displayList.setTranslationX(mScrollX); - displayList.setTranslationY(mScrollY); + private void setBackgroundRenderNodeProperties(RenderNode renderNode) { + renderNode.setTranslationX(mScrollX); + renderNode.setTranslationY(mScrollY); } /** @@ -15384,6 +15452,13 @@ public class View implements Drawable.Callback, KeyEvent.Callback, final int width = bounds.width(); final int height = bounds.height(); final HardwareCanvas canvas = renderNode.start(width, height); + + // Reverse left/top translation done by drawable canvas, which will + // instead be applied by rendernode's LTRB bounds below. This way, the + // drawable's bounds match with its rendernode bounds and its content + // will lie within those bounds in the rendernode tree. + canvas.translate(-bounds.left, -bounds.top); + try { drawable.draw(canvas); } finally { @@ -15676,7 +15751,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, sizeChange(newWidth, newHeight, oldWidth, oldHeight); } - if ((mViewFlags & VISIBILITY_MASK) == VISIBLE) { + if ((mViewFlags & VISIBILITY_MASK) == VISIBLE || mGhostView != null) { // If we are visible, force the DRAWN bit to on so that // this invalidate will go through (at least to our parent). // This is because someone may have invalidated this view @@ -15699,13 +15774,21 @@ public class View implements Drawable.Callback, KeyEvent.Callback, return changed; } + /** + * Same as setFrame, but public and hidden. For use in {@link android.transition.ChangeBounds}. + * @hide + */ + public void setLeftTopRightBottom(int left, int top, int right, int bottom) { + setFrame(left, top, right, bottom); + } + private void sizeChange(int newWidth, int newHeight, int oldWidth, int oldHeight) { onSizeChanged(newWidth, newHeight, oldWidth, oldHeight); if (mOverlay != null) { mOverlay.getOverlayView().setRight(newWidth); mOverlay.getOverlayView().setBottom(newHeight); } - mPrivateFlags3 |= PFLAG3_OUTLINE_INVALID; + rebuildOutline(); } /** @@ -15741,8 +15824,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, invalidate(dirty.left + scrollX, dirty.top + scrollY, dirty.right + scrollX, dirty.bottom + scrollY); - - mPrivateFlags3 |= PFLAG3_OUTLINE_INVALID; + rebuildOutline(); } } @@ -15832,6 +15914,10 @@ public class View implements Drawable.Callback, KeyEvent.Callback, onResolveDrawables(layoutDirection); } + boolean areDrawablesResolved() { + return (mPrivateFlags2 & PFLAG2_DRAWABLE_RESOLVED) == PFLAG2_DRAWABLE_RESOLVED; + } + /** * Called when layout direction has been resolved. * @@ -15851,11 +15937,11 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * @hide */ protected void resetResolvedDrawables() { - mPrivateFlags2 &= ~PFLAG2_DRAWABLE_RESOLVED; + resetResolvedDrawablesInternal(); } - private boolean isDrawablesResolved() { - return (mPrivateFlags2 & PFLAG2_DRAWABLE_RESOLVED) == PFLAG2_DRAWABLE_RESOLVED; + void resetResolvedDrawablesInternal() { + mPrivateFlags2 &= ~PFLAG2_DRAWABLE_RESOLVED; } /** @@ -15905,7 +15991,10 @@ public class View implements Drawable.Callback, KeyEvent.Callback, /** * This function is called whenever the view hotspot changes and needs to - * be propagated to drawables managed by the view. + * be propagated to drawables or child views managed by the view. + *

          + * Dispatching to child views is handled by + * {@link #dispatchDrawableHotspotChanged(float, float)}. *

          * Be sure to call through to the superclass when overriding this function. * @@ -15916,6 +16005,18 @@ public class View implements Drawable.Callback, KeyEvent.Callback, if (mBackground != null) { mBackground.setHotspot(x, y); } + + dispatchDrawableHotspotChanged(x, y); + } + + /** + * Dispatches drawableHotspotChanged to all of this View's children. + * + * @param x hotspot x coordinate + * @param y hotspot y coordinate + * @see #drawableHotspotChanged(float, float) + */ + public void dispatchDrawableHotspotChanged(float x, float y) { } /** @@ -16155,10 +16256,10 @@ public class View implements Drawable.Callback, KeyEvent.Callback, padding = new Rect(); sThreadLocal.set(padding); } - resetResolvedDrawables(); + resetResolvedDrawablesInternal(); background.setLayoutDirection(getLayoutDirection()); if (background.getPadding(padding)) { - resetResolvedPadding(); + resetResolvedPaddingInternal(); switch (background.getLayoutDirection()) { case LAYOUT_DIRECTION_RTL: mUserPaddingLeftInitial = padding.right; @@ -16330,6 +16431,12 @@ public class View implements Drawable.Callback, KeyEvent.Callback, if (tintInfo.mHasTintMode) { mBackground.setTintMode(tintInfo.mTintMode); } + + // The drawable (or one of its children) may not have been + // stateful before applying the tint, so let's try again. + if (mBackground.isStateful()) { + mBackground.setState(getDrawableState()); + } } } } @@ -16352,7 +16459,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * @param bottom the bottom padding in pixels */ public void setPadding(int left, int top, int right, int bottom) { - resetResolvedPadding(); + resetResolvedPaddingInternal(); mUserPaddingStart = UNDEFINED_PADDING; mUserPaddingEnd = UNDEFINED_PADDING; @@ -16423,6 +16530,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, if (changed) { requestLayout(); + invalidateOutline(); } } @@ -16444,7 +16552,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * @param bottom the bottom padding in pixels */ public void setPaddingRelative(int start, int top, int end, int bottom) { - resetResolvedPadding(); + resetResolvedPaddingInternal(); mUserPaddingStart = start; mUserPaddingEnd = end; @@ -16617,8 +16725,12 @@ public class View implements Drawable.Callback, KeyEvent.Callback, invalidate(true); refreshDrawableState(); dispatchSetSelected(selected); - notifyViewAccessibilityStateChangedIfNeeded( - AccessibilityEvent.CONTENT_CHANGE_TYPE_UNDEFINED); + if (selected) { + sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED); + } else { + notifyViewAccessibilityStateChangedIfNeeded( + AccessibilityEvent.CONTENT_CHANGE_TYPE_UNDEFINED); + } } } @@ -17414,17 +17526,22 @@ public class View implements Drawable.Callback, KeyEvent.Callback, long key = (long) widthMeasureSpec << 32 | (long) heightMeasureSpec & 0xffffffffL; if (mMeasureCache == null) mMeasureCache = new LongSparseLongArray(2); - if ((mPrivateFlags & PFLAG_FORCE_LAYOUT) == PFLAG_FORCE_LAYOUT || - widthMeasureSpec != mOldWidthMeasureSpec || - heightMeasureSpec != mOldHeightMeasureSpec) { + final boolean forceLayout = (mPrivateFlags & PFLAG_FORCE_LAYOUT) == PFLAG_FORCE_LAYOUT; + final boolean isExactly = MeasureSpec.getMode(widthMeasureSpec) == MeasureSpec.EXACTLY && + MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.EXACTLY; + final boolean matchingSize = isExactly && + getMeasuredWidth() == MeasureSpec.getSize(widthMeasureSpec) && + getMeasuredHeight() == MeasureSpec.getSize(heightMeasureSpec); + if (forceLayout || !matchingSize && + (widthMeasureSpec != mOldWidthMeasureSpec || + heightMeasureSpec != mOldHeightMeasureSpec)) { // first clears the measured dimension flag mPrivateFlags &= ~PFLAG_MEASURED_DIMENSION_SET; resolveRtlPropertiesIfNeeded(); - int cacheIndex = (mPrivateFlags & PFLAG_FORCE_LAYOUT) == PFLAG_FORCE_LAYOUT ? -1 : - mMeasureCache.indexOfKey(key); + int cacheIndex = forceLayout ? -1 : mMeasureCache.indexOfKey(key); if (cacheIndex < 0 || sIgnoreMeasureCache) { // measure ourselves, this should set the measured dimension flag back onMeasure(widthMeasureSpec, heightMeasureSpec); diff --git a/core/java/android/view/ViewAnimationUtils.java b/core/java/android/view/ViewAnimationUtils.java index 001cd01646a9abfdb8511ebac56a30d2dbc9dbd4..d44df3133ff9b8de42da91e7319ed8a91dcc2e82 100644 --- a/core/java/android/view/ViewAnimationUtils.java +++ b/core/java/android/view/ViewAnimationUtils.java @@ -17,6 +17,7 @@ package android.view; import android.animation.Animator; +import android.animation.Animator.AnimatorListener; import android.animation.RevealAnimator; /** @@ -35,7 +36,11 @@ public final class ViewAnimationUtils { * {@link View#setClipToOutline(boolean) View Outline clipping}. *

          * Note that the animation returned here is a one-shot animation. It cannot - * be re-used, and once started it cannot be paused or resumed. + * be re-used, and once started it cannot be paused or resumed. It is also + * an asynchronous animation that automatically runs off of the UI thread. + * As a result {@link AnimatorListener#onAnimationEnd(Animator)} + * will occur after the animation has ended, but it may be delayed depending + * on thread responsiveness. * * @param view The View will be clipped to the animating circle. * @param centerX The x coordinate of the center of the animating circle. diff --git a/core/java/android/view/ViewDebug.java b/core/java/android/view/ViewDebug.java index 12a49d518fc1136c164e3040f46b1dad0f05463b..50e64c6ea6fb9b2ea6dfe0ea42edcea26db5f761 100644 --- a/core/java/android/view/ViewDebug.java +++ b/core/java/android/view/ViewDebug.java @@ -1005,12 +1005,21 @@ public class ViewDebug { return fields; } - final ArrayList foundFields = new ArrayList(); - fields = klass.getDeclaredFields(); + final ArrayList declaredFields = new ArrayList(); + klass.getDeclaredFieldsUnchecked(false, declaredFields); - int count = fields.length; + final ArrayList foundFields = new ArrayList(); + final int count = declaredFields.size(); for (int i = 0; i < count; i++) { - final Field field = fields[i]; + final Field field = declaredFields.get(i); + + // Ensure the field type can be resolved. + try { + field.getType(); + } catch (NoClassDefFoundError e) { + continue; + } + if (field.isAnnotationPresent(ExportedProperty.class)) { field.setAccessible(true); foundFields.add(field); @@ -1039,12 +1048,22 @@ public class ViewDebug { return methods; } - final ArrayList foundMethods = new ArrayList(); - methods = klass.getDeclaredMethods(); + final ArrayList declaredMethods = new ArrayList(); + klass.getDeclaredMethodsUnchecked(false, declaredMethods); - int count = methods.length; + final ArrayList foundMethods = new ArrayList(); + final int count = declaredMethods.size(); for (int i = 0; i < count; i++) { - final Method method = methods[i]; + final Method method = declaredMethods.get(i); + + // Ensure the method return and parameter types can be resolved. + try { + method.getReturnType(); + method.getParameterTypes(); + } catch (NoClassDefFoundError e) { + continue; + } + if (method.getParameterTypes().length == 0 && method.isAnnotationPresent(ExportedProperty.class) && method.getReturnType() != Void.class) { diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java index 32d1a88d7d5d5b491d6285e5b50dcedc3d47ae84..f8026d1c06ec70baf2172191389bb339de098ef5 100644 --- a/core/java/android/view/ViewGroup.java +++ b/core/java/android/view/ViewGroup.java @@ -32,6 +32,7 @@ import android.graphics.Rect; import android.graphics.RectF; import android.graphics.Region; import android.os.Build; +import android.os.Bundle; import android.os.Parcelable; import android.os.SystemClock; import android.util.AttributeSet; @@ -51,8 +52,10 @@ import com.android.internal.util.Predicate; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; +import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.NoSuchElementException; import static android.os.Build.VERSION_CODES.JELLY_BEAN_MR1; @@ -159,6 +162,9 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager // Used during drag dispatch private PointF mLocalPoint; + // Lazily-created holder for point computations. + private float[] mTempPoint; + // Layout animation private LayoutAnimationController mLayoutAnimationController; private Animation.AnimationListener mAnimationListener; @@ -770,117 +776,6 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager return true; } - /** - * Translates the given bounds and intersections from child coordinates to - * local coordinates. In case any interactive sibling of the calling child - * covers the latter, a new intersections is added to the intersection list. - * This method is for the exclusive use by the accessibility layer to compute - * a point where a sequence of down and up events would click on a view. - * - * @param child The child making the call. - * @param bounds The bounds to translate in child coordinates. - * @param intersections The intersections of interactive views covering the child. - * @return True if the bounds and intersections were computed, false otherwise. - */ - boolean translateBoundsAndIntersectionsInWindowCoordinates(View child, - RectF bounds, List intersections) { - // Not attached, done. - if (mAttachInfo == null) { - return false; - } - - if (getAlpha() <= 0 || getTransitionAlpha() <= 0 || - getVisibility() != VISIBLE) { - // Cannot click on a view with an invisible predecessor. - return false; - } - - // Compensate for the child transformation. - if (!child.hasIdentityMatrix()) { - Matrix matrix = child.getMatrix(); - matrix.mapRect(bounds); - final int intersectionCount = intersections.size(); - for (int i = 0; i < intersectionCount; i++) { - RectF intersection = intersections.get(i); - matrix.mapRect(intersection); - } - } - - // Translate the bounds from child to parent coordinates. - final int dx = child.mLeft - mScrollX; - final int dy = child.mTop - mScrollY; - bounds.offset(dx, dy); - offsetRects(intersections, dx, dy); - - // If the bounds do not intersect our bounds, done. - if (!bounds.intersects(0, 0, getWidth(), getHeight())) { - return false; - } - - // Check whether any clickable siblings cover the child - // view and if so keep track of the intersections. Also - // respect Z ordering when iterating over children. - ArrayList orderedList = buildOrderedChildList(); - final boolean useCustomOrder = orderedList == null - && isChildrenDrawingOrderEnabled(); - - final int childCount = mChildrenCount; - for (int i = childCount - 1; i >= 0; i--) { - final int childIndex = useCustomOrder - ? getChildDrawingOrder(childCount, i) : i; - final View sibling = (orderedList == null) - ? mChildren[childIndex] : orderedList.get(childIndex); - - // We care only about siblings over the child. - if (sibling == child) { - break; - } - - // Ignore invisible views as they are not interactive. - if (sibling.getVisibility() != View.VISIBLE) { - continue; - } - - // If sibling is not interactive we do not care. - if (!sibling.isClickable() && !sibling.isLongClickable()) { - continue; - } - - // Compute the sibling bounds in its coordinates. - RectF siblingBounds = mAttachInfo.mTmpTransformRect1; - siblingBounds.set(0, 0, sibling.getWidth(), sibling.getHeight()); - - // Take into account the sibling transformation matrix. - if (!sibling.hasIdentityMatrix()) { - sibling.getMatrix().mapRect(siblingBounds); - } - - // Offset the sibling to our coordinates. - final int siblingDx = sibling.mLeft - mScrollX; - final int siblingDy = sibling.mTop - mScrollY; - siblingBounds.offset(siblingDx, siblingDy); - - // Compute the intersection between the child and the sibling. - if (siblingBounds.intersect(bounds)) { - // If an interactive sibling completely covers the child, done. - if (siblingBounds.equals(bounds)) { - return false; - } - // Keep track of the intersection rectangle. - RectF intersection = new RectF(siblingBounds); - intersections.add(intersection); - } - } - - if (mParent instanceof ViewGroup) { - ViewGroup parentGroup = (ViewGroup) mParent; - return parentGroup.translateBoundsAndIntersectionsInWindowCoordinates( - this, bounds, intersections); - } - - return true; - } - /** * Called when a child view has changed whether or not it is tracking transient state. */ @@ -2036,6 +1931,12 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager mInputEventConsistencyVerifier.onTouchEvent(ev, 1); } + // If the event targets the accessibility focused view and this is it, start + // normal event dispatch. Maybe a descendant is what will handle the click. + if (ev.isTargetAccessibilityFocus() && isAccessibilityFocusedViewOrHost()) { + ev.setTargetAccessibilityFocus(false); + } + boolean handled = false; if (onFilterTouchEventForSecurity(ev)) { final int action = ev.getAction(); @@ -2067,6 +1968,12 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager intercepted = true; } + // If intercepted, start normal event dispatch. Also if there is already + // a view that is handling the gesture, do normal event dispatch. + if (intercepted || mFirstTouchTarget != null) { + ev.setTargetAccessibilityFocus(false); + } + // Check for cancelation. final boolean canceled = resetCancelNextUpFlag(this) || actionMasked == MotionEvent.ACTION_CANCEL; @@ -2076,6 +1983,15 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager TouchTarget newTouchTarget = null; boolean alreadyDispatchedToNewTouchTarget = false; if (!canceled && !intercepted) { + + // If the event is targeting accessiiblity focus we give it to the + // view that has accessibility focus and if it does not handle it + // we clear the flag and dispatch the event to all children as usual. + // We are looking up the accessibility focused host to avoid keeping + // state since these events are very rare. + View childWithAccessibilityFocus = ev.isTargetAccessibilityFocus() + ? findChildWithAccessibilityFocus() : null; + if (actionMasked == MotionEvent.ACTION_DOWN || (split && actionMasked == MotionEvent.ACTION_POINTER_DOWN) || actionMasked == MotionEvent.ACTION_HOVER_MOVE) { @@ -2102,8 +2018,22 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager ? getChildDrawingOrder(childrenCount, i) : i; final View child = (preorderedList == null) ? children[childIndex] : preorderedList.get(childIndex); + + // If there is a view that has accessibility focus we want it + // to get the event first and if not handled we will perform a + // normal dispatch. We may do a double iteration but this is + // safer given the timeframe. + if (childWithAccessibilityFocus != null) { + if (childWithAccessibilityFocus != child) { + continue; + } + childWithAccessibilityFocus = null; + i = childrenCount - 1; + } + if (!canViewReceivePointerEvents(child) || !isTransformedTouchPointInView(x, y, child, null)) { + ev.setTargetAccessibilityFocus(false); continue; } @@ -2136,6 +2066,10 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager alreadyDispatchedToNewTouchTarget = true; break; } + + // The accessibility focus didn't handle the event, so clear + // the flag and do a normal dispatch to all children. + ev.setTargetAccessibilityFocus(false); } if (preorderedList != null) preorderedList.clear(); } @@ -2207,6 +2141,34 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager return handled; } + /** + * Finds the child which has accessibility focus. + * + * @return The child that has focus. + */ + private View findChildWithAccessibilityFocus() { + ViewRootImpl viewRoot = getViewRootImpl(); + if (viewRoot == null) { + return null; + } + + View current = viewRoot.getAccessibilityFocusedHost(); + if (current == null) { + return null; + } + + ViewParent parent = current.getParent(); + while (parent instanceof View) { + if (parent == this) { + return current; + } + current = (View) parent; + parent = current.getParent(); + } + + return null; + } + /** * Resets all touch state in preparation for a new cycle. */ @@ -2355,6 +2317,13 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager || child.getAnimation() != null; } + private float[] getTempPoint() { + if (mTempPoint == null) { + mTempPoint = new float[2]; + } + return mTempPoint; + } + /** * Returns true if a child view contains the specified point when transformed * into its coordinate space. @@ -2363,23 +2332,29 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager */ protected boolean isTransformedTouchPointInView(float x, float y, View child, PointF outLocalPoint) { - float localX = x + mScrollX - child.mLeft; - float localY = y + mScrollY - child.mTop; - if (! child.hasIdentityMatrix() && mAttachInfo != null) { - final float[] localXY = mAttachInfo.mTmpTransformLocation; - localXY[0] = localX; - localXY[1] = localY; - child.getInverseMatrix().mapPoints(localXY); - localX = localXY[0]; - localY = localXY[1]; - } - final boolean isInView = child.pointInView(localX, localY); + final float[] point = getTempPoint(); + point[0] = x; + point[1] = y; + transformPointToViewLocal(point, child); + final boolean isInView = child.pointInView(point[0], point[1]); if (isInView && outLocalPoint != null) { - outLocalPoint.set(localX, localY); + outLocalPoint.set(point[0], point[1]); } return isInView; } + /** + * @hide + */ + public void transformPointToViewLocal(float[] point, View child) { + point[0] += mScrollX - child.mLeft; + point[1] += mScrollY - child.mTop; + + if (!child.hasIdentityMatrix()) { + child.getInverseMatrix().mapPoints(point); + } + } + /** * Transforms a motion event into the coordinate space of a particular child view, * filters out irrelevant pointer ids, and overrides its action if necessary. @@ -2495,15 +2470,21 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager * Returns true if this ViewGroup should be considered as a single entity for removal * when executing an Activity transition. If this is false, child elements will move * individually during the transition. + * * @return True if the ViewGroup should be acted on together during an Activity transition. - * The default value is false when the background is null and true when the background - * is not null or if {@link #getTransitionName()} is not null. + * The default value is true when there is a non-null background or if + * {@link #getTransitionName()} is not null or if a + * non-null {@link android.view.ViewOutlineProvider} other than + * {@link android.view.ViewOutlineProvider#BACKGROUND} was given to + * {@link #setOutlineProvider(ViewOutlineProvider)} and false otherwise. */ public boolean isTransitionGroup() { if ((mGroupFlags & FLAG_IS_TRANSITION_GROUP_SET) != 0) { return ((mGroupFlags & FLAG_IS_TRANSITION_GROUP) != 0); } else { - return getBackground() != null || getTransitionName() != null; + final ViewOutlineProvider outlineProvider = getOutlineProvider(); + return getBackground() != null || getTransitionName() != null || + (outlineProvider != null && outlineProvider != ViewOutlineProvider.BACKGROUND); } } @@ -2758,6 +2739,9 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager @Override void onInitializeAccessibilityNodeInfoInternal(AccessibilityNodeInfo info) { super.onInitializeAccessibilityNodeInfoInternal(info); + if (getAccessibilityNodeProvider() != null) { + return; + } if (mAttachInfo != null) { final ArrayList childrenForAccessibility = mAttachInfo.mTempArrayList; childrenForAccessibility.clear(); @@ -2803,6 +2787,22 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager } } + /** + * {@inheritDoc} + * + *

          Subclasses should always call super.onNestedPrePerformAccessibilityAction

          + * + * @param target The target view dispatching this action + * @param action Action being performed; see + * {@link android.view.accessibility.AccessibilityNodeInfo} + * @param args Optional action arguments + * @return false by default. Subclasses should return true if they handle the event. + */ + @Override + public boolean onNestedPrePerformAccessibilityAction(View target, int action, Bundle args) { + return false; + } + /** * {@inheritDoc} */ @@ -3293,7 +3293,8 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager /** * Populates (and returns) mPreSortedChildren with a pre-ordered list of the View's children, - * sorted first by Z, then by child drawing order (if applicable). + * sorted first by Z, then by child drawing order (if applicable). This list must be cleared + * after use to avoid leaking child Views. * * Uses a stable, insertion sort which is commonly O(n) for ViewGroups with very few elevated * children. @@ -3440,8 +3441,11 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager } /** - * By default, children are clipped to the padding of the ViewGroup. This - * allows view groups to override this behavior + * Sets whether this ViewGroup will clip its children to its padding, if + * padding is present. + *

          + * By default, children are clipped to the padding of their parent + * Viewgroup. This clipping behavior is only enabled if padding is non-zero. * * @param clipToPadding true to clip children to the padding of the * group, false otherwise @@ -3455,7 +3459,11 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager } /** - * Check if this ViewGroup is configured to clip child views to its padding. + * Returns whether this ViewGroup will clip its children to its padding, if + * padding is present. + *

          + * By default, children are clipped to the padding of their parent + * Viewgroup. This clipping behavior is only enabled if padding is non-zero. * * @return true if this ViewGroup clips children to its padding, false otherwise * @@ -3505,6 +3513,44 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager } } + /** + * Dispatches drawable hotspot changes to child views that meet at least + * one of the following criteria: + *

            + *
          • Returns {@code false} from both {@link View#isClickable()} and + * {@link View#isLongClickable()}
          • + *
          • Requests duplication of parent state via + * {@link View#setDuplicateParentStateEnabled(boolean)}
          • + *
          + * + * @param x hotspot x coordinate + * @param y hotspot y coordinate + * @see #drawableHotspotChanged(float, float) + */ + @Override + public void dispatchDrawableHotspotChanged(float x, float y) { + final int count = mChildrenCount; + if (count == 0) { + return; + } + + final View[] children = mChildren; + for (int i = 0; i < count; i++) { + final View child = children[i]; + // Children that are clickable on their own should not + // receive hotspots when their parent view does. + final boolean nonActionable = !child.isClickable() && !child.isLongClickable(); + final boolean duplicatesState = (child.mViewFlags & DUPLICATE_PARENT_STATE) != 0; + if (nonActionable || duplicatesState) { + final float[] point = getTempPoint(); + point[0] = x; + point[1] = y; + transformPointToViewLocal(point, child); + child.drawableHotspotChanged(point[0], point[1]); + } + } + } + @Override void dispatchCancelPendingInputEvents() { super.dispatchCancelPendingInputEvents(); @@ -3668,6 +3714,9 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager * @see #generateDefaultLayoutParams() */ public void addView(View child, int index) { + if (child == null) { + throw new IllegalArgumentException("Cannot add a null child view to a ViewGroup"); + } LayoutParams params = child.getLayoutParams(); if (params == null) { params = generateDefaultLayoutParams(); @@ -3725,6 +3774,10 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager System.out.println(this + " addView"); } + if (child == null) { + throw new IllegalArgumentException("Cannot add a null child view to a ViewGroup"); + } + // addViewInner() will call child.requestLayout() when setting the new LayoutParams // therefore, we call requestLayout() on ourselves before, so that the child's request // will be blocked at our level @@ -3852,6 +3905,9 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager */ protected boolean addViewInLayout(View child, int index, LayoutParams params, boolean preventRequestLayout) { + if (child == null) { + throw new IllegalArgumentException("Cannot add a null child view to a ViewGroup"); + } child.mParent = null; addViewInner(child, index, params, preventRequestLayout); child.mPrivateFlags = (child.mPrivateFlags & ~PFLAG_DIRTY_MASK) | PFLAG_DRAWN; @@ -4065,9 +4121,10 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager * {@link #dispatchDraw(android.graphics.Canvas)} or any related method.

          */ public void removeView(View view) { - removeViewInternal(view); - requestLayout(); - invalidate(true); + if (removeViewInternal(view)) { + requestLayout(); + invalidate(true); + } } /** @@ -4130,11 +4187,13 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager invalidate(true); } - private void removeViewInternal(View view) { + private boolean removeViewInternal(View view) { final int index = indexOfChild(view); if (index >= 0) { removeViewInternal(index, view); + return true; } + return false; } private void removeViewInternal(int index, View view) { @@ -4149,9 +4208,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager clearChildFocus = true; } - if (view.isAccessibilityFocused()) { - view.clearAccessibilityFocus(); - } + view.clearAccessibilityFocus(); cancelTouchTarget(view); cancelHoverTarget(view); @@ -4244,9 +4301,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager clearChildFocus = true; } - if (view.isAccessibilityFocused()) { - view.clearAccessibilityFocus(); - } + view.clearAccessibilityFocus(); cancelTouchTarget(view); cancelHoverTarget(view); @@ -4331,9 +4386,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager clearChildFocus = true; } - if (view.isAccessibilityFocused()) { - view.clearAccessibilityFocus(); - } + view.clearAccessibilityFocus(); cancelTouchTarget(view); cancelHoverTarget(view); @@ -4922,11 +4975,11 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager rect.set(r); if (!child.hasIdentityMatrix()) { - child.getMatrix().mapRect(rect); + child.getMatrix().mapRect(rect); } - int dx = child.mLeft - mScrollX; - int dy = child.mTop - mScrollY; + final int dx = child.mLeft - mScrollX; + final int dy = child.mTop - mScrollY; rect.offset(dx, dy); @@ -4944,14 +4997,33 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager offset.y += dy; } - if (rect.intersect(0, 0, mRight - mLeft, mBottom - mTop)) { - if (mParent == null) return true; - r.set((int) (rect.left + 0.5f), (int) (rect.top + 0.5f), - (int) (rect.right + 0.5f), (int) (rect.bottom + 0.5f)); - return mParent.getChildVisibleRect(this, r, offset); + final int width = mRight - mLeft; + final int height = mBottom - mTop; + + boolean rectIsVisible = true; + if (mParent == null || + (mParent instanceof ViewGroup && ((ViewGroup) mParent).getClipChildren())) { + // Clip to bounds. + rectIsVisible = rect.intersect(0, 0, width, height); } - return false; + if (rectIsVisible && (mGroupFlags & CLIP_TO_PADDING_MASK) == CLIP_TO_PADDING_MASK) { + // Clip to padding. + rectIsVisible = rect.intersect(mPaddingLeft, mPaddingTop, + width - mPaddingRight, height - mPaddingBottom); + } + + if (rectIsVisible && mClipBounds != null) { + // Clip to clipBounds. + rectIsVisible = rect.intersect(mClipBounds.left, mClipBounds.top, mClipBounds.right, + mClipBounds.bottom); + } + r.set((int) (rect.left + 0.5f), (int) (rect.top + 0.5f), (int) (rect.right + 0.5f), + (int) (rect.bottom + 0.5f)); + if (rectIsVisible && mParent != null) { + rectIsVisible = mParent.getChildVisibleRect(this, r, offset); + } + return rectIsVisible; } /** @@ -5834,28 +5906,6 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager } } - @Override - public void drawableHotspotChanged(float x, float y) { - super.drawableHotspotChanged(x, y); - - if ((mGroupFlags & FLAG_NOTIFY_CHILDREN_ON_DRAWABLE_STATE_CHANGE) != 0) { - if ((mGroupFlags & FLAG_ADD_STATES_FROM_CHILDREN) != 0) { - throw new IllegalStateException("addStateFromChildren cannot be enabled if a" - + " child has duplicateParentState set to true"); - } - - final View[] children = mChildren; - final int count = mChildrenCount; - - for (int i = 0; i < count; i++) { - final View child = children[i]; - if ((child.mViewFlags & DUPLICATE_PARENT_STATE) != 0) { - child.drawableHotspotChanged(x, y); - } - } - } - } - @Override protected int[] onCreateDrawableState(int extraSpace) { if ((mGroupFlags & FLAG_ADD_STATES_FROM_CHILDREN) == 0) { @@ -6033,7 +6083,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager int count = getChildCount(); for (int i = 0; i < count; i++) { final View child = getChildAt(i); - if (child.isLayoutDirectionInherited()) { + if (child.isLayoutDirectionInherited() && !child.isPaddingResolved()) { child.resolvePadding(); } } @@ -6048,7 +6098,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager int count = getChildCount(); for (int i = 0; i < count; i++) { final View child = getChildAt(i); - if (child.isLayoutDirectionInherited()) { + if (child.isLayoutDirectionInherited() && !child.areDrawablesResolved()) { child.resolveDrawables(); } } @@ -6488,7 +6538,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager */ public static class MarginLayoutParams extends ViewGroup.LayoutParams { /** - * The left margin in pixels of the child. + * The left margin in pixels of the child. Margin values should be positive. * Call {@link ViewGroup#setLayoutParams(LayoutParams)} after reassigning a new value * to this field. */ @@ -6496,7 +6546,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager public int leftMargin; /** - * The top margin in pixels of the child. + * The top margin in pixels of the child. Margin values should be positive. * Call {@link ViewGroup#setLayoutParams(LayoutParams)} after reassigning a new value * to this field. */ @@ -6504,7 +6554,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager public int topMargin; /** - * The right margin in pixels of the child. + * The right margin in pixels of the child. Margin values should be positive. * Call {@link ViewGroup#setLayoutParams(LayoutParams)} after reassigning a new value * to this field. */ @@ -6512,7 +6562,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager public int rightMargin; /** - * The bottom margin in pixels of the child. + * The bottom margin in pixels of the child. Margin values should be positive. * Call {@link ViewGroup#setLayoutParams(LayoutParams)} after reassigning a new value * to this field. */ @@ -6520,7 +6570,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager public int bottomMargin; /** - * The start margin in pixels of the child. + * The start margin in pixels of the child. Margin values should be positive. * Call {@link ViewGroup#setLayoutParams(LayoutParams)} after reassigning a new value * to this field. */ @@ -6528,7 +6578,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager private int startMargin = DEFAULT_MARGIN_RELATIVE; /** - * The end margin in pixels of the child. + * The end margin in pixels of the child. Margin values should be positive. * Call {@link ViewGroup#setLayoutParams(LayoutParams)} after reassigning a new value * to this field. */ @@ -6709,6 +6759,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager * Sets the margins, in pixels. A call to {@link android.view.View#requestLayout()} needs * to be done so that the new margins are taken into account. Left and right margins may be * overriden by {@link android.view.View#requestLayout()} depending on layout direction. + * Margin values should be positive. * * @param left the left margin size * @param top the top margin size @@ -6738,7 +6789,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager * Sets the relative margins, in pixels. A call to {@link android.view.View#requestLayout()} * needs to be done so that the new relative margins are taken into account. Left and right * margins may be overriden by {@link android.view.View#requestLayout()} depending on layout - * direction. + * direction. Margin values should be positive. * * @param start the start margin size * @param top the top margin size @@ -6761,7 +6812,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager } /** - * Sets the relative start margin. + * Sets the relative start margin. Margin values should be positive. * * @param start the start margin size * @@ -6794,7 +6845,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager } /** - * Sets the relative end margin. + * Sets the relative end margin. Margin values should be positive. * * @param end the end margin size * diff --git a/core/java/android/view/ViewOverlay.java b/core/java/android/view/ViewOverlay.java index 0cf9dddc6e72c84fb7c0969113ac8cd987e95317..5e5ef299a799018dc06bfef0f1351bcc67560dd7 100644 --- a/core/java/android/view/ViewOverlay.java +++ b/core/java/android/view/ViewOverlay.java @@ -130,8 +130,11 @@ public class ViewOverlay { super(context); mHostView = hostView; mAttachInfo = mHostView.mAttachInfo; + mRight = hostView.getWidth(); mBottom = hostView.getHeight(); + // pass right+bottom directly to RenderNode, since not going through setters + mRenderNode.setLeftTopRightBottom(0, 0, mRight, mBottom); } public void add(Drawable drawable) { diff --git a/core/java/android/view/ViewParent.java b/core/java/android/view/ViewParent.java index 87a37f4739be96f53bc519cbd40e83f2b9cff123..035871d87671e34a79cfeba02b65d0340c6b5f55 100644 --- a/core/java/android/view/ViewParent.java +++ b/core/java/android/view/ViewParent.java @@ -17,6 +17,7 @@ package android.view; import android.graphics.Rect; +import android.os.Bundle; import android.view.accessibility.AccessibilityEvent; /** @@ -551,4 +552,23 @@ public interface ViewParent { * @return true if this parent consumed the fling ahead of the target view */ public boolean onNestedPreFling(View target, float velocityX, float velocityY); + + /** + * React to an accessibility action delegated by a target descendant view before the target + * processes it. + * + *

          This method may be called by a target descendant view if the target wishes to give + * a view in its parent chain a chance to react to the event before normal processing occurs. + * Most commonly this will be a scroll event such as + * {@link android.view.accessibility.AccessibilityNodeInfo#ACTION_SCROLL_FORWARD}. + * A ViewParent that supports acting as a nested scrolling parent should override this + * method and act accordingly to implement scrolling via accesibility systems.

          + * + * @param target The target view dispatching this action + * @param action Action being performed; see + * {@link android.view.accessibility.AccessibilityNodeInfo} + * @param arguments Optional action arguments + * @return true if the action was consumed by this ViewParent + */ + public boolean onNestedPrePerformAccessibilityAction(View target, int action, Bundle arguments); } diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 81fc966191287f5808b8e2adb0229a11a49c8be6..e4d82b16d185d02ef15522d19dcb58717139a708 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -245,7 +245,7 @@ public final class ViewRootImpl implements ViewParent, // These can be accessed by any thread, must be protected with a lock. // Surface can never be reassigned or cleared (use Surface.clear()). - private final Surface mSurface = new Surface(); + final Surface mSurface = new Surface(); boolean mAdded; boolean mAddedTouchMode; @@ -526,7 +526,7 @@ public final class ViewRootImpl implements ViewParent, collectViewAttributes(); res = mWindowSession.addToDisplay(mWindow, mSeq, mWindowAttributes, getHostVisibility(), mDisplay.getDisplayId(), - mAttachInfo.mContentInsets, mInputChannel); + mAttachInfo.mContentInsets, mAttachInfo.mStableInsets, mInputChannel); } catch (RemoteException e) { mAdded = false; mView = null; @@ -560,39 +560,43 @@ public final class ViewRootImpl implements ViewParent, case WindowManagerGlobal.ADD_BAD_APP_TOKEN: case WindowManagerGlobal.ADD_BAD_SUBWINDOW_TOKEN: throw new WindowManager.BadTokenException( - "Unable to add window -- token " + attrs.token - + " is not valid; is your activity running?"); + "Unable to add window -- token " + attrs.token + + " is not valid; is your activity running?"); case WindowManagerGlobal.ADD_NOT_APP_TOKEN: throw new WindowManager.BadTokenException( - "Unable to add window -- token " + attrs.token - + " is not for an application"); + "Unable to add window -- token " + attrs.token + + " is not for an application"); case WindowManagerGlobal.ADD_APP_EXITING: throw new WindowManager.BadTokenException( - "Unable to add window -- app for token " + attrs.token - + " is exiting"); + "Unable to add window -- app for token " + attrs.token + + " is exiting"); case WindowManagerGlobal.ADD_DUPLICATE_ADD: throw new WindowManager.BadTokenException( - "Unable to add window -- window " + mWindow - + " has already been added"); + "Unable to add window -- window " + mWindow + + " has already been added"); case WindowManagerGlobal.ADD_STARTING_NOT_NEEDED: // Silently ignore -- we would have just removed it // right away, anyway. return; case WindowManagerGlobal.ADD_MULTIPLE_SINGLETON: throw new WindowManager.BadTokenException( - "Unable to add window " + mWindow + - " -- another window of this type already exists"); + "Unable to add window " + mWindow + + " -- another window of this type already exists"); case WindowManagerGlobal.ADD_PERMISSION_DENIED: throw new WindowManager.BadTokenException( - "Unable to add window " + mWindow + - " -- permission denied for this window type"); + "Unable to add window " + mWindow + + " -- permission denied for this window type"); case WindowManagerGlobal.ADD_INVALID_DISPLAY: throw new WindowManager.InvalidDisplayException( - "Unable to add window " + mWindow + - " -- the specified display can not be found"); + "Unable to add window " + mWindow + + " -- the specified display can not be found"); + case WindowManagerGlobal.ADD_INVALID_TYPE: + throw new WindowManager.InvalidDisplayException( + "Unable to add window " + mWindow + + " -- the specified window type is not valid"); } throw new RuntimeException( - "Unable to add window -- unknown error code " + res); + "Unable to add window -- unknown error code " + res); } if (view instanceof RootViewSurfaceTaker) { @@ -727,7 +731,10 @@ public final class ViewRootImpl implements ViewParent, mAttachInfo.mHardwareRenderer.destroy(); } - final boolean translucent = attrs.format != PixelFormat.OPAQUE; + final Rect insets = attrs.surfaceInsets; + final boolean hasSurfaceInsets = insets.left != 0 || insets.right != 0 + || insets.top != 0 || insets.bottom != 0; + final boolean translucent = attrs.format != PixelFormat.OPAQUE || hasSurfaceInsets; mAttachInfo.mHardwareRenderer = HardwareRenderer.create(mContext, translucent); if (mAttachInfo.mHardwareRenderer != null) { mAttachInfo.mHardwareRenderer.setName(attrs.getTitle().toString()); @@ -1490,7 +1497,11 @@ public final class ViewRootImpl implements ViewParent, // relayoutWindow may decide to destroy mSurface. As that decision // happens in WindowManager service, we need to be defensive here // and stop using the surface in case it gets destroyed. - mAttachInfo.mHardwareRenderer.pauseSurface(mSurface); + if (mAttachInfo.mHardwareRenderer.pauseSurface(mSurface)) { + // Animations were running so we need to push a frame + // to resume them + mDirty.set(0, 0, mWidth, mHeight); + } } final int surfaceGenerationId = mSurface.getGenerationId(); relayoutResult = relayoutWindow(params, viewVisibility, insetsPending); @@ -1646,6 +1657,9 @@ public final class ViewRootImpl implements ViewParent, mLastScrolledFocus.clear(); } mScrollY = mCurScrollY = 0; + if (mView instanceof RootViewSurfaceTaker) { + ((RootViewSurfaceTaker) mView).onRootViewScrollYChanged(mCurScrollY); + } if (mScroller != null) { mScroller.abortAnimation(); } @@ -1740,8 +1754,8 @@ public final class ViewRootImpl implements ViewParent, if (hwInitialized || mWidth != mAttachInfo.mHardwareRenderer.getWidth() || mHeight != mAttachInfo.mHardwareRenderer.getHeight()) { - final Rect surfaceInsets = params != null ? params.surfaceInsets : null; - mAttachInfo.mHardwareRenderer.setup(mWidth, mHeight, surfaceInsets); + mAttachInfo.mHardwareRenderer.setup( + mWidth, mHeight, mWindowAttributes.surfaceInsets); if (!hwInitialized) { mAttachInfo.mHardwareRenderer.invalidate(mSurface); mFullRedrawNeeded = true; @@ -2255,6 +2269,7 @@ public final class ViewRootImpl implements ViewParent, canvas.drawHardwareLayer(mResizeBuffer, mHardwareXOffset, mHardwareYOffset, mResizePaint); } + drawAccessibilityFocusedDrawableIfNeeded(canvas); } /** @@ -2415,6 +2430,9 @@ public final class ViewRootImpl implements ViewParent, if (mCurScrollY != curScrollY) { mCurScrollY = curScrollY; fullRedrawNeeded = true; + if (mView instanceof RootViewSurfaceTaker) { + ((RootViewSurfaceTaker) mView).onRootViewScrollYChanged(mCurScrollY); + } } final float appScale = mAttachInfo.mApplicationScale; @@ -2474,18 +2492,38 @@ public final class ViewRootImpl implements ViewParent, dirty.offset(surfaceInsets.left, surfaceInsets.right); } - if (!dirty.isEmpty() || mIsAnimating) { + boolean accessibilityFocusDirty = false; + final Drawable drawable = mAttachInfo.mAccessibilityFocusDrawable; + if (drawable != null) { + final Rect bounds = mAttachInfo.mTmpInvalRect; + final boolean hasFocus = getAccessibilityFocusedRect(bounds); + if (!hasFocus) { + bounds.setEmpty(); + } + if (!bounds.equals(drawable.getBounds())) { + accessibilityFocusDirty = true; + } + } + + if (!dirty.isEmpty() || mIsAnimating || accessibilityFocusDirty) { if (mAttachInfo.mHardwareRenderer != null && mAttachInfo.mHardwareRenderer.isEnabled()) { + // If accessibility focus moved, always invalidate the root. + boolean invalidateRoot = accessibilityFocusDirty; + // Draw with hardware renderer. mIsAnimating = false; - boolean invalidateRoot = false; + if (mHardwareYOffset != yOffset || mHardwareXOffset != xOffset) { mHardwareYOffset = yOffset; mHardwareXOffset = xOffset; - mAttachInfo.mHardwareRenderer.invalidateRoot(); + invalidateRoot = true; } mResizeAlpha = resizeAlpha; + if (invalidateRoot) { + mAttachInfo.mHardwareRenderer.invalidateRoot(); + } + dirty.setEmpty(); mBlockResizeBuffer = false; @@ -2604,6 +2642,8 @@ public final class ViewRootImpl implements ViewParent, attachInfo.mSetIgnoreDirtyState = false; mView.draw(canvas); + + drawAccessibilityFocusedDrawableIfNeeded(canvas); } finally { if (!attachInfo.mSetIgnoreDirtyState) { // Only clear the flag if it was not set during the mView.draw() call @@ -2627,7 +2667,56 @@ public final class ViewRootImpl implements ViewParent, return true; } - Drawable getAccessibilityFocusedDrawable() { + /** + * We want to draw a highlight around the current accessibility focused. + * Since adding a style for all possible view is not a viable option we + * have this specialized drawing method. + * + * Note: We are doing this here to be able to draw the highlight for + * virtual views in addition to real ones. + * + * @param canvas The canvas on which to draw. + */ + private void drawAccessibilityFocusedDrawableIfNeeded(Canvas canvas) { + final Rect bounds = mAttachInfo.mTmpInvalRect; + if (getAccessibilityFocusedRect(bounds)) { + final Drawable drawable = getAccessibilityFocusedDrawable(); + if (drawable != null) { + drawable.setBounds(bounds); + drawable.draw(canvas); + } + } else if (mAttachInfo.mAccessibilityFocusDrawable != null) { + mAttachInfo.mAccessibilityFocusDrawable.setBounds(0, 0, 0, 0); + } + } + + private boolean getAccessibilityFocusedRect(Rect bounds) { + final AccessibilityManager manager = AccessibilityManager.getInstance(mView.mContext); + if (!manager.isEnabled() || !manager.isTouchExplorationEnabled()) { + return false; + } + + final View host = mAccessibilityFocusedHost; + if (host == null || host.mAttachInfo == null) { + return false; + } + + final AccessibilityNodeProvider provider = host.getAccessibilityNodeProvider(); + if (provider == null) { + host.getBoundsOnScreen(bounds, true); + } else if (mAccessibilityFocusedVirtualView != null) { + mAccessibilityFocusedVirtualView.getBoundsInScreen(bounds); + } else { + return false; + } + + final AttachInfo attachInfo = mAttachInfo; + bounds.offset(-attachInfo.mWindowLeft, -attachInfo.mWindowTop); + bounds.intersect(0, 0, attachInfo.mViewRootImpl.mWidth, attachInfo.mViewRootImpl.mHeight); + return !bounds.isEmpty(); + } + + private Drawable getAccessibilityFocusedDrawable() { // Lazily load the accessibility focus drawable. if (mAttachInfo.mAccessibilityFocusDrawable == null) { final TypedValue value = new TypedValue(); @@ -3014,6 +3103,7 @@ public final class ViewRootImpl implements ViewParent, private final static int MSG_INVALIDATE_WORLD = 23; private final static int MSG_WINDOW_MOVED = 24; private final static int MSG_SYNTHESIZE_INPUT_EVENT = 25; + private final static int MSG_DISPATCH_WINDOW_SHOWN = 26; final class ViewRootHandler extends Handler { @Override @@ -3063,6 +3153,8 @@ public final class ViewRootImpl implements ViewParent, return "MSG_WINDOW_MOVED"; case MSG_SYNTHESIZE_INPUT_EVENT: return "MSG_SYNTHESIZE_INPUT_EVENT"; + case MSG_DISPATCH_WINDOW_SHOWN: + return "MSG_DISPATCH_WINDOW_SHOWN"; } return super.getMessageName(message); } @@ -3291,6 +3383,9 @@ public final class ViewRootImpl implements ViewParent, invalidateWorld(mView); } } break; + case MSG_DISPATCH_WINDOW_SHOWN: { + handleDispatchWindowShown(); + } } } } @@ -3509,12 +3604,19 @@ public final class ViewRootImpl implements ViewParent, if (mView == null || !mAdded) { Slog.w(TAG, "Dropping event due to root view being removed: " + q.mEvent); return true; - } else if (!mAttachInfo.mHasWindowFocus && - !q.mEvent.isFromSource(InputDevice.SOURCE_CLASS_POINTER) && - !isTerminalInputEvent(q.mEvent)) { - // If this is a focused event and the window doesn't currently have input focus, - // then drop this event. This could be an event that came back from the previous - // stage but the window has lost focus in the meantime. + } else if ((!mAttachInfo.mHasWindowFocus || mStopped) + && !q.mEvent.isFromSource(InputDevice.SOURCE_CLASS_POINTER)) { + // This is a focus event and the window doesn't currently have input focus or + // has stopped. This could be an event that came back from the previous stage + // but the window has lost focus or stopped in the meantime. + if (isTerminalInputEvent(q.mEvent)) { + // Don't drop terminal input events, however mark them as canceled. + q.mEvent.cancel(); + Slog.w(TAG, "Cancelling event due to no window focus: " + q.mEvent); + return false; + } + + // Drop non-terminal input events. Slog.w(TAG, "Dropping event due to no window focus: " + q.mEvent); return true; } @@ -5137,6 +5239,10 @@ public final class ViewRootImpl implements ViewParent, } } + public void handleDispatchWindowShown() { + mAttachInfo.mTreeObserver.dispatchOnWindowShown(); + } + public void getLastTouchPoint(Point outLocation) { outLocation.x = (int) mLastTouchPoint.x; outLocation.y = (int) mLastTouchPoint.y; @@ -5997,6 +6103,10 @@ public final class ViewRootImpl implements ViewParent, mHandler.sendMessage(msg); } + public void dispatchWindowShown() { + mHandler.sendEmptyMessage(MSG_DISPATCH_WINDOW_SHOWN); + } + public void dispatchCloseSystemDialogs(String reason) { Message msg = Message.obtain(); msg.what = MSG_CLOSE_SYSTEM_DIALOGS; @@ -6307,6 +6417,11 @@ public final class ViewRootImpl implements ViewParent, return false; } + @Override + public boolean onNestedPrePerformAccessibilityAction(View target, int action, Bundle args) { + return false; + } + void changeCanvasOpacity(boolean opaque) { Log.d(TAG, "changeCanvasOpacity: opaque=" + opaque); if (mAttachInfo.mHardwareRenderer != null) { @@ -6507,6 +6622,14 @@ public final class ViewRootImpl implements ViewParent, viewAncestor.dispatchDoneAnimating(); } } + + @Override + public void dispatchWindowShown() { + final ViewRootImpl viewAncestor = mViewAncestor.get(); + if (viewAncestor != null) { + viewAncestor.dispatchWindowShown(); + } + } } public static final class CalledFromWrongThreadException extends AndroidRuntimeException { @@ -6711,26 +6834,6 @@ public final class ViewRootImpl implements ViewParent, } } - @Override - public void computeClickPointInScreen(long accessibilityNodeId, Region interactiveRegion, - int interactionId, IAccessibilityInteractionConnectionCallback callback, - int interrogatingPid, long interrogatingTid, MagnificationSpec spec) { - ViewRootImpl viewRootImpl = mViewRootImpl.get(); - if (viewRootImpl != null && viewRootImpl.mView != null) { - viewRootImpl.getAccessibilityInteractionController() - .computeClickPointInScreenClientThread(accessibilityNodeId, - interactiveRegion, interactionId, callback, interrogatingPid, - interrogatingTid, spec); - } else { - // We cannot make the call and notify the caller so it does not wait. - try { - callback.setComputeClickPointInScreenActionResult(null, interactionId); - } catch (RemoteException re) { - /* best effort - ignore */ - } - } - } - @Override public void findAccessibilityNodeInfosByViewId(long accessibilityNodeId, String viewId, Region interactiveRegion, int interactionId, diff --git a/core/java/android/view/ViewTreeObserver.java b/core/java/android/view/ViewTreeObserver.java index a9444b44760ad4bdba987281a0867c2e422b20c7..521fd311732978d83f40546466993916c2f749eb 100644 --- a/core/java/android/view/ViewTreeObserver.java +++ b/core/java/android/view/ViewTreeObserver.java @@ -37,6 +37,8 @@ public final class ViewTreeObserver { private CopyOnWriteArrayList mOnWindowAttachListeners; private CopyOnWriteArrayList mOnGlobalFocusListeners; private CopyOnWriteArrayList mOnTouchModeChangeListeners; + private CopyOnWriteArrayList + mOnEnterAnimationCompleteListeners; // Non-recursive listeners use CopyOnWriteArray // Any listener invoked from ViewRootImpl.performTraversals() should not be recursive @@ -44,10 +46,15 @@ public final class ViewTreeObserver { private CopyOnWriteArray mOnComputeInternalInsetsListeners; private CopyOnWriteArray mOnScrollChangedListeners; private CopyOnWriteArray mOnPreDrawListeners; + private CopyOnWriteArray mOnWindowShownListeners; // These listeners cannot be mutated during dispatch private ArrayList mOnDrawListeners; + /** Remains false until #dispatchOnWindowShown() is called. If a listener registers after + * that the listener will be immediately called. */ + private boolean mWindowShown; + private boolean mAlive = true; /** @@ -173,6 +180,19 @@ public final class ViewTreeObserver { public void onScrollChanged(); } + /** + * Interface definition for a callback noting when a system window has been displayed. + * This is only used for non-Activity windows. Activity windows can use + * Activity.onEnterAnimationComplete() to get the same signal. + * @hide + */ + public interface OnWindowShownListener { + /** + * Callback method to be invoked when a non-activity window is fully shown. + */ + void onWindowShown(); + } + /** * Parameters used with OnComputeInternalInsetsListener. * @@ -297,6 +317,13 @@ public final class ViewTreeObserver { public void onComputeInternalInsets(InternalInsetsInfo inoutInfo); } + /** + * @hide + */ + public interface OnEnterAnimationCompleteListener { + public void onEnterAnimationComplete(); + } + /** * Creates a new ViewTreeObserver. This constructor should not be called */ @@ -375,6 +402,14 @@ public final class ViewTreeObserver { } } + if (observer.mOnWindowShownListeners != null) { + if (mOnWindowShownListeners != null) { + mOnWindowShownListeners.addAll(observer.mOnWindowShownListeners); + } else { + mOnWindowShownListeners = observer.mOnWindowShownListeners; + } + } + observer.kill(); } @@ -567,6 +602,45 @@ public final class ViewTreeObserver { mOnPreDrawListeners.remove(victim); } + /** + * Register a callback to be invoked when the view tree window has been shown + * + * @param listener The callback to add + * + * @throws IllegalStateException If {@link #isAlive()} returns false + * @hide + */ + public void addOnWindowShownListener(OnWindowShownListener listener) { + checkIsAlive(); + + if (mOnWindowShownListeners == null) { + mOnWindowShownListeners = new CopyOnWriteArray(); + } + + mOnWindowShownListeners.add(listener); + if (mWindowShown) { + listener.onWindowShown(); + } + } + + /** + * Remove a previously installed window shown callback + * + * @param victim The callback to remove + * + * @throws IllegalStateException If {@link #isAlive()} returns false + * + * @see #addOnWindowShownListener(OnWindowShownListener) + * @hide + */ + public void removeOnWindowShownListener(OnWindowShownListener victim) { + checkIsAlive(); + if (mOnWindowShownListeners == null) { + return; + } + mOnWindowShownListeners.remove(victim); + } + /** *

          Register a callback to be invoked when the view tree is about to be drawn.

          *

          Note: this method cannot be invoked from @@ -715,6 +789,29 @@ public final class ViewTreeObserver { mOnComputeInternalInsetsListeners.remove(victim); } + /** + * @hide + */ + public void addOnEnterAnimationCompleteListener(OnEnterAnimationCompleteListener listener) { + checkIsAlive(); + if (mOnEnterAnimationCompleteListeners == null) { + mOnEnterAnimationCompleteListeners = + new CopyOnWriteArrayList(); + } + mOnEnterAnimationCompleteListeners.add(listener); + } + + /** + * @hide + */ + public void removeOnEnterAnimationCompleteListener(OnEnterAnimationCompleteListener listener) { + checkIsAlive(); + if (mOnEnterAnimationCompleteListeners == null) { + return; + } + mOnEnterAnimationCompleteListeners.remove(listener); + } + private void checkIsAlive() { if (!mAlive) { throw new IllegalStateException("This ViewTreeObserver is not alive, call " @@ -853,6 +950,27 @@ public final class ViewTreeObserver { return cancelDraw; } + /** + * Notifies registered listeners that the window is now shown + * @hide + */ + @SuppressWarnings("unchecked") + public final void dispatchOnWindowShown() { + mWindowShown = true; + final CopyOnWriteArray listeners = mOnWindowShownListeners; + if (listeners != null && listeners.size() > 0) { + CopyOnWriteArray.Access access = listeners.start(); + try { + int count = access.size(); + for (int i = 0; i < count; i++) { + access.get(i).onWindowShown(); + } + } finally { + listeners.end(); + } + } + } + /** * Notifies registered listeners that the drawing pass is about to start. */ @@ -935,6 +1053,23 @@ public final class ViewTreeObserver { } } + /** + * @hide + */ + public final void dispatchOnEnterAnimationComplete() { + // NOTE: because of the use of CopyOnWriteArrayList, we *must* use an iterator to + // perform the dispatching. The iterator is a safe guard against listeners that + // could mutate the list by calling the various add/remove methods. This prevents + // the array from being modified while we iterate it. + final CopyOnWriteArrayList listeners = + mOnEnterAnimationCompleteListeners; + if (listeners != null && !listeners.isEmpty()) { + for (OnEnterAnimationCompleteListener listener : listeners) { + listener.onEnterAnimationComplete(); + } + } + } + /** * Copy on write array. This array is not thread safe, and only one loop can * iterate over this array at any given time. This class avoids allocations diff --git a/core/java/android/view/Window.java b/core/java/android/view/Window.java index 63ab7d252237cf28342cfe55750fec64859a810e..8704356e7471efce3d526c5cda79af5e0b3728b1 100644 --- a/core/java/android/view/Window.java +++ b/core/java/android/view/Window.java @@ -18,13 +18,14 @@ package android.view; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.SystemApi; import android.content.Context; import android.content.res.Configuration; +import android.content.res.Resources; import android.content.res.TypedArray; import android.graphics.PixelFormat; import android.graphics.drawable.Drawable; import android.media.session.MediaController; -import android.media.session.MediaSession; import android.net.Uri; import android.os.Bundle; import android.os.IBinder; @@ -101,10 +102,12 @@ public abstract class Window { */ public static final int FEATURE_SWIPE_TO_DISMISS = 11; /** - * Flag for requesting that window content changes should be represented - * with scenes and transitions. + * Flag for requesting that window content changes should be animated using a + * TransitionManager. * - * TODO Add docs + *

          The TransitionManager is set using + * {@link #setTransitionManager(android.transition.TransitionManager)}. If none is set, + * a default TransitionManager will be used.

          * * @see #setContentView */ @@ -155,7 +158,11 @@ public abstract class Window { public static final String NAVIGATION_BAR_BACKGROUND_TRANSITION_NAME = "android:navigation:background"; - /** The default features enabled */ + /** + * The default features enabled. + * @deprecated use {@link #getDefaultFeatures(android.content.Context)} instead. + */ + @Deprecated @SuppressWarnings({"PointlessBitwiseExpression"}) protected static final int DEFAULT_FEATURES = (1 << FEATURE_OPTIONS_PANEL) | (1 << FEATURE_CONTEXT_MENU); @@ -184,8 +191,8 @@ public abstract class Window { private boolean mSetCloseOnTouchOutside = false; private int mForcedWindowFlags = 0; - private int mFeatures = DEFAULT_FEATURES; - private int mLocalFeatures = DEFAULT_FEATURES; + private int mFeatures; + private int mLocalFeatures; private boolean mHaveWindowFormat = false; private boolean mHaveDimAmount = false; @@ -363,7 +370,7 @@ public abstract class Window { /** * This hook is called whenever the window focus changes. See * {@link View#onWindowFocusChanged(boolean) - * View.onWindowFocusChanged(boolean)} for more information. + * View.onWindowFocusChangedNotLocked(boolean)} for more information. * * @param hasFocus Whether the window now has focus. */ @@ -443,6 +450,7 @@ public abstract class Window { public Window(Context context) { mContext = context; + mFeatures = mLocalFeatures = getDefaultFeatures(context); } /** @@ -801,9 +809,6 @@ public abstract class Window { public void setFlags(int flags, int mask) { final WindowManager.LayoutParams attrs = getAttributes(); attrs.flags = (attrs.flags&~mask) | (flags&mask); - if ((mask&WindowManager.LayoutParams.FLAG_NEEDS_MENU_KEY) != 0) { - attrs.privateFlags |= WindowManager.LayoutParams.PRIVATE_FLAG_SET_NEEDS_MENU_KEY; - } mForcedWindowFlags |= mask; dispatchWindowAttributesChanged(attrs); } @@ -814,6 +819,15 @@ public abstract class Window { dispatchWindowAttributesChanged(attrs); } + /** + * {@hide} + */ + protected void setNeedsMenuKey(int value) { + final WindowManager.LayoutParams attrs = getAttributes(); + attrs.needsMenuKey = value; + dispatchWindowAttributesChanged(attrs); + } + /** * {@hide} */ @@ -892,6 +906,14 @@ public abstract class Window { } } + /** @hide */ + @SystemApi + public void setDisableWallpaperTouchEvents(boolean disable) { + setPrivateFlags(disable + ? WindowManager.LayoutParams.PRIVATE_FLAG_DISABLE_WALLPAPER_TOUCH_EVENTS : 0, + WindowManager.LayoutParams.PRIVATE_FLAG_DISABLE_WALLPAPER_TOUCH_EVENTS); + } + /** @hide */ public abstract void alwaysReadCloseOnTouchAttr(); @@ -999,10 +1021,16 @@ public abstract class Window { *

          Note that calling this function "locks in" various characteristics * of the window that can not, from this point forward, be changed: the * features that have been requested with {@link #requestFeature(int)}, - * and certain window flags as described in {@link #setFlags(int, int)}. + * and certain window flags as described in {@link #setFlags(int, int)}.

          + * + *

          If {@link #FEATURE_CONTENT_TRANSITIONS} is set, the window's + * TransitionManager will be used to animate content from the current + * content View to view.

          * * @param view The desired content to display. * @param params Layout parameters for the view. + * @see #getTransitionManager() + * @see #setTransitionManager(android.transition.TransitionManager) */ public abstract void setContentView(View view, ViewGroup.LayoutParams params); @@ -1068,18 +1096,41 @@ public abstract class Window { */ public abstract void onConfigurationChanged(Configuration newConfig); + /** + * Sets the window elevation. + *

          + * Changes to this property take effect immediately and will cause the + * window surface to be recreated. This is an expensive operation and as a + * result, this property should not be animated. + * + * @param elevation The window elevation. + * @see View#setElevation(float) + * @see android.R.styleable#Window_windowElevation + */ + public void setElevation(float elevation) {} + + /** + * Sets whether window content should be clipped to the outline of the + * window background. + * + * @param clipToOutline Whether window content should be clipped to the + * outline of the window background. + * @see View#setClipToOutline(boolean) + * @see android.R.styleable#Window_windowClipToOutline + */ + public void setClipToOutline(boolean clipToOutline) {} + /** * Change the background of this window to a Drawable resource. Setting the * background to null will make the window be opaque. To make the window * transparent, you can use an empty drawable (for instance a ColorDrawable * with the color 0 or the system drawable android:drawable/empty.) * - * @param resid The resource identifier of a drawable resource which will be - * installed as the new background. + * @param resId The resource identifier of a drawable resource which will + * be installed as the new background. */ - public void setBackgroundDrawableResource(int resid) - { - setBackgroundDrawable(mContext.getDrawable(resid)); + public void setBackgroundDrawableResource(int resId) { + setBackgroundDrawable(mContext.getDrawable(resId)); } /** @@ -1125,31 +1176,31 @@ public abstract class Window { * Set an explicit Drawable value for feature of this window. You must * have called requestFeature(featureId) before calling this function. * - * @param featureId The desired drawable feature to change. - * Features are constants defined by Window. + * @param featureId The desired drawable feature to change. Features are + * constants defined by Window. * @param drawable A Drawable object to display. */ public abstract void setFeatureDrawable(int featureId, Drawable drawable); /** - * Set a custom alpha value for the given drawale feature, controlling how + * Set a custom alpha value for the given drawable feature, controlling how * much the background is visible through it. * - * @param featureId The desired drawable feature to change. - * Features are constants defined by Window. + * @param featureId The desired drawable feature to change. Features are + * constants defined by Window. * @param alpha The alpha amount, 0 is completely transparent and 255 is * completely opaque. */ public abstract void setFeatureDrawableAlpha(int featureId, int alpha); /** - * Set the integer value for a feature. The range of the value depends on - * the feature being set. For FEATURE_PROGRESSS, it should go from 0 to - * 10000. At 10000 the progress is complete and the indicator hidden. + * Set the integer value for a feature. The range of the value depends on + * the feature being set. For {@link #FEATURE_PROGRESS}, it should go from + * 0 to 10000. At 10000 the progress is complete and the indicator hidden. * - * @param featureId The desired feature to change. - * Features are constants defined by Window. - * @param value The value for the feature. The interpretation of this + * @param featureId The desired feature to change. Features are constants + * defined by Window. + * @param value The value for the feature. The interpretation of this * value is feature-specific. */ public abstract void setFeatureInt(int featureId, int value); @@ -1245,6 +1296,25 @@ public abstract class Window { return mFeatures; } + /** + * Return the feature bits set by default on a window. + * @param context The context used to access resources + */ + public static int getDefaultFeatures(Context context) { + int features = 0; + + final Resources res = context.getResources(); + if (res.getBoolean(com.android.internal.R.bool.config_defaultWindowFeatureOptionsPanel)) { + features |= 1 << FEATURE_OPTIONS_PANEL; + } + + if (res.getBoolean(com.android.internal.R.bool.config_defaultWindowFeatureContextMenu)) { + features |= 1 << FEATURE_CONTEXT_MENU; + } + + return features; + } + /** * Query for the availability of a certain feature. * @@ -1405,6 +1475,7 @@ public abstract class Window { * {@link #setContentView}) if {@link #FEATURE_CONTENT_TRANSITIONS} has been granted.

          * * @return This window's content TransitionManager or null if none is set. + * @attr ref android.R.styleable#Window_windowContentTransitionManager */ public TransitionManager getTransitionManager() { return null; @@ -1415,6 +1486,7 @@ public abstract class Window { * Requires {@link #FEATURE_CONTENT_TRANSITIONS}. * * @param tm The TransitionManager to use for scene changes. + * @attr ref android.R.styleable#Window_windowContentTransitionManager */ public void setTransitionManager(TransitionManager tm) { throw new UnsupportedOperationException(); diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java index 47ee52e251169587f94c969cb0a94e223af92a15..84434f7e07aac00eda5a2f1b4288cc5e31d7ef62 100644 --- a/core/java/android/view/WindowManager.java +++ b/core/java/android/view/WindowManager.java @@ -16,6 +16,7 @@ package android.view; +import android.annotation.SystemApi; import android.app.Presentation; import android.content.Context; import android.content.pm.ActivityInfo; @@ -522,15 +523,6 @@ public interface WindowManager extends ViewManager { */ public static final int TYPE_MAGNIFICATION_OVERLAY = FIRST_SYSTEM_WINDOW+27; - /** - * Window type: Recents. Same layer as {@link #TYPE_SYSTEM_DIALOG} but only appears on - * one user's screen. - * In multiuser systems shows on all users' windows. - * @hide - */ - public static final int TYPE_RECENTS_OVERLAY = FIRST_SYSTEM_WINDOW+28; - - /** * Window type: keyguard scrim window. Shows if keyguard needs to be restarted. * In multiuser systems shows on all users' windows. @@ -550,6 +542,19 @@ public interface WindowManager extends ViewManager { */ public static final int TYPE_VOICE_INTERACTION = FIRST_SYSTEM_WINDOW+31; + /** + * Window type: Windows that are overlaid only by an {@link + * android.accessibilityservice.AccessibilityService} for interception of + * user interactions without changing the windows an accessibility service + * can introspect. In particular, an accessibility service can introspect + * only windows that a sighted user can interact with which is they can touch + * these windows or can type into these windows. For example, if there + * is a full screen accessibility overlay that is touchable, the windows + * below it will be introspectable by an accessibility service regardless + * they are covered by a touchable window. + */ + public static final int TYPE_ACCESSIBILITY_OVERLAY = FIRST_SYSTEM_WINDOW+32; + /** * End of types of system windows. */ @@ -887,9 +892,6 @@ public interface WindowManager extends ViewManager { */ public static final int FLAG_TRANSLUCENT_NAVIGATION = 0x08000000; - // ----- HIDDEN FLAGS. - // These start at the high bit and go down. - /** * Flag for a window in local focus mode. * Window in local focus mode can control focus independent of window manager using @@ -912,17 +914,12 @@ public interface WindowManager extends ViewManager { public static final int FLAG_SLIPPERY = 0x20000000; /** - * Flag for a window belonging to an activity that responds to {@link KeyEvent#KEYCODE_MENU} - * and therefore needs a Menu key. For devices where Menu is a physical button this flag is - * ignored, but on devices where the Menu key is drawn in software it may be hidden unless - * this flag is set. - * - * (Note that Action Bars, when available, are the preferred way to offer additional - * functions otherwise accessed via an options menu.) - * - * {@hide} + * Window flag: When requesting layout with an attached window, the attached window may + * overlap with the screen decorations of the parent window such as the navigation bar. By + * including this flag, the window manager will layout the attached window within the decor + * frame of the parent window such that it doesn't overlap with screen decorations. */ - public static final int FLAG_NEEDS_MENU_KEY = 0x40000000; + public static final int FLAG_LAYOUT_ATTACHED_IN_DECOR = 0x40000000; /** * Flag indicating that this Window is responsible for drawing the background for the @@ -1065,16 +1062,6 @@ public interface WindowManager extends ViewManager { */ public static final int PRIVATE_FLAG_WANTS_OFFSET_NOTIFICATIONS = 0x00000004; - /** - * This is set for a window that has explicitly specified its - * FLAG_NEEDS_MENU_KEY, so we know the value on this window is the - * appropriate one to use. If this is not set, we should look at - * windows behind it to determine the appropriate value. - * - * @hide - */ - public static final int PRIVATE_FLAG_SET_NEEDS_MENU_KEY = 0x00000008; - /** In a multiuser system if this flag is set and the owner is a system process then this * window will appear on all user screens. This overrides the default behavior of window * types that normally only appear on the owning user's screen. Refer to each window type @@ -1115,12 +1102,58 @@ public interface WindowManager extends ViewManager { */ public static final int PRIVATE_FLAG_KEYGUARD = 0x00000400; + /** + * Flag that prevents the wallpaper behind the current window from receiving touch events. + * + * {@hide} + */ + public static final int PRIVATE_FLAG_DISABLE_WALLPAPER_TOUCH_EVENTS = 0x00000800; + /** * Control flags that are private to the platform. * @hide */ public int privateFlags; + /** + * Value for {@link #needsMenuKey} for a window that has not explicitly specified if it + * needs {@link #NEEDS_MENU_SET_TRUE} or doesn't need {@link #NEEDS_MENU_SET_FALSE} a menu + * key. For this case, we should look at windows behind it to determine the appropriate + * value. + * + * @hide + */ + public static final int NEEDS_MENU_UNSET = 0; + + /** + * Value for {@link #needsMenuKey} for a window that has explicitly specified it needs a + * menu key. + * + * @hide + */ + public static final int NEEDS_MENU_SET_TRUE = 1; + + /** + * Value for {@link #needsMenuKey} for a window that has explicitly specified it doesn't + * needs a menu key. + * + * @hide + */ + public static final int NEEDS_MENU_SET_FALSE = 2; + + /** + * State variable for a window belonging to an activity that responds to + * {@link KeyEvent#KEYCODE_MENU} and therefore needs a Menu key. For devices where Menu is a + * physical button this variable is ignored, but on devices where the Menu key is drawn in + * software it may be hidden unless this variable is set to {@link #NEEDS_MENU_SET_TRUE}. + * + * (Note that Action Bars, when available, are the preferred way to offer additional + * functions otherwise accessed via an options menu.) + * + * {@hide} + */ + public int needsMenuKey = NEEDS_MENU_UNSET; + /** * Given a particular set of window manager flags, determine whether * such a window may be a target for an input method when it has @@ -1129,9 +1162,9 @@ public interface WindowManager extends ViewManager { * flags and returns true if the combination of the two corresponds * to a window that needs to be behind the input method so that the * user can type into it. - * + * * @param flags The current window manager flags. - * + * * @return Returns true if such a window should be behind/interact * with an input method, false if not. */ @@ -1299,7 +1332,7 @@ public interface WindowManager extends ViewManager { * * @hide */ - public Rect surfaceInsets = new Rect(); + public final Rect surfaceInsets = new Rect(); /** * The desired bitmap format. May be one of the constants in @@ -1558,7 +1591,19 @@ public interface WindowManager extends ViewManager { public final CharSequence getTitle() { return mTitle; } - + + /** @hide */ + @SystemApi + public final void setUserActivityTimeout(long timeout) { + userActivityTimeout = timeout; + } + + /** @hide */ + @SystemApi + public final long getUserActivityTimeout() { + return userActivityTimeout; + } + public int describeContents() { return 0; } @@ -1596,14 +1641,15 @@ public interface WindowManager extends ViewManager { out.writeInt(surfaceInsets.top); out.writeInt(surfaceInsets.right); out.writeInt(surfaceInsets.bottom); + out.writeInt(needsMenuKey); } - + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { public LayoutParams createFromParcel(Parcel in) { return new LayoutParams(in); } - + public LayoutParams[] newArray(int size) { return new LayoutParams[size]; } @@ -1643,8 +1689,9 @@ public interface WindowManager extends ViewManager { surfaceInsets.top = in.readInt(); surfaceInsets.right = in.readInt(); surfaceInsets.bottom = in.readInt(); + needsMenuKey = in.readInt(); } - + @SuppressWarnings({"PointlessBitwiseExpression"}) public static final int LAYOUT_CHANGED = 1<<0; public static final int TYPE_CHANGED = 1<<1; @@ -1678,14 +1725,16 @@ public interface WindowManager extends ViewManager { /** {@hide} */ public static final int PREFERRED_REFRESH_RATE_CHANGED = 1 << 21; /** {@hide} */ + public static final int NEEDS_MENU_KEY_CHANGED = 1 << 22; + /** {@hide} */ public static final int EVERYTHING_CHANGED = 0xffffffff; // internal buffer to backup/restore parameters under compatibility mode. private int[] mCompatibilityParamsBackup = null; - + public final int copyFrom(LayoutParams o) { int changes = 0; - + if (width != o.width) { width = o.width; changes |= LAYOUT_CHANGED; @@ -1822,9 +1871,14 @@ public interface WindowManager extends ViewManager { changes |= SURFACE_INSETS_CHANGED; } + if (needsMenuKey != o.needsMenuKey) { + needsMenuKey = o.needsMenuKey; + changes |= NEEDS_MENU_KEY_CHANGED; + } + return changes; } - + @Override public String debug(String output) { output += "Contents of " + this + ":"; @@ -1928,6 +1982,10 @@ public interface WindowManager extends ViewManager { if (!surfaceInsets.equals(Insets.NONE)) { sb.append(" surfaceInsets=").append(surfaceInsets); } + if (needsMenuKey != NEEDS_MENU_UNSET) { + sb.append(" needsMenuKey="); + sb.append(needsMenuKey); + } sb.append('}'); return sb.toString(); } diff --git a/core/java/android/view/WindowManagerGlobal.java b/core/java/android/view/WindowManagerGlobal.java index 5926d5f5cb75dbce42a29b9e9ce6a10c2d1202bb..a14c7661fb4524edb92ba430013df78313bb1216 100644 --- a/core/java/android/view/WindowManagerGlobal.java +++ b/core/java/android/view/WindowManagerGlobal.java @@ -103,6 +103,7 @@ public final class WindowManagerGlobal { public static final int ADD_MULTIPLE_SINGLETON = -7; public static final int ADD_PERMISSION_DENIED = -8; public static final int ADD_INVALID_DISPLAY = -9; + public static final int ADD_INVALID_TYPE = -10; private static WindowManagerGlobal sDefaultWindowManager; private static IWindowManager sWindowManagerService; @@ -121,6 +122,10 @@ public final class WindowManagerGlobal { private WindowManagerGlobal() { } + public static void initialize() { + getWindowManagerService(); + } + public static WindowManagerGlobal getInstance() { synchronized (WindowManagerGlobal.class) { if (sDefaultWindowManager == null) { @@ -135,6 +140,12 @@ public final class WindowManagerGlobal { if (sWindowManagerService == null) { sWindowManagerService = IWindowManager.Stub.asInterface( ServiceManager.getService("window")); + try { + sWindowManagerService = getWindowManagerService(); + ValueAnimator.setDurationScale(sWindowManagerService.getCurrentAnimatorScale()); + } catch (RemoteException e) { + Log.e(TAG, "Failed to get WindowManagerService, cannot set animator scale", e); + } } return sWindowManagerService; } @@ -154,7 +165,6 @@ public final class WindowManagerGlobal { } }, imm.getClient(), imm.getInputContext()); - ValueAnimator.setDurationScale(windowManager.getCurrentAnimatorScale()); } catch (RemoteException e) { Log.e(TAG, "Failed to open window session", e); } diff --git a/core/java/android/view/WindowManagerImpl.java b/core/java/android/view/WindowManagerImpl.java index 52d79f84f9a155c404b92f254ab1d1816b7704b1..98e9f54c13f91abe471f361710893ac8706becba 100644 --- a/core/java/android/view/WindowManagerImpl.java +++ b/core/java/android/view/WindowManagerImpl.java @@ -16,6 +16,9 @@ package android.view; +import android.annotation.NonNull; +import android.os.IBinder; + /** * Provides low-level communication with the system window manager for * operations that are bound to a particular context, display or parent window. @@ -47,6 +50,8 @@ public final class WindowManagerImpl implements WindowManager { private final Display mDisplay; private final Window mParentWindow; + private IBinder mDefaultToken; + public WindowManagerImpl(Display display) { this(display, null); } @@ -64,16 +69,43 @@ public final class WindowManagerImpl implements WindowManager { return new WindowManagerImpl(display, mParentWindow); } + /** + * Sets the window token to assign when none is specified by the client or + * available from the parent window. + * + * @param token The default token to assign. + */ + public void setDefaultToken(IBinder token) { + mDefaultToken = token; + } + @Override - public void addView(View view, ViewGroup.LayoutParams params) { + public void addView(@NonNull View view, @NonNull ViewGroup.LayoutParams params) { + applyDefaultToken(params); mGlobal.addView(view, params, mDisplay, mParentWindow); } @Override - public void updateViewLayout(View view, ViewGroup.LayoutParams params) { + public void updateViewLayout(@NonNull View view, @NonNull ViewGroup.LayoutParams params) { + applyDefaultToken(params); mGlobal.updateViewLayout(view, params); } + private void applyDefaultToken(@NonNull ViewGroup.LayoutParams params) { + // Only use the default token if we don't have a parent window. + if (mDefaultToken != null && mParentWindow == null) { + if (!(params instanceof WindowManager.LayoutParams)) { + throw new IllegalArgumentException("Params must be WindowManager.LayoutParams"); + } + + // Only use the default token if we don't already have a token. + final WindowManager.LayoutParams wparams = (WindowManager.LayoutParams) params; + if (wparams.token == null) { + wparams.token = mDefaultToken; + } + } + } + @Override public void removeView(View view) { mGlobal.removeView(view, false); diff --git a/core/java/android/view/WindowManagerInternal.java b/core/java/android/view/WindowManagerInternal.java index 38e372367ac51e7aeafa058a0ec57898b97d379e..f557b976d535aba84a2b1a8f36cf0e452850fa6d 100644 --- a/core/java/android/view/WindowManagerInternal.java +++ b/core/java/android/view/WindowManagerInternal.java @@ -173,4 +173,20 @@ public abstract class WindowManagerInternal { * redrawn. */ public abstract void waitForAllWindowsDrawn(Runnable callback, long timeout); + + /** + * Adds a window token for a given window type. + * + * @param token The token to add. + * @param type The window type. + */ + public abstract void addWindowToken(android.os.IBinder token, int type); + + /** + * Removes a window token. + * + * @param token The toke to remove. + * @param removeWindows Whether to also remove the windows associated with the token. + */ + public abstract void removeWindowToken(android.os.IBinder token, boolean removeWindows); } diff --git a/core/java/android/view/WindowManagerPolicy.java b/core/java/android/view/WindowManagerPolicy.java index 673f075e6c1c473c203d7cc9a38696ecf3217200..780ca990c8418d0f72961b8bca9d50c2ab277e5f 100644 --- a/core/java/android/view/WindowManagerPolicy.java +++ b/core/java/android/view/WindowManagerPolicy.java @@ -17,6 +17,7 @@ package android.view; import android.annotation.IntDef; +import android.annotation.SystemApi; import android.content.Context; import android.content.pm.ActivityInfo; import android.content.res.CompatibilityInfo; @@ -104,6 +105,13 @@ public interface WindowManagerPolicy { */ public final static String EXTRA_HDMI_PLUGGED_STATE = "state"; + /** + * Set to {@code true} when intent was invoked from pressing the home key. + * @hide + */ + @SystemApi + public static final String EXTRA_FROM_HOME_KEY = "android.intent.extra.FROM_HOME_KEY"; + /** * Pass this event to the user / app. To be returned from * {@link #interceptKeyBeforeQueueing}. @@ -865,12 +873,15 @@ public interface WindowManagerPolicy { * Return the insets for the areas covered by system windows. These values * are computed on the most recent layout, so they are not guaranteed to * be correct. - * + * * @param attrs The LayoutParams of the window. - * @param contentInset The areas covered by system windows, expressed as positive insets - * + * @param outContentInsets The areas covered by system windows, expressed as positive insets. + * @param outStableInsets The areas covered by stable system windows irrespective of their + * current visibility. Expressed as positive insets. + * */ - public void getContentInsetHintLw(WindowManager.LayoutParams attrs, Rect contentInset); + public void getInsetHintLw(WindowManager.LayoutParams attrs, Rect outContentInsets, + Rect outStableInsets); /** * Called when layout of the windows is finished. After this function has diff --git a/core/java/android/view/accessibility/AccessibilityCache.java b/core/java/android/view/accessibility/AccessibilityCache.java index a218e4dc0b922e72caf99da1ceef63136ee54b37..d0dde00746bd0fba7cfda50e916398694105af5e 100644 --- a/core/java/android/view/accessibility/AccessibilityCache.java +++ b/core/java/android/view/accessibility/AccessibilityCache.java @@ -40,6 +40,9 @@ final class AccessibilityCache { private final Object mLock = new Object(); + private long mAccessibilityFocus = AccessibilityNodeInfo.UNDEFINED_ITEM_ID; + private long mInputFocus = AccessibilityNodeInfo.UNDEFINED_ITEM_ID; + private final SparseArray mWindowCache = new SparseArray<>(); @@ -73,11 +76,32 @@ final class AccessibilityCache { synchronized (mLock) { final int eventType = event.getEventType(); switch (eventType) { - case AccessibilityEvent.TYPE_VIEW_FOCUSED: - case AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED: - case AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED: + case AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED: { + if (mAccessibilityFocus != AccessibilityNodeInfo.UNDEFINED_ITEM_ID) { + refreshCachedNodeLocked(event.getWindowId(), mAccessibilityFocus); + } + mAccessibilityFocus = event.getSourceNodeId(); + refreshCachedNodeLocked(event.getWindowId(), mAccessibilityFocus); + } break; + + case AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED: { + if (mAccessibilityFocus == event.getSourceNodeId()) { + refreshCachedNodeLocked(event.getWindowId(), mAccessibilityFocus); + mAccessibilityFocus = AccessibilityNodeInfo.UNDEFINED_ITEM_ID; + } + } break; + + case AccessibilityEvent.TYPE_VIEW_FOCUSED: { + if (mInputFocus != AccessibilityNodeInfo.UNDEFINED_ITEM_ID) { + refreshCachedNodeLocked(event.getWindowId(), mInputFocus); + } + mInputFocus = event.getSourceNodeId(); + refreshCachedNodeLocked(event.getWindowId(), mInputFocus); + } break; + case AccessibilityEvent.TYPE_VIEW_SELECTED: case AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED: + case AccessibilityEvent.TYPE_VIEW_CLICKED: case AccessibilityEvent.TYPE_VIEW_TEXT_SELECTION_CHANGED: { refreshCachedNodeLocked(event.getWindowId(), event.getSourceNodeId()); } break; @@ -267,6 +291,9 @@ final class AccessibilityCache { final int windowId = mNodeCache.keyAt(i); clearNodesForWindowLocked(windowId); } + + mAccessibilityFocus = AccessibilityNodeInfo.UNDEFINED_ITEM_ID; + mInputFocus = AccessibilityNodeInfo.UNDEFINED_ITEM_ID; } } diff --git a/core/java/android/view/accessibility/AccessibilityInteractionClient.java b/core/java/android/view/accessibility/AccessibilityInteractionClient.java index 374f7e0644092d14dafd9f001ac6383c8e877c35..cefd34d7fefdf5825b4b3b2f82f26d08bc804fb7 100644 --- a/core/java/android/view/accessibility/AccessibilityInteractionClient.java +++ b/core/java/android/view/accessibility/AccessibilityInteractionClient.java @@ -99,8 +99,6 @@ public final class AccessibilityInteractionClient private boolean mPerformAccessibilityActionResult; - private Point mComputeClickPointResult; - private Message mSameThreadMessage; private static final SparseArray sConnectionCache = @@ -522,43 +520,6 @@ public final class AccessibilityInteractionClient return false; } - /** - * Computes a point in screen coordinates where sending a down/up events would - * perform a click on an {@link AccessibilityNodeInfo}. - * - * @param connectionId The id of a connection for interacting with the system. - * @param accessibilityWindowId A unique window id. Use - * {@link android.view.accessibility.AccessibilityNodeInfo#ACTIVE_WINDOW_ID} - * to query the currently active window. - * @param accessibilityNodeId A unique view id or virtual descendant id from - * where to start the search. Use - * {@link android.view.accessibility.AccessibilityNodeInfo#ROOT_NODE_ID} - * to start from the root. - * @return Point the click point of null if no such point. - */ - public Point computeClickPointInScreen(int connectionId, int accessibilityWindowId, - long accessibilityNodeId) { - try { - IAccessibilityServiceConnection connection = getConnection(connectionId); - if (connection != null) { - final int interactionId = mInteractionIdCounter.getAndIncrement(); - final boolean success = connection.computeClickPointInScreen( - accessibilityWindowId, accessibilityNodeId, - interactionId, this, Thread.currentThread().getId()); - if (success) { - return getComputeClickPointInScreenResultAndClear(interactionId); - } - } else { - if (DEBUG) { - Log.w(LOG_TAG, "No connection for connection id: " + connectionId); - } - } - } catch (RemoteException re) { - Log.w(LOG_TAG, "Error while calling remote computeClickPointInScreen", re); - } - return null; - } - public void clearCache() { sAccessibilityCache.clear(); } @@ -673,34 +634,6 @@ public final class AccessibilityInteractionClient } } - /** - * Gets the result of a request to compute a point in screen for clicking on a node. - * - * @param interactionId The interaction id to match the result with the request. - * @return The point or null if no such point. - */ - private Point getComputeClickPointInScreenResultAndClear(int interactionId) { - synchronized (mInstanceLock) { - final boolean success = waitForResultTimedLocked(interactionId); - Point result = success ? mComputeClickPointResult : null; - clearResultLocked(); - return result; - } - } - - /** - * {@inheritDoc} - */ - public void setComputeClickPointInScreenActionResult(Point point, int interactionId) { - synchronized (mInstanceLock) { - if (interactionId > mInteractionId) { - mComputeClickPointResult = point; - mInteractionId = interactionId; - } - mInstanceLock.notifyAll(); - } - } - /** * Clears the result state. */ @@ -709,7 +642,6 @@ public final class AccessibilityInteractionClient mFindAccessibilityNodeInfoResult = null; mFindAccessibilityNodeInfosResult = null; mPerformAccessibilityActionResult = false; - mComputeClickPointResult = null; } /** diff --git a/core/java/android/view/accessibility/AccessibilityManager.java b/core/java/android/view/accessibility/AccessibilityManager.java index c3b17dbcce1aeb71b88d451d759c3ebfad401dcd..e77b862618e6bff6e94032d6e5082b4c876321b9 100644 --- a/core/java/android/view/accessibility/AccessibilityManager.java +++ b/core/java/android/view/accessibility/AccessibilityManager.java @@ -459,7 +459,7 @@ public final class AccessibilityManager { */ public boolean addAccessibilityStateChangeListener( @NonNull AccessibilityStateChangeListener listener) { - // Final CopyOnArrayList - no lock needed. + // Final CopyOnWriteArrayList - no lock needed. return mAccessibilityStateChangeListeners.add(listener); } @@ -471,7 +471,7 @@ public final class AccessibilityManager { */ public boolean removeAccessibilityStateChangeListener( @NonNull AccessibilityStateChangeListener listener) { - // Final CopyOnArrayList - no lock needed. + // Final CopyOnWriteArrayList - no lock needed. return mAccessibilityStateChangeListeners.remove(listener); } @@ -484,7 +484,7 @@ public final class AccessibilityManager { */ public boolean addTouchExplorationStateChangeListener( @NonNull TouchExplorationStateChangeListener listener) { - // Final CopyOnArrayList - no lock needed. + // Final CopyOnWriteArrayList - no lock needed. return mTouchExplorationStateChangeListeners.add(listener); } @@ -496,7 +496,7 @@ public final class AccessibilityManager { */ public boolean removeTouchExplorationStateChangeListener( @NonNull TouchExplorationStateChangeListener listener) { - // Final CopyOnArrayList - no lock needed. + // Final CopyOnWriteArrayList - no lock needed. return mTouchExplorationStateChangeListeners.remove(listener); } @@ -511,7 +511,7 @@ public final class AccessibilityManager { */ public boolean addHighTextContrastStateChangeListener( @NonNull HighTextContrastChangeListener listener) { - // Final CopyOnArrayList - no lock needed. + // Final CopyOnWriteArrayList - no lock needed. return mHighTextContrastStateChangeListeners.add(listener); } @@ -525,7 +525,7 @@ public final class AccessibilityManager { */ public boolean removeHighTextContrastStateChangeListener( @NonNull HighTextContrastChangeListener listener) { - // Final CopyOnArrayList - no lock needed. + // Final CopyOnWriteArrayList - no lock needed. return mHighTextContrastStateChangeListeners.remove(listener); } @@ -640,9 +640,9 @@ public final class AccessibilityManager { synchronized (mLock) { isEnabled = mIsEnabled; } - final int listenerCount = mAccessibilityStateChangeListeners.size(); - for (int i = 0; i < listenerCount; i++) { - mAccessibilityStateChangeListeners.get(i).onAccessibilityStateChanged(isEnabled); + // Listeners are a final CopyOnWriteArrayList, hence no lock needed. + for (AccessibilityStateChangeListener listener :mAccessibilityStateChangeListeners) { + listener.onAccessibilityStateChanged(isEnabled); } } @@ -654,10 +654,9 @@ public final class AccessibilityManager { synchronized (mLock) { isTouchExplorationEnabled = mIsTouchExplorationEnabled; } - final int listenerCount = mTouchExplorationStateChangeListeners.size(); - for (int i = 0; i < listenerCount; i++) { - mTouchExplorationStateChangeListeners.get(i) - .onTouchExplorationStateChanged(isTouchExplorationEnabled); + // Listeners are a final CopyOnWriteArrayList, hence no lock needed. + for (TouchExplorationStateChangeListener listener :mTouchExplorationStateChangeListeners) { + listener.onTouchExplorationStateChanged(isTouchExplorationEnabled); } } @@ -669,10 +668,9 @@ public final class AccessibilityManager { synchronized (mLock) { isHighTextContrastEnabled = mIsHighTextContrastEnabled; } - final int listenerCount = mHighTextContrastStateChangeListeners.size(); - for (int i = 0; i < listenerCount; i++) { - mHighTextContrastStateChangeListeners.get(i) - .onHighTextContrastStateChanged(isHighTextContrastEnabled); + // Listeners are a final CopyOnWriteArrayList, hence no lock needed. + for (HighTextContrastChangeListener listener : mHighTextContrastStateChangeListeners) { + listener.onHighTextContrastStateChanged(isHighTextContrastEnabled); } } diff --git a/core/java/android/view/accessibility/AccessibilityNodeInfo.java b/core/java/android/view/accessibility/AccessibilityNodeInfo.java index 3987fbc02989f7122ea3f413c8ecf85e1de14253..b5afdf78d1236afe5ab3d6d8f7c6a1e9495c0871 100644 --- a/core/java/android/view/accessibility/AccessibilityNodeInfo.java +++ b/core/java/android/view/accessibility/AccessibilityNodeInfo.java @@ -547,6 +547,8 @@ public class AccessibilityNodeInfo implements Parcelable { private long mParentNodeId = ROOT_NODE_ID; private long mLabelForId = ROOT_NODE_ID; private long mLabeledById = ROOT_NODE_ID; + private long mTraversalBefore = ROOT_NODE_ID; + private long mTraversalAfter = ROOT_NODE_ID; private int mBooleanProperties; private final Rect mBoundsInParent = new Rect(); @@ -1045,6 +1047,126 @@ public class AccessibilityNodeInfo implements Parcelable { return mActions.remove(action); } + /** + * Gets the node before which this one is visited during traversal. A screen-reader + * must visit the content of this node before the content of the one it precedes. + * + * @return The succeeding node if such or null. + * + * @see #setTraversalBefore(android.view.View) + * @see #setTraversalBefore(android.view.View, int) + */ + public AccessibilityNodeInfo getTraversalBefore() { + enforceSealed(); + return getNodeForAccessibilityId(mTraversalBefore); + } + + /** + * Sets the view before whose node this one should be visited during traversal. A + * screen-reader must visit the content of this node before the content of the one + * it precedes. + *

          + * Note: Cannot be called from an + * {@link android.accessibilityservice.AccessibilityService}. + * This class is made immutable before being delivered to an AccessibilityService. + *

          + * + * @param view The view providing the preceding node. + * + * @see #getTraversalBefore() + */ + public void setTraversalBefore(View view) { + setTraversalBefore(view, UNDEFINED_ITEM_ID); + } + + /** + * Sets the node before which this one is visited during traversal. A screen-reader + * must visit the content of this node before the content of the one it precedes. + * The successor is a virtual descendant of the given root. If + * virtualDescendantId equals to {@link View#NO_ID} the root is set + * as the successor. + *

          + * A virtual descendant is an imaginary View that is reported as a part of the view + * hierarchy for accessibility purposes. This enables custom views that draw complex + * content to report them selves as a tree of virtual views, thus conveying their + * logical structure. + *

          + *

          + * Note: Cannot be called from an + * {@link android.accessibilityservice.AccessibilityService}. + * This class is made immutable before being delivered to an AccessibilityService. + *

          + * + * @param root The root of the virtual subtree. + * @param virtualDescendantId The id of the virtual descendant. + */ + public void setTraversalBefore(View root, int virtualDescendantId) { + enforceNotSealed(); + final int rootAccessibilityViewId = (root != null) + ? root.getAccessibilityViewId() : UNDEFINED_ITEM_ID; + mTraversalBefore = makeNodeId(rootAccessibilityViewId, virtualDescendantId); + } + + /** + * Gets the node after which this one is visited in accessibility traversal. + * A screen-reader must visit the content of the other node before the content + * of this one. + * + * @return The succeeding node if such or null. + * + * @see #setTraversalAfter(android.view.View) + * @see #setTraversalAfter(android.view.View, int) + */ + public AccessibilityNodeInfo getTraversalAfter() { + enforceSealed(); + return getNodeForAccessibilityId(mTraversalAfter); + } + + /** + * Sets the view whose node is visited after this one in accessibility traversal. + * A screen-reader must visit the content of the other node before the content + * of this one. + *

          + * Note: Cannot be called from an + * {@link android.accessibilityservice.AccessibilityService}. + * This class is made immutable before being delivered to an AccessibilityService. + *

          + * + * @param view The previous view. + * + * @see #getTraversalAfter() + */ + public void setTraversalAfter(View view) { + setTraversalAfter(view, UNDEFINED_ITEM_ID); + } + + /** + * Sets the node after which this one is visited in accessibility traversal. + * A screen-reader must visit the content of the other node before the content + * of this one. If virtualDescendantId equals to {@link View#NO_ID} + * the root is set as the predecessor. + *

          + * A virtual descendant is an imaginary View that is reported as a part of the view + * hierarchy for accessibility purposes. This enables custom views that draw complex + * content to report them selves as a tree of virtual views, thus conveying their + * logical structure. + *

          + *

          + * Note: Cannot be called from an + * {@link android.accessibilityservice.AccessibilityService}. + * This class is made immutable before being delivered to an AccessibilityService. + *

          + * + * @param root The root of the virtual subtree. + * @param virtualDescendantId The id of the virtual descendant. + */ + public void setTraversalAfter(View root, int virtualDescendantId) { + enforceNotSealed(); + final int rootAccessibilityViewId = (root != null) + ? root.getAccessibilityViewId() : UNDEFINED_ITEM_ID; + mTraversalAfter = makeNodeId(rootAccessibilityViewId, virtualDescendantId); + } + /** * Sets the maximum text length, or -1 for no limit. *

          @@ -1229,13 +1351,7 @@ public class AccessibilityNodeInfo implements Parcelable { */ public AccessibilityNodeInfo getParent() { enforceSealed(); - if (!canPerformRequestOverConnection(mParentNodeId)) { - return null; - } - AccessibilityInteractionClient client = AccessibilityInteractionClient.getInstance(); - return client.findAccessibilityNodeInfoByAccessibilityId(mConnectionId, - mWindowId, mParentNodeId, false, FLAG_PREFETCH_PREDECESSORS - | FLAG_PREFETCH_DESCENDANTS | FLAG_PREFETCH_SIBLINGS); + return getNodeForAccessibilityId(mParentNodeId); } /** @@ -2055,13 +2171,7 @@ public class AccessibilityNodeInfo implements Parcelable { */ public AccessibilityNodeInfo getLabelFor() { enforceSealed(); - if (!canPerformRequestOverConnection(mLabelForId)) { - return null; - } - AccessibilityInteractionClient client = AccessibilityInteractionClient.getInstance(); - return client.findAccessibilityNodeInfoByAccessibilityId(mConnectionId, - mWindowId, mLabelForId, false, FLAG_PREFETCH_PREDECESSORS - | FLAG_PREFETCH_DESCENDANTS | FLAG_PREFETCH_SIBLINGS); + return getNodeForAccessibilityId(mLabelForId); } /** @@ -2113,13 +2223,7 @@ public class AccessibilityNodeInfo implements Parcelable { */ public AccessibilityNodeInfo getLabeledBy() { enforceSealed(); - if (!canPerformRequestOverConnection(mLabeledById)) { - return null; - } - AccessibilityInteractionClient client = AccessibilityInteractionClient.getInstance(); - return client.findAccessibilityNodeInfoByAccessibilityId(mConnectionId, - mWindowId, mLabeledById, false, FLAG_PREFETCH_PREDECESSORS - | FLAG_PREFETCH_DESCENDANTS | FLAG_PREFETCH_SIBLINGS); + return getNodeForAccessibilityId(mLabeledById); } /** @@ -2453,6 +2557,9 @@ public class AccessibilityNodeInfo implements Parcelable { parcel.writeLong(mParentNodeId); parcel.writeLong(mLabelForId); parcel.writeLong(mLabeledById); + parcel.writeLong(mTraversalBefore); + parcel.writeLong(mTraversalAfter); + parcel.writeInt(mConnectionId); final LongArray childIds = mChildNodeIds; @@ -2571,6 +2678,8 @@ public class AccessibilityNodeInfo implements Parcelable { mParentNodeId = other.mParentNodeId; mLabelForId = other.mLabelForId; mLabeledById = other.mLabeledById; + mTraversalBefore = other.mTraversalBefore; + mTraversalAfter = other.mTraversalAfter; mWindowId = other.mWindowId; mConnectionId = other.mConnectionId; mBoundsInParent.set(other.mBoundsInParent); @@ -2633,6 +2742,9 @@ public class AccessibilityNodeInfo implements Parcelable { mParentNodeId = parcel.readLong(); mLabelForId = parcel.readLong(); mLabeledById = parcel.readLong(); + mTraversalBefore = parcel.readLong(); + mTraversalAfter = parcel.readLong(); + mConnectionId = parcel.readInt(); final int childrenSize = parcel.readInt(); @@ -2725,6 +2837,8 @@ public class AccessibilityNodeInfo implements Parcelable { mParentNodeId = ROOT_NODE_ID; mLabelForId = ROOT_NODE_ID; mLabeledById = ROOT_NODE_ID; + mTraversalBefore = ROOT_NODE_ID; + mTraversalAfter = ROOT_NODE_ID; mWindowId = UNDEFINED_ITEM_ID; mConnectionId = UNDEFINED_CONNECTION_ID; mMaxTextLength = -1; @@ -2911,6 +3025,8 @@ public class AccessibilityNodeInfo implements Parcelable { builder.append("; accessibilityViewId: " + getAccessibilityViewId(mSourceNodeId)); builder.append("; virtualDescendantId: " + getVirtualDescendantId(mSourceNodeId)); builder.append("; mParentNodeId: " + mParentNodeId); + builder.append("; traversalBefore: ").append(mTraversalBefore); + builder.append("; traversalAfter: ").append(mTraversalAfter); int granularities = mMovementGranularities; builder.append("; MovementGranularities: ["); @@ -2963,6 +3079,16 @@ public class AccessibilityNodeInfo implements Parcelable { return builder.toString(); } + private AccessibilityNodeInfo getNodeForAccessibilityId(long accessibilityId) { + if (!canPerformRequestOverConnection(accessibilityId)) { + return null; + } + AccessibilityInteractionClient client = AccessibilityInteractionClient.getInstance(); + return client.findAccessibilityNodeInfoByAccessibilityId(mConnectionId, + mWindowId, accessibilityId, false, FLAG_PREFETCH_PREDECESSORS + | FLAG_PREFETCH_DESCENDANTS | FLAG_PREFETCH_SIBLINGS); + } + /** * A class defining an action that can be performed on an {@link AccessibilityNodeInfo}. * Each action has a unique id that is mandatory and optional data. diff --git a/core/java/android/view/accessibility/AccessibilityWindowInfo.java b/core/java/android/view/accessibility/AccessibilityWindowInfo.java index ad55f5f2a097ff4ef4a3076e25290cbe2c45bc1c..e1942beaaa0fe29726e236b988d8c4bb1c2e8214 100644 --- a/core/java/android/view/accessibility/AccessibilityWindowInfo.java +++ b/core/java/android/view/accessibility/AccessibilityWindowInfo.java @@ -51,11 +51,24 @@ public final class AccessibilityWindowInfo implements Parcelable { */ public static final int TYPE_SYSTEM = 3; + /** + * Window type: Windows that are overlaid only by an {@link + * android.accessibilityservice.AccessibilityService} for interception of + * user interactions without changing the windows an accessibility service + * can introspect. In particular, an accessibility service can introspect + * only windows that a sighted user can interact with which they can touch + * these windows or can type into these windows. For example, if there + * is a full screen accessibility overlay that is touchable, the windows + * below it will be introspectable by an accessibility service regardless + * they are covered by a touchable window. + */ + public static final int TYPE_ACCESSIBILITY_OVERLAY = 4; + private static final int UNDEFINED = -1; private static final int BOOLEAN_PROPERTY_ACTIVE = 1 << 0; private static final int BOOLEAN_PROPERTY_FOCUSED = 1 << 1; - private static final int BOOLEAN_PROPERTY_ACCESSIBLITY_FOCUSED = 1 << 2; + private static final int BOOLEAN_PROPERTY_ACCESSIBILITY_FOCUSED = 1 << 2; // Housekeeping. private static final int MAX_POOL_SIZE = 10; @@ -85,6 +98,7 @@ public final class AccessibilityWindowInfo implements Parcelable { * @see #TYPE_APPLICATION * @see #TYPE_INPUT_METHOD * @see #TYPE_SYSTEM + * @see #TYPE_ACCESSIBILITY_OVERLAY */ public int getType() { return mType; @@ -93,7 +107,7 @@ public final class AccessibilityWindowInfo implements Parcelable { /** * Sets the type of the window. * - * @param The type + * @param type The type * * @hide */ @@ -115,7 +129,7 @@ public final class AccessibilityWindowInfo implements Parcelable { * Sets the layer which determines the Z-order of the window. Windows * with greater layer appear on top of windows with lesser layer. * - * @param The window layer. + * @param layer The window layer. * * @hide */ @@ -174,7 +188,7 @@ public final class AccessibilityWindowInfo implements Parcelable { /** * Sets the unique window id. * - * @param windowId The window id. + * @param id The window id. * * @hide */ @@ -230,7 +244,7 @@ public final class AccessibilityWindowInfo implements Parcelable { * the user is currently touching or the window has input focus * and the user is not touching any window. * - * @param Whether this is the active window. + * @param active Whether this is the active window. * * @hide */ @@ -250,7 +264,7 @@ public final class AccessibilityWindowInfo implements Parcelable { /** * Sets if this window has input focus. * - * @param Whether has input focus. + * @param focused Whether has input focus. * * @hide */ @@ -264,18 +278,18 @@ public final class AccessibilityWindowInfo implements Parcelable { * @return Whether has accessibility focus. */ public boolean isAccessibilityFocused() { - return getBooleanProperty(BOOLEAN_PROPERTY_ACCESSIBLITY_FOCUSED); + return getBooleanProperty(BOOLEAN_PROPERTY_ACCESSIBILITY_FOCUSED); } /** * Sets if this window has accessibility focus. * - * @param Whether has accessibility focus. + * @param focused Whether has accessibility focus. * * @hide */ public void setAccessibilityFocused(boolean focused) { - setBooleanProperty(BOOLEAN_PROPERTY_ACCESSIBLITY_FOCUSED, focused); + setBooleanProperty(BOOLEAN_PROPERTY_ACCESSIBILITY_FOCUSED, focused); } /** @@ -534,6 +548,9 @@ public final class AccessibilityWindowInfo implements Parcelable { case TYPE_SYSTEM: { return "TYPE_SYSTEM"; } + case TYPE_ACCESSIBILITY_OVERLAY: { + return "TYPE_ACCESSIBILITY_OVERLAY"; + } default: return ""; } diff --git a/core/java/android/view/accessibility/IAccessibilityInteractionConnection.aidl b/core/java/android/view/accessibility/IAccessibilityInteractionConnection.aidl index 66a3f46f24980c0eb2202574144937e6767f246b..cecc4af49e2e4fda1a44d5fb1213a3ad4f02b7ee 100644 --- a/core/java/android/view/accessibility/IAccessibilityInteractionConnection.aidl +++ b/core/java/android/view/accessibility/IAccessibilityInteractionConnection.aidl @@ -54,8 +54,4 @@ oneway interface IAccessibilityInteractionConnection { void performAccessibilityAction(long accessibilityNodeId, int action, in Bundle arguments, int interactionId, IAccessibilityInteractionConnectionCallback callback, int flags, int interrogatingPid, long interrogatingTid); - - void computeClickPointInScreen(long accessibilityNodeId, in Region bounds, int interactionId, - IAccessibilityInteractionConnectionCallback callback, int interrogatingPid, - long interrogatingTid, in MagnificationSpec spec); } diff --git a/core/java/android/view/accessibility/IAccessibilityInteractionConnectionCallback.aidl b/core/java/android/view/accessibility/IAccessibilityInteractionConnectionCallback.aidl index f4802168d194de2b9061991e06c024fafd776553..42ae1b32382bb33760b30b7491d46e74910c160b 100644 --- a/core/java/android/view/accessibility/IAccessibilityInteractionConnectionCallback.aidl +++ b/core/java/android/view/accessibility/IAccessibilityInteractionConnectionCallback.aidl @@ -52,12 +52,4 @@ oneway interface IAccessibilityInteractionConnectionCallback { * @param interactionId The interaction id to match the result with the request. */ void setPerformAccessibilityActionResult(boolean succeeded, int interactionId); - - /** - * Sets the result of a request to compute a point for clicking in a view. - * - * @param point The point of null if no such point. - * @param interactionId The interaction id to match the result with the request. - */ - void setComputeClickPointInScreenActionResult(in Point point, int interactionId); } diff --git a/core/java/android/view/animation/AccelerateDecelerateInterpolator.java b/core/java/android/view/animation/AccelerateDecelerateInterpolator.java index ed6949a0f3b6b924467b98e07e38a6a233d98aaa..21d5a5b86bf2de54d1eac2fb2ee5adc4f960b3ad 100644 --- a/core/java/android/view/animation/AccelerateDecelerateInterpolator.java +++ b/core/java/android/view/animation/AccelerateDecelerateInterpolator.java @@ -26,17 +26,17 @@ import com.android.internal.view.animation.NativeInterpolatorFactoryHelper; /** * An interpolator where the rate of change starts and ends slowly but * accelerates through the middle. - * */ @HasNativeInterpolator -public class AccelerateDecelerateInterpolator implements Interpolator, NativeInterpolatorFactory { +public class AccelerateDecelerateInterpolator extends BaseInterpolator + implements NativeInterpolatorFactory { public AccelerateDecelerateInterpolator() { } - + @SuppressWarnings({"UnusedDeclaration"}) public AccelerateDecelerateInterpolator(Context context, AttributeSet attrs) { } - + public float getInterpolation(float input) { return (float)(Math.cos((input + 1) * Math.PI) / 2.0f) + 0.5f; } diff --git a/core/java/android/view/animation/AccelerateInterpolator.java b/core/java/android/view/animation/AccelerateInterpolator.java index 1c75f166bf17b47c7c55018267b6ba30e38f8207..6c8d7b19fb153bf0d8b408427e3aff6024dc222d 100644 --- a/core/java/android/view/animation/AccelerateInterpolator.java +++ b/core/java/android/view/animation/AccelerateInterpolator.java @@ -33,7 +33,7 @@ import com.android.internal.view.animation.NativeInterpolatorFactoryHelper; * */ @HasNativeInterpolator -public class AccelerateInterpolator implements Interpolator, NativeInterpolatorFactory { +public class AccelerateInterpolator extends BaseInterpolator implements NativeInterpolatorFactory { private final float mFactor; private final double mDoubleFactor; @@ -70,7 +70,7 @@ public class AccelerateInterpolator implements Interpolator, NativeInterpolatorF mFactor = a.getFloat(R.styleable.AccelerateInterpolator_factor, 1.0f); mDoubleFactor = 2 * mFactor; - + setChangingConfiguration(a.getChangingConfigurations()); a.recycle(); } diff --git a/core/java/android/view/animation/AnimationUtils.java b/core/java/android/view/animation/AnimationUtils.java index af4e04ffe3a88cf7df7ab7b6ea72895da0dc4d81..606c83e39c053ee6d5452222ae7eeccd2e24b5a7 100644 --- a/core/java/android/view/animation/AnimationUtils.java +++ b/core/java/android/view/animation/AnimationUtils.java @@ -321,7 +321,7 @@ public class AnimationUtils { private static Interpolator createInterpolatorFromXml(Resources res, Theme theme, XmlPullParser parser) throws XmlPullParserException, IOException { - Interpolator interpolator = null; + BaseInterpolator interpolator = null; // Make sure we are on a start tag. int type; @@ -361,10 +361,7 @@ public class AnimationUtils { } else { throw new RuntimeException("Unknown interpolator name: " + parser.getName()); } - } - return interpolator; - } } diff --git a/core/java/android/view/animation/AnticipateInterpolator.java b/core/java/android/view/animation/AnticipateInterpolator.java index fe756bd473e13b7f5160d61d9fb86e51208e259a..fb66c312181c3c1a3641d39e67595878238e7969 100644 --- a/core/java/android/view/animation/AnticipateInterpolator.java +++ b/core/java/android/view/animation/AnticipateInterpolator.java @@ -31,7 +31,7 @@ import com.android.internal.view.animation.NativeInterpolatorFactoryHelper; * An interpolator where the change starts backward then flings forward. */ @HasNativeInterpolator -public class AnticipateInterpolator implements Interpolator, NativeInterpolatorFactory { +public class AnticipateInterpolator extends BaseInterpolator implements NativeInterpolatorFactory { private final float mTension; public AnticipateInterpolator() { @@ -60,9 +60,8 @@ public class AnticipateInterpolator implements Interpolator, NativeInterpolatorF a = res.obtainAttributes(attrs, R.styleable.AnticipateInterpolator); } - mTension = - a.getFloat(R.styleable.AnticipateInterpolator_tension, 2.0f); - + mTension = a.getFloat(R.styleable.AnticipateInterpolator_tension, 2.0f); + setChangingConfiguration(a.getChangingConfigurations()); a.recycle(); } diff --git a/core/java/android/view/animation/AnticipateOvershootInterpolator.java b/core/java/android/view/animation/AnticipateOvershootInterpolator.java index 78e5acf247a0b3d42133c9a319805180026d811c..1af72da7a3a4a1a1de0128f38bbdb621042df4e6 100644 --- a/core/java/android/view/animation/AnticipateOvershootInterpolator.java +++ b/core/java/android/view/animation/AnticipateOvershootInterpolator.java @@ -35,7 +35,8 @@ import static com.android.internal.R.styleable.AnticipateOvershootInterpolator; * the target value and finally goes back to the final value. */ @HasNativeInterpolator -public class AnticipateOvershootInterpolator implements Interpolator, NativeInterpolatorFactory { +public class AnticipateOvershootInterpolator extends BaseInterpolator + implements NativeInterpolatorFactory { private final float mTension; public AnticipateOvershootInterpolator() { @@ -78,7 +79,7 @@ public class AnticipateOvershootInterpolator implements Interpolator, NativeInte mTension = a.getFloat(AnticipateOvershootInterpolator_tension, 2.0f) * a.getFloat(AnticipateOvershootInterpolator_extraTension, 1.5f); - + setChangingConfiguration(a.getChangingConfigurations()); a.recycle(); } diff --git a/core/java/android/view/animation/BaseInterpolator.java b/core/java/android/view/animation/BaseInterpolator.java new file mode 100644 index 0000000000000000000000000000000000000000..9c0014c951c36a3353dc7d31f56b02f0d5f1288c --- /dev/null +++ b/core/java/android/view/animation/BaseInterpolator.java @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2014 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.view.animation; + +/** + * An abstract class which is extended by default interpolators. + */ +abstract public class BaseInterpolator implements Interpolator { + private int mChangingConfiguration; + /** + * @hide + */ + public int getChangingConfiguration() { + return mChangingConfiguration; + } + + /** + * @hide + */ + void setChangingConfiguration(int changingConfiguration) { + mChangingConfiguration = changingConfiguration; + } +} diff --git a/core/java/android/view/animation/BounceInterpolator.java b/core/java/android/view/animation/BounceInterpolator.java index 9d8ca901f0ad11e86132fb7b8194ce27682d3c5e..909eaa4c7c260e2ae89473105cbd3545e774786b 100644 --- a/core/java/android/view/animation/BounceInterpolator.java +++ b/core/java/android/view/animation/BounceInterpolator.java @@ -27,7 +27,7 @@ import com.android.internal.view.animation.NativeInterpolatorFactoryHelper; * An interpolator where the change bounces at the end. */ @HasNativeInterpolator -public class BounceInterpolator implements Interpolator, NativeInterpolatorFactory { +public class BounceInterpolator extends BaseInterpolator implements NativeInterpolatorFactory { public BounceInterpolator() { } diff --git a/core/java/android/view/animation/CycleInterpolator.java b/core/java/android/view/animation/CycleInterpolator.java index 3114aa3ca1d6f4b8aa2d2649d40658b5c556c628..663c1091ca2964eafd8cbf8f26bb2c2a4a5bb345 100644 --- a/core/java/android/view/animation/CycleInterpolator.java +++ b/core/java/android/view/animation/CycleInterpolator.java @@ -33,7 +33,7 @@ import com.android.internal.view.animation.NativeInterpolatorFactoryHelper; * */ @HasNativeInterpolator -public class CycleInterpolator implements Interpolator, NativeInterpolatorFactory { +public class CycleInterpolator extends BaseInterpolator implements NativeInterpolatorFactory { public CycleInterpolator(float cycles) { mCycles = cycles; } @@ -52,7 +52,7 @@ public class CycleInterpolator implements Interpolator, NativeInterpolatorFactor } mCycles = a.getFloat(R.styleable.CycleInterpolator_cycles, 1.0f); - + setChangingConfiguration(a.getChangingConfigurations()); a.recycle(); } diff --git a/core/java/android/view/animation/DecelerateInterpolator.java b/core/java/android/view/animation/DecelerateInterpolator.java index 674207ca7e00749fd462ece7207e867aaf139852..f426f60dc58148529b4eba768f8065ab71a6b8fa 100644 --- a/core/java/android/view/animation/DecelerateInterpolator.java +++ b/core/java/android/view/animation/DecelerateInterpolator.java @@ -33,7 +33,7 @@ import com.android.internal.view.animation.NativeInterpolatorFactoryHelper; * */ @HasNativeInterpolator -public class DecelerateInterpolator implements Interpolator, NativeInterpolatorFactory { +public class DecelerateInterpolator extends BaseInterpolator implements NativeInterpolatorFactory { public DecelerateInterpolator() { } @@ -62,7 +62,7 @@ public class DecelerateInterpolator implements Interpolator, NativeInterpolatorF } mFactor = a.getFloat(R.styleable.DecelerateInterpolator_factor, 1.0f); - + setChangingConfiguration(a.getChangingConfigurations()); a.recycle(); } diff --git a/core/java/android/view/animation/LinearInterpolator.java b/core/java/android/view/animation/LinearInterpolator.java index 552c6119513d7d546f10087a3ee9b63556d3417f..2a047b48cfb0bd7853b0b49d36afcad63853c121 100644 --- a/core/java/android/view/animation/LinearInterpolator.java +++ b/core/java/android/view/animation/LinearInterpolator.java @@ -25,17 +25,16 @@ import com.android.internal.view.animation.NativeInterpolatorFactoryHelper; /** * An interpolator where the rate of change is constant - * */ @HasNativeInterpolator -public class LinearInterpolator implements Interpolator, NativeInterpolatorFactory { +public class LinearInterpolator extends BaseInterpolator implements NativeInterpolatorFactory { public LinearInterpolator() { } - + public LinearInterpolator(Context context, AttributeSet attrs) { } - + public float getInterpolation(float input) { return input; } diff --git a/core/java/android/view/animation/OvershootInterpolator.java b/core/java/android/view/animation/OvershootInterpolator.java index d6c280871a99d6567e874ae73e770588750dd7d7..306688a1b10bcded12cba084f8704aca60711aad 100644 --- a/core/java/android/view/animation/OvershootInterpolator.java +++ b/core/java/android/view/animation/OvershootInterpolator.java @@ -32,7 +32,7 @@ import com.android.internal.view.animation.NativeInterpolatorFactoryHelper; * then comes back. */ @HasNativeInterpolator -public class OvershootInterpolator implements Interpolator, NativeInterpolatorFactory { +public class OvershootInterpolator extends BaseInterpolator implements NativeInterpolatorFactory { private final float mTension; public OvershootInterpolator() { @@ -61,9 +61,8 @@ public class OvershootInterpolator implements Interpolator, NativeInterpolatorFa a = res.obtainAttributes(attrs, R.styleable.OvershootInterpolator); } - mTension = - a.getFloat(R.styleable.OvershootInterpolator_tension, 2.0f); - + mTension = a.getFloat(R.styleable.OvershootInterpolator_tension, 2.0f); + setChangingConfiguration(a.getChangingConfigurations()); a.recycle(); } diff --git a/core/java/android/view/animation/PathInterpolator.java b/core/java/android/view/animation/PathInterpolator.java index 945ecf00656a3e0035952f38d7499c9d1f354758..eec5555e6d79e4920de9a6a371e1955e446f7b5f 100644 --- a/core/java/android/view/animation/PathInterpolator.java +++ b/core/java/android/view/animation/PathInterpolator.java @@ -42,7 +42,7 @@ import com.android.internal.R; * path.lineTo(1f, 1f); *

    */ -public class PathInterpolator implements Interpolator { +public class PathInterpolator extends BaseInterpolator { // This governs how accurate the approximation of the Path is. private static final float PRECISION = 0.002f; @@ -98,7 +98,7 @@ public class PathInterpolator implements Interpolator { a = res.obtainAttributes(attrs, R.styleable.PathInterpolator); } parseInterpolatorFromTypeArray(a); - + setChangingConfiguration(a.getChangingConfigurations()); a.recycle(); } diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java index 6793634ebe8a5a1c7553e644d46a49fd6e078a7e..bab1f3ba6f0ccac5b24b2ba17ee181d5e2ec7a80 100644 --- a/core/java/android/webkit/WebView.java +++ b/core/java/android/webkit/WebView.java @@ -1634,11 +1634,12 @@ public class WebView extends AbsoluteLayout * the portion of the HTML document that needs to be drawn. These * optimizations are transparent to the developers. However, under certain * circumstances, an App developer may want to disable them: - * 1. When an app uses {@link #onDraw} to do own drawing and accesses portions - * of the page that is way outside the visible portion of the page. - * 2. When an app uses {@link #capturePicture} to capture a very large HTML document. - * Note that capturePicture is a deprecated API. - * + *
      + *
    1. When an app uses {@link #onDraw} to do own drawing and accesses portions + * of the page that is way outside the visible portion of the page.
    2. + *
    3. When an app uses {@link #capturePicture} to capture a very large HTML document. + * Note that capturePicture is a deprecated API.
    4. + *
    * Enabling drawing the entire HTML document has a significant performance * cost. This method should be called before any WebViews are created. */ diff --git a/core/java/android/webkit/WebViewDelegate.java b/core/java/android/webkit/WebViewDelegate.java index a247c4610100a03a0fcaca4f7240082fc4dcc9a5..ac360fa2285160386deb4cac718aeaff5370008b 100644 --- a/core/java/android/webkit/WebViewDelegate.java +++ b/core/java/android/webkit/WebViewDelegate.java @@ -106,7 +106,7 @@ public final class WebViewDelegate { throw new IllegalArgumentException(canvas.getClass().getName() + " is not hardware accelerated"); } - ((HardwareCanvas) canvas).callDrawGLFunction(nativeDrawGLFunctor); + ((HardwareCanvas) canvas).callDrawGLFunction2(nativeDrawGLFunctor); } /** diff --git a/core/java/android/webkit/WebViewFactory.java b/core/java/android/webkit/WebViewFactory.java index 7b23d8f9d55401c3303d666601cfc94d1216210f..474ef422d0065e822f11d2311a098b3bc09200d8 100644 --- a/core/java/android/webkit/WebViewFactory.java +++ b/core/java/android/webkit/WebViewFactory.java @@ -18,8 +18,8 @@ package android.webkit; import android.annotation.SystemApi; import android.app.ActivityManagerInternal; -import android.app.Application; import android.app.AppGlobals; +import android.app.Application; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; @@ -34,14 +34,14 @@ import android.os.Trace; import android.text.TextUtils; import android.util.AndroidRuntimeException; import android.util.Log; + import com.android.server.LocalServices; + import dalvik.system.VMRuntime; import java.io.File; import java.util.Arrays; -import com.android.internal.os.Zygote; - /** * Top level factory, used creating all the main WebView implementation classes. * @@ -91,6 +91,12 @@ public final class WebViewFactory { // us honest and minimize usage of WebView internals when binding the proxy. if (sProviderInstance != null) return sProviderInstance; + final int uid = android.os.Process.myUid(); + if (uid == android.os.Process.ROOT_UID || uid == android.os.Process.SYSTEM_UID) { + throw new UnsupportedOperationException( + "For security reasons, WebView is not allowed in privileged processes"); + } + Trace.traceBegin(Trace.TRACE_TAG_WEBVIEW, "WebViewFactory.getProvider()"); try { Trace.traceBegin(Trace.TRACE_TAG_WEBVIEW, "WebViewFactory.loadNativeLibrary()"); diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java index 6a34c8028337b5372adbc1d8ef23b1ed8a4ff64d..1e269a3852b6b0b38b7a113d85dc21cb611db8ce 100644 --- a/core/java/android/widget/AbsListView.java +++ b/core/java/android/widget/AbsListView.java @@ -20,6 +20,7 @@ import android.content.Context; import android.content.Intent; import android.content.res.TypedArray; import android.graphics.Canvas; +import android.graphics.PointF; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.graphics.drawable.TransitionDrawable; @@ -611,6 +612,8 @@ public abstract class AbsListView extends AdapterView implements Te private final int[] mScrollOffset = new int[2]; private final int[] mScrollConsumed = new int[2]; + private final float[] mTmpPoint = new float[2]; + // Used for offsetting MotionEvents that we feed to the VelocityTracker. // In the future it would be nice to be able to give this to the VelocityTracker // directly, or alternatively put a VT into absolute-positioning mode that only @@ -2511,38 +2514,29 @@ public abstract class AbsListView extends AdapterView implements Te * Positions the selector in a way that mimics touch. */ void positionSelectorLikeTouch(int position, View sel, float x, float y) { - positionSelectorLikeFocus(position, sel); - - if (mSelector != null && position != INVALID_POSITION) { - mSelector.setHotspot(x, y); - } + positionSelector(position, sel, true, x, y); } /** * Positions the selector in a way that mimics keyboard focus. */ void positionSelectorLikeFocus(int position, View sel) { - // If we're changing position, update the visibility since the selector - // is technically being detached from the previous selection. - final Drawable selector = mSelector; - final boolean manageState = selector != null && mSelectorPosition != position - && position != INVALID_POSITION; - if (manageState) { - selector.setVisible(false, false); - } - - positionSelector(position, sel); - - if (manageState) { + if (mSelector != null && mSelectorPosition != position && position != INVALID_POSITION) { final Rect bounds = mSelectorRect; final float x = bounds.exactCenterX(); final float y = bounds.exactCenterY(); - selector.setVisible(getVisibility() == VISIBLE, false); - selector.setHotspot(x, y); + positionSelector(position, sel, true, x, y); + } else { + positionSelector(position, sel); } } void positionSelector(int position, View sel) { + positionSelector(position, sel, false, -1, -1); + } + + private void positionSelector(int position, View sel, boolean manageHotspot, float x, float y) { + final boolean positionChanged = position != mSelectorPosition; if (position != INVALID_POSITION) { mSelectorPosition = position; } @@ -2562,7 +2556,22 @@ public abstract class AbsListView extends AdapterView implements Te // Update the selector drawable. final Drawable selector = mSelector; if (selector != null) { + if (positionChanged) { + // Wipe out the current selector state so that we can start + // over in the new position with a fresh state. + selector.setVisible(false, false); + selector.setState(StateSet.NOTHING); + } selector.setBounds(selectorRect); + if (positionChanged) { + if (getVisibility() == VISIBLE) { + selector.setVisible(true, false); + } + updateSelectorState(); + } + if (manageHotspot) { + selector.setHotspot(x, y); + } } final boolean isChildViewEnabled = mIsChildViewEnabled; @@ -2665,7 +2674,7 @@ public abstract class AbsListView extends AdapterView implements Te * @return True if the selector should be shown */ boolean shouldShowSelector() { - return (!isInTouchMode()) || (touchModeDrawsInPressedState() && isPressed()); + return (isFocused() && !isInTouchMode()) || (touchModeDrawsInPressedState() && isPressed()); } private void drawSelector(Canvas canvas) { @@ -3200,6 +3209,12 @@ public abstract class AbsListView extends AdapterView implements Te // get the selector in the right state, but we don't want to press each child. } + @Override + public void dispatchDrawableHotspotChanged(float x, float y) { + // Don't dispatch hotspot changes to children. We'll manually handle + // calling drawableHotspotChanged on the correct child. + } + /** * Maps a point to a position in the list. * @@ -3258,6 +3273,11 @@ public abstract class AbsListView extends AdapterView implements Te mLayoutMode = LAYOUT_NORMAL; if (!mDataChanged) { + final float[] point = mTmpPoint; + point[0] = x; + point[1] = y; + transformPointToViewLocal(point, child); + child.drawableHotspotChanged(point[0], point[1]); child.setPressed(true); setPressed(true); layoutChildren(); @@ -3758,10 +3778,10 @@ public abstract class AbsListView extends AdapterView implements Te } // Otherwise, check containment within list bounds. If we're // outside bounds, cancel any active presses. + final View motionView = getChildAt(mMotionPosition - mFirstPosition); final float x = ev.getX(pointerIndex); if (!pointInView(x, y, mTouchSlop)) { setPressed(false); - final View motionView = getChildAt(mMotionPosition - mFirstPosition); if (motionView != null) { motionView.setPressed(false); } @@ -3769,6 +3789,13 @@ public abstract class AbsListView extends AdapterView implements Te mPendingCheckForTap : mPendingCheckForLongPress); mTouchMode = TOUCH_MODE_DONE_WAITING; updateSelectorState(); + } else if (motionView != null) { + // Still within bounds, update the hotspot. + final float[] point = mTmpPoint; + point[0] = x; + point[1] = y; + transformPointToViewLocal(point, motionView); + motionView.drawableHotspotChanged(point[0], point[1]); } break; case TOUCH_MODE_SCROLL: @@ -4655,7 +4682,7 @@ public abstract class AbsListView extends AdapterView implements Te if (mPositionScroller == null) { mPositionScroller = createPositionScroller(); } - mPositionScroller.startWithOffset(position, offset, offset); + mPositionScroller.startWithOffset(position, offset); } /** @@ -4912,9 +4939,7 @@ public abstract class AbsListView extends AdapterView implements Te if (position >= headerViewsCount && position < footerViewsStart) { // The view will be rebound to new data, clear any // system-managed transient state. - if (child.isAccessibilityFocused()) { - child.clearAccessibilityFocus(); - } + child.clearAccessibilityFocus(); mRecycler.addScrapView(child, position); } } @@ -4935,9 +4960,7 @@ public abstract class AbsListView extends AdapterView implements Te if (position >= headerViewsCount && position < footerViewsStart) { // The view will be rebound to new data, clear any // system-managed transient state. - if (child.isAccessibilityFocused()) { - child.clearAccessibilityFocus(); - } + child.clearAccessibilityFocus(); mRecycler.addScrapView(child, position); } } @@ -6422,6 +6445,8 @@ public abstract class AbsListView extends AdapterView implements Te // Note: We do place AdapterView.ITEM_VIEW_TYPE_IGNORE in active views. // However, we will NOT place them into scrap views. activeViews[i] = child; + // Remember the position so that setupChild() doesn't reset state. + lp.scrappedFromPosition = firstActivePosition + i; } } } @@ -6778,9 +6803,7 @@ public abstract class AbsListView extends AdapterView implements Te } private void clearAccessibilityFromScrap(View view) { - if (view.isAccessibilityFocused()) { - view.clearAccessibilityFocus(); - } + view.clearAccessibilityFocus(); view.setAccessibilityDelegate(null); } diff --git a/core/java/android/widget/AbsSeekBar.java b/core/java/android/widget/AbsSeekBar.java index 6033c42458d1226522ec8d4fd4bb9c42a1d9ecb4..a3ce808e0976a21d2a71a6dc7d3262d96478c431 100644 --- a/core/java/android/widget/AbsSeekBar.java +++ b/core/java/android/widget/AbsSeekBar.java @@ -16,7 +16,6 @@ package android.widget; -import android.animation.ObjectAnimator; import android.annotation.Nullable; import android.content.Context; import android.content.res.ColorStateList; @@ -65,9 +64,6 @@ public abstract class AbsSeekBar extends ProgressBar { * progress. */ private int mKeyProgressIncrement = 1; - private ObjectAnimator mPositionAnimator; - private static final int PROGRESS_ANIMATION_DURATION = 250; - private static final int NO_ALPHA = 0xFF; private float mDisabledAlpha; @@ -267,6 +263,12 @@ public abstract class AbsSeekBar extends ProgressBar { if (mHasThumbTintMode) { mThumb.setTintMode(mThumbTintMode); } + + // The drawable (or one of its children) may not have been + // stateful before applying the tint, so let's try again. + if (mThumb.isStateful()) { + mThumb.setState(getDrawableState()); + } } } @@ -382,14 +384,15 @@ public abstract class AbsSeekBar extends ProgressBar { void onProgressRefresh(float scale, boolean fromUser) { super.onProgressRefresh(scale, fromUser); - if (!isAnimationRunning()) { - setThumbPos(scale); - } - } + final Drawable thumb = mThumb; + if (thumb != null) { + setThumbPos(getWidth(), thumb, scale, Integer.MIN_VALUE); - @Override - void onAnimatePosition(float scale, boolean fromUser) { - setThumbPos(scale); + // Since we draw translated, the drawable's bounds that it signals + // for invalidation won't be the actual bounds we want invalidated, + // so just invalidate this whole view. + invalidate(); + } } @Override @@ -434,18 +437,6 @@ public abstract class AbsSeekBar extends ProgressBar { return max > 0 ? getProgress() / (float) max : 0; } - private void setThumbPos(float scale) { - final Drawable thumb = mThumb; - if (thumb != null) { - setThumbPos(getWidth(), thumb, scale, Integer.MIN_VALUE); - // Since we draw translated, the drawable's bounds that it signals - // for invalidation won't be the actual bounds we want invalidated, - // so just invalidate this whole view. - invalidate(); - - } - } - /** * Updates the thumb drawable bounds. * @@ -712,50 +703,18 @@ public abstract class AbsSeekBar extends ProgressBar { case KeyEvent.KEYCODE_DPAD_RIGHT: increment = isLayoutRtl() ? -increment : increment; int progress = getProgress() + increment; - if (progress > -mKeyProgressIncrement && - progress < getMax() + mKeyProgressIncrement) { - animateSetProgress(progress); + if (progress > 0 && progress < getMax()) { + setProgress(progress, true); onKeyChange(); return true; } + break; } } return super.onKeyDown(keyCode, event); } - boolean isAnimationRunning() { - return mPositionAnimator != null && mPositionAnimator.isRunning(); - } - - /** - * @hide - */ - @Override - public void setProgress(int progress, boolean fromUser) { - if (isAnimationRunning()) { - mPositionAnimator.cancel(); - } - super.setProgress(progress, fromUser); - } - - void animateSetProgress(int progress) { - float curProgress = isAnimationRunning() ? getAnimationPosition() : getProgress(); - - if (progress < 0) { - progress = 0; - } else if (progress > getMax()) { - progress = getMax(); - } - setProgressValueOnly(progress); - - mPositionAnimator = ObjectAnimator.ofFloat(this, "animationPosition", curProgress, - progress); - mPositionAnimator.setDuration(PROGRESS_ANIMATION_DURATION); - mPositionAnimator.setAutoCancel(true); - mPositionAnimator.start(); - } - @Override public void onInitializeAccessibilityEvent(AccessibilityEvent event) { super.onInitializeAccessibilityEvent(event); diff --git a/core/java/android/widget/ActionMenuPresenter.java b/core/java/android/widget/ActionMenuPresenter.java index d77912440beb8d7d50adb5394ffcfba3d5494e4c..18f15a0ababa0aa9c2e66bb87f2abbd6897603fa 100644 --- a/core/java/android/widget/ActionMenuPresenter.java +++ b/core/java/android/widget/ActionMenuPresenter.java @@ -655,15 +655,19 @@ public class ActionMenuPresenter extends BaseMenuPresenter protected boolean setFrame(int l, int t, int r, int b) { final boolean changed = super.setFrame(l, t, r, b); - // Set up the hotspot bounds to be centered on the image. + // Set up the hotspot bounds to square and centered on the image. final Drawable d = getDrawable(); final Drawable bg = getBackground(); if (d != null && bg != null) { - final float[] pts = mTempPts; - pts[0] = d.getBounds().centerX(); - getImageMatrix().mapPoints(pts); - final int offset = (int) pts[0] - getWidth() / 2; - bg.setHotspotBounds(offset, 0, getWidth() + offset, getHeight()); + final int width = getWidth(); + final int height = getHeight(); + final int halfEdge = Math.max(width, height) / 2; + final int offsetX = getPaddingLeft() - getPaddingRight(); + final int offsetY = getPaddingTop() - getPaddingBottom(); + final int centerX = (width + offsetX) / 2; + final int centerY = (height + offsetY) / 2; + bg.setHotspotBounds(centerX - halfEdge, centerY - halfEdge, + centerX + halfEdge, centerY + halfEdge); } return changed; diff --git a/core/java/android/widget/ActionMenuView.java b/core/java/android/widget/ActionMenuView.java index 7198e522f3aee03d2f99597b9e557ab12ba5be32..0a8a01f2dfe9d8c7ff93fcd6b1bffc5646513117 100644 --- a/core/java/android/widget/ActionMenuView.java +++ b/core/java/android/widget/ActionMenuView.java @@ -429,7 +429,7 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo } final int childCount = getChildCount(); - final int midVertical = (top + bottom) / 2; + final int midVertical = (bottom - top) / 2; final int dividerWidth = getDividerWidth(); int overflowWidth = 0; int nonOverflowWidth = 0; diff --git a/core/java/android/widget/AdapterView.java b/core/java/android/widget/AdapterView.java index b9f891ce71c9970963d11c37b463cc4493c3a0c0..5e2394ca834e95259f7428964adda73b00c29173 100644 --- a/core/java/android/widget/AdapterView.java +++ b/core/java/android/widget/AdapterView.java @@ -215,7 +215,12 @@ public abstract class AdapterView extends ViewGroup { private boolean mDesiredFocusableState; private boolean mDesiredFocusableInTouchModeState; + /** Lazily-constructed runnable for dispatching selection events. */ private SelectionNotifier mSelectionNotifier; + + /** Selection notifier that's waiting for the next layout pass. */ + private SelectionNotifier mPendingSelectionNotifier; + /** * When set to true, calls to requestLayout() will not propagate up the parent hierarchy. * This is used to layout the children during a layout pass. @@ -854,39 +859,51 @@ public abstract class AdapterView extends ViewGroup { private class SelectionNotifier implements Runnable { public void run() { - if (mDataChanged) { - // Data has changed between when this SelectionNotifier - // was posted and now. We need to wait until the AdapterView - // has been synched to the new data. + mPendingSelectionNotifier = null; + + if (mDataChanged && getViewRootImpl() != null + && getViewRootImpl().isLayoutRequested()) { + // Data has changed between when this SelectionNotifier was + // posted and now. Postpone the notification until the next + // layout is complete and we run checkSelectionChanged(). if (getAdapter() != null) { - post(this); + mPendingSelectionNotifier = this; } } else { - fireOnSelected(); - performAccessibilityActionsOnSelected(); + dispatchOnItemSelected(); } } } void selectionChanged() { + // We're about to post or run the selection notifier, so we don't need + // a pending notifier. + mPendingSelectionNotifier = null; + if (mOnItemSelectedListener != null || AccessibilityManager.getInstance(mContext).isEnabled()) { if (mInLayout || mBlockLayoutRequests) { // If we are in a layout traversal, defer notification // by posting. This ensures that the view tree is - // in a consistent state and is able to accomodate + // in a consistent state and is able to accommodate // new layout or invalidate requests. if (mSelectionNotifier == null) { mSelectionNotifier = new SelectionNotifier(); + } else { + removeCallbacks(mSelectionNotifier); } post(mSelectionNotifier); } else { - fireOnSelected(); - performAccessibilityActionsOnSelected(); + dispatchOnItemSelected(); } } } + private void dispatchOnItemSelected() { + fireOnSelected(); + performAccessibilityActionsOnSelected(); + } + private void fireOnSelected() { if (mOnItemSelectedListener == null) { return; @@ -1042,12 +1059,22 @@ public abstract class AdapterView extends ViewGroup { notifySubtreeAccessibilityStateChangedIfNeeded(); } + /** + * Called after layout to determine whether the selection position needs to + * be updated. Also used to fire any pending selection events. + */ void checkSelectionChanged() { if ((mSelectedPosition != mOldSelectedPosition) || (mSelectedRowId != mOldSelectedRowId)) { selectionChanged(); mOldSelectedPosition = mSelectedPosition; mOldSelectedRowId = mSelectedRowId; } + + // If we have a pending selection notification -- and we won't if we + // just fired one in selectionChanged() -- run it now. + if (mPendingSelectionNotifier != null) { + mPendingSelectionNotifier.run(); + } } /** diff --git a/core/java/android/widget/AppSecurityPermissions.java b/core/java/android/widget/AppSecurityPermissions.java index 10e56c74f979a95219187026773ebb9af86f5da2..5c05b5a3d3678799d078024fc5389807b98a07ff 100644 --- a/core/java/android/widget/AppSecurityPermissions.java +++ b/core/java/android/widget/AppSecurityPermissions.java @@ -99,12 +99,12 @@ public class AppSecurityPermissions { public Drawable loadGroupIcon(PackageManager pm) { if (icon != 0) { - return loadIcon(pm); + return loadUnbadgedIcon(pm); } else { ApplicationInfo appInfo; try { appInfo = pm.getApplicationInfo(packageName, 0); - return appInfo.loadIcon(pm); + return appInfo.loadUnbadgedIcon(pm); } catch (NameNotFoundException e) { } } diff --git a/core/java/android/widget/AutoCompleteTextView.java b/core/java/android/widget/AutoCompleteTextView.java index 3b16aba010e04b2a8153462fae36e4498a1eebc2..e6392b9d3a759733e38c0a41dd1ffb6bbd68971d 100644 --- a/core/java/android/widget/AutoCompleteTextView.java +++ b/core/java/android/widget/AutoCompleteTextView.java @@ -1005,6 +1005,12 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe @Override protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) { super.onFocusChanged(focused, direction, previouslyFocusedRect); + + if (mTemporaryDetach) { + // If we are temporarily in the detach state, then do nothing. + return; + } + // Perform validation if the view is losing focus. if (!focused) { performValidation(); diff --git a/core/java/android/widget/CalendarView.java b/core/java/android/widget/CalendarView.java index ea60abbfb14405331dce5dc5fd82f8d0c103cf32..ed59ea6a8508b975c2022639ddd4ff383066f36d 100644 --- a/core/java/android/widget/CalendarView.java +++ b/core/java/android/widget/CalendarView.java @@ -17,42 +17,24 @@ package android.widget; import android.annotation.Widget; -import android.app.Service; import android.content.Context; import android.content.res.Configuration; import android.content.res.TypedArray; -import android.database.DataSetObserver; -import android.graphics.Canvas; -import android.graphics.Paint; -import android.graphics.Paint.Align; -import android.graphics.Paint.Style; -import android.graphics.Rect; import android.graphics.drawable.Drawable; -import android.text.TextUtils; -import android.text.format.DateUtils; import android.util.AttributeSet; -import android.util.DisplayMetrics; import android.util.Log; -import android.util.TypedValue; -import android.view.GestureDetector; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.view.ViewGroup; import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityNodeInfo; -import android.widget.AbsListView.OnScrollListener; import com.android.internal.R; +import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Locale; import java.util.TimeZone; -import libcore.icu.LocaleData; - /** * This class is a calendar widget for displaying and selecting dates. The range * of dates supported by this calendar is configurable. A user can select a date @@ -74,13 +56,12 @@ import libcore.icu.LocaleData; */ @Widget public class CalendarView extends FrameLayout { + private static final String LOG_TAG = "CalendarView"; - /** - * Tag for logging. - */ - private static final String LOG_TAG = CalendarView.class.getSimpleName(); + private static final int MODE_HOLO = 0; + private static final int MODE_MATERIAL = 1; - private CalendarViewDelegate mDelegate; + private final CalendarViewDelegate mDelegate; /** * The callback used to indicate the user changes the date. @@ -113,7 +94,23 @@ public class CalendarView extends FrameLayout { public CalendarView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); - mDelegate = new LegacyCalendarViewDelegate(this, context, attrs, defStyleAttr, defStyleRes); + final TypedArray a = context.obtainStyledAttributes( + attrs, R.styleable.CalendarView, defStyleAttr, defStyleRes); + final int mode = a.getInt(R.styleable.CalendarView_calendarViewMode, MODE_HOLO); + a.recycle(); + + switch (mode) { + case MODE_HOLO: + mDelegate = new CalendarViewLegacyDelegate( + this, context, attrs, defStyleAttr, defStyleRes); + break; + case MODE_MATERIAL: + mDelegate = new CalendarViewMaterialDelegate( + this, context, attrs, defStyleAttr, defStyleRes); + break; + default: + throw new IllegalArgumentException("invalid calendarViewMode attribute"); + } } /** @@ -326,16 +323,6 @@ public class CalendarView extends FrameLayout { return mDelegate.getDateTextAppearance(); } - @Override - public void setEnabled(boolean enabled) { - mDelegate.setEnabled(enabled); - } - - @Override - public boolean isEnabled() { - return mDelegate.isEnabled(); - } - /** * Gets the minimal date supported by this {@link CalendarView} in milliseconds * since January 1, 1970 00:00:00 in {@link TimeZone#getDefault()} time @@ -516,14 +503,12 @@ public class CalendarView extends FrameLayout { @Override public void onInitializeAccessibilityEvent(AccessibilityEvent event) { - super.onInitializeAccessibilityEvent(event); - mDelegate.onInitializeAccessibilityEvent(event); + event.setClassName(CalendarView.class.getName()); } @Override public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) { - super.onInitializeAccessibilityNodeInfo(info); - mDelegate.onInitializeAccessibilityNodeInfo(info); + info.setClassName(CalendarView.class.getName()); } /** @@ -560,9 +545,6 @@ public class CalendarView extends FrameLayout { void setDateTextAppearance(int resourceId); int getDateTextAppearance(); - void setEnabled(boolean enabled); - boolean isEnabled(); - void setMinDate(long minDate); long getMinDate(); @@ -582,21 +564,26 @@ public class CalendarView extends FrameLayout { void setOnDateChangeListener(OnDateChangeListener listener); void onConfigurationChanged(Configuration newConfig); - void onInitializeAccessibilityEvent(AccessibilityEvent event); - void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info); } /** * An abstract class which can be used as a start for CalendarView implementations */ abstract static class AbstractCalendarViewDelegate implements CalendarViewDelegate { - // The delegator - protected CalendarView mDelegator; + /** String for parsing dates. */ + private static final String DATE_FORMAT = "MM/dd/yyyy"; - // The context - protected Context mContext; + /** The default minimal date. */ + protected static final String DEFAULT_MIN_DATE = "01/01/1900"; + + /** The default maximal date. */ + protected static final String DEFAULT_MAX_DATE = "01/01/2100"; - // The current locale + /** Date format for parsing dates. */ + protected static final DateFormat DATE_FORMATTER = new SimpleDateFormat(DATE_FORMAT); + + protected CalendarView mDelegator; + protected Context mContext; protected Locale mCurrentLocale; AbstractCalendarViewDelegate(CalendarView delegator, Context context) { @@ -613,821 +600,6 @@ public class CalendarView extends FrameLayout { } mCurrentLocale = locale; } - } - - /** - * A delegate implementing the legacy CalendarView - */ - private static class LegacyCalendarViewDelegate extends AbstractCalendarViewDelegate { - - /** - * Default value whether to show week number. - */ - private static final boolean DEFAULT_SHOW_WEEK_NUMBER = true; - - /** - * The number of milliseconds in a day.e - */ - private static final long MILLIS_IN_DAY = 86400000L; - - /** - * The number of day in a week. - */ - private static final int DAYS_PER_WEEK = 7; - - /** - * The number of milliseconds in a week. - */ - private static final long MILLIS_IN_WEEK = DAYS_PER_WEEK * MILLIS_IN_DAY; - - /** - * Affects when the month selection will change while scrolling upe - */ - private static final int SCROLL_HYST_WEEKS = 2; - - /** - * How long the GoTo fling animation should last. - */ - private static final int GOTO_SCROLL_DURATION = 1000; - - /** - * The duration of the adjustment upon a user scroll in milliseconds. - */ - private static final int ADJUSTMENT_SCROLL_DURATION = 500; - - /** - * How long to wait after receiving an onScrollStateChanged notification - * before acting on it. - */ - private static final int SCROLL_CHANGE_DELAY = 40; - - /** - * String for parsing dates. - */ - private static final String DATE_FORMAT = "MM/dd/yyyy"; - - /** - * The default minimal date. - */ - private static final String DEFAULT_MIN_DATE = "01/01/1900"; - - /** - * The default maximal date. - */ - private static final String DEFAULT_MAX_DATE = "01/01/2100"; - - private static final int DEFAULT_SHOWN_WEEK_COUNT = 6; - - private static final int DEFAULT_DATE_TEXT_SIZE = 14; - - private static final int UNSCALED_SELECTED_DATE_VERTICAL_BAR_WIDTH = 6; - - private static final int UNSCALED_WEEK_MIN_VISIBLE_HEIGHT = 12; - - private static final int UNSCALED_LIST_SCROLL_TOP_OFFSET = 2; - - private static final int UNSCALED_BOTTOM_BUFFER = 20; - - private static final int UNSCALED_WEEK_SEPARATOR_LINE_WIDTH = 1; - - private static final int DEFAULT_WEEK_DAY_TEXT_APPEARANCE_RES_ID = -1; - - private final int mWeekSeperatorLineWidth; - - private int mDateTextSize; - - private Drawable mSelectedDateVerticalBar; - - private final int mSelectedDateVerticalBarWidth; - - private int mSelectedWeekBackgroundColor; - - private int mFocusedMonthDateColor; - - private int mUnfocusedMonthDateColor; - - private int mWeekSeparatorLineColor; - - private int mWeekNumberColor; - - private int mWeekDayTextAppearanceResId; - - private int mDateTextAppearanceResId; - - /** - * The top offset of the weeks list. - */ - private int mListScrollTopOffset = 2; - - /** - * The visible height of a week view. - */ - private int mWeekMinVisibleHeight = 12; - - /** - * The visible height of a week view. - */ - private int mBottomBuffer = 20; - - /** - * The number of shown weeks. - */ - private int mShownWeekCount; - - /** - * Flag whether to show the week number. - */ - private boolean mShowWeekNumber; - - /** - * The number of day per week to be shown. - */ - private int mDaysPerWeek = 7; - - /** - * The friction of the week list while flinging. - */ - private float mFriction = .05f; - - /** - * Scale for adjusting velocity of the week list while flinging. - */ - private float mVelocityScale = 0.333f; - - /** - * The adapter for the weeks list. - */ - private WeeksAdapter mAdapter; - - /** - * The weeks list. - */ - private ListView mListView; - - /** - * The name of the month to display. - */ - private TextView mMonthName; - - /** - * The header with week day names. - */ - private ViewGroup mDayNamesHeader; - - /** - * Cached labels for the week names header. - */ - private String[] mDayLabels; - - /** - * The first day of the week. - */ - private int mFirstDayOfWeek; - - /** - * Which month should be displayed/highlighted [0-11]. - */ - private int mCurrentMonthDisplayed = -1; - - /** - * Used for tracking during a scroll. - */ - private long mPreviousScrollPosition; - - /** - * Used for tracking which direction the view is scrolling. - */ - private boolean mIsScrollingUp = false; - - /** - * The previous scroll state of the weeks ListView. - */ - private int mPreviousScrollState = OnScrollListener.SCROLL_STATE_IDLE; - - /** - * The current scroll state of the weeks ListView. - */ - private int mCurrentScrollState = OnScrollListener.SCROLL_STATE_IDLE; - - /** - * Listener for changes in the selected day. - */ - private OnDateChangeListener mOnDateChangeListener; - - /** - * Command for adjusting the position after a scroll/fling. - */ - private ScrollStateRunnable mScrollStateChangedRunnable = new ScrollStateRunnable(); - - /** - * Temporary instance to avoid multiple instantiations. - */ - private Calendar mTempDate; - - /** - * The first day of the focused month. - */ - private Calendar mFirstDayOfMonth; - - /** - * The start date of the range supported by this picker. - */ - private Calendar mMinDate; - - /** - * The end date of the range supported by this picker. - */ - private Calendar mMaxDate; - - /** - * Date format for parsing dates. - */ - private final java.text.DateFormat mDateFormat = new SimpleDateFormat(DATE_FORMAT); - - LegacyCalendarViewDelegate(CalendarView delegator, Context context, AttributeSet attrs, - int defStyleAttr, int defStyleRes) { - super(delegator, context); - - // initialization based on locale - setCurrentLocale(Locale.getDefault()); - - TypedArray attributesArray = context.obtainStyledAttributes(attrs, - R.styleable.CalendarView, defStyleAttr, defStyleRes); - mShowWeekNumber = attributesArray.getBoolean(R.styleable.CalendarView_showWeekNumber, - DEFAULT_SHOW_WEEK_NUMBER); - mFirstDayOfWeek = attributesArray.getInt(R.styleable.CalendarView_firstDayOfWeek, - LocaleData.get(Locale.getDefault()).firstDayOfWeek); - String minDate = attributesArray.getString(R.styleable.CalendarView_minDate); - if (TextUtils.isEmpty(minDate) || !parseDate(minDate, mMinDate)) { - parseDate(DEFAULT_MIN_DATE, mMinDate); - } - String maxDate = attributesArray.getString(R.styleable.CalendarView_maxDate); - if (TextUtils.isEmpty(maxDate) || !parseDate(maxDate, mMaxDate)) { - parseDate(DEFAULT_MAX_DATE, mMaxDate); - } - if (mMaxDate.before(mMinDate)) { - throw new IllegalArgumentException("Max date cannot be before min date."); - } - mShownWeekCount = attributesArray.getInt(R.styleable.CalendarView_shownWeekCount, - DEFAULT_SHOWN_WEEK_COUNT); - mSelectedWeekBackgroundColor = attributesArray.getColor( - R.styleable.CalendarView_selectedWeekBackgroundColor, 0); - mFocusedMonthDateColor = attributesArray.getColor( - R.styleable.CalendarView_focusedMonthDateColor, 0); - mUnfocusedMonthDateColor = attributesArray.getColor( - R.styleable.CalendarView_unfocusedMonthDateColor, 0); - mWeekSeparatorLineColor = attributesArray.getColor( - R.styleable.CalendarView_weekSeparatorLineColor, 0); - mWeekNumberColor = attributesArray.getColor(R.styleable.CalendarView_weekNumberColor, 0); - mSelectedDateVerticalBar = attributesArray.getDrawable( - R.styleable.CalendarView_selectedDateVerticalBar); - - mDateTextAppearanceResId = attributesArray.getResourceId( - R.styleable.CalendarView_dateTextAppearance, R.style.TextAppearance_Small); - updateDateTextSize(); - - mWeekDayTextAppearanceResId = attributesArray.getResourceId( - R.styleable.CalendarView_weekDayTextAppearance, - DEFAULT_WEEK_DAY_TEXT_APPEARANCE_RES_ID); - attributesArray.recycle(); - - DisplayMetrics displayMetrics = mDelegator.getResources().getDisplayMetrics(); - mWeekMinVisibleHeight = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, - UNSCALED_WEEK_MIN_VISIBLE_HEIGHT, displayMetrics); - mListScrollTopOffset = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, - UNSCALED_LIST_SCROLL_TOP_OFFSET, displayMetrics); - mBottomBuffer = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, - UNSCALED_BOTTOM_BUFFER, displayMetrics); - mSelectedDateVerticalBarWidth = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, - UNSCALED_SELECTED_DATE_VERTICAL_BAR_WIDTH, displayMetrics); - mWeekSeperatorLineWidth = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, - UNSCALED_WEEK_SEPARATOR_LINE_WIDTH, displayMetrics); - - LayoutInflater layoutInflater = (LayoutInflater) mContext - .getSystemService(Service.LAYOUT_INFLATER_SERVICE); - View content = layoutInflater.inflate(R.layout.calendar_view, null, false); - mDelegator.addView(content); - - mListView = (ListView) mDelegator.findViewById(R.id.list); - mDayNamesHeader = (ViewGroup) content.findViewById(com.android.internal.R.id.day_names); - mMonthName = (TextView) content.findViewById(com.android.internal.R.id.month_name); - - setUpHeader(); - setUpListView(); - setUpAdapter(); - - // go to today or whichever is close to today min or max date - mTempDate.setTimeInMillis(System.currentTimeMillis()); - if (mTempDate.before(mMinDate)) { - goTo(mMinDate, false, true, true); - } else if (mMaxDate.before(mTempDate)) { - goTo(mMaxDate, false, true, true); - } else { - goTo(mTempDate, false, true, true); - } - - mDelegator.invalidate(); - } - - @Override - public void setShownWeekCount(int count) { - if (mShownWeekCount != count) { - mShownWeekCount = count; - mDelegator.invalidate(); - } - } - - @Override - public int getShownWeekCount() { - return mShownWeekCount; - } - - @Override - public void setSelectedWeekBackgroundColor(int color) { - if (mSelectedWeekBackgroundColor != color) { - mSelectedWeekBackgroundColor = color; - final int childCount = mListView.getChildCount(); - for (int i = 0; i < childCount; i++) { - WeekView weekView = (WeekView) mListView.getChildAt(i); - if (weekView.mHasSelectedDay) { - weekView.invalidate(); - } - } - } - } - - @Override - public int getSelectedWeekBackgroundColor() { - return mSelectedWeekBackgroundColor; - } - - @Override - public void setFocusedMonthDateColor(int color) { - if (mFocusedMonthDateColor != color) { - mFocusedMonthDateColor = color; - final int childCount = mListView.getChildCount(); - for (int i = 0; i < childCount; i++) { - WeekView weekView = (WeekView) mListView.getChildAt(i); - if (weekView.mHasFocusedDay) { - weekView.invalidate(); - } - } - } - } - - @Override - public int getFocusedMonthDateColor() { - return mFocusedMonthDateColor; - } - - @Override - public void setUnfocusedMonthDateColor(int color) { - if (mUnfocusedMonthDateColor != color) { - mUnfocusedMonthDateColor = color; - final int childCount = mListView.getChildCount(); - for (int i = 0; i < childCount; i++) { - WeekView weekView = (WeekView) mListView.getChildAt(i); - if (weekView.mHasUnfocusedDay) { - weekView.invalidate(); - } - } - } - } - - @Override - public int getUnfocusedMonthDateColor() { - return mFocusedMonthDateColor; - } - - @Override - public void setWeekNumberColor(int color) { - if (mWeekNumberColor != color) { - mWeekNumberColor = color; - if (mShowWeekNumber) { - invalidateAllWeekViews(); - } - } - } - - @Override - public int getWeekNumberColor() { - return mWeekNumberColor; - } - - @Override - public void setWeekSeparatorLineColor(int color) { - if (mWeekSeparatorLineColor != color) { - mWeekSeparatorLineColor = color; - invalidateAllWeekViews(); - } - } - - @Override - public int getWeekSeparatorLineColor() { - return mWeekSeparatorLineColor; - } - - @Override - public void setSelectedDateVerticalBar(int resourceId) { - Drawable drawable = mDelegator.getContext().getDrawable(resourceId); - setSelectedDateVerticalBar(drawable); - } - - @Override - public void setSelectedDateVerticalBar(Drawable drawable) { - if (mSelectedDateVerticalBar != drawable) { - mSelectedDateVerticalBar = drawable; - final int childCount = mListView.getChildCount(); - for (int i = 0; i < childCount; i++) { - WeekView weekView = (WeekView) mListView.getChildAt(i); - if (weekView.mHasSelectedDay) { - weekView.invalidate(); - } - } - } - } - - @Override - public Drawable getSelectedDateVerticalBar() { - return mSelectedDateVerticalBar; - } - - @Override - public void setWeekDayTextAppearance(int resourceId) { - if (mWeekDayTextAppearanceResId != resourceId) { - mWeekDayTextAppearanceResId = resourceId; - setUpHeader(); - } - } - - @Override - public int getWeekDayTextAppearance() { - return mWeekDayTextAppearanceResId; - } - - @Override - public void setDateTextAppearance(int resourceId) { - if (mDateTextAppearanceResId != resourceId) { - mDateTextAppearanceResId = resourceId; - updateDateTextSize(); - invalidateAllWeekViews(); - } - } - - @Override - public int getDateTextAppearance() { - return mDateTextAppearanceResId; - } - - @Override - public void setEnabled(boolean enabled) { - mListView.setEnabled(enabled); - } - - @Override - public boolean isEnabled() { - return mListView.isEnabled(); - } - - @Override - public void setMinDate(long minDate) { - mTempDate.setTimeInMillis(minDate); - if (isSameDate(mTempDate, mMinDate)) { - return; - } - mMinDate.setTimeInMillis(minDate); - // make sure the current date is not earlier than - // the new min date since the latter is used for - // calculating the indices in the adapter thus - // avoiding out of bounds error - Calendar date = mAdapter.mSelectedDate; - if (date.before(mMinDate)) { - mAdapter.setSelectedDay(mMinDate); - } - // reinitialize the adapter since its range depends on min date - mAdapter.init(); - if (date.before(mMinDate)) { - setDate(mTempDate.getTimeInMillis()); - } else { - // we go to the current date to force the ListView to query its - // adapter for the shown views since we have changed the adapter - // range and the base from which the later calculates item indices - // note that calling setDate will not work since the date is the same - goTo(date, false, true, false); - } - } - - @Override - public long getMinDate() { - return mMinDate.getTimeInMillis(); - } - - @Override - public void setMaxDate(long maxDate) { - mTempDate.setTimeInMillis(maxDate); - if (isSameDate(mTempDate, mMaxDate)) { - return; - } - mMaxDate.setTimeInMillis(maxDate); - // reinitialize the adapter since its range depends on max date - mAdapter.init(); - Calendar date = mAdapter.mSelectedDate; - if (date.after(mMaxDate)) { - setDate(mMaxDate.getTimeInMillis()); - } else { - // we go to the current date to force the ListView to query its - // adapter for the shown views since we have changed the adapter - // range and the base from which the later calculates item indices - // note that calling setDate will not work since the date is the same - goTo(date, false, true, false); - } - } - - @Override - public long getMaxDate() { - return mMaxDate.getTimeInMillis(); - } - - @Override - public void setShowWeekNumber(boolean showWeekNumber) { - if (mShowWeekNumber == showWeekNumber) { - return; - } - mShowWeekNumber = showWeekNumber; - mAdapter.notifyDataSetChanged(); - setUpHeader(); - } - - @Override - public boolean getShowWeekNumber() { - return mShowWeekNumber; - } - - @Override - public void setFirstDayOfWeek(int firstDayOfWeek) { - if (mFirstDayOfWeek == firstDayOfWeek) { - return; - } - mFirstDayOfWeek = firstDayOfWeek; - mAdapter.init(); - mAdapter.notifyDataSetChanged(); - setUpHeader(); - } - - @Override - public int getFirstDayOfWeek() { - return mFirstDayOfWeek; - } - - @Override - public void setDate(long date) { - setDate(date, false, false); - } - - @Override - public void setDate(long date, boolean animate, boolean center) { - mTempDate.setTimeInMillis(date); - if (isSameDate(mTempDate, mAdapter.mSelectedDate)) { - return; - } - goTo(mTempDate, animate, true, center); - } - - @Override - public long getDate() { - return mAdapter.mSelectedDate.getTimeInMillis(); - } - - @Override - public void setOnDateChangeListener(OnDateChangeListener listener) { - mOnDateChangeListener = listener; - } - - @Override - public void onConfigurationChanged(Configuration newConfig) { - setCurrentLocale(newConfig.locale); - } - - @Override - public void onInitializeAccessibilityEvent(AccessibilityEvent event) { - event.setClassName(CalendarView.class.getName()); - } - - @Override - public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) { - info.setClassName(CalendarView.class.getName()); - } - - /** - * Sets the current locale. - * - * @param locale The current locale. - */ - @Override - protected void setCurrentLocale(Locale locale) { - super.setCurrentLocale(locale); - - mTempDate = getCalendarForLocale(mTempDate, locale); - mFirstDayOfMonth = getCalendarForLocale(mFirstDayOfMonth, locale); - mMinDate = getCalendarForLocale(mMinDate, locale); - mMaxDate = getCalendarForLocale(mMaxDate, locale); - } - private void updateDateTextSize() { - TypedArray dateTextAppearance = mDelegator.getContext().obtainStyledAttributes( - mDateTextAppearanceResId, R.styleable.TextAppearance); - mDateTextSize = dateTextAppearance.getDimensionPixelSize( - R.styleable.TextAppearance_textSize, DEFAULT_DATE_TEXT_SIZE); - dateTextAppearance.recycle(); - } - - /** - * Invalidates all week views. - */ - private void invalidateAllWeekViews() { - final int childCount = mListView.getChildCount(); - for (int i = 0; i < childCount; i++) { - View view = mListView.getChildAt(i); - view.invalidate(); - } - } - - /** - * Gets a calendar for locale bootstrapped with the value of a given calendar. - * - * @param oldCalendar The old calendar. - * @param locale The locale. - */ - private static Calendar getCalendarForLocale(Calendar oldCalendar, Locale locale) { - if (oldCalendar == null) { - return Calendar.getInstance(locale); - } else { - final long currentTimeMillis = oldCalendar.getTimeInMillis(); - Calendar newCalendar = Calendar.getInstance(locale); - newCalendar.setTimeInMillis(currentTimeMillis); - return newCalendar; - } - } - - /** - * @return True if the firstDate is the same as the - * secondDate. - */ - private static boolean isSameDate(Calendar firstDate, Calendar secondDate) { - return (firstDate.get(Calendar.DAY_OF_YEAR) == secondDate.get(Calendar.DAY_OF_YEAR) - && firstDate.get(Calendar.YEAR) == secondDate.get(Calendar.YEAR)); - } - - /** - * Creates a new adapter if necessary and sets up its parameters. - */ - private void setUpAdapter() { - if (mAdapter == null) { - mAdapter = new WeeksAdapter(mContext); - mAdapter.registerDataSetObserver(new DataSetObserver() { - @Override - public void onChanged() { - if (mOnDateChangeListener != null) { - Calendar selectedDay = mAdapter.getSelectedDay(); - mOnDateChangeListener.onSelectedDayChange(mDelegator, - selectedDay.get(Calendar.YEAR), - selectedDay.get(Calendar.MONTH), - selectedDay.get(Calendar.DAY_OF_MONTH)); - } - } - }); - mListView.setAdapter(mAdapter); - } - - // refresh the view with the new parameters - mAdapter.notifyDataSetChanged(); - } - - /** - * Sets up the strings to be used by the header. - */ - private void setUpHeader() { - mDayLabels = new String[mDaysPerWeek]; - for (int i = mFirstDayOfWeek, count = mFirstDayOfWeek + mDaysPerWeek; i < count; i++) { - int calendarDay = (i > Calendar.SATURDAY) ? i - Calendar.SATURDAY : i; - mDayLabels[i - mFirstDayOfWeek] = DateUtils.getDayOfWeekString(calendarDay, - DateUtils.LENGTH_SHORTEST); - } - - TextView label = (TextView) mDayNamesHeader.getChildAt(0); - if (mShowWeekNumber) { - label.setVisibility(View.VISIBLE); - } else { - label.setVisibility(View.GONE); - } - for (int i = 1, count = mDayNamesHeader.getChildCount(); i < count; i++) { - label = (TextView) mDayNamesHeader.getChildAt(i); - if (mWeekDayTextAppearanceResId > -1) { - label.setTextAppearance(mContext, mWeekDayTextAppearanceResId); - } - if (i < mDaysPerWeek + 1) { - label.setText(mDayLabels[i - 1]); - label.setVisibility(View.VISIBLE); - } else { - label.setVisibility(View.GONE); - } - } - mDayNamesHeader.invalidate(); - } - - /** - * Sets all the required fields for the list view. - */ - private void setUpListView() { - // Configure the listview - mListView.setDivider(null); - mListView.setItemsCanFocus(true); - mListView.setVerticalScrollBarEnabled(false); - mListView.setOnScrollListener(new OnScrollListener() { - public void onScrollStateChanged(AbsListView view, int scrollState) { - LegacyCalendarViewDelegate.this.onScrollStateChanged(view, scrollState); - } - - public void onScroll( - AbsListView view, int firstVisibleItem, int visibleItemCount, - int totalItemCount) { - LegacyCalendarViewDelegate.this.onScroll(view, firstVisibleItem, - visibleItemCount, totalItemCount); - } - }); - // Make the scrolling behavior nicer - mListView.setFriction(mFriction); - mListView.setVelocityScale(mVelocityScale); - } - - /** - * This moves to the specified time in the view. If the time is not already - * in range it will move the list so that the first of the month containing - * the time is at the top of the view. If the new time is already in view - * the list will not be scrolled unless forceScroll is true. This time may - * optionally be highlighted as selected as well. - * - * @param date The time to move to. - * @param animate Whether to scroll to the given time or just redraw at the - * new location. - * @param setSelected Whether to set the given time as selected. - * @param forceScroll Whether to recenter even if the time is already - * visible. - * - * @throws IllegalArgumentException of the provided date is before the - * range start of after the range end. - */ - private void goTo(Calendar date, boolean animate, boolean setSelected, - boolean forceScroll) { - if (date.before(mMinDate) || date.after(mMaxDate)) { - throw new IllegalArgumentException("Time not between " + mMinDate.getTime() - + " and " + mMaxDate.getTime()); - } - // Find the first and last entirely visible weeks - int firstFullyVisiblePosition = mListView.getFirstVisiblePosition(); - View firstChild = mListView.getChildAt(0); - if (firstChild != null && firstChild.getTop() < 0) { - firstFullyVisiblePosition++; - } - int lastFullyVisiblePosition = firstFullyVisiblePosition + mShownWeekCount - 1; - if (firstChild != null && firstChild.getTop() > mBottomBuffer) { - lastFullyVisiblePosition--; - } - if (setSelected) { - mAdapter.setSelectedDay(date); - } - // Get the week we're going to - int position = getWeeksSinceMinDate(date); - - // Check if the selected day is now outside of our visible range - // and if so scroll to the month that contains it - if (position < firstFullyVisiblePosition || position > lastFullyVisiblePosition - || forceScroll) { - mFirstDayOfMonth.setTimeInMillis(date.getTimeInMillis()); - mFirstDayOfMonth.set(Calendar.DAY_OF_MONTH, 1); - - setMonthDisplayed(mFirstDayOfMonth); - - // the earliest time we can scroll to is the min date - if (mFirstDayOfMonth.before(mMinDate)) { - position = 0; - } else { - position = getWeeksSinceMinDate(mFirstDayOfMonth); - } - - mPreviousScrollState = OnScrollListener.SCROLL_STATE_FLING; - if (animate) { - mListView.smoothScrollToPositionFromTop(position, mListScrollTopOffset, - GOTO_SCROLL_DURATION); - } else { - mListView.setSelectionFromTop(position, mListScrollTopOffset); - // Perform any after scroll operations that are needed - onScrollStateChanged(mListView, OnScrollListener.SCROLL_STATE_IDLE); - } - } else if (setSelected) { - // Otherwise just set the selection - setMonthDisplayed(date); - } - } /** * Parses the given date and in case of success sets @@ -1435,718 +607,15 @@ public class CalendarView extends FrameLayout { * * @return True if the date was parsed. */ - private boolean parseDate(String date, Calendar outDate) { + protected boolean parseDate(String date, Calendar outDate) { try { - outDate.setTime(mDateFormat.parse(date)); + outDate.setTime(DATE_FORMATTER.parse(date)); return true; } catch (ParseException e) { Log.w(LOG_TAG, "Date: " + date + " not in format: " + DATE_FORMAT); return false; } } - - /** - * Called when a view transitions to a new scrollState - * . - */ - private void onScrollStateChanged(AbsListView view, int scrollState) { - mScrollStateChangedRunnable.doScrollStateChange(view, scrollState); - } - - /** - * Updates the title and selected month if the view has moved to a new - * month. - */ - private void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, - int totalItemCount) { - WeekView child = (WeekView) view.getChildAt(0); - if (child == null) { - return; - } - - // Figure out where we are - long currScroll = - view.getFirstVisiblePosition() * child.getHeight() - child.getBottom(); - - // If we have moved since our last call update the direction - if (currScroll < mPreviousScrollPosition) { - mIsScrollingUp = true; - } else if (currScroll > mPreviousScrollPosition) { - mIsScrollingUp = false; - } else { - return; - } - - // Use some hysteresis for checking which month to highlight. This - // causes the month to transition when two full weeks of a month are - // visible when scrolling up, and when the first day in a month reaches - // the top of the screen when scrolling down. - int offset = child.getBottom() < mWeekMinVisibleHeight ? 1 : 0; - if (mIsScrollingUp) { - child = (WeekView) view.getChildAt(SCROLL_HYST_WEEKS + offset); - } else if (offset != 0) { - child = (WeekView) view.getChildAt(offset); - } - - if (child != null) { - // Find out which month we're moving into - int month; - if (mIsScrollingUp) { - month = child.getMonthOfFirstWeekDay(); - } else { - month = child.getMonthOfLastWeekDay(); - } - - // And how it relates to our current highlighted month - int monthDiff; - if (mCurrentMonthDisplayed == 11 && month == 0) { - monthDiff = 1; - } else if (mCurrentMonthDisplayed == 0 && month == 11) { - monthDiff = -1; - } else { - monthDiff = month - mCurrentMonthDisplayed; - } - - // Only switch months if we're scrolling away from the currently - // selected month - if ((!mIsScrollingUp && monthDiff > 0) || (mIsScrollingUp && monthDiff < 0)) { - Calendar firstDay = child.getFirstDay(); - if (mIsScrollingUp) { - firstDay.add(Calendar.DAY_OF_MONTH, -DAYS_PER_WEEK); - } else { - firstDay.add(Calendar.DAY_OF_MONTH, DAYS_PER_WEEK); - } - setMonthDisplayed(firstDay); - } - } - mPreviousScrollPosition = currScroll; - mPreviousScrollState = mCurrentScrollState; - } - - /** - * Sets the month displayed at the top of this view based on time. Override - * to add custom events when the title is changed. - * - * @param calendar A day in the new focus month. - */ - private void setMonthDisplayed(Calendar calendar) { - mCurrentMonthDisplayed = calendar.get(Calendar.MONTH); - mAdapter.setFocusMonth(mCurrentMonthDisplayed); - final int flags = DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_NO_MONTH_DAY - | DateUtils.FORMAT_SHOW_YEAR; - final long millis = calendar.getTimeInMillis(); - String newMonthName = DateUtils.formatDateRange(mContext, millis, millis, flags); - mMonthName.setText(newMonthName); - mMonthName.invalidate(); - } - - /** - * @return Returns the number of weeks between the current date - * and the mMinDate. - */ - private int getWeeksSinceMinDate(Calendar date) { - if (date.before(mMinDate)) { - throw new IllegalArgumentException("fromDate: " + mMinDate.getTime() - + " does not precede toDate: " + date.getTime()); - } - long endTimeMillis = date.getTimeInMillis() - + date.getTimeZone().getOffset(date.getTimeInMillis()); - long startTimeMillis = mMinDate.getTimeInMillis() - + mMinDate.getTimeZone().getOffset(mMinDate.getTimeInMillis()); - long dayOffsetMillis = (mMinDate.get(Calendar.DAY_OF_WEEK) - mFirstDayOfWeek) - * MILLIS_IN_DAY; - return (int) ((endTimeMillis - startTimeMillis + dayOffsetMillis) / MILLIS_IN_WEEK); - } - - /** - * Command responsible for acting upon scroll state changes. - */ - private class ScrollStateRunnable implements Runnable { - private AbsListView mView; - - private int mNewState; - - /** - * Sets up the runnable with a short delay in case the scroll state - * immediately changes again. - * - * @param view The list view that changed state - * @param scrollState The new state it changed to - */ - public void doScrollStateChange(AbsListView view, int scrollState) { - mView = view; - mNewState = scrollState; - mDelegator.removeCallbacks(this); - mDelegator.postDelayed(this, SCROLL_CHANGE_DELAY); - } - - public void run() { - mCurrentScrollState = mNewState; - // Fix the position after a scroll or a fling ends - if (mNewState == OnScrollListener.SCROLL_STATE_IDLE - && mPreviousScrollState != OnScrollListener.SCROLL_STATE_IDLE) { - View child = mView.getChildAt(0); - if (child == null) { - // The view is no longer visible, just return - return; - } - int dist = child.getBottom() - mListScrollTopOffset; - if (dist > mListScrollTopOffset) { - if (mIsScrollingUp) { - mView.smoothScrollBy(dist - child.getHeight(), - ADJUSTMENT_SCROLL_DURATION); - } else { - mView.smoothScrollBy(dist, ADJUSTMENT_SCROLL_DURATION); - } - } - } - mPreviousScrollState = mNewState; - } - } - - /** - *

    - * This is a specialized adapter for creating a list of weeks with - * selectable days. It can be configured to display the week number, start - * the week on a given day, show a reduced number of days, or display an - * arbitrary number of weeks at a time. - *

    - */ - private class WeeksAdapter extends BaseAdapter implements OnTouchListener { - - private int mSelectedWeek; - - private GestureDetector mGestureDetector; - - private int mFocusedMonth; - - private final Calendar mSelectedDate = Calendar.getInstance(); - - private int mTotalWeekCount; - - public WeeksAdapter(Context context) { - mContext = context; - mGestureDetector = new GestureDetector(mContext, new CalendarGestureListener()); - init(); - } - - /** - * Set up the gesture detector and selected time - */ - private void init() { - mSelectedWeek = getWeeksSinceMinDate(mSelectedDate); - mTotalWeekCount = getWeeksSinceMinDate(mMaxDate); - if (mMinDate.get(Calendar.DAY_OF_WEEK) != mFirstDayOfWeek - || mMaxDate.get(Calendar.DAY_OF_WEEK) != mFirstDayOfWeek) { - mTotalWeekCount++; - } - notifyDataSetChanged(); - } - - /** - * Updates the selected day and related parameters. - * - * @param selectedDay The time to highlight - */ - public void setSelectedDay(Calendar selectedDay) { - if (selectedDay.get(Calendar.DAY_OF_YEAR) == mSelectedDate.get(Calendar.DAY_OF_YEAR) - && selectedDay.get(Calendar.YEAR) == mSelectedDate.get(Calendar.YEAR)) { - return; - } - mSelectedDate.setTimeInMillis(selectedDay.getTimeInMillis()); - mSelectedWeek = getWeeksSinceMinDate(mSelectedDate); - mFocusedMonth = mSelectedDate.get(Calendar.MONTH); - notifyDataSetChanged(); - } - - /** - * @return The selected day of month. - */ - public Calendar getSelectedDay() { - return mSelectedDate; - } - - @Override - public int getCount() { - return mTotalWeekCount; - } - - @Override - public Object getItem(int position) { - return null; - } - - @Override - public long getItemId(int position) { - return position; - } - - @Override - public View getView(int position, View convertView, ViewGroup parent) { - WeekView weekView = null; - if (convertView != null) { - weekView = (WeekView) convertView; - } else { - weekView = new WeekView(mContext); - android.widget.AbsListView.LayoutParams params = - new android.widget.AbsListView.LayoutParams(LayoutParams.WRAP_CONTENT, - LayoutParams.WRAP_CONTENT); - weekView.setLayoutParams(params); - weekView.setClickable(true); - weekView.setOnTouchListener(this); - } - - int selectedWeekDay = (mSelectedWeek == position) ? mSelectedDate.get( - Calendar.DAY_OF_WEEK) : -1; - weekView.init(position, selectedWeekDay, mFocusedMonth); - - return weekView; - } - - /** - * Changes which month is in focus and updates the view. - * - * @param month The month to show as in focus [0-11] - */ - public void setFocusMonth(int month) { - if (mFocusedMonth == month) { - return; - } - mFocusedMonth = month; - notifyDataSetChanged(); - } - - @Override - public boolean onTouch(View v, MotionEvent event) { - if (mListView.isEnabled() && mGestureDetector.onTouchEvent(event)) { - WeekView weekView = (WeekView) v; - // if we cannot find a day for the given location we are done - if (!weekView.getDayFromLocation(event.getX(), mTempDate)) { - return true; - } - // it is possible that the touched day is outside the valid range - // we draw whole weeks but range end can fall not on the week end - if (mTempDate.before(mMinDate) || mTempDate.after(mMaxDate)) { - return true; - } - onDateTapped(mTempDate); - return true; - } - return false; - } - - /** - * Maintains the same hour/min/sec but moves the day to the tapped day. - * - * @param day The day that was tapped - */ - private void onDateTapped(Calendar day) { - setSelectedDay(day); - setMonthDisplayed(day); - } - - /** - * This is here so we can identify single tap events and set the - * selected day correctly - */ - class CalendarGestureListener extends GestureDetector.SimpleOnGestureListener { - @Override - public boolean onSingleTapUp(MotionEvent e) { - return true; - } - } - } - - /** - *

    - * This is a dynamic view for drawing a single week. It can be configured to - * display the week number, start the week on a given day, or show a reduced - * number of days. It is intended for use as a single view within a - * ListView. See {@link WeeksAdapter} for usage. - *

    - */ - private class WeekView extends View { - - private final Rect mTempRect = new Rect(); - - private final Paint mDrawPaint = new Paint(); - - private final Paint mMonthNumDrawPaint = new Paint(); - - // Cache the number strings so we don't have to recompute them each time - private String[] mDayNumbers; - - // Quick lookup for checking which days are in the focus month - private boolean[] mFocusDay; - - // Whether this view has a focused day. - private boolean mHasFocusedDay; - - // Whether this view has only focused days. - private boolean mHasUnfocusedDay; - - // The first day displayed by this item - private Calendar mFirstDay; - - // The month of the first day in this week - private int mMonthOfFirstWeekDay = -1; - - // The month of the last day in this week - private int mLastWeekDayMonth = -1; - - // The position of this week, equivalent to weeks since the week of Jan - // 1st, 1900 - private int mWeek = -1; - - // Quick reference to the width of this view, matches parent - private int mWidth; - - // The height this view should draw at in pixels, set by height param - private int mHeight; - - // If this view contains the selected day - private boolean mHasSelectedDay = false; - - // Which day is selected [0-6] or -1 if no day is selected - private int mSelectedDay = -1; - - // The number of days + a spot for week number if it is displayed - private int mNumCells; - - // The left edge of the selected day - private int mSelectedLeft = -1; - - // The right edge of the selected day - private int mSelectedRight = -1; - - public WeekView(Context context) { - super(context); - - // Sets up any standard paints that will be used - initilaizePaints(); - } - - /** - * Initializes this week view. - * - * @param weekNumber The number of the week this view represents. The - * week number is a zero based index of the weeks since - * {@link CalendarView#getMinDate()}. - * @param selectedWeekDay The selected day of the week from 0 to 6, -1 if no - * selected day. - * @param focusedMonth The month that is currently in focus i.e. - * highlighted. - */ - public void init(int weekNumber, int selectedWeekDay, int focusedMonth) { - mSelectedDay = selectedWeekDay; - mHasSelectedDay = mSelectedDay != -1; - mNumCells = mShowWeekNumber ? mDaysPerWeek + 1 : mDaysPerWeek; - mWeek = weekNumber; - mTempDate.setTimeInMillis(mMinDate.getTimeInMillis()); - - mTempDate.add(Calendar.WEEK_OF_YEAR, mWeek); - mTempDate.setFirstDayOfWeek(mFirstDayOfWeek); - - // Allocate space for caching the day numbers and focus values - mDayNumbers = new String[mNumCells]; - mFocusDay = new boolean[mNumCells]; - - // If we're showing the week number calculate it based on Monday - int i = 0; - if (mShowWeekNumber) { - mDayNumbers[0] = String.format(Locale.getDefault(), "%d", - mTempDate.get(Calendar.WEEK_OF_YEAR)); - i++; - } - - // Now adjust our starting day based on the start day of the week - int diff = mFirstDayOfWeek - mTempDate.get(Calendar.DAY_OF_WEEK); - mTempDate.add(Calendar.DAY_OF_MONTH, diff); - - mFirstDay = (Calendar) mTempDate.clone(); - mMonthOfFirstWeekDay = mTempDate.get(Calendar.MONTH); - - mHasUnfocusedDay = true; - for (; i < mNumCells; i++) { - final boolean isFocusedDay = (mTempDate.get(Calendar.MONTH) == focusedMonth); - mFocusDay[i] = isFocusedDay; - mHasFocusedDay |= isFocusedDay; - mHasUnfocusedDay &= !isFocusedDay; - // do not draw dates outside the valid range to avoid user confusion - if (mTempDate.before(mMinDate) || mTempDate.after(mMaxDate)) { - mDayNumbers[i] = ""; - } else { - mDayNumbers[i] = String.format(Locale.getDefault(), "%d", - mTempDate.get(Calendar.DAY_OF_MONTH)); - } - mTempDate.add(Calendar.DAY_OF_MONTH, 1); - } - // We do one extra add at the end of the loop, if that pushed us to - // new month undo it - if (mTempDate.get(Calendar.DAY_OF_MONTH) == 1) { - mTempDate.add(Calendar.DAY_OF_MONTH, -1); - } - mLastWeekDayMonth = mTempDate.get(Calendar.MONTH); - - updateSelectionPositions(); - } - - /** - * Initialize the paint instances. - */ - private void initilaizePaints() { - mDrawPaint.setFakeBoldText(false); - mDrawPaint.setAntiAlias(true); - mDrawPaint.setStyle(Style.FILL); - - mMonthNumDrawPaint.setFakeBoldText(true); - mMonthNumDrawPaint.setAntiAlias(true); - mMonthNumDrawPaint.setStyle(Style.FILL); - mMonthNumDrawPaint.setTextAlign(Align.CENTER); - mMonthNumDrawPaint.setTextSize(mDateTextSize); - } - - /** - * Returns the month of the first day in this week. - * - * @return The month the first day of this view is in. - */ - public int getMonthOfFirstWeekDay() { - return mMonthOfFirstWeekDay; - } - - /** - * Returns the month of the last day in this week - * - * @return The month the last day of this view is in - */ - public int getMonthOfLastWeekDay() { - return mLastWeekDayMonth; - } - - /** - * Returns the first day in this view. - * - * @return The first day in the view. - */ - public Calendar getFirstDay() { - return mFirstDay; - } - - /** - * Calculates the day that the given x position is in, accounting for - * week number. - * - * @param x The x position of the touch event. - * @return True if a day was found for the given location. - */ - public boolean getDayFromLocation(float x, Calendar outCalendar) { - final boolean isLayoutRtl = isLayoutRtl(); - - int start; - int end; - - if (isLayoutRtl) { - start = 0; - end = mShowWeekNumber ? mWidth - mWidth / mNumCells : mWidth; - } else { - start = mShowWeekNumber ? mWidth / mNumCells : 0; - end = mWidth; - } - - if (x < start || x > end) { - outCalendar.clear(); - return false; - } - - // Selection is (x - start) / (pixels/day) which is (x - start) * day / pixels - int dayPosition = (int) ((x - start) * mDaysPerWeek / (end - start)); - - if (isLayoutRtl) { - dayPosition = mDaysPerWeek - 1 - dayPosition; - } - - outCalendar.setTimeInMillis(mFirstDay.getTimeInMillis()); - outCalendar.add(Calendar.DAY_OF_MONTH, dayPosition); - - return true; - } - - @Override - protected void onDraw(Canvas canvas) { - drawBackground(canvas); - drawWeekNumbersAndDates(canvas); - drawWeekSeparators(canvas); - drawSelectedDateVerticalBars(canvas); - } - - /** - * This draws the selection highlight if a day is selected in this week. - * - * @param canvas The canvas to draw on - */ - private void drawBackground(Canvas canvas) { - if (!mHasSelectedDay) { - return; - } - mDrawPaint.setColor(mSelectedWeekBackgroundColor); - - mTempRect.top = mWeekSeperatorLineWidth; - mTempRect.bottom = mHeight; - - final boolean isLayoutRtl = isLayoutRtl(); - - if (isLayoutRtl) { - mTempRect.left = 0; - mTempRect.right = mSelectedLeft - 2; - } else { - mTempRect.left = mShowWeekNumber ? mWidth / mNumCells : 0; - mTempRect.right = mSelectedLeft - 2; - } - canvas.drawRect(mTempRect, mDrawPaint); - - if (isLayoutRtl) { - mTempRect.left = mSelectedRight + 3; - mTempRect.right = mShowWeekNumber ? mWidth - mWidth / mNumCells : mWidth; - } else { - mTempRect.left = mSelectedRight + 3; - mTempRect.right = mWidth; - } - canvas.drawRect(mTempRect, mDrawPaint); - } - - /** - * Draws the week and month day numbers for this week. - * - * @param canvas The canvas to draw on - */ - private void drawWeekNumbersAndDates(Canvas canvas) { - final float textHeight = mDrawPaint.getTextSize(); - final int y = (int) ((mHeight + textHeight) / 2) - mWeekSeperatorLineWidth; - final int nDays = mNumCells; - final int divisor = 2 * nDays; - - mDrawPaint.setTextAlign(Align.CENTER); - mDrawPaint.setTextSize(mDateTextSize); - - int i = 0; - - if (isLayoutRtl()) { - for (; i < nDays - 1; i++) { - mMonthNumDrawPaint.setColor(mFocusDay[i] ? mFocusedMonthDateColor - : mUnfocusedMonthDateColor); - int x = (2 * i + 1) * mWidth / divisor; - canvas.drawText(mDayNumbers[nDays - 1 - i], x, y, mMonthNumDrawPaint); - } - if (mShowWeekNumber) { - mDrawPaint.setColor(mWeekNumberColor); - int x = mWidth - mWidth / divisor; - canvas.drawText(mDayNumbers[0], x, y, mDrawPaint); - } - } else { - if (mShowWeekNumber) { - mDrawPaint.setColor(mWeekNumberColor); - int x = mWidth / divisor; - canvas.drawText(mDayNumbers[0], x, y, mDrawPaint); - i++; - } - for (; i < nDays; i++) { - mMonthNumDrawPaint.setColor(mFocusDay[i] ? mFocusedMonthDateColor - : mUnfocusedMonthDateColor); - int x = (2 * i + 1) * mWidth / divisor; - canvas.drawText(mDayNumbers[i], x, y, mMonthNumDrawPaint); - } - } - } - - /** - * Draws a horizontal line for separating the weeks. - * - * @param canvas The canvas to draw on. - */ - private void drawWeekSeparators(Canvas canvas) { - // If it is the topmost fully visible child do not draw separator line - int firstFullyVisiblePosition = mListView.getFirstVisiblePosition(); - if (mListView.getChildAt(0).getTop() < 0) { - firstFullyVisiblePosition++; - } - if (firstFullyVisiblePosition == mWeek) { - return; - } - mDrawPaint.setColor(mWeekSeparatorLineColor); - mDrawPaint.setStrokeWidth(mWeekSeperatorLineWidth); - float startX; - float stopX; - if (isLayoutRtl()) { - startX = 0; - stopX = mShowWeekNumber ? mWidth - mWidth / mNumCells : mWidth; - } else { - startX = mShowWeekNumber ? mWidth / mNumCells : 0; - stopX = mWidth; - } - canvas.drawLine(startX, 0, stopX, 0, mDrawPaint); - } - - /** - * Draws the selected date bars if this week has a selected day. - * - * @param canvas The canvas to draw on - */ - private void drawSelectedDateVerticalBars(Canvas canvas) { - if (!mHasSelectedDay) { - return; - } - mSelectedDateVerticalBar.setBounds( - mSelectedLeft - mSelectedDateVerticalBarWidth / 2, - mWeekSeperatorLineWidth, - mSelectedLeft + mSelectedDateVerticalBarWidth / 2, - mHeight); - mSelectedDateVerticalBar.draw(canvas); - mSelectedDateVerticalBar.setBounds( - mSelectedRight - mSelectedDateVerticalBarWidth / 2, - mWeekSeperatorLineWidth, - mSelectedRight + mSelectedDateVerticalBarWidth / 2, - mHeight); - mSelectedDateVerticalBar.draw(canvas); - } - - @Override - protected void onSizeChanged(int w, int h, int oldw, int oldh) { - mWidth = w; - updateSelectionPositions(); - } - - /** - * This calculates the positions for the selected day lines. - */ - private void updateSelectionPositions() { - if (mHasSelectedDay) { - final boolean isLayoutRtl = isLayoutRtl(); - int selectedPosition = mSelectedDay - mFirstDayOfWeek; - if (selectedPosition < 0) { - selectedPosition += 7; - } - if (mShowWeekNumber && !isLayoutRtl) { - selectedPosition++; - } - if (isLayoutRtl) { - mSelectedLeft = (mDaysPerWeek - 1 - selectedPosition) * mWidth / mNumCells; - - } else { - mSelectedLeft = selectedPosition * mWidth / mNumCells; - } - mSelectedRight = mSelectedLeft + mWidth / mNumCells; - } - } - - @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - mHeight = (mListView.getHeight() - mListView.getPaddingTop() - mListView - .getPaddingBottom()) / mShownWeekCount; - setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), mHeight); - } - } - } } diff --git a/core/java/android/widget/CalendarViewLegacyDelegate.java b/core/java/android/widget/CalendarViewLegacyDelegate.java new file mode 100644 index 0000000000000000000000000000000000000000..2ab35482bf567788f4c12d06634758a005ff7531 --- /dev/null +++ b/core/java/android/widget/CalendarViewLegacyDelegate.java @@ -0,0 +1,1527 @@ +/* + * Copyright (C) 2014 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.widget; + +import com.android.internal.R; + +import android.app.Service; +import android.content.Context; +import android.content.res.Configuration; +import android.content.res.TypedArray; +import android.database.DataSetObserver; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Rect; +import android.graphics.drawable.Drawable; +import android.text.TextUtils; +import android.text.format.DateUtils; +import android.util.AttributeSet; +import android.util.DisplayMetrics; +import android.util.TypedValue; +import android.view.GestureDetector; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; + +import java.util.Calendar; +import java.util.Locale; + +import libcore.icu.LocaleData; + +/** + * A delegate implementing the legacy CalendarView + */ +class CalendarViewLegacyDelegate extends CalendarView.AbstractCalendarViewDelegate { + /** + * Default value whether to show week number. + */ + private static final boolean DEFAULT_SHOW_WEEK_NUMBER = true; + + /** + * The number of milliseconds in a day.e + */ + private static final long MILLIS_IN_DAY = 86400000L; + + /** + * The number of day in a week. + */ + private static final int DAYS_PER_WEEK = 7; + + /** + * The number of milliseconds in a week. + */ + private static final long MILLIS_IN_WEEK = DAYS_PER_WEEK * MILLIS_IN_DAY; + + /** + * Affects when the month selection will change while scrolling upe + */ + private static final int SCROLL_HYST_WEEKS = 2; + + /** + * How long the GoTo fling animation should last. + */ + private static final int GOTO_SCROLL_DURATION = 1000; + + /** + * The duration of the adjustment upon a user scroll in milliseconds. + */ + private static final int ADJUSTMENT_SCROLL_DURATION = 500; + + /** + * How long to wait after receiving an onScrollStateChanged notification + * before acting on it. + */ + private static final int SCROLL_CHANGE_DELAY = 40; + + private static final int DEFAULT_SHOWN_WEEK_COUNT = 6; + + private static final int DEFAULT_DATE_TEXT_SIZE = 14; + + private static final int UNSCALED_SELECTED_DATE_VERTICAL_BAR_WIDTH = 6; + + private static final int UNSCALED_WEEK_MIN_VISIBLE_HEIGHT = 12; + + private static final int UNSCALED_LIST_SCROLL_TOP_OFFSET = 2; + + private static final int UNSCALED_BOTTOM_BUFFER = 20; + + private static final int UNSCALED_WEEK_SEPARATOR_LINE_WIDTH = 1; + + private static final int DEFAULT_WEEK_DAY_TEXT_APPEARANCE_RES_ID = -1; + + private final int mWeekSeperatorLineWidth; + + private int mDateTextSize; + + private Drawable mSelectedDateVerticalBar; + + private final int mSelectedDateVerticalBarWidth; + + private int mSelectedWeekBackgroundColor; + + private int mFocusedMonthDateColor; + + private int mUnfocusedMonthDateColor; + + private int mWeekSeparatorLineColor; + + private int mWeekNumberColor; + + private int mWeekDayTextAppearanceResId; + + private int mDateTextAppearanceResId; + + /** + * The top offset of the weeks list. + */ + private int mListScrollTopOffset = 2; + + /** + * The visible height of a week view. + */ + private int mWeekMinVisibleHeight = 12; + + /** + * The visible height of a week view. + */ + private int mBottomBuffer = 20; + + /** + * The number of shown weeks. + */ + private int mShownWeekCount; + + /** + * Flag whether to show the week number. + */ + private boolean mShowWeekNumber; + + /** + * The number of day per week to be shown. + */ + private int mDaysPerWeek = 7; + + /** + * The friction of the week list while flinging. + */ + private float mFriction = .05f; + + /** + * Scale for adjusting velocity of the week list while flinging. + */ + private float mVelocityScale = 0.333f; + + /** + * The adapter for the weeks list. + */ + private WeeksAdapter mAdapter; + + /** + * The weeks list. + */ + private ListView mListView; + + /** + * The name of the month to display. + */ + private TextView mMonthName; + + /** + * The header with week day names. + */ + private ViewGroup mDayNamesHeader; + + /** + * Cached abbreviations for day of week names. + */ + private String[] mDayNamesShort; + + /** + * Cached full-length day of week names. + */ + private String[] mDayNamesLong; + + /** + * The first day of the week. + */ + private int mFirstDayOfWeek; + + /** + * Which month should be displayed/highlighted [0-11]. + */ + private int mCurrentMonthDisplayed = -1; + + /** + * Used for tracking during a scroll. + */ + private long mPreviousScrollPosition; + + /** + * Used for tracking which direction the view is scrolling. + */ + private boolean mIsScrollingUp = false; + + /** + * The previous scroll state of the weeks ListView. + */ + private int mPreviousScrollState = AbsListView.OnScrollListener.SCROLL_STATE_IDLE; + + /** + * The current scroll state of the weeks ListView. + */ + private int mCurrentScrollState = AbsListView.OnScrollListener.SCROLL_STATE_IDLE; + + /** + * Listener for changes in the selected day. + */ + private CalendarView.OnDateChangeListener mOnDateChangeListener; + + /** + * Command for adjusting the position after a scroll/fling. + */ + private ScrollStateRunnable mScrollStateChangedRunnable = new ScrollStateRunnable(); + + /** + * Temporary instance to avoid multiple instantiations. + */ + private Calendar mTempDate; + + /** + * The first day of the focused month. + */ + private Calendar mFirstDayOfMonth; + + /** + * The start date of the range supported by this picker. + */ + private Calendar mMinDate; + + /** + * The end date of the range supported by this picker. + */ + private Calendar mMaxDate; + + CalendarViewLegacyDelegate(CalendarView delegator, Context context, AttributeSet attrs, + int defStyleAttr, int defStyleRes) { + super(delegator, context); + + final TypedArray a = context.obtainStyledAttributes(attrs, + R.styleable.CalendarView, defStyleAttr, defStyleRes); + mShowWeekNumber = a.getBoolean(R.styleable.CalendarView_showWeekNumber, + DEFAULT_SHOW_WEEK_NUMBER); + mFirstDayOfWeek = a.getInt(R.styleable.CalendarView_firstDayOfWeek, + LocaleData.get(Locale.getDefault()).firstDayOfWeek); + final String minDate = a.getString(R.styleable.CalendarView_minDate); + if (TextUtils.isEmpty(minDate) || !parseDate(minDate, mMinDate)) { + parseDate(DEFAULT_MIN_DATE, mMinDate); + } + final String maxDate = a.getString(R.styleable.CalendarView_maxDate); + if (TextUtils.isEmpty(maxDate) || !parseDate(maxDate, mMaxDate)) { + parseDate(DEFAULT_MAX_DATE, mMaxDate); + } + if (mMaxDate.before(mMinDate)) { + throw new IllegalArgumentException("Max date cannot be before min date."); + } + mShownWeekCount = a.getInt(R.styleable.CalendarView_shownWeekCount, + DEFAULT_SHOWN_WEEK_COUNT); + mSelectedWeekBackgroundColor = a.getColor( + R.styleable.CalendarView_selectedWeekBackgroundColor, 0); + mFocusedMonthDateColor = a.getColor( + R.styleable.CalendarView_focusedMonthDateColor, 0); + mUnfocusedMonthDateColor = a.getColor( + R.styleable.CalendarView_unfocusedMonthDateColor, 0); + mWeekSeparatorLineColor = a.getColor( + R.styleable.CalendarView_weekSeparatorLineColor, 0); + mWeekNumberColor = a.getColor(R.styleable.CalendarView_weekNumberColor, 0); + mSelectedDateVerticalBar = a.getDrawable( + R.styleable.CalendarView_selectedDateVerticalBar); + + mDateTextAppearanceResId = a.getResourceId( + R.styleable.CalendarView_dateTextAppearance, R.style.TextAppearance_Small); + updateDateTextSize(); + + mWeekDayTextAppearanceResId = a.getResourceId( + R.styleable.CalendarView_weekDayTextAppearance, + DEFAULT_WEEK_DAY_TEXT_APPEARANCE_RES_ID); + a.recycle(); + + DisplayMetrics displayMetrics = mDelegator.getResources().getDisplayMetrics(); + mWeekMinVisibleHeight = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, + UNSCALED_WEEK_MIN_VISIBLE_HEIGHT, displayMetrics); + mListScrollTopOffset = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, + UNSCALED_LIST_SCROLL_TOP_OFFSET, displayMetrics); + mBottomBuffer = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, + UNSCALED_BOTTOM_BUFFER, displayMetrics); + mSelectedDateVerticalBarWidth = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, + UNSCALED_SELECTED_DATE_VERTICAL_BAR_WIDTH, displayMetrics); + mWeekSeperatorLineWidth = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, + UNSCALED_WEEK_SEPARATOR_LINE_WIDTH, displayMetrics); + + LayoutInflater layoutInflater = (LayoutInflater) mContext + .getSystemService(Service.LAYOUT_INFLATER_SERVICE); + View content = layoutInflater.inflate(R.layout.calendar_view, null, false); + mDelegator.addView(content); + + mListView = (ListView) mDelegator.findViewById(R.id.list); + mDayNamesHeader = (ViewGroup) content.findViewById(R.id.day_names); + mMonthName = (TextView) content.findViewById(R.id.month_name); + + setUpHeader(); + setUpListView(); + setUpAdapter(); + + // go to today or whichever is close to today min or max date + mTempDate.setTimeInMillis(System.currentTimeMillis()); + if (mTempDate.before(mMinDate)) { + goTo(mMinDate, false, true, true); + } else if (mMaxDate.before(mTempDate)) { + goTo(mMaxDate, false, true, true); + } else { + goTo(mTempDate, false, true, true); + } + + mDelegator.invalidate(); + } + + @Override + public void setShownWeekCount(int count) { + if (mShownWeekCount != count) { + mShownWeekCount = count; + mDelegator.invalidate(); + } + } + + @Override + public int getShownWeekCount() { + return mShownWeekCount; + } + + @Override + public void setSelectedWeekBackgroundColor(int color) { + if (mSelectedWeekBackgroundColor != color) { + mSelectedWeekBackgroundColor = color; + final int childCount = mListView.getChildCount(); + for (int i = 0; i < childCount; i++) { + WeekView weekView = (WeekView) mListView.getChildAt(i); + if (weekView.mHasSelectedDay) { + weekView.invalidate(); + } + } + } + } + + @Override + public int getSelectedWeekBackgroundColor() { + return mSelectedWeekBackgroundColor; + } + + @Override + public void setFocusedMonthDateColor(int color) { + if (mFocusedMonthDateColor != color) { + mFocusedMonthDateColor = color; + final int childCount = mListView.getChildCount(); + for (int i = 0; i < childCount; i++) { + WeekView weekView = (WeekView) mListView.getChildAt(i); + if (weekView.mHasFocusedDay) { + weekView.invalidate(); + } + } + } + } + + @Override + public int getFocusedMonthDateColor() { + return mFocusedMonthDateColor; + } + + @Override + public void setUnfocusedMonthDateColor(int color) { + if (mUnfocusedMonthDateColor != color) { + mUnfocusedMonthDateColor = color; + final int childCount = mListView.getChildCount(); + for (int i = 0; i < childCount; i++) { + WeekView weekView = (WeekView) mListView.getChildAt(i); + if (weekView.mHasUnfocusedDay) { + weekView.invalidate(); + } + } + } + } + + @Override + public int getUnfocusedMonthDateColor() { + return mFocusedMonthDateColor; + } + + @Override + public void setWeekNumberColor(int color) { + if (mWeekNumberColor != color) { + mWeekNumberColor = color; + if (mShowWeekNumber) { + invalidateAllWeekViews(); + } + } + } + + @Override + public int getWeekNumberColor() { + return mWeekNumberColor; + } + + @Override + public void setWeekSeparatorLineColor(int color) { + if (mWeekSeparatorLineColor != color) { + mWeekSeparatorLineColor = color; + invalidateAllWeekViews(); + } + } + + @Override + public int getWeekSeparatorLineColor() { + return mWeekSeparatorLineColor; + } + + @Override + public void setSelectedDateVerticalBar(int resourceId) { + Drawable drawable = mDelegator.getContext().getDrawable(resourceId); + setSelectedDateVerticalBar(drawable); + } + + @Override + public void setSelectedDateVerticalBar(Drawable drawable) { + if (mSelectedDateVerticalBar != drawable) { + mSelectedDateVerticalBar = drawable; + final int childCount = mListView.getChildCount(); + for (int i = 0; i < childCount; i++) { + WeekView weekView = (WeekView) mListView.getChildAt(i); + if (weekView.mHasSelectedDay) { + weekView.invalidate(); + } + } + } + } + + @Override + public Drawable getSelectedDateVerticalBar() { + return mSelectedDateVerticalBar; + } + + @Override + public void setWeekDayTextAppearance(int resourceId) { + if (mWeekDayTextAppearanceResId != resourceId) { + mWeekDayTextAppearanceResId = resourceId; + setUpHeader(); + } + } + + @Override + public int getWeekDayTextAppearance() { + return mWeekDayTextAppearanceResId; + } + + @Override + public void setDateTextAppearance(int resourceId) { + if (mDateTextAppearanceResId != resourceId) { + mDateTextAppearanceResId = resourceId; + updateDateTextSize(); + invalidateAllWeekViews(); + } + } + + @Override + public int getDateTextAppearance() { + return mDateTextAppearanceResId; + } + + @Override + public void setMinDate(long minDate) { + mTempDate.setTimeInMillis(minDate); + if (isSameDate(mTempDate, mMinDate)) { + return; + } + mMinDate.setTimeInMillis(minDate); + // make sure the current date is not earlier than + // the new min date since the latter is used for + // calculating the indices in the adapter thus + // avoiding out of bounds error + Calendar date = mAdapter.mSelectedDate; + if (date.before(mMinDate)) { + mAdapter.setSelectedDay(mMinDate); + } + // reinitialize the adapter since its range depends on min date + mAdapter.init(); + if (date.before(mMinDate)) { + setDate(mTempDate.getTimeInMillis()); + } else { + // we go to the current date to force the ListView to query its + // adapter for the shown views since we have changed the adapter + // range and the base from which the later calculates item indices + // note that calling setDate will not work since the date is the same + goTo(date, false, true, false); + } + } + + @Override + public long getMinDate() { + return mMinDate.getTimeInMillis(); + } + + @Override + public void setMaxDate(long maxDate) { + mTempDate.setTimeInMillis(maxDate); + if (isSameDate(mTempDate, mMaxDate)) { + return; + } + mMaxDate.setTimeInMillis(maxDate); + // reinitialize the adapter since its range depends on max date + mAdapter.init(); + Calendar date = mAdapter.mSelectedDate; + if (date.after(mMaxDate)) { + setDate(mMaxDate.getTimeInMillis()); + } else { + // we go to the current date to force the ListView to query its + // adapter for the shown views since we have changed the adapter + // range and the base from which the later calculates item indices + // note that calling setDate will not work since the date is the same + goTo(date, false, true, false); + } + } + + @Override + public long getMaxDate() { + return mMaxDate.getTimeInMillis(); + } + + @Override + public void setShowWeekNumber(boolean showWeekNumber) { + if (mShowWeekNumber == showWeekNumber) { + return; + } + mShowWeekNumber = showWeekNumber; + mAdapter.notifyDataSetChanged(); + setUpHeader(); + } + + @Override + public boolean getShowWeekNumber() { + return mShowWeekNumber; + } + + @Override + public void setFirstDayOfWeek(int firstDayOfWeek) { + if (mFirstDayOfWeek == firstDayOfWeek) { + return; + } + mFirstDayOfWeek = firstDayOfWeek; + mAdapter.init(); + mAdapter.notifyDataSetChanged(); + setUpHeader(); + } + + @Override + public int getFirstDayOfWeek() { + return mFirstDayOfWeek; + } + + @Override + public void setDate(long date) { + setDate(date, false, false); + } + + @Override + public void setDate(long date, boolean animate, boolean center) { + mTempDate.setTimeInMillis(date); + if (isSameDate(mTempDate, mAdapter.mSelectedDate)) { + return; + } + goTo(mTempDate, animate, true, center); + } + + @Override + public long getDate() { + return mAdapter.mSelectedDate.getTimeInMillis(); + } + + @Override + public void setOnDateChangeListener(CalendarView.OnDateChangeListener listener) { + mOnDateChangeListener = listener; + } + + @Override + public void onConfigurationChanged(Configuration newConfig) { + setCurrentLocale(newConfig.locale); + } + + /** + * Sets the current locale. + * + * @param locale The current locale. + */ + @Override + protected void setCurrentLocale(Locale locale) { + super.setCurrentLocale(locale); + + mTempDate = getCalendarForLocale(mTempDate, locale); + mFirstDayOfMonth = getCalendarForLocale(mFirstDayOfMonth, locale); + mMinDate = getCalendarForLocale(mMinDate, locale); + mMaxDate = getCalendarForLocale(mMaxDate, locale); + } + private void updateDateTextSize() { + TypedArray dateTextAppearance = mDelegator.getContext().obtainStyledAttributes( + mDateTextAppearanceResId, R.styleable.TextAppearance); + mDateTextSize = dateTextAppearance.getDimensionPixelSize( + R.styleable.TextAppearance_textSize, DEFAULT_DATE_TEXT_SIZE); + dateTextAppearance.recycle(); + } + + /** + * Invalidates all week views. + */ + private void invalidateAllWeekViews() { + final int childCount = mListView.getChildCount(); + for (int i = 0; i < childCount; i++) { + View view = mListView.getChildAt(i); + view.invalidate(); + } + } + + /** + * Gets a calendar for locale bootstrapped with the value of a given calendar. + * + * @param oldCalendar The old calendar. + * @param locale The locale. + */ + private static Calendar getCalendarForLocale(Calendar oldCalendar, Locale locale) { + if (oldCalendar == null) { + return Calendar.getInstance(locale); + } else { + final long currentTimeMillis = oldCalendar.getTimeInMillis(); + Calendar newCalendar = Calendar.getInstance(locale); + newCalendar.setTimeInMillis(currentTimeMillis); + return newCalendar; + } + } + + /** + * @return True if the firstDate is the same as the + * secondDate. + */ + private static boolean isSameDate(Calendar firstDate, Calendar secondDate) { + return (firstDate.get(Calendar.DAY_OF_YEAR) == secondDate.get(Calendar.DAY_OF_YEAR) + && firstDate.get(Calendar.YEAR) == secondDate.get(Calendar.YEAR)); + } + + /** + * Creates a new adapter if necessary and sets up its parameters. + */ + private void setUpAdapter() { + if (mAdapter == null) { + mAdapter = new WeeksAdapter(mContext); + mAdapter.registerDataSetObserver(new DataSetObserver() { + @Override + public void onChanged() { + if (mOnDateChangeListener != null) { + Calendar selectedDay = mAdapter.getSelectedDay(); + mOnDateChangeListener.onSelectedDayChange(mDelegator, + selectedDay.get(Calendar.YEAR), + selectedDay.get(Calendar.MONTH), + selectedDay.get(Calendar.DAY_OF_MONTH)); + } + } + }); + mListView.setAdapter(mAdapter); + } + + // refresh the view with the new parameters + mAdapter.notifyDataSetChanged(); + } + + /** + * Sets up the strings to be used by the header. + */ + private void setUpHeader() { + mDayNamesShort = new String[mDaysPerWeek]; + mDayNamesLong = new String[mDaysPerWeek]; + for (int i = mFirstDayOfWeek, count = mFirstDayOfWeek + mDaysPerWeek; i < count; i++) { + int calendarDay = (i > Calendar.SATURDAY) ? i - Calendar.SATURDAY : i; + mDayNamesShort[i - mFirstDayOfWeek] = DateUtils.getDayOfWeekString(calendarDay, + DateUtils.LENGTH_SHORTEST); + mDayNamesLong[i - mFirstDayOfWeek] = DateUtils.getDayOfWeekString(calendarDay, + DateUtils.LENGTH_LONG); + } + + TextView label = (TextView) mDayNamesHeader.getChildAt(0); + if (mShowWeekNumber) { + label.setVisibility(View.VISIBLE); + } else { + label.setVisibility(View.GONE); + } + for (int i = 1, count = mDayNamesHeader.getChildCount(); i < count; i++) { + label = (TextView) mDayNamesHeader.getChildAt(i); + if (mWeekDayTextAppearanceResId > -1) { + label.setTextAppearance(mContext, mWeekDayTextAppearanceResId); + } + if (i < mDaysPerWeek + 1) { + label.setText(mDayNamesShort[i - 1]); + label.setContentDescription(mDayNamesLong[i - 1]); + label.setVisibility(View.VISIBLE); + } else { + label.setVisibility(View.GONE); + } + } + mDayNamesHeader.invalidate(); + } + + /** + * Sets all the required fields for the list view. + */ + private void setUpListView() { + // Configure the listview + mListView.setDivider(null); + mListView.setItemsCanFocus(true); + mListView.setVerticalScrollBarEnabled(false); + mListView.setOnScrollListener(new AbsListView.OnScrollListener() { + public void onScrollStateChanged(AbsListView view, int scrollState) { + CalendarViewLegacyDelegate.this.onScrollStateChanged(view, scrollState); + } + + public void onScroll( + AbsListView view, int firstVisibleItem, int visibleItemCount, + int totalItemCount) { + CalendarViewLegacyDelegate.this.onScroll(view, firstVisibleItem, + visibleItemCount, totalItemCount); + } + }); + // Make the scrolling behavior nicer + mListView.setFriction(mFriction); + mListView.setVelocityScale(mVelocityScale); + } + + /** + * This moves to the specified time in the view. If the time is not already + * in range it will move the list so that the first of the month containing + * the time is at the top of the view. If the new time is already in view + * the list will not be scrolled unless forceScroll is true. This time may + * optionally be highlighted as selected as well. + * + * @param date The time to move to. + * @param animate Whether to scroll to the given time or just redraw at the + * new location. + * @param setSelected Whether to set the given time as selected. + * @param forceScroll Whether to recenter even if the time is already + * visible. + * + * @throws IllegalArgumentException of the provided date is before the + * range start of after the range end. + */ + private void goTo(Calendar date, boolean animate, boolean setSelected, + boolean forceScroll) { + if (date.before(mMinDate) || date.after(mMaxDate)) { + throw new IllegalArgumentException("Time not between " + mMinDate.getTime() + + " and " + mMaxDate.getTime()); + } + // Find the first and last entirely visible weeks + int firstFullyVisiblePosition = mListView.getFirstVisiblePosition(); + View firstChild = mListView.getChildAt(0); + if (firstChild != null && firstChild.getTop() < 0) { + firstFullyVisiblePosition++; + } + int lastFullyVisiblePosition = firstFullyVisiblePosition + mShownWeekCount - 1; + if (firstChild != null && firstChild.getTop() > mBottomBuffer) { + lastFullyVisiblePosition--; + } + if (setSelected) { + mAdapter.setSelectedDay(date); + } + // Get the week we're going to + int position = getWeeksSinceMinDate(date); + + // Check if the selected day is now outside of our visible range + // and if so scroll to the month that contains it + if (position < firstFullyVisiblePosition || position > lastFullyVisiblePosition + || forceScroll) { + mFirstDayOfMonth.setTimeInMillis(date.getTimeInMillis()); + mFirstDayOfMonth.set(Calendar.DAY_OF_MONTH, 1); + + setMonthDisplayed(mFirstDayOfMonth); + + // the earliest time we can scroll to is the min date + if (mFirstDayOfMonth.before(mMinDate)) { + position = 0; + } else { + position = getWeeksSinceMinDate(mFirstDayOfMonth); + } + + mPreviousScrollState = AbsListView.OnScrollListener.SCROLL_STATE_FLING; + if (animate) { + mListView.smoothScrollToPositionFromTop(position, mListScrollTopOffset, + GOTO_SCROLL_DURATION); + } else { + mListView.setSelectionFromTop(position, mListScrollTopOffset); + // Perform any after scroll operations that are needed + onScrollStateChanged(mListView, AbsListView.OnScrollListener.SCROLL_STATE_IDLE); + } + } else if (setSelected) { + // Otherwise just set the selection + setMonthDisplayed(date); + } + } + + /** + * Called when a view transitions to a new scrollState + * . + */ + private void onScrollStateChanged(AbsListView view, int scrollState) { + mScrollStateChangedRunnable.doScrollStateChange(view, scrollState); + } + + /** + * Updates the title and selected month if the view has moved to a new + * month. + */ + private void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, + int totalItemCount) { + WeekView child = (WeekView) view.getChildAt(0); + if (child == null) { + return; + } + + // Figure out where we are + long currScroll = + view.getFirstVisiblePosition() * child.getHeight() - child.getBottom(); + + // If we have moved since our last call update the direction + if (currScroll < mPreviousScrollPosition) { + mIsScrollingUp = true; + } else if (currScroll > mPreviousScrollPosition) { + mIsScrollingUp = false; + } else { + return; + } + + // Use some hysteresis for checking which month to highlight. This + // causes the month to transition when two full weeks of a month are + // visible when scrolling up, and when the first day in a month reaches + // the top of the screen when scrolling down. + int offset = child.getBottom() < mWeekMinVisibleHeight ? 1 : 0; + if (mIsScrollingUp) { + child = (WeekView) view.getChildAt(SCROLL_HYST_WEEKS + offset); + } else if (offset != 0) { + child = (WeekView) view.getChildAt(offset); + } + + if (child != null) { + // Find out which month we're moving into + int month; + if (mIsScrollingUp) { + month = child.getMonthOfFirstWeekDay(); + } else { + month = child.getMonthOfLastWeekDay(); + } + + // And how it relates to our current highlighted month + int monthDiff; + if (mCurrentMonthDisplayed == 11 && month == 0) { + monthDiff = 1; + } else if (mCurrentMonthDisplayed == 0 && month == 11) { + monthDiff = -1; + } else { + monthDiff = month - mCurrentMonthDisplayed; + } + + // Only switch months if we're scrolling away from the currently + // selected month + if ((!mIsScrollingUp && monthDiff > 0) || (mIsScrollingUp && monthDiff < 0)) { + Calendar firstDay = child.getFirstDay(); + if (mIsScrollingUp) { + firstDay.add(Calendar.DAY_OF_MONTH, -DAYS_PER_WEEK); + } else { + firstDay.add(Calendar.DAY_OF_MONTH, DAYS_PER_WEEK); + } + setMonthDisplayed(firstDay); + } + } + mPreviousScrollPosition = currScroll; + mPreviousScrollState = mCurrentScrollState; + } + + /** + * Sets the month displayed at the top of this view based on time. Override + * to add custom events when the title is changed. + * + * @param calendar A day in the new focus month. + */ + private void setMonthDisplayed(Calendar calendar) { + mCurrentMonthDisplayed = calendar.get(Calendar.MONTH); + mAdapter.setFocusMonth(mCurrentMonthDisplayed); + final int flags = DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_NO_MONTH_DAY + | DateUtils.FORMAT_SHOW_YEAR; + final long millis = calendar.getTimeInMillis(); + String newMonthName = DateUtils.formatDateRange(mContext, millis, millis, flags); + mMonthName.setText(newMonthName); + mMonthName.invalidate(); + } + + /** + * @return Returns the number of weeks between the current date + * and the mMinDate. + */ + private int getWeeksSinceMinDate(Calendar date) { + if (date.before(mMinDate)) { + throw new IllegalArgumentException("fromDate: " + mMinDate.getTime() + + " does not precede toDate: " + date.getTime()); + } + long endTimeMillis = date.getTimeInMillis() + + date.getTimeZone().getOffset(date.getTimeInMillis()); + long startTimeMillis = mMinDate.getTimeInMillis() + + mMinDate.getTimeZone().getOffset(mMinDate.getTimeInMillis()); + long dayOffsetMillis = (mMinDate.get(Calendar.DAY_OF_WEEK) - mFirstDayOfWeek) + * MILLIS_IN_DAY; + return (int) ((endTimeMillis - startTimeMillis + dayOffsetMillis) / MILLIS_IN_WEEK); + } + + /** + * Command responsible for acting upon scroll state changes. + */ + private class ScrollStateRunnable implements Runnable { + private AbsListView mView; + + private int mNewState; + + /** + * Sets up the runnable with a short delay in case the scroll state + * immediately changes again. + * + * @param view The list view that changed state + * @param scrollState The new state it changed to + */ + public void doScrollStateChange(AbsListView view, int scrollState) { + mView = view; + mNewState = scrollState; + mDelegator.removeCallbacks(this); + mDelegator.postDelayed(this, SCROLL_CHANGE_DELAY); + } + + public void run() { + mCurrentScrollState = mNewState; + // Fix the position after a scroll or a fling ends + if (mNewState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE + && mPreviousScrollState != AbsListView.OnScrollListener.SCROLL_STATE_IDLE) { + View child = mView.getChildAt(0); + if (child == null) { + // The view is no longer visible, just return + return; + } + int dist = child.getBottom() - mListScrollTopOffset; + if (dist > mListScrollTopOffset) { + if (mIsScrollingUp) { + mView.smoothScrollBy(dist - child.getHeight(), + ADJUSTMENT_SCROLL_DURATION); + } else { + mView.smoothScrollBy(dist, ADJUSTMENT_SCROLL_DURATION); + } + } + } + mPreviousScrollState = mNewState; + } + } + + /** + *

    + * This is a specialized adapter for creating a list of weeks with + * selectable days. It can be configured to display the week number, start + * the week on a given day, show a reduced number of days, or display an + * arbitrary number of weeks at a time. + *

    + */ + private class WeeksAdapter extends BaseAdapter implements View.OnTouchListener { + + private int mSelectedWeek; + + private GestureDetector mGestureDetector; + + private int mFocusedMonth; + + private final Calendar mSelectedDate = Calendar.getInstance(); + + private int mTotalWeekCount; + + public WeeksAdapter(Context context) { + mContext = context; + mGestureDetector = new GestureDetector(mContext, new WeeksAdapter.CalendarGestureListener()); + init(); + } + + /** + * Set up the gesture detector and selected time + */ + private void init() { + mSelectedWeek = getWeeksSinceMinDate(mSelectedDate); + mTotalWeekCount = getWeeksSinceMinDate(mMaxDate); + if (mMinDate.get(Calendar.DAY_OF_WEEK) != mFirstDayOfWeek + || mMaxDate.get(Calendar.DAY_OF_WEEK) != mFirstDayOfWeek) { + mTotalWeekCount++; + } + notifyDataSetChanged(); + } + + /** + * Updates the selected day and related parameters. + * + * @param selectedDay The time to highlight + */ + public void setSelectedDay(Calendar selectedDay) { + if (selectedDay.get(Calendar.DAY_OF_YEAR) == mSelectedDate.get(Calendar.DAY_OF_YEAR) + && selectedDay.get(Calendar.YEAR) == mSelectedDate.get(Calendar.YEAR)) { + return; + } + mSelectedDate.setTimeInMillis(selectedDay.getTimeInMillis()); + mSelectedWeek = getWeeksSinceMinDate(mSelectedDate); + mFocusedMonth = mSelectedDate.get(Calendar.MONTH); + notifyDataSetChanged(); + } + + /** + * @return The selected day of month. + */ + public Calendar getSelectedDay() { + return mSelectedDate; + } + + @Override + public int getCount() { + return mTotalWeekCount; + } + + @Override + public Object getItem(int position) { + return null; + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + WeekView weekView = null; + if (convertView != null) { + weekView = (WeekView) convertView; + } else { + weekView = new WeekView(mContext); + AbsListView.LayoutParams params = + new AbsListView.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, + FrameLayout.LayoutParams.WRAP_CONTENT); + weekView.setLayoutParams(params); + weekView.setClickable(true); + weekView.setOnTouchListener(this); + } + + int selectedWeekDay = (mSelectedWeek == position) ? mSelectedDate.get( + Calendar.DAY_OF_WEEK) : -1; + weekView.init(position, selectedWeekDay, mFocusedMonth); + + return weekView; + } + + /** + * Changes which month is in focus and updates the view. + * + * @param month The month to show as in focus [0-11] + */ + public void setFocusMonth(int month) { + if (mFocusedMonth == month) { + return; + } + mFocusedMonth = month; + notifyDataSetChanged(); + } + + @Override + public boolean onTouch(View v, MotionEvent event) { + if (mListView.isEnabled() && mGestureDetector.onTouchEvent(event)) { + WeekView weekView = (WeekView) v; + // if we cannot find a day for the given location we are done + if (!weekView.getDayFromLocation(event.getX(), mTempDate)) { + return true; + } + // it is possible that the touched day is outside the valid range + // we draw whole weeks but range end can fall not on the week end + if (mTempDate.before(mMinDate) || mTempDate.after(mMaxDate)) { + return true; + } + onDateTapped(mTempDate); + return true; + } + return false; + } + + /** + * Maintains the same hour/min/sec but moves the day to the tapped day. + * + * @param day The day that was tapped + */ + private void onDateTapped(Calendar day) { + setSelectedDay(day); + setMonthDisplayed(day); + } + + /** + * This is here so we can identify single tap events and set the + * selected day correctly + */ + class CalendarGestureListener extends GestureDetector.SimpleOnGestureListener { + @Override + public boolean onSingleTapUp(MotionEvent e) { + return true; + } + } + } + + /** + *

    + * This is a dynamic view for drawing a single week. It can be configured to + * display the week number, start the week on a given day, or show a reduced + * number of days. It is intended for use as a single view within a + * ListView. See {@link WeeksAdapter} for usage. + *

    + */ + private class WeekView extends View { + + private final Rect mTempRect = new Rect(); + + private final Paint mDrawPaint = new Paint(); + + private final Paint mMonthNumDrawPaint = new Paint(); + + // Cache the number strings so we don't have to recompute them each time + private String[] mDayNumbers; + + // Quick lookup for checking which days are in the focus month + private boolean[] mFocusDay; + + // Whether this view has a focused day. + private boolean mHasFocusedDay; + + // Whether this view has only focused days. + private boolean mHasUnfocusedDay; + + // The first day displayed by this item + private Calendar mFirstDay; + + // The month of the first day in this week + private int mMonthOfFirstWeekDay = -1; + + // The month of the last day in this week + private int mLastWeekDayMonth = -1; + + // The position of this week, equivalent to weeks since the week of Jan + // 1st, 1900 + private int mWeek = -1; + + // Quick reference to the width of this view, matches parent + private int mWidth; + + // The height this view should draw at in pixels, set by height param + private int mHeight; + + // If this view contains the selected day + private boolean mHasSelectedDay = false; + + // Which day is selected [0-6] or -1 if no day is selected + private int mSelectedDay = -1; + + // The number of days + a spot for week number if it is displayed + private int mNumCells; + + // The left edge of the selected day + private int mSelectedLeft = -1; + + // The right edge of the selected day + private int mSelectedRight = -1; + + public WeekView(Context context) { + super(context); + + // Sets up any standard paints that will be used + initilaizePaints(); + } + + /** + * Initializes this week view. + * + * @param weekNumber The number of the week this view represents. The + * week number is a zero based index of the weeks since + * {@link android.widget.CalendarView#getMinDate()}. + * @param selectedWeekDay The selected day of the week from 0 to 6, -1 if no + * selected day. + * @param focusedMonth The month that is currently in focus i.e. + * highlighted. + */ + public void init(int weekNumber, int selectedWeekDay, int focusedMonth) { + mSelectedDay = selectedWeekDay; + mHasSelectedDay = mSelectedDay != -1; + mNumCells = mShowWeekNumber ? mDaysPerWeek + 1 : mDaysPerWeek; + mWeek = weekNumber; + mTempDate.setTimeInMillis(mMinDate.getTimeInMillis()); + + mTempDate.add(Calendar.WEEK_OF_YEAR, mWeek); + mTempDate.setFirstDayOfWeek(mFirstDayOfWeek); + + // Allocate space for caching the day numbers and focus values + mDayNumbers = new String[mNumCells]; + mFocusDay = new boolean[mNumCells]; + + // If we're showing the week number calculate it based on Monday + int i = 0; + if (mShowWeekNumber) { + mDayNumbers[0] = String.format(Locale.getDefault(), "%d", + mTempDate.get(Calendar.WEEK_OF_YEAR)); + i++; + } + + // Now adjust our starting day based on the start day of the week + int diff = mFirstDayOfWeek - mTempDate.get(Calendar.DAY_OF_WEEK); + mTempDate.add(Calendar.DAY_OF_MONTH, diff); + + mFirstDay = (Calendar) mTempDate.clone(); + mMonthOfFirstWeekDay = mTempDate.get(Calendar.MONTH); + + mHasUnfocusedDay = true; + for (; i < mNumCells; i++) { + final boolean isFocusedDay = (mTempDate.get(Calendar.MONTH) == focusedMonth); + mFocusDay[i] = isFocusedDay; + mHasFocusedDay |= isFocusedDay; + mHasUnfocusedDay &= !isFocusedDay; + // do not draw dates outside the valid range to avoid user confusion + if (mTempDate.before(mMinDate) || mTempDate.after(mMaxDate)) { + mDayNumbers[i] = ""; + } else { + mDayNumbers[i] = String.format(Locale.getDefault(), "%d", + mTempDate.get(Calendar.DAY_OF_MONTH)); + } + mTempDate.add(Calendar.DAY_OF_MONTH, 1); + } + // We do one extra add at the end of the loop, if that pushed us to + // new month undo it + if (mTempDate.get(Calendar.DAY_OF_MONTH) == 1) { + mTempDate.add(Calendar.DAY_OF_MONTH, -1); + } + mLastWeekDayMonth = mTempDate.get(Calendar.MONTH); + + updateSelectionPositions(); + } + + /** + * Initialize the paint instances. + */ + private void initilaizePaints() { + mDrawPaint.setFakeBoldText(false); + mDrawPaint.setAntiAlias(true); + mDrawPaint.setStyle(Paint.Style.FILL); + + mMonthNumDrawPaint.setFakeBoldText(true); + mMonthNumDrawPaint.setAntiAlias(true); + mMonthNumDrawPaint.setStyle(Paint.Style.FILL); + mMonthNumDrawPaint.setTextAlign(Paint.Align.CENTER); + mMonthNumDrawPaint.setTextSize(mDateTextSize); + } + + /** + * Returns the month of the first day in this week. + * + * @return The month the first day of this view is in. + */ + public int getMonthOfFirstWeekDay() { + return mMonthOfFirstWeekDay; + } + + /** + * Returns the month of the last day in this week + * + * @return The month the last day of this view is in + */ + public int getMonthOfLastWeekDay() { + return mLastWeekDayMonth; + } + + /** + * Returns the first day in this view. + * + * @return The first day in the view. + */ + public Calendar getFirstDay() { + return mFirstDay; + } + + /** + * Calculates the day that the given x position is in, accounting for + * week number. + * + * @param x The x position of the touch event. + * @return True if a day was found for the given location. + */ + public boolean getDayFromLocation(float x, Calendar outCalendar) { + final boolean isLayoutRtl = isLayoutRtl(); + + int start; + int end; + + if (isLayoutRtl) { + start = 0; + end = mShowWeekNumber ? mWidth - mWidth / mNumCells : mWidth; + } else { + start = mShowWeekNumber ? mWidth / mNumCells : 0; + end = mWidth; + } + + if (x < start || x > end) { + outCalendar.clear(); + return false; + } + + // Selection is (x - start) / (pixels/day) which is (x - start) * day / pixels + int dayPosition = (int) ((x - start) * mDaysPerWeek / (end - start)); + + if (isLayoutRtl) { + dayPosition = mDaysPerWeek - 1 - dayPosition; + } + + outCalendar.setTimeInMillis(mFirstDay.getTimeInMillis()); + outCalendar.add(Calendar.DAY_OF_MONTH, dayPosition); + + return true; + } + + @Override + protected void onDraw(Canvas canvas) { + drawBackground(canvas); + drawWeekNumbersAndDates(canvas); + drawWeekSeparators(canvas); + drawSelectedDateVerticalBars(canvas); + } + + /** + * This draws the selection highlight if a day is selected in this week. + * + * @param canvas The canvas to draw on + */ + private void drawBackground(Canvas canvas) { + if (!mHasSelectedDay) { + return; + } + mDrawPaint.setColor(mSelectedWeekBackgroundColor); + + mTempRect.top = mWeekSeperatorLineWidth; + mTempRect.bottom = mHeight; + + final boolean isLayoutRtl = isLayoutRtl(); + + if (isLayoutRtl) { + mTempRect.left = 0; + mTempRect.right = mSelectedLeft - 2; + } else { + mTempRect.left = mShowWeekNumber ? mWidth / mNumCells : 0; + mTempRect.right = mSelectedLeft - 2; + } + canvas.drawRect(mTempRect, mDrawPaint); + + if (isLayoutRtl) { + mTempRect.left = mSelectedRight + 3; + mTempRect.right = mShowWeekNumber ? mWidth - mWidth / mNumCells : mWidth; + } else { + mTempRect.left = mSelectedRight + 3; + mTempRect.right = mWidth; + } + canvas.drawRect(mTempRect, mDrawPaint); + } + + /** + * Draws the week and month day numbers for this week. + * + * @param canvas The canvas to draw on + */ + private void drawWeekNumbersAndDates(Canvas canvas) { + final float textHeight = mDrawPaint.getTextSize(); + final int y = (int) ((mHeight + textHeight) / 2) - mWeekSeperatorLineWidth; + final int nDays = mNumCells; + final int divisor = 2 * nDays; + + mDrawPaint.setTextAlign(Paint.Align.CENTER); + mDrawPaint.setTextSize(mDateTextSize); + + int i = 0; + + if (isLayoutRtl()) { + for (; i < nDays - 1; i++) { + mMonthNumDrawPaint.setColor(mFocusDay[i] ? mFocusedMonthDateColor + : mUnfocusedMonthDateColor); + int x = (2 * i + 1) * mWidth / divisor; + canvas.drawText(mDayNumbers[nDays - 1 - i], x, y, mMonthNumDrawPaint); + } + if (mShowWeekNumber) { + mDrawPaint.setColor(mWeekNumberColor); + int x = mWidth - mWidth / divisor; + canvas.drawText(mDayNumbers[0], x, y, mDrawPaint); + } + } else { + if (mShowWeekNumber) { + mDrawPaint.setColor(mWeekNumberColor); + int x = mWidth / divisor; + canvas.drawText(mDayNumbers[0], x, y, mDrawPaint); + i++; + } + for (; i < nDays; i++) { + mMonthNumDrawPaint.setColor(mFocusDay[i] ? mFocusedMonthDateColor + : mUnfocusedMonthDateColor); + int x = (2 * i + 1) * mWidth / divisor; + canvas.drawText(mDayNumbers[i], x, y, mMonthNumDrawPaint); + } + } + } + + /** + * Draws a horizontal line for separating the weeks. + * + * @param canvas The canvas to draw on. + */ + private void drawWeekSeparators(Canvas canvas) { + // If it is the topmost fully visible child do not draw separator line + int firstFullyVisiblePosition = mListView.getFirstVisiblePosition(); + if (mListView.getChildAt(0).getTop() < 0) { + firstFullyVisiblePosition++; + } + if (firstFullyVisiblePosition == mWeek) { + return; + } + mDrawPaint.setColor(mWeekSeparatorLineColor); + mDrawPaint.setStrokeWidth(mWeekSeperatorLineWidth); + float startX; + float stopX; + if (isLayoutRtl()) { + startX = 0; + stopX = mShowWeekNumber ? mWidth - mWidth / mNumCells : mWidth; + } else { + startX = mShowWeekNumber ? mWidth / mNumCells : 0; + stopX = mWidth; + } + canvas.drawLine(startX, 0, stopX, 0, mDrawPaint); + } + + /** + * Draws the selected date bars if this week has a selected day. + * + * @param canvas The canvas to draw on + */ + private void drawSelectedDateVerticalBars(Canvas canvas) { + if (!mHasSelectedDay) { + return; + } + mSelectedDateVerticalBar.setBounds( + mSelectedLeft - mSelectedDateVerticalBarWidth / 2, + mWeekSeperatorLineWidth, + mSelectedLeft + mSelectedDateVerticalBarWidth / 2, + mHeight); + mSelectedDateVerticalBar.draw(canvas); + mSelectedDateVerticalBar.setBounds( + mSelectedRight - mSelectedDateVerticalBarWidth / 2, + mWeekSeperatorLineWidth, + mSelectedRight + mSelectedDateVerticalBarWidth / 2, + mHeight); + mSelectedDateVerticalBar.draw(canvas); + } + + @Override + protected void onSizeChanged(int w, int h, int oldw, int oldh) { + mWidth = w; + updateSelectionPositions(); + } + + /** + * This calculates the positions for the selected day lines. + */ + private void updateSelectionPositions() { + if (mHasSelectedDay) { + final boolean isLayoutRtl = isLayoutRtl(); + int selectedPosition = mSelectedDay - mFirstDayOfWeek; + if (selectedPosition < 0) { + selectedPosition += 7; + } + if (mShowWeekNumber && !isLayoutRtl) { + selectedPosition++; + } + if (isLayoutRtl) { + mSelectedLeft = (mDaysPerWeek - 1 - selectedPosition) * mWidth / mNumCells; + + } else { + mSelectedLeft = selectedPosition * mWidth / mNumCells; + } + mSelectedRight = mSelectedLeft + mWidth / mNumCells; + } + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + mHeight = (mListView.getHeight() - mListView.getPaddingTop() - mListView + .getPaddingBottom()) / mShownWeekCount; + setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), mHeight); + } + } + +} diff --git a/core/java/android/widget/CalendarViewMaterialDelegate.java b/core/java/android/widget/CalendarViewMaterialDelegate.java new file mode 100644 index 0000000000000000000000000000000000000000..b0f3740ac62067c7294f35d1fa8c8626b1410487 --- /dev/null +++ b/core/java/android/widget/CalendarViewMaterialDelegate.java @@ -0,0 +1,260 @@ +/* + * Copyright (C) 2014 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.widget; + +import com.android.internal.R; + +import android.content.Context; +import android.content.res.Configuration; +import android.content.res.TypedArray; +import android.graphics.drawable.Drawable; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.util.MathUtils; + +import java.util.Calendar; +import java.util.Locale; + +import libcore.icu.LocaleData; + +class CalendarViewMaterialDelegate extends CalendarView.AbstractCalendarViewDelegate { + private final DayPickerView mDayPickerView; + + private CalendarView.OnDateChangeListener mOnDateChangeListener; + + public CalendarViewMaterialDelegate(CalendarView delegator, Context context, AttributeSet attrs, + int defStyleAttr, int defStyleRes) { + super(delegator, context); + + final TypedArray a = context.obtainStyledAttributes(attrs, + R.styleable.CalendarView, defStyleAttr, defStyleRes); + final int firstDayOfWeek = a.getInt(R.styleable.CalendarView_firstDayOfWeek, + LocaleData.get(Locale.getDefault()).firstDayOfWeek); + + final long minDate = parseDateToMillis(a.getString( + R.styleable.CalendarView_minDate), DEFAULT_MIN_DATE); + final long maxDate = parseDateToMillis(a.getString( + R.styleable.CalendarView_maxDate), DEFAULT_MAX_DATE); + if (maxDate < minDate) { + throw new IllegalArgumentException("max date cannot be before min date"); + } + + final long setDate = MathUtils.constrain(System.currentTimeMillis(), minDate, maxDate); + final int dateTextAppearanceResId = a.getResourceId( + R.styleable.CalendarView_dateTextAppearance, + R.style.TextAppearance_DeviceDefault_Small); + + a.recycle(); + + mDayPickerView = new DayPickerView(context); + mDayPickerView.setFirstDayOfWeek(firstDayOfWeek); + mDayPickerView.setCalendarTextAppearance(dateTextAppearanceResId); + mDayPickerView.setMinDate(minDate); + mDayPickerView.setMaxDate(maxDate); + mDayPickerView.setDate(setDate, false, true); + mDayPickerView.setOnDaySelectedListener(mOnDaySelectedListener); + + delegator.addView(mDayPickerView); + } + + private long parseDateToMillis(String dateStr, String defaultDateStr) { + final Calendar tempCalendar = Calendar.getInstance(); + if (TextUtils.isEmpty(dateStr) || !parseDate(dateStr, tempCalendar)) { + parseDate(defaultDateStr, tempCalendar); + } + return tempCalendar.getTimeInMillis(); + } + + @Override + public void setShownWeekCount(int count) { + // Deprecated. + } + + @Override + public int getShownWeekCount() { + // Deprecated. + return 0; + } + + @Override + public void setSelectedWeekBackgroundColor(int color) { + // TODO: Should use a ColorStateList. Deprecate? + } + + @Override + public int getSelectedWeekBackgroundColor() { + return 0; + } + + @Override + public void setFocusedMonthDateColor(int color) { + // TODO: Should use a ColorStateList. Deprecate? + } + + @Override + public int getFocusedMonthDateColor() { + return 0; + } + + @Override + public void setUnfocusedMonthDateColor(int color) { + // TODO: Should use a ColorStateList. Deprecate? + } + + @Override + public int getUnfocusedMonthDateColor() { + return 0; + } + + @Override + public void setWeekDayTextAppearance(int resourceId) { + + } + + @Override + public int getWeekDayTextAppearance() { + return 0; + } + + @Override + public void setDateTextAppearance(int resourceId) { + + } + + @Override + public int getDateTextAppearance() { + return 0; + } + + @Override + public void setWeekNumberColor(int color) { + // Deprecated. + } + + @Override + public int getWeekNumberColor() { + // Deprecated. + return 0; + } + + @Override + public void setWeekSeparatorLineColor(int color) { + // Deprecated. + } + + @Override + public int getWeekSeparatorLineColor() { + // Deprecated. + return 0; + } + + @Override + public void setSelectedDateVerticalBar(int resourceId) { + // Deprecated. + } + + @Override + public void setSelectedDateVerticalBar(Drawable drawable) { + // Deprecated. + } + + @Override + public Drawable getSelectedDateVerticalBar() { + // Deprecated. + return null; + } + + @Override + public void setMinDate(long minDate) { + mDayPickerView.setMinDate(minDate); + } + + @Override + public long getMinDate() { + return mDayPickerView.getMinDate(); + } + + @Override + public void setMaxDate(long maxDate) { + mDayPickerView.setMaxDate(maxDate); + } + + @Override + public long getMaxDate() { + return mDayPickerView.getMaxDate(); + } + + @Override + public void setShowWeekNumber(boolean showWeekNumber) { + // Deprecated. + } + + @Override + public boolean getShowWeekNumber() { + // Deprecated. + return false; + } + + @Override + public void setFirstDayOfWeek(int firstDayOfWeek) { + mDayPickerView.setFirstDayOfWeek(firstDayOfWeek); + } + + @Override + public int getFirstDayOfWeek() { + return mDayPickerView.getFirstDayOfWeek(); + } + + @Override + public void setDate(long date) { + mDayPickerView.setDate(date, true, false); + } + + @Override + public void setDate(long date, boolean animate, boolean center) { + mDayPickerView.setDate(date, animate, center); + } + + @Override + public long getDate() { + return mDayPickerView.getDate(); + } + + @Override + public void setOnDateChangeListener(CalendarView.OnDateChangeListener listener) { + mOnDateChangeListener = listener; + } + + @Override + public void onConfigurationChanged(Configuration newConfig) { + // Nothing to do here, configuration changes are already propagated + // by ViewGroup. + } + + private final DayPickerView.OnDaySelectedListener mOnDaySelectedListener = + new DayPickerView.OnDaySelectedListener() { + @Override + public void onDaySelected(DayPickerView view, Calendar day) { + if (mOnDateChangeListener != null) { + final int year = day.get(Calendar.YEAR); + final int month = day.get(Calendar.MONTH); + final int dayOfMonth = day.get(Calendar.DAY_OF_MONTH); + mOnDateChangeListener.onSelectedDayChange(mDelegator, year, month, dayOfMonth); + } + } + }; +} diff --git a/core/java/android/widget/CheckedTextView.java b/core/java/android/widget/CheckedTextView.java index eb8e8aa66360f5d449538a730918a6a05bcf7cd6..69969a940db81a4464a2f2217fb26eaa0c20a504 100644 --- a/core/java/android/widget/CheckedTextView.java +++ b/core/java/android/widget/CheckedTextView.java @@ -267,6 +267,12 @@ public class CheckedTextView extends TextView implements Checkable { if (mHasCheckMarkTintMode) { mCheckMarkDrawable.setTintMode(mCheckMarkTintMode); } + + // The drawable (or one of its children) may not have been + // stateful before applying the tint, so let's try again. + if (mCheckMarkDrawable.isStateful()) { + mCheckMarkDrawable.setState(getDrawableState()); + } } } diff --git a/core/java/android/widget/CompoundButton.java b/core/java/android/widget/CompoundButton.java index 7d9d3052fe222f3d871460a1dcb836de45405ff7..447ccc2692a268c598877c0348cb3353758b0d63 100644 --- a/core/java/android/widget/CompoundButton.java +++ b/core/java/android/widget/CompoundButton.java @@ -29,6 +29,7 @@ import android.os.Parcel; import android.os.Parcelable; import android.util.AttributeSet; import android.view.Gravity; +import android.view.SoundEffectConstants; import android.view.ViewDebug; import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityNodeInfo; @@ -114,15 +115,16 @@ public abstract class CompoundButton extends Button implements Checkable { @Override public boolean performClick() { - /* - * XXX: These are tiny, need some surrounding 'expanded touch area', - * which will need to be implemented in Button if we only override - * performClick() - */ - - /* When clicked, toggle the state */ toggle(); - return super.performClick(); + + final boolean handled = super.performClick(); + if (!handled) { + // View only makes a sound effect if the onClickListener was + // called, so we'll need to make one here instead. + playSoundEffect(SoundEffectConstants.CLICK); + } + + return handled; } @ViewDebug.ExportedProperty @@ -313,6 +315,12 @@ public abstract class CompoundButton extends Button implements Checkable { if (mHasButtonTintMode) { mButtonDrawable.setTintMode(mButtonTintMode); } + + // The drawable (or one of its children) may not have been + // stateful before applying the tint, so let's try again. + if (mButtonDrawable.isStateful()) { + mButtonDrawable.setState(getDrawableState()); + } } } diff --git a/core/java/android/widget/DatePicker.java b/core/java/android/widget/DatePicker.java index 3e4eb021b5655a63bfe97f663733acde5e4356c4..0ca08e1a0bf77ffb2d91870f3a8adfe9a469db62 100644 --- a/core/java/android/widget/DatePicker.java +++ b/core/java/android/widget/DatePicker.java @@ -51,12 +51,19 @@ import java.util.TimeZone; import libcore.icu.ICU; /** - * This class is a widget for selecting a date. The date can be selected by a - * year, month, and day spinners or a {@link CalendarView}. The set of spinners - * and the calendar view are automatically synchronized. The client can - * customize whether only the spinners, or only the calendar view, or both to be - * displayed. Also the minimal and maximal date from which dates to be selected - * can be customized. + * Provides a widget for selecting a date. + *

    + * When the {@link android.R.styleable#DatePicker_datePickerMode} attribute is + * set to {@code spinner}, the date can be selected using year, month, and day + * spinners or a {@link CalendarView}. The set of spinners and the calendar + * view are automatically synchronized. The client can customize whether only + * the spinners, or only the calendar view, or both to be displayed. + *

    + *

    + * When the {@link android.R.styleable#DatePicker_datePickerMode} attribute is + * set to {@code calendar}, the month and day can be selected using a + * calendar-style view while the year can be selected separately using a list. + *

    *

    * See the Pickers * guide. @@ -80,6 +87,7 @@ import libcore.icu.ICU; * @attr ref android.R.styleable#DatePicker_yearListItemTextAppearance * @attr ref android.R.styleable#DatePicker_yearListSelectorColor * @attr ref android.R.styleable#DatePicker_calendarTextColor + * @attr ref android.R.styleable#DatePicker_datePickerMode */ @Widget public class DatePicker extends FrameLayout { @@ -357,6 +365,10 @@ public class DatePicker extends FrameLayout { /** * Gets the {@link CalendarView}. + *

    + * This method returns {@code null} when the + * {@link android.R.styleable#DatePicker_datePickerMode} attribute is set + * to {@code calendar}. * * @return The calendar view. * @see #getCalendarViewShown() @@ -367,6 +379,10 @@ public class DatePicker extends FrameLayout { /** * Sets whether the {@link CalendarView} is shown. + *

    + * Calling this method has no effect when the + * {@link android.R.styleable#DatePicker_datePickerMode} attribute is set + * to {@code calendar}. * * @param shown True if the calendar view is to be shown. */ diff --git a/core/java/android/widget/DatePickerCalendarDelegate.java b/core/java/android/widget/DatePickerCalendarDelegate.java index e71b38366baa694f39ecf35e6ddfa9b27c676448..e75643abee7eb4422d67c451cce3647292c9af05 100644 --- a/core/java/android/widget/DatePickerCalendarDelegate.java +++ b/core/java/android/widget/DatePickerCalendarDelegate.java @@ -21,13 +21,11 @@ import android.content.res.ColorStateList; import android.content.res.Configuration; import android.content.res.Resources; import android.content.res.TypedArray; -import android.graphics.drawable.Drawable; import android.os.Parcel; import android.os.Parcelable; import android.text.format.DateFormat; import android.text.format.DateUtils; import android.util.AttributeSet; -import android.util.SparseArray; import android.view.HapticFeedbackConstants; import android.view.LayoutInflater; import android.view.View; @@ -185,7 +183,13 @@ class DatePickerCalendarDelegate extends DatePicker.AbstractDatePickerDelegate i mHeaderYearTextView.getTextColors(), R.attr.state_selected, headerSelectedTextColor)); - mDayPickerView = new DayPickerView(mContext, this); + mDayPickerView = new DayPickerView(mContext); + mDayPickerView.setFirstDayOfWeek(mFirstDayOfWeek); + mDayPickerView.setMinDate(mMinDate.getTimeInMillis()); + mDayPickerView.setMaxDate(mMaxDate.getTimeInMillis()); + mDayPickerView.setDate(mCurrentDate.getTimeInMillis()); + mDayPickerView.setOnDaySelectedListener(mOnDaySelectedListener); + mYearPickerView = new YearPickerView(mContext); mYearPickerView.init(this); @@ -325,7 +329,6 @@ class DatePickerCalendarDelegate extends DatePicker.AbstractDatePickerDelegate i String fullDateText = DateUtils.formatDateTime(mContext, millis, flags); mAnimator.announceForAccessibility(fullDateText); } - updatePickers(); } private void setCurrentView(final int viewIndex) { @@ -333,7 +336,7 @@ class DatePickerCalendarDelegate extends DatePicker.AbstractDatePickerDelegate i switch (viewIndex) { case MONTH_AND_DAY_VIEW: - mDayPickerView.onDateChanged(); + mDayPickerView.setDate(getSelectedDay().getTimeInMillis()); if (mCurrentView != viewIndex) { mMonthAndDayLayout.setSelected(true); mHeaderYearTextView.setSelected(false); @@ -365,11 +368,13 @@ class DatePickerCalendarDelegate extends DatePicker.AbstractDatePickerDelegate i @Override public void init(int year, int monthOfYear, int dayOfMonth, DatePicker.OnDateChangedListener callBack) { - mDateChangedListener = callBack; mCurrentDate.set(Calendar.YEAR, year); mCurrentDate.set(Calendar.MONTH, monthOfYear); mCurrentDate.set(Calendar.DAY_OF_MONTH, dayOfMonth); - updateDisplay(false); + + mDateChangedListener = callBack; + + onDateChanged(false, false); } @Override @@ -377,10 +382,29 @@ class DatePickerCalendarDelegate extends DatePicker.AbstractDatePickerDelegate i mCurrentDate.set(Calendar.YEAR, year); mCurrentDate.set(Calendar.MONTH, month); mCurrentDate.set(Calendar.DAY_OF_MONTH, dayOfMonth); - if (mDateChangedListener != null) { - mDateChangedListener.onDateChanged(mDelegator, year, month, dayOfMonth); + + onDateChanged(false, true); + } + + private void onDateChanged(boolean fromUser, boolean callbackToClient) { + if (callbackToClient && mDateChangedListener != null) { + final int year = mCurrentDate.get(Calendar.YEAR); + final int monthOfYear = mCurrentDate.get(Calendar.MONTH); + final int dayOfMonth = mCurrentDate.get(Calendar.DAY_OF_MONTH); + mDateChangedListener.onDateChanged(mDelegator, year, monthOfYear, dayOfMonth); + } + + for (OnDateChangedListener listener : mListeners) { + listener.onDateChanged(); + } + + mDayPickerView.setDate(getSelectedDay().getTimeInMillis()); + + updateDisplay(fromUser); + + if (fromUser) { + tryVibrate(); } - updateDisplay(false); } @Override @@ -407,11 +431,11 @@ class DatePickerCalendarDelegate extends DatePicker.AbstractDatePickerDelegate i } if (mCurrentDate.before(mTempDate)) { mCurrentDate.setTimeInMillis(minDate); - updatePickers(); - updateDisplay(false); + onDateChanged(false, true); } mMinDate.setTimeInMillis(minDate); - mDayPickerView.goTo(getSelectedDay(), false, true, true); + mDayPickerView.setMinDate(minDate); + mYearPickerView.setRange(mMinDate, mMaxDate); } @Override @@ -428,11 +452,11 @@ class DatePickerCalendarDelegate extends DatePicker.AbstractDatePickerDelegate i } if (mCurrentDate.after(mTempDate)) { mCurrentDate.setTimeInMillis(maxDate); - updatePickers(); - updateDisplay(false); + onDateChanged(false, true); } mMaxDate.setTimeInMillis(maxDate); - mDayPickerView.goTo(getSelectedDay(), false, true, true); + mDayPickerView.setMaxDate(maxDate); + mYearPickerView.setRange(mMinDate, mMaxDate); } @Override @@ -443,6 +467,8 @@ class DatePickerCalendarDelegate extends DatePicker.AbstractDatePickerDelegate i @Override public void setFirstDayOfWeek(int firstDayOfWeek) { mFirstDayOfWeek = firstDayOfWeek; + + mDayPickerView.setFirstDayOfWeek(firstDayOfWeek); } @Override @@ -453,36 +479,6 @@ class DatePickerCalendarDelegate extends DatePicker.AbstractDatePickerDelegate i return mCurrentDate.getFirstDayOfWeek(); } - @Override - public int getMinYear() { - return mMinDate.get(Calendar.YEAR); - } - - @Override - public int getMaxYear() { - return mMaxDate.get(Calendar.YEAR); - } - - @Override - public int getMinMonth() { - return mMinDate.get(Calendar.MONTH); - } - - @Override - public int getMaxMonth() { - return mMaxDate.get(Calendar.MONTH); - } - - @Override - public int getMinDay() { - return mMinDate.get(Calendar.DAY_OF_MONTH); - } - - @Override - public int getMaxDay() { - return mMaxDate.get(Calendar.DAY_OF_MONTH); - } - @Override public void setEnabled(boolean enabled) { mMonthAndDayLayout.setEnabled(enabled); @@ -595,9 +591,10 @@ class DatePickerCalendarDelegate extends DatePicker.AbstractDatePickerDelegate i public void onYearSelected(int year) { adjustDayInMonthIfNeeded(mCurrentDate.get(Calendar.MONTH), year); mCurrentDate.set(Calendar.YEAR, year); - updatePickers(); + onDateChanged(true, true); + + // Auto-advance to month and day view. setCurrentView(MONTH_AND_DAY_VIEW); - updateDisplay(true); } // If the newly selected month / year does not contain the currently selected day number, @@ -634,31 +631,11 @@ class DatePickerCalendarDelegate extends DatePicker.AbstractDatePickerDelegate i } } - @Override - public void onDayOfMonthSelected(int year, int month, int day) { - mCurrentDate.set(Calendar.YEAR, year); - mCurrentDate.set(Calendar.MONTH, month); - mCurrentDate.set(Calendar.DAY_OF_MONTH, day); - updatePickers(); - updateDisplay(true); - } - - private void updatePickers() { - for (OnDateChangedListener listener : mListeners) { - listener.onDateChanged(); - } - } - @Override public void registerOnDateChangedListener(OnDateChangedListener listener) { mListeners.add(listener); } - @Override - public void unregisterOnDateChangedListener(OnDateChangedListener listener) { - mListeners.remove(listener); - } - @Override public Calendar getSelectedDay() { return mCurrentDate; @@ -679,6 +656,18 @@ class DatePickerCalendarDelegate extends DatePicker.AbstractDatePickerDelegate i } } + /** + * Listener called when the user selects a day in the day picker view. + */ + private final DayPickerView.OnDaySelectedListener + mOnDaySelectedListener = new DayPickerView.OnDaySelectedListener() { + @Override + public void onDaySelected(DayPickerView view, Calendar day) { + mCurrentDate.setTimeInMillis(day.getTimeInMillis()); + onDateChanged(true, true); + } + }; + /** * Class for managing state storing/restoring. */ diff --git a/core/java/android/widget/DatePickerController.java b/core/java/android/widget/DatePickerController.java index 059709d55156e4e65b7ff345239b5d0d1b16f535..8f809ba0c8d3adc3c2b9349d21f0f2f7369205a4 100644 --- a/core/java/android/widget/DatePickerController.java +++ b/core/java/android/widget/DatePickerController.java @@ -27,31 +27,9 @@ interface DatePickerController { void onYearSelected(int year); - void onDayOfMonthSelected(int year, int month, int day); - void registerOnDateChangedListener(OnDateChangedListener listener); - void unregisterOnDateChangedListener(OnDateChangedListener listener); - Calendar getSelectedDay(); - void setFirstDayOfWeek(int firstDayOfWeek); - int getFirstDayOfWeek(); - - int getMinYear(); - int getMaxYear(); - - int getMinMonth(); - int getMaxMonth(); - - int getMinDay(); - int getMaxDay(); - - void setMinDate(long minDate); - Calendar getMinDate(); - - void setMaxDate(long maxDate); - Calendar getMaxDate(); - void tryVibrate(); } diff --git a/core/java/android/widget/DateTimeView.java b/core/java/android/widget/DateTimeView.java index 86cd52f3b477cc57cc7dec592d5cdca1894295c0..db17df7f0773755f08efcef08d19e6cd2c3b8e6f 100644 --- a/core/java/android/widget/DateTimeView.java +++ b/core/java/android/widget/DateTimeView.java @@ -32,6 +32,7 @@ import android.widget.RemoteViews.RemoteView; import java.text.DateFormat; import java.text.SimpleDateFormat; +import java.util.ArrayList; import java.util.Date; // @@ -62,8 +63,8 @@ public class DateTimeView extends TextView { int mLastDisplay = -1; DateFormat mLastFormat; - private boolean mAttachedToWindow; private long mUpdateTimeMillis; + private static final ThreadLocal sReceiverInfo = new ThreadLocal(); public DateTimeView(Context context) { super(context); @@ -76,15 +77,21 @@ public class DateTimeView extends TextView { @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); - registerReceivers(); - mAttachedToWindow = true; + ReceiverInfo ri = sReceiverInfo.get(); + if (ri == null) { + ri = new ReceiverInfo(); + sReceiverInfo.set(ri); + } + ri.addView(this); } @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); - unregisterReceivers(); - mAttachedToWindow = false; + final ReceiverInfo ri = sReceiverInfo.get(); + if (ri != null) { + ri.removeView(this); + } } @android.view.RemotableViewMethod @@ -189,37 +196,82 @@ public class DateTimeView extends TextView { return android.text.format.DateFormat.getTimeFormat(getContext()); } - private void registerReceivers() { - Context context = getContext(); - - IntentFilter filter = new IntentFilter(); - filter.addAction(Intent.ACTION_TIME_TICK); - filter.addAction(Intent.ACTION_TIME_CHANGED); - filter.addAction(Intent.ACTION_CONFIGURATION_CHANGED); - filter.addAction(Intent.ACTION_TIMEZONE_CHANGED); - context.registerReceiver(mBroadcastReceiver, filter); + void clearFormatAndUpdate() { + mLastFormat = null; + update(); } - private void unregisterReceivers() { - Context context = getContext(); - context.unregisterReceiver(mBroadcastReceiver); - } + private static class ReceiverInfo { + private final ArrayList mAttachedViews = new ArrayList(); + private final BroadcastReceiver mReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + if (Intent.ACTION_TIME_TICK.equals(action)) { + if (System.currentTimeMillis() < getSoonestUpdateTime()) { + // The update() function takes a few milliseconds to run because of + // all of the time conversions it needs to do, so we can't do that + // every minute. + return; + } + } + // ACTION_TIME_CHANGED can also signal a change of 12/24 hr. format. + updateAll(); + } + }; + + private final ContentObserver mObserver = new ContentObserver(new Handler()) { + @Override + public void onChange(boolean selfChange) { + updateAll(); + } + }; + + public void addView(DateTimeView v) { + final boolean register = mAttachedViews.isEmpty(); + mAttachedViews.add(v); + if (register) { + register(v.getContext().getApplicationContext()); + } + } - private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); - if (Intent.ACTION_TIME_TICK.equals(action)) { - if (System.currentTimeMillis() < mUpdateTimeMillis) { - // The update() function takes a few milliseconds to run because of - // all of the time conversions it needs to do, so we can't do that - // every minute. - return; + public void removeView(DateTimeView v) { + mAttachedViews.remove(v); + if (mAttachedViews.isEmpty()) { + unregister(v.getContext().getApplicationContext()); + } + } + + void updateAll() { + final int count = mAttachedViews.size(); + for (int i = 0; i < count; i++) { + mAttachedViews.get(i).clearFormatAndUpdate(); + } + } + + long getSoonestUpdateTime() { + long result = Long.MAX_VALUE; + final int count = mAttachedViews.size(); + for (int i = 0; i < count; i++) { + final long time = mAttachedViews.get(i).mUpdateTimeMillis; + if (time < result) { + result = time; } } - // ACTION_TIME_CHANGED can also signal a change of 12/24 hr. format. - mLastFormat = null; - update(); + return result; } - }; + + void register(Context context) { + final IntentFilter filter = new IntentFilter(); + filter.addAction(Intent.ACTION_TIME_TICK); + filter.addAction(Intent.ACTION_TIME_CHANGED); + filter.addAction(Intent.ACTION_CONFIGURATION_CHANGED); + filter.addAction(Intent.ACTION_TIMEZONE_CHANGED); + context.registerReceiver(mReceiver, filter); + } + + void unregister(Context context) { + context.unregisterReceiver(mReceiver); + } + } } diff --git a/core/java/android/widget/DayPickerView.java b/core/java/android/widget/DayPickerView.java index ca4095ed1292f3efa5115158e9d9a2144d8fbedc..7db3fb9e113a32cdff1b1026502aa1b98328d287 100644 --- a/core/java/android/widget/DayPickerView.java +++ b/core/java/android/widget/DayPickerView.java @@ -16,15 +16,12 @@ package android.widget; -import android.annotation.SuppressLint; import android.content.Context; import android.content.res.ColorStateList; import android.content.res.Configuration; -import android.os.Build; import android.os.Bundle; -import android.os.Handler; -import android.util.AttributeSet; import android.util.Log; +import android.util.MathUtils; import android.view.View; import android.view.ViewConfiguration; import android.view.accessibility.AccessibilityEvent; @@ -37,9 +34,7 @@ import java.util.Locale; /** * This displays a list of months in a calendar format with selectable days. */ -class DayPickerView extends ListView implements AbsListView.OnScrollListener, - OnDateChangedListener { - +class DayPickerView extends ListView implements AbsListView.OnScrollListener { private static final String TAG = "DayPickerView"; // How long the GoTo fling animation should last @@ -48,18 +43,24 @@ class DayPickerView extends ListView implements AbsListView.OnScrollListener, // How long to wait after receiving an onScrollStateChanged notification before acting on it private static final int SCROLL_CHANGE_DELAY = 40; - private static int LIST_TOP_OFFSET = -1; // so that the top line will be under the separator + // so that the top line will be under the separator + private static final int LIST_TOP_OFFSET = -1; - private SimpleDateFormat mYearFormat = new SimpleDateFormat("yyyy", Locale.getDefault()); + private final SimpleMonthAdapter mAdapter = new SimpleMonthAdapter(getContext()); - // These affect the scroll speed and feel - private float mFriction = 1.0f; + private final ScrollStateRunnable mScrollStateChangedRunnable = new ScrollStateRunnable(this); + + private SimpleDateFormat mYearFormat = new SimpleDateFormat("yyyy", Locale.getDefault()); // highlighted time private Calendar mSelectedDay = Calendar.getInstance(); - private SimpleMonthAdapter mAdapter; - private Calendar mTempDay = Calendar.getInstance(); + private Calendar mMinDate = Calendar.getInstance(); + private Calendar mMaxDate = Calendar.getInstance(); + + private Calendar mTempCalendar; + + private OnDaySelectedListener mOnDaySelectedListener; // which month should be displayed/highlighted [0-11] private int mCurrentMonthDisplayed; @@ -68,60 +69,91 @@ class DayPickerView extends ListView implements AbsListView.OnScrollListener, // used for tracking what state listview is in private int mCurrentScrollState = OnScrollListener.SCROLL_STATE_IDLE; - private DatePickerController mController; private boolean mPerformingScroll; - private ScrollStateRunnable mScrollStateChangedRunnable = new ScrollStateRunnable(this); - - public DayPickerView(Context context, DatePickerController controller) { + public DayPickerView(Context context) { super(context); - init(); - setController(controller); - } - public void setController(DatePickerController controller) { - if (mController != null) { - mController.unregisterOnDateChangedListener(this); - } - mController = controller; - mController.registerOnDateChangedListener(this); - setUpAdapter(); setAdapter(mAdapter); - onDateChanged(); - } - - public void init() { setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); setDrawSelectorOnTop(false); - setUpListView(); + + goTo(mSelectedDay.getTimeInMillis(), false, false, true); + + mAdapter.setOnDaySelectedListener(mProxyOnDaySelectedListener); } - public void onChange() { - setUpAdapter(); - setAdapter(mAdapter); + /** + * Sets the currently selected date to the specified timestamp. Jumps + * immediately to the new date. To animate to the new date, use + * {@link #setDate(long, boolean, boolean)}. + * + * @param timeInMillis + */ + public void setDate(long timeInMillis) { + setDate(timeInMillis, false, true); + } + + public void setDate(long timeInMillis, boolean animate, boolean forceScroll) { + goTo(timeInMillis, animate, true, forceScroll); + } + + public long getDate() { + return mSelectedDay.getTimeInMillis(); + } + + public void setFirstDayOfWeek(int firstDayOfWeek) { + mAdapter.setFirstDayOfWeek(firstDayOfWeek); + } + + public int getFirstDayOfWeek() { + return mAdapter.getFirstDayOfWeek(); + } + + public void setMinDate(long timeInMillis) { + mMinDate.setTimeInMillis(timeInMillis); + onRangeChanged(); + } + + public long getMinDate() { + return mMinDate.getTimeInMillis(); + } + + public void setMaxDate(long timeInMillis) { + mMaxDate.setTimeInMillis(timeInMillis); + onRangeChanged(); + } + + public long getMaxDate() { + return mMaxDate.getTimeInMillis(); } /** - * Creates a new adapter if necessary and sets up its parameters. Override - * this method to provide a custom adapter. + * Handles changes to date range. */ - protected void setUpAdapter() { - if (mAdapter == null) { - mAdapter = new SimpleMonthAdapter(getContext(), mController); - } else { - mAdapter.setSelectedDay(mSelectedDay); - mAdapter.notifyDataSetChanged(); - } - // refresh the view with the new parameters - mAdapter.notifyDataSetChanged(); + public void onRangeChanged() { + mAdapter.setRange(mMinDate, mMaxDate); + + // Changing the min/max date changes the selection position since we + // don't really have stable IDs. Jumps immediately to the new position. + goTo(mSelectedDay.getTimeInMillis(), false, false, true); + } + + /** + * Sets the listener to call when the user selects a day. + * + * @param listener The listener to call. + */ + public void setOnDaySelectedListener(OnDaySelectedListener listener) { + mOnDaySelectedListener = listener; } /* * Sets all the required fields for the list view. Override this method to * set a different list view behavior. */ - protected void setUpListView() { + private void setUpListView() { // Transparent background on scroll setCacheColorHint(0); // No dividers @@ -134,26 +166,27 @@ class DayPickerView extends ListView implements AbsListView.OnScrollListener, setOnScrollListener(this); setFadingEdgeLength(0); // Make the scrolling behavior nicer - setFriction(ViewConfiguration.getScrollFriction() * mFriction); + setFriction(ViewConfiguration.getScrollFriction()); } - private int getDiffMonths(Calendar start, Calendar end){ + private int getDiffMonths(Calendar start, Calendar end) { final int diffYears = end.get(Calendar.YEAR) - start.get(Calendar.YEAR); final int diffMonths = end.get(Calendar.MONTH) - start.get(Calendar.MONTH) + 12 * diffYears; return diffMonths; } - private int getPositionFromDay(Calendar day) { - final int diffMonthMax = getDiffMonths(mController.getMinDate(), mController.getMaxDate()); - int diffMonth = getDiffMonths(mController.getMinDate(), day); + private int getPositionFromDay(long timeInMillis) { + final int diffMonthMax = getDiffMonths(mMinDate, mMaxDate); + final int diffMonth = getDiffMonths(mMinDate, getTempCalendarForTime(timeInMillis)); + return MathUtils.constrain(diffMonth, 0, diffMonthMax); + } - if (diffMonth < 0 ) { - diffMonth = 0; - } else if (diffMonth > diffMonthMax) { - diffMonth = diffMonthMax; + private Calendar getTempCalendarForTime(long timeInMillis) { + if (mTempCalendar == null) { + mTempCalendar = Calendar.getInstance(); } - - return diffMonth; + mTempCalendar.setTimeInMillis(timeInMillis); + return mTempCalendar; } /** @@ -171,15 +204,14 @@ class DayPickerView extends ListView implements AbsListView.OnScrollListener, * visible * @return Whether or not the view animated to the new location */ - public boolean goTo(Calendar day, boolean animate, boolean setSelected, - boolean forceScroll) { + private boolean goTo(long day, boolean animate, boolean setSelected, boolean forceScroll) { // Set the selected day if (setSelected) { - mSelectedDay.setTimeInMillis(day.getTimeInMillis()); + mSelectedDay.setTimeInMillis(day); } - mTempDay.setTimeInMillis(day.getTimeInMillis()); + mTempDay.setTimeInMillis(day); final int position = getPositionFromDay(day); View child; @@ -273,6 +305,10 @@ class DayPickerView extends ListView implements AbsListView.OnScrollListener, mAdapter.setCalendarTextColor(colors); } + void setCalendarTextAppearance(int resId) { + mAdapter.setCalendarTextAppearance(resId); + } + protected class ScrollStateRunnable implements Runnable { private int mNewState; private View mParent; @@ -361,11 +397,6 @@ class DayPickerView extends ListView implements AbsListView.OnScrollListener, return firstPosition + mostVisibleIndex; } - @Override - public void onDateChanged() { - goTo(mController.getSelectedDay(), false, true, true); - } - /** * Attempts to return the date that has accessibility focus. * @@ -435,7 +466,7 @@ class DayPickerView extends ListView implements AbsListView.OnScrollListener, } private String getMonthAndYearString(Calendar day) { - StringBuffer sbuf = new StringBuffer(); + final StringBuilder sbuf = new StringBuilder(); sbuf.append(day.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.getDefault())); sbuf.append(" "); sbuf.append(mYearFormat.format(day.getTime())); @@ -449,8 +480,8 @@ class DayPickerView extends ListView implements AbsListView.OnScrollListener, @Override public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) { super.onInitializeAccessibilityNodeInfo(info); - info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD); - info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD); + info.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_FORWARD); + info.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_BACKWARD); } /** @@ -464,10 +495,10 @@ class DayPickerView extends ListView implements AbsListView.OnScrollListener, } // Figure out what month is showing. - int firstVisiblePosition = getFirstVisiblePosition(); - int month = firstVisiblePosition % 12; - int year = firstVisiblePosition / 12 + mController.getMinYear(); - Calendar day = Calendar.getInstance(); + final int firstVisiblePosition = getFirstVisiblePosition(); + final int month = firstVisiblePosition % 12; + final int year = firstVisiblePosition / 12 + mMinDate.get(Calendar.YEAR); + final Calendar day = Calendar.getInstance(); day.set(year, month, 1); // Scroll either forward or backward one month. @@ -494,8 +525,22 @@ class DayPickerView extends ListView implements AbsListView.OnScrollListener, // Go to that month. announceForAccessibility(getMonthAndYearString(day)); - goTo(day, true, false, true); + goTo(day.getTimeInMillis(), true, false, true); mPerformingScroll = true; return true; } + + public interface OnDaySelectedListener { + public void onDaySelected(DayPickerView view, Calendar day); + } + + private final SimpleMonthAdapter.OnDaySelectedListener + mProxyOnDaySelectedListener = new SimpleMonthAdapter.OnDaySelectedListener() { + @Override + public void onDaySelected(SimpleMonthAdapter adapter, Calendar day) { + if (mOnDaySelectedListener != null) { + mOnDaySelectedListener.onDaySelected(DayPickerView.this, day); + } + } + }; } diff --git a/core/java/android/widget/FastScroller.java b/core/java/android/widget/FastScroller.java index 068790553708fd9600b32f057fc2d3a2c01308bf..fe143dec8900845141850bc9df87a4a144e220da 100644 --- a/core/java/android/widget/FastScroller.java +++ b/core/java/android/widget/FastScroller.java @@ -106,6 +106,9 @@ class FastScroller { */ private final int[] mPreviewResId = new int[2]; + /** The minimum touch target size in pixels. */ + private final int mMinimumTouchTarget; + /** * Padding in pixels around the preview text. Applied as layout margins to * the preview text and padding to the preview image. @@ -254,6 +257,9 @@ class FastScroller { mPrimaryText = createPreviewTextView(context); mSecondaryText = createPreviewTextView(context); + mMinimumTouchTarget = listView.getResources().getDimensionPixelSize( + com.android.internal.R.dimen.fast_scroller_minimum_touch_target); + setStyle(styleResId); final ViewGroupOverlay overlay = listView.getOverlay(); @@ -1194,17 +1200,37 @@ class FastScroller { return MathUtils.constrain((y - offset) / range, 0f, 1f); } + /** + * Calculates the thumb position based on the visible items. + * + * @param firstVisibleItem First visible item, >= 0. + * @param visibleItemCount Number of visible items, >= 0. + * @param totalItemCount Total number of items, >= 0. + * @return + */ private float getPosFromItemCount( int firstVisibleItem, int visibleItemCount, int totalItemCount) { - if (mSectionIndexer == null || mListAdapter == null) { + final SectionIndexer sectionIndexer = mSectionIndexer; + if (sectionIndexer == null || mListAdapter == null) { getSectionsFromIndexer(); } - final boolean hasSections = mSectionIndexer != null && mSections != null + if (visibleItemCount == 0 || totalItemCount == 0) { + // No items are visible. + return 0; + } + + final boolean hasSections = sectionIndexer != null && mSections != null && mSections.length > 0; if (!hasSections || !mMatchDragPosition) { - return (float) firstVisibleItem / (totalItemCount - visibleItemCount); + if (visibleItemCount == totalItemCount) { + // All items are visible. + return 0; + } else { + return (float) firstVisibleItem / (totalItemCount - visibleItemCount); + } } + // Ignore headers. firstVisibleItem -= mHeaderCount; if (firstVisibleItem < 0) { @@ -1222,14 +1248,14 @@ class FastScroller { } // Number of rows in this section. - final int section = mSectionIndexer.getSectionForPosition(firstVisibleItem); - final int sectionPos = mSectionIndexer.getPositionForSection(section); + final int section = sectionIndexer.getSectionForPosition(firstVisibleItem); + final int sectionPos = sectionIndexer.getPositionForSection(section); final int sectionCount = mSections.length; final int positionsInSection; if (section < sectionCount - 1) { final int nextSectionPos; if (section + 1 < sectionCount) { - nextSectionPos = mSectionIndexer.getPositionForSection(section + 1); + nextSectionPos = sectionIndexer.getPositionForSection(section + 1); } else { nextSectionPos = totalItemCount - 1; } @@ -1454,10 +1480,18 @@ class FastScroller { } private boolean isPointInsideX(float x) { + final float offset = mThumbImage.getTranslationX(); + final float left = mThumbImage.getLeft() + offset; + final float right = mThumbImage.getRight() + offset; + + // Apply the minimum touch target size. + final float targetSizeDiff = mMinimumTouchTarget - (right - left); + final float adjust = targetSizeDiff > 0 ? targetSizeDiff : 0; + if (mLayoutFromRight) { - return x >= mThumbImage.getLeft(); + return x >= mThumbImage.getLeft() - adjust; } else { - return x <= mThumbImage.getRight(); + return x <= mThumbImage.getRight() + adjust; } } @@ -1465,7 +1499,12 @@ class FastScroller { final float offset = mThumbImage.getTranslationY(); final float top = mThumbImage.getTop() + offset; final float bottom = mThumbImage.getBottom() + offset; - return y >= top && y <= bottom; + + // Apply the minimum touch target size. + final float targetSizeDiff = mMinimumTouchTarget - (bottom - top); + final float adjust = targetSizeDiff > 0 ? targetSizeDiff / 2 : 0; + + return y >= (top - adjust) && y <= (bottom + adjust); } /** diff --git a/core/java/android/widget/FrameLayout.java b/core/java/android/widget/FrameLayout.java index e3175242d19e656fb50991b9f64321d0b6902d80..d974c29c39eb582994fe2f33019bfb0d934873e1 100644 --- a/core/java/android/widget/FrameLayout.java +++ b/core/java/android/widget/FrameLayout.java @@ -384,6 +384,12 @@ public class FrameLayout extends ViewGroup { if (mHasForegroundTintMode) { mForeground.setTintMode(mForegroundTintMode); } + + // The drawable (or one of its children) may not have been + // stateful before applying the tint, so let's try again. + if (mForeground.isStateful()) { + mForeground.setState(getDrawableState()); + } } } diff --git a/core/java/android/widget/GridLayout.java b/core/java/android/widget/GridLayout.java index defc26ccabec54362b6944764ad49d484b098800..161ae7ec33a733019168d61afed2e00d3a1648c3 100644 --- a/core/java/android/widget/GridLayout.java +++ b/core/java/android/widget/GridLayout.java @@ -1613,7 +1613,11 @@ public class GridLayout extends ViewGroup { equivalent to the single-source shortest paths problem on a digraph, for which the O(n^2) Bellman-Ford algorithm the most commonly used general solution. */ - private void solve(Arc[] arcs, int[] locations) { + private boolean solve(Arc[] arcs, int[] locations) { + return solve(arcs, locations, true); + } + + private boolean solve(Arc[] arcs, int[] locations, boolean modifyOnError) { String axisName = horizontal ? "horizontal" : "vertical"; int N = getCount() + 1; // The number of vertices is the number of columns/rows + 1. boolean[] originalCulprits = null; @@ -1631,10 +1635,14 @@ public class GridLayout extends ViewGroup { if (originalCulprits != null) { logError(axisName, arcs, originalCulprits); } - return; + return true; } } + if (!modifyOnError) { + return false; // cannot solve with these constraints + } + boolean[] culprits = new boolean[arcs.length]; for (int i = 0; i < N; i++) { for (int j = 0, length = arcs.length; j < length; j++) { @@ -1658,6 +1666,7 @@ public class GridLayout extends ViewGroup { } } } + return true; } private void computeMargins(boolean leading) { @@ -1697,8 +1706,8 @@ public class GridLayout extends ViewGroup { return trailingMargins; } - private void solve(int[] a) { - solve(getArcs(), a); + private boolean solve(int[] a) { + return solve(getArcs(), a); } private boolean computeHasWeights() { @@ -1740,28 +1749,18 @@ public class GridLayout extends ViewGroup { return deltas; } - private void shareOutDelta() { - int totalDelta = 0; - float totalWeight = 0; + private void shareOutDelta(int totalDelta, float totalWeight) { + Arrays.fill(deltas, 0); for (int i = 0, N = getChildCount(); i < N; i++) { View c = getChildAt(i); LayoutParams lp = getLayoutParams(c); Spec spec = horizontal ? lp.columnSpec : lp.rowSpec; float weight = spec.weight; - if (weight != 0) { - int delta = getMeasurement(c, horizontal) - getOriginalMeasurements()[i]; - totalDelta += delta; - totalWeight += weight; - } - } - for (int i = 0, N = getChildCount(); i < N; i++) { - LayoutParams lp = getLayoutParams(getChildAt(i)); - Spec spec = horizontal ? lp.columnSpec : lp.rowSpec; - float weight = spec.weight; if (weight != 0) { int delta = Math.round((weight * totalDelta / totalWeight)); deltas[i] = delta; - // the two adjustments below are to counter the above rounding and avoid off-by-ones at the end + // the two adjustments below are to counter the above rounding and avoid + // off-by-ones at the end totalDelta -= delta; totalWeight -= weight; } @@ -1771,12 +1770,46 @@ public class GridLayout extends ViewGroup { private void solveAndDistributeSpace(int[] a) { Arrays.fill(getDeltas(), 0); solve(a); - shareOutDelta(); - arcsValid = false; - forwardLinksValid = false; - backwardLinksValid = false; - groupBoundsValid = false; - solve(a); + int deltaMax = parentMin.value * getChildCount() + 1; //exclusive + if (deltaMax < 2) { + return; //don't have any delta to distribute + } + int deltaMin = 0; //inclusive + + float totalWeight = calculateTotalWeight(); + + int validDelta = -1; //delta for which a solution exists + boolean validSolution = true; + // do a binary search to find the max delta that won't conflict with constraints + while(deltaMin < deltaMax) { + final int delta = (deltaMin + deltaMax) / 2; + invalidateValues(); + shareOutDelta(delta, totalWeight); + validSolution = solve(getArcs(), a, false); + if (validSolution) { + validDelta = delta; + deltaMin = delta + 1; + } else { + deltaMax = delta; + } + } + if (validDelta > 0 && !validSolution) { + // last solution was not successful but we have a successful one. Use it. + invalidateValues(); + shareOutDelta(validDelta, totalWeight); + solve(a); + } + } + + private float calculateTotalWeight() { + float totalWeight = 0f; + for (int i = 0, N = getChildCount(); i < N; i++) { + View c = getChildAt(i); + LayoutParams lp = getLayoutParams(c); + Spec spec = horizontal ? lp.columnSpec : lp.rowSpec; + totalWeight += spec.weight; + } + return totalWeight; } private void computeLocations(int[] a) { diff --git a/core/java/android/widget/HorizontalScrollView.java b/core/java/android/widget/HorizontalScrollView.java index 0c65c5044da3b82927005d34cb4d812c4d4f6cee..1b93b9705135b807494bb59bcf001a9cd8ff11df 100644 --- a/core/java/android/widget/HorizontalScrollView.java +++ b/core/java/android/widget/HorizontalScrollView.java @@ -20,6 +20,7 @@ import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Rect; +import android.graphics.RectF; import android.os.Build; import android.os.Bundle; import android.os.Parcel; @@ -757,7 +758,7 @@ public class HorizontalScrollView extends FrameLayout { } else { super.scrollTo(scrollX, scrollY); } - + awakenScrollBars(); } diff --git a/core/java/android/widget/ImageView.java b/core/java/android/widget/ImageView.java index f90a9fe24e92027d6c0de37397ccff204324fd37..c68bfcaa5bc2cf26f574e5f9493761fd6bb0a9d3 100644 --- a/core/java/android/widget/ImageView.java +++ b/core/java/android/widget/ImageView.java @@ -386,21 +386,21 @@ public class ImageView extends View { */ @android.view.RemotableViewMethod public void setImageResource(int resId) { - if (mUri != null || mResource != resId) { - final int oldWidth = mDrawableWidth; - final int oldHeight = mDrawableHeight; + // The resource configuration may have changed, so we should always + // try to load the resource even if the resId hasn't changed. + final int oldWidth = mDrawableWidth; + final int oldHeight = mDrawableHeight; - updateDrawable(null); - mResource = resId; - mUri = null; + updateDrawable(null); + mResource = resId; + mUri = null; - resolveUri(); + resolveUri(); - if (oldWidth != mDrawableWidth || oldHeight != mDrawableHeight) { - requestLayout(); - } - invalidate(); + if (oldWidth != mDrawableWidth || oldHeight != mDrawableHeight) { + requestLayout(); } + invalidate(); } /** @@ -527,6 +527,12 @@ public class ImageView extends View { if (mHasDrawableTintMode) { mDrawable.setTintMode(mDrawableTintMode); } + + // The drawable (or one of its children) may not have been + // stateful before applying the tint, so let's try again. + if (mDrawable.isStateful()) { + mDrawable.setState(getDrawableState()); + } } } @@ -820,6 +826,7 @@ public class ImageView extends View { mDrawableHeight = d.getIntrinsicHeight(); applyImageTint(); applyColorMod(); + configureBounds(); } else { mDrawableWidth = mDrawableHeight = -1; @@ -1120,6 +1127,9 @@ public class ImageView extends View { /** @hide */ public void animateTransform(Matrix matrix) { + if (mDrawable == null) { + return; + } if (matrix == null) { mDrawable.setBounds(0, 0, getWidth(), getHeight()); } else { diff --git a/core/java/android/widget/ListPopupWindow.java b/core/java/android/widget/ListPopupWindow.java index 3c186e3b9d2bda42f743e75a6b9dd52eca03b954..d85bbb9e15716c730fef987b74f31a08be8b7ccb 100644 --- a/core/java/android/widget/ListPopupWindow.java +++ b/core/java/android/widget/ListPopupWindow.java @@ -1252,14 +1252,7 @@ public class ListPopupWindow { final boolean wasForwarding = mForwarding; final boolean forwarding; if (wasForwarding) { - if (mWasLongPress) { - // If we started forwarding as a result of a long-press, - // just silently stop forwarding events so that the window - // stays open. - forwarding = onTouchForwarded(event); - } else { - forwarding = onTouchForwarded(event) || !onForwardingStopped(); - } + forwarding = onTouchForwarded(event) || !onForwardingStopped(); } else { forwarding = onTouchObserved(event) && onForwardingStarted(); @@ -1392,7 +1385,9 @@ public class ListPopupWindow { clearCallbacks(); final View src = mSrc; - if (!src.isEnabled()) { + if (!src.isEnabled() || src.isLongClickable()) { + // Ignore long-press if the view is disabled or has its own + // handler. return; } @@ -1401,12 +1396,12 @@ public class ListPopupWindow { } // Don't let the parent intercept our events. - mSrc.getParent().requestDisallowInterceptTouchEvent(true); + src.getParent().requestDisallowInterceptTouchEvent(true); // Make sure we cancel any ongoing source event stream. final long now = SystemClock.uptimeMillis(); final MotionEvent e = MotionEvent.obtain(now, now, MotionEvent.ACTION_CANCEL, 0, 0, 0); - mSrc.onTouchEvent(e); + src.onTouchEvent(e); e.recycle(); mForwarding = true; @@ -1639,6 +1634,11 @@ public class ListPopupWindow { setPressed(false); updateSelectorState(); + final View motionView = getChildAt(mMotionPosition - mFirstPosition); + if (motionView != null) { + motionView.setPressed(false); + } + if (mClickAnimation != null) { mClickAnimation.cancel(); mClickAnimation = null; @@ -1648,10 +1648,32 @@ public class ListPopupWindow { private void setPressedItem(View child, int position, float x, float y) { mDrawsInPressedState = true; - // Ordering is essential. First update the pressed state and layout - // the children. This will ensure the selector actually gets drawn. - setPressed(true); - layoutChildren(); + // Ordering is essential. First, update the container's pressed state. + drawableHotspotChanged(x, y); + if (!isPressed()) { + setPressed(true); + } + + // Next, run layout if we need to stabilize child positions. + if (mDataChanged) { + layoutChildren(); + } + + // Manage the pressed view based on motion position. This allows us to + // play nicely with actual touch and scroll events. + final View motionView = getChildAt(mMotionPosition - mFirstPosition); + if (motionView != null && motionView != child && motionView.isPressed()) { + motionView.setPressed(false); + } + mMotionPosition = position; + + // Offset for child coordinates. + final float childX = x - child.getLeft(); + final float childY = y - child.getTop(); + child.drawableHotspotChanged(childX, childY); + if (!child.isPressed()) { + child.setPressed(true); + } // Ensure that keyboard focus starts from the last touched position. setSelectedPositionInt(position); diff --git a/core/java/android/widget/OverScroller.java b/core/java/android/widget/OverScroller.java index 84b1d130089858b117d349fb1fcbdbab4a2cb363..451e493ccd0eba30f14998c3aaf06f73c3e5b8f3 100644 --- a/core/java/android/widget/OverScroller.java +++ b/core/java/android/widget/OverScroller.java @@ -901,6 +901,10 @@ public class OverScroller { final long time = AnimationUtils.currentAnimationTimeMillis(); final long currentTime = time - mStartTime; + if (currentTime == 0) { + // Skip work but report that we're still going if we have a nonzero duration. + return mDuration > 0; + } if (currentTime > mDuration) { return false; } diff --git a/core/java/android/widget/PopupMenu.java b/core/java/android/widget/PopupMenu.java index 111dadc5f8680633194ac23112f42c91621659f2..2708398ae021d484281349ea670ae44ef41752c8 100644 --- a/core/java/android/widget/PopupMenu.java +++ b/core/java/android/widget/PopupMenu.java @@ -16,6 +16,7 @@ package android.widget; +import com.android.internal.R; import com.android.internal.view.menu.MenuBuilder; import com.android.internal.view.menu.MenuPopupHelper; import com.android.internal.view.menu.MenuPresenter; @@ -37,10 +38,11 @@ import android.widget.ListPopupWindow.ForwardingListener; * of the popup will dismiss it. */ public class PopupMenu implements MenuBuilder.Callback, MenuPresenter.Callback { - private Context mContext; - private MenuBuilder mMenu; - private View mAnchor; - private MenuPopupHelper mPopup; + private final Context mContext; + private final MenuBuilder mMenu; + private final View mAnchor; + private final MenuPopupHelper mPopup; + private OnMenuItemClickListener mMenuItemClickListener; private OnDismissListener mDismissListener; private OnTouchListener mDragListener; @@ -58,31 +60,56 @@ public class PopupMenu implements MenuBuilder.Callback, MenuPresenter.Callback { } /** - * Construct a new PopupMenu. + * Constructor to create a new popup menu with an anchor view. * - * @param context Context for the PopupMenu. - * @param anchor Anchor view for this popup. The popup will appear below the anchor if there - * is room, or above it if there is not. + * @param context Context the popup menu is running in, through which it + * can access the current theme, resources, etc. + * @param anchor Anchor view for this popup. The popup will appear below + * the anchor if there is room, or above it if there is not. */ public PopupMenu(Context context, View anchor) { this(context, anchor, Gravity.NO_GRAVITY); } /** - * Construct a new PopupMenu. + * Constructor to create a new popup menu with an anchor view and alignment + * gravity. * - * @param context Context for the PopupMenu. - * @param anchor Anchor view for this popup. The popup will appear below the anchor if there - * is room, or above it if there is not. - * @param gravity The {@link Gravity} value for aligning the popup with its anchor + * @param context Context the popup menu is running in, through which it + * can access the current theme, resources, etc. + * @param anchor Anchor view for this popup. The popup will appear below + * the anchor if there is room, or above it if there is not. + * @param gravity The {@link Gravity} value for aligning the popup with its + * anchor. */ public PopupMenu(Context context, View anchor, int gravity) { - // TODO Theme? + this(context, anchor, gravity, R.attr.popupMenuStyle, 0); + } + + /** + * Constructor a create a new popup menu with a specific style. + * + * @param context Context the popup menu is running in, through which it + * can access the current theme, resources, etc. + * @param anchor Anchor view for this popup. The popup will appear below + * the anchor if there is room, or above it if there is not. + * @param gravity The {@link Gravity} value for aligning the popup with its + * anchor. + * @param popupStyleAttr An attribute in the current theme that contains a + * reference to a style resource that supplies default values for + * the popup window. Can be 0 to not look for defaults. + * @param popupStyleRes A resource identifier of a style resource that + * supplies default values for the popup window, used only if + * popupStyleAttr is 0 or can not be found in the theme. Can be 0 + * to not look for defaults. + */ + public PopupMenu(Context context, View anchor, int gravity, int popupStyleAttr, + int popupStyleRes) { mContext = context; mMenu = new MenuBuilder(context); mMenu.setCallback(this); mAnchor = anchor; - mPopup = new MenuPopupHelper(context, mMenu, anchor); + mPopup = new MenuPopupHelper(context, mMenu, anchor, false, popupStyleAttr, popupStyleRes); mPopup.setGravity(gravity); mPopup.setCallback(this); } diff --git a/core/java/android/widget/PopupWindow.java b/core/java/android/widget/PopupWindow.java index bde620150b5cdb727aa23992c279c257bca95a55..5419ab6cb5bca45c2ab983d54b2effb30125949f 100644 --- a/core/java/android/widget/PopupWindow.java +++ b/core/java/android/widget/PopupWindow.java @@ -97,9 +97,11 @@ public class PopupWindow { private boolean mAllowScrollingAnchorParent = true; private boolean mLayoutInsetDecor = false; private boolean mNotTouchModal; + private boolean mAttachedInDecor = true; + private boolean mAttachedInDecorSet = false; private OnTouchListener mTouchInterceptor; - + private int mWidthMode; private int mWidth; private int mLastWidth; @@ -196,54 +198,17 @@ public class PopupWindow { mWindowManager = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE); final TypedArray a = context.obtainStyledAttributes( - attrs, com.android.internal.R.styleable.PopupWindow, defStyleAttr, defStyleRes); - - mBackground = a.getDrawable(R.styleable.PopupWindow_popupBackground); + attrs, R.styleable.PopupWindow, defStyleAttr, defStyleRes); + final Drawable bg = a.getDrawable(R.styleable.PopupWindow_popupBackground); mElevation = a.getDimension(R.styleable.PopupWindow_popupElevation, 0); mOverlapAnchor = a.getBoolean(R.styleable.PopupWindow_overlapAnchor, false); final int animStyle = a.getResourceId(R.styleable.PopupWindow_popupAnimationStyle, -1); - mAnimationStyle = animStyle == com.android.internal.R.style.Animation_PopupWindow ? -1 : - animStyle; - - // If this is a StateListDrawable, try to find and store the drawable to be - // used when the drop-down is placed above its anchor view, and the one to be - // used when the drop-down is placed below its anchor view. We extract - // the drawables ourselves to work around a problem with using refreshDrawableState - // that it will take into account the padding of all drawables specified in a - // StateListDrawable, thus adding superfluous padding to drop-down views. - // - // We assume a StateListDrawable will have a drawable for ABOVE_ANCHOR_STATE_SET and - // at least one other drawable, intended for the 'below-anchor state'. - if (mBackground instanceof StateListDrawable) { - StateListDrawable background = (StateListDrawable) mBackground; + mAnimationStyle = animStyle == R.style.Animation_PopupWindow ? -1 : animStyle; - // Find the above-anchor view - this one's easy, it should be labeled as such. - int aboveAnchorStateIndex = background.getStateDrawableIndex(ABOVE_ANCHOR_STATE_SET); - - // Now, for the below-anchor view, look for any other drawable specified in the - // StateListDrawable which is not for the above-anchor state and use that. - int count = background.getStateCount(); - int belowAnchorStateIndex = -1; - for (int i = 0; i < count; i++) { - if (i != aboveAnchorStateIndex) { - belowAnchorStateIndex = i; - break; - } - } - - // Store the drawables we found, if we found them. Otherwise, set them both - // to null so that we'll just use refreshDrawableState. - if (aboveAnchorStateIndex != -1 && belowAnchorStateIndex != -1) { - mAboveAnchorBackgroundDrawable = background.getStateDrawable(aboveAnchorStateIndex); - mBelowAnchorBackgroundDrawable = background.getStateDrawable(belowAnchorStateIndex); - } else { - mBelowAnchorBackgroundDrawable = null; - mAboveAnchorBackgroundDrawable = null; - } - } - a.recycle(); + + setBackgroundDrawable(bg); } /** @@ -316,6 +281,7 @@ public class PopupWindow { mContext = contentView.getContext(); mWindowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE); } + setContentView(contentView); setWidth(width); setHeight(height); @@ -343,6 +309,43 @@ public class PopupWindow { */ public void setBackgroundDrawable(Drawable background) { mBackground = background; + + // If this is a StateListDrawable, try to find and store the drawable to be + // used when the drop-down is placed above its anchor view, and the one to be + // used when the drop-down is placed below its anchor view. We extract + // the drawables ourselves to work around a problem with using refreshDrawableState + // that it will take into account the padding of all drawables specified in a + // StateListDrawable, thus adding superfluous padding to drop-down views. + // + // We assume a StateListDrawable will have a drawable for ABOVE_ANCHOR_STATE_SET and + // at least one other drawable, intended for the 'below-anchor state'. + if (mBackground instanceof StateListDrawable) { + StateListDrawable stateList = (StateListDrawable) mBackground; + + // Find the above-anchor view - this one's easy, it should be labeled as such. + int aboveAnchorStateIndex = stateList.getStateDrawableIndex(ABOVE_ANCHOR_STATE_SET); + + // Now, for the below-anchor view, look for any other drawable specified in the + // StateListDrawable which is not for the above-anchor state and use that. + int count = stateList.getStateCount(); + int belowAnchorStateIndex = -1; + for (int i = 0; i < count; i++) { + if (i != aboveAnchorStateIndex) { + belowAnchorStateIndex = i; + break; + } + } + + // Store the drawables we found, if we found them. Otherwise, set them both + // to null so that we'll just use refreshDrawableState. + if (aboveAnchorStateIndex != -1 && belowAnchorStateIndex != -1) { + mAboveAnchorBackgroundDrawable = stateList.getStateDrawable(aboveAnchorStateIndex); + mBelowAnchorBackgroundDrawable = stateList.getStateDrawable(belowAnchorStateIndex); + } else { + mBelowAnchorBackgroundDrawable = null; + mAboveAnchorBackgroundDrawable = null; + } + } } /** @@ -373,7 +376,7 @@ public class PopupWindow { public int getAnimationStyle() { return mAnimationStyle; } - + /** * Set the flag on popup to ignore cheek press events; by default this flag * is set to false @@ -382,7 +385,7 @@ public class PopupWindow { *

    If the popup is showing, calling this method will take effect only * the next time the popup is shown or through a manual call to one of * the {@link #update()} methods.

    - * + * * @see #update() */ public void setIgnoreCheekPress() { @@ -443,6 +446,19 @@ public class PopupWindow { if (mWindowManager == null && mContentView != null) { mWindowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE); } + + // Setting the default for attachedInDecor based on SDK version here + // instead of in the constructor since we might not have the context + // object in the constructor. We only want to set default here if the + // app hasn't already set the attachedInDecor. + if (mContext != null && !mAttachedInDecorSet) { + // Attach popup window in decor frame of parent window by default for + // {@link Build.VERSION_CODES.LOLLIPOP_MR1} or greater. Keep current + // behavior of not attaching to decor frame for older SDKs. + setAttachedInDecor(mContext.getApplicationInfo().targetSdkVersion + >= Build.VERSION_CODES.LOLLIPOP_MR1); + } + } /** @@ -452,7 +468,7 @@ public class PopupWindow { public void setTouchInterceptor(OnTouchListener l) { mTouchInterceptor = l; } - + /** *

    Indicate whether the popup window can grab the focus.

    * @@ -701,6 +717,36 @@ public class PopupWindow { mLayoutInScreen = enabled; } + /** + *

    Indicates whether the popup window will be attached in the decor frame of its parent + * window. + * + * @return true if the window will be attached to the decor frame of its parent window. + * + * @see #setAttachedInDecor(boolean) + * @see WindowManager.LayoutParams#FLAG_LAYOUT_ATTACHED_IN_DECOR + */ + public boolean isAttachedInDecor() { + return mAttachedInDecor; + } + + /** + *

    This will attach the popup window to the decor frame of the parent window to avoid + * overlaping with screen decorations like the navigation bar. Overrides the default behavior of + * the flag {@link WindowManager.LayoutParams#FLAG_LAYOUT_ATTACHED_IN_DECOR}. + * + *

    By default the flag is set on SDK version {@link Build.VERSION_CODES#LOLLIPOP_MR1} or + * greater and cleared on lesser SDK versions. + * + * @param enabled true if the popup should be attached to the decor frame of its parent window. + * + * @see WindowManager.LayoutParams#FLAG_LAYOUT_ATTACHED_IN_DECOR + */ + public void setAttachedInDecor(boolean enabled) { + mAttachedInDecor = enabled; + mAttachedInDecorSet = true; + } + /** * Allows the popup window to force the flag * {@link WindowManager.LayoutParams#FLAG_LAYOUT_INSET_DECOR}, overriding default behavior. @@ -1140,9 +1186,12 @@ public class PopupWindow { if (mNotTouchModal) { curFlags |= WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL; } + if (mAttachedInDecor) { + curFlags |= WindowManager.LayoutParams.FLAG_LAYOUT_ATTACHED_IN_DECOR; + } return curFlags; } - + private int computeAnimationResource() { if (mAnimationStyle == -1) { if (mIsDropdown) { diff --git a/core/java/android/widget/ProgressBar.java b/core/java/android/widget/ProgressBar.java index e9298c229f4ec3a81a76dcbe959390d63b238e06..de1bbc7affad1f756d279775a52a0fc9e095045b 100644 --- a/core/java/android/widget/ProgressBar.java +++ b/core/java/android/widget/ProgressBar.java @@ -227,8 +227,6 @@ public class ProgressBar extends View { private long mUiThreadId; private boolean mShouldStartAnimationDrawable; - private float mAnimationPosition; - private boolean mInDrawing; private boolean mAttached; private boolean mRefreshIsPosted; @@ -246,7 +244,7 @@ public class ProgressBar extends View { public ProgressBar(Context context) { this(context, null); } - + public ProgressBar(Context context, AttributeSet attrs) { this(context, attrs, com.android.internal.R.attr.progressBarStyle); } @@ -263,9 +261,9 @@ public class ProgressBar extends View { final TypedArray a = context.obtainStyledAttributes( attrs, R.styleable.ProgressBar, defStyleAttr, defStyleRes); - + mNoInvalidate = true; - + final Drawable progressDrawable = a.getDrawable(R.styleable.ProgressBar_progressDrawable); if (progressDrawable != null) { // Calling this method can set mMaxHeight, make sure the corresponding @@ -284,11 +282,11 @@ public class ProgressBar extends View { mBehavior = a.getInt(R.styleable.ProgressBar_indeterminateBehavior, mBehavior); final int resID = a.getResourceId( - com.android.internal.R.styleable.ProgressBar_interpolator, + com.android.internal.R.styleable.ProgressBar_interpolator, android.R.anim.linear_interpolator); // default to linear interpolator if (resID > 0) { setInterpolator(context, resID); - } + } setMax(a.getInt(R.styleable.ProgressBar_max, mMax)); @@ -401,12 +399,12 @@ public class ProgressBar extends View { * traverse layer and state list drawables. */ private Drawable tileify(Drawable drawable, boolean clip) { - + if (drawable instanceof LayerDrawable) { LayerDrawable background = (LayerDrawable) drawable; final int N = background.getNumberOfLayers(); Drawable[] outDrawables = new Drawable[N]; - + for (int i = 0; i < N; i++) { int id = background.getId(i); outDrawables[i] = tileify(background.getDrawable(i), @@ -414,13 +412,13 @@ public class ProgressBar extends View { } LayerDrawable newBg = new LayerDrawable(outDrawables); - + for (int i = 0; i < N; i++) { newBg.setId(i, background.getId(i)); } - + return newBg; - + } else if (drawable instanceof StateListDrawable) { StateListDrawable in = (StateListDrawable) drawable; StateListDrawable out = new StateListDrawable(); @@ -429,7 +427,7 @@ public class ProgressBar extends View { out.addState(in.getStateSet(i), tileify(in.getStateDrawable(i), clip)); } return out; - + } else if (drawable instanceof BitmapDrawable) { final BitmapDrawable bitmap = (BitmapDrawable) drawable; final Bitmap tileBitmap = bitmap.getBitmap(); @@ -450,7 +448,7 @@ public class ProgressBar extends View { return clip ? new ClipDrawable( shapeDrawable, Gravity.LEFT, ClipDrawable.HORIZONTAL) : shapeDrawable; } - + return drawable; } @@ -458,7 +456,7 @@ public class ProgressBar extends View { final float[] roundedCorners = new float[] { 5, 5, 5, 5, 5, 5, 5, 5 }; return new RoundRectShape(roundedCorners, null, null); } - + /** * Convert a AnimationDrawable for use as a barberpole animation. * Each frame of the animation is wrapped in a ClipDrawable and @@ -470,7 +468,7 @@ public class ProgressBar extends View { final int N = background.getNumberOfFrames(); AnimationDrawable newBg = new AnimationDrawable(); newBg.setOneShot(background.isOneShot()); - + for (int i = 0; i < N; i++) { Drawable frame = tileify(background.getFrame(i), true); frame.setLevel(10000); @@ -481,7 +479,7 @@ public class ProgressBar extends View { } return drawable; } - + /** *

    * Initialize the progress bar's default values: @@ -522,7 +520,7 @@ public class ProgressBar extends View { *

    Change the indeterminate mode for this progress bar. In indeterminate * mode, the progress is ignored and the progress bar shows an infinite * animation instead.

    - * + * * If this progress bar's style only supports indeterminate mode (such as the circular * progress bars), then this will be ignored. * @@ -604,6 +602,7 @@ public class ProgressBar extends View { * @see #getIndeterminateTintList() * @see Drawable#setTintList(ColorStateList) */ + @RemotableViewMethod public void setIndeterminateTintList(@Nullable ColorStateList tint) { if (mProgressTintInfo == null) { mProgressTintInfo = new ProgressTintInfo(); @@ -672,6 +671,12 @@ public class ProgressBar extends View { if (tintInfo.mHasIndeterminateTintMode) { mIndeterminateDrawable.setTintMode(tintInfo.mIndeterminateTintMode); } + + // The drawable (or one of its children) may not have been + // stateful before applying the tint, so let's try again. + if (mIndeterminateDrawable.isStateful()) { + mIndeterminateDrawable.setState(getDrawableState()); + } } } } @@ -694,7 +699,7 @@ public class ProgressBar extends View { setIndeterminateDrawable(d); } - + /** *

    Get the drawable used to draw the progress bar in * progress mode.

    @@ -780,6 +785,12 @@ public class ProgressBar extends View { if (mProgressTintInfo.mHasProgressTintMode) { target.setTintMode(mProgressTintInfo.mProgressTintMode); } + + // The drawable (or one of its children) may not have been + // stateful before applying the tint, so let's try again. + if (target.isStateful()) { + target.setState(getDrawableState()); + } } } } @@ -799,6 +810,12 @@ public class ProgressBar extends View { if (mProgressTintInfo.mHasProgressBackgroundTintMode) { target.setTintMode(mProgressTintInfo.mProgressBackgroundTintMode); } + + // The drawable (or one of its children) may not have been + // stateful before applying the tint, so let's try again. + if (target.isStateful()) { + target.setState(getDrawableState()); + } } } } @@ -818,6 +835,12 @@ public class ProgressBar extends View { if (mProgressTintInfo.mHasSecondaryProgressTintMode) { target.setTintMode(mProgressTintInfo.mSecondaryProgressTintMode); } + + // The drawable (or one of its children) may not have been + // stateful before applying the tint, so let's try again. + if (target.isStateful()) { + target.setState(getDrawableState()); + } } } } @@ -842,6 +865,7 @@ public class ProgressBar extends View { * @see #getProgressTintList() * @see Drawable#setTintList(ColorStateList) */ + @RemotableViewMethod public void setProgressTintList(@Nullable ColorStateList tint) { if (mProgressTintInfo == null) { mProgressTintInfo = new ProgressTintInfo(); @@ -923,6 +947,7 @@ public class ProgressBar extends View { * @see #getProgressBackgroundTintList() * @see Drawable#setTintList(ColorStateList) */ + @RemotableViewMethod public void setProgressBackgroundTintList(@Nullable ColorStateList tint) { if (mProgressTintInfo == null) { mProgressTintInfo = new ProgressTintInfo(); @@ -1110,7 +1135,7 @@ public class ProgressBar extends View { setProgressDrawable(d); } - + /** * @return The drawable currently used to draw the progress bar */ @@ -1161,7 +1186,7 @@ public class ProgressBar extends View { final int count = mRefreshData.size(); for (int i = 0; i < count; i++) { final RefreshData rd = mRefreshData.get(i); - doRefreshProgress(rd.id, rd.progress, rd.fromUser, true, rd.animate); + doRefreshProgress(rd.id, rd.progress, rd.fromUser, true); rd.recycle(); } mRefreshData.clear(); @@ -1176,12 +1201,10 @@ public class ProgressBar extends View { new SynchronizedPool(POOL_MAX); public int id; - public float progress; + public int progress; public boolean fromUser; - public boolean animate; - public static RefreshData obtain(int id, float progress, boolean fromUser, - boolean animate) { + public static RefreshData obtain(int id, int progress, boolean fromUser) { RefreshData rd = sPool.acquire(); if (rd == null) { rd = new RefreshData(); @@ -1189,10 +1212,9 @@ public class ProgressBar extends View { rd.id = id; rd.progress = progress; rd.fromUser = fromUser; - rd.animate = animate; return rd; } - + public void recycle() { sPool.release(this); } @@ -1216,19 +1238,9 @@ public class ProgressBar extends View { layer.setTintMode(tintMode); } - private float getScale(float progress) { - return mMax > 0 ? progress / (float) mMax : 0; - } - - private synchronized void doRefreshProgress(int id, float progress, boolean fromUser, + private synchronized void doRefreshProgress(int id, int progress, boolean fromUser, boolean callBackToApp) { - doRefreshProgress(id, progress, fromUser, callBackToApp, false); - } - - private synchronized void doRefreshProgress(int id, float progress, boolean fromUser, - boolean callBackToApp, boolean animate) { - float scale = getScale(progress); - + float scale = mMax > 0 ? (float) progress / (float) mMax : 0; final Drawable d = mCurrentDrawable; if (d != null) { Drawable progressDrawable = null; @@ -1245,65 +1257,27 @@ public class ProgressBar extends View { } else { invalidate(); } - - if (id == R.id.progress) { - if (animate) { - onAnimatePosition(scale, fromUser); - } else if (callBackToApp) { - onProgressRefresh(scale, fromUser); - } + + if (callBackToApp && id == R.id.progress) { + onProgressRefresh(scale, fromUser); } } - /** - * Called when a ProgressBar is animating its position. - * - * @param scale Current position/progress between 0 and 1. - * @param fromUser True if the progress change was initiated by the user. - */ - void onAnimatePosition(float scale, boolean fromUser) { - } - - /** - * Sets the progress value without going through the entire refresh process. - * - * @see #setProgress(int, boolean) - * @param progress The new progress, between 0 and {@link #getMax()} - */ - void setProgressValueOnly(int progress) { - mProgress = progress; - onProgressRefresh(getScale(progress), true); - } - - void setAnimationPosition(float position) { - mAnimationPosition = position; - refreshProgress(R.id.progress, position, true, true); - } - - float getAnimationPosition() { - return mAnimationPosition; - } - void onProgressRefresh(float scale, boolean fromUser) { if (AccessibilityManager.getInstance(mContext).isEnabled()) { scheduleAccessibilityEventSender(); } } - private synchronized void refreshProgress(int id, float progress, boolean fromUser) { - refreshProgress(id, progress, fromUser, false); - } - - private synchronized void refreshProgress(int id, float progress, boolean fromUser, - boolean animate) { + private synchronized void refreshProgress(int id, int progress, boolean fromUser) { if (mUiThreadId == Thread.currentThread().getId()) { - doRefreshProgress(id, progress, fromUser, true, animate); + doRefreshProgress(id, progress, fromUser, true); } else { if (mRefreshProgressRunnable == null) { mRefreshProgressRunnable = new RefreshProgressRunnable(); } - final RefreshData rd = RefreshData.obtain(id, progress, fromUser, animate); + final RefreshData rd = RefreshData.obtain(id, progress, fromUser); mRefreshData.add(rd); if (mAttached && !mRefreshIsPosted) { post(mRefreshProgressRunnable); @@ -1311,7 +1285,7 @@ public class ProgressBar extends View { } } } - + /** *

    Set the current progress to the specified value. Does not do anything * if the progress bar is in indeterminate mode.

    @@ -1321,13 +1295,13 @@ public class ProgressBar extends View { * @see #setIndeterminate(boolean) * @see #isIndeterminate() * @see #getProgress() - * @see #incrementProgressBy(int) + * @see #incrementProgressBy(int) */ @android.view.RemotableViewMethod public synchronized void setProgress(int progress) { setProgress(progress, false); } - + @android.view.RemotableViewMethod synchronized void setProgress(int progress, boolean fromUser) { if (mIndeterminate) { @@ -1353,7 +1327,7 @@ public class ProgressBar extends View { * Set the current secondary progress to the specified value. Does not do * anything if the progress bar is in indeterminate mode. *

    - * + * * @param secondaryProgress the new secondary progress, between 0 and {@link #getMax()} * @see #setIndeterminate(boolean) * @see #isIndeterminate() @@ -1434,8 +1408,8 @@ public class ProgressBar extends View { * @param max the upper range of this progress bar * * @see #getMax() - * @see #setProgress(int) - * @see #setSecondaryProgress(int) + * @see #setProgress(int) + * @see #setSecondaryProgress(int) */ @android.view.RemotableViewMethod public synchronized void setMax(int max) { @@ -1452,13 +1426,13 @@ public class ProgressBar extends View { refreshProgress(R.id.progress, mProgress, false); } } - + /** *

    Increase the progress bar's progress by the specified amount.

    * * @param diff the amount by which the progress must be increased * - * @see #setProgress(int) + * @see #setProgress(int) */ public synchronized final void incrementProgressBy(int diff) { setProgress(mProgress + diff); @@ -1469,7 +1443,7 @@ public class ProgressBar extends View { * * @param diff the amount by which the secondary progress must be increased * - * @see #setSecondaryProgress(int) + * @see #setSecondaryProgress(int) */ public synchronized final void incrementSecondaryProgressBy(int diff) { setSecondaryProgress(mSecondaryProgress + diff); @@ -1492,13 +1466,13 @@ public class ProgressBar extends View { if (mInterpolator == null) { mInterpolator = new LinearInterpolator(); } - + if (mTransformation == null) { mTransformation = new Transformation(); } else { mTransformation.clear(); } - + if (mAnimation == null) { mAnimation = new AlphaAnimation(0.0f, 1.0f); } else { @@ -1649,7 +1623,7 @@ public class ProgressBar extends View { } mIndeterminateDrawable.setBounds(left, top, right, bottom); } - + if (mProgressDrawable != null) { mProgressDrawable.setBounds(0, 0, right, bottom); } @@ -1719,20 +1693,20 @@ public class ProgressBar extends View { setMeasuredDimension(resolveSizeAndState(dw, widthMeasureSpec, 0), resolveSizeAndState(dh, heightMeasureSpec, 0)); } - + @Override protected void drawableStateChanged() { super.drawableStateChanged(); updateDrawableState(); } - + private void updateDrawableState() { int[] state = getDrawableState(); - + if (mProgressDrawable != null && mProgressDrawable.isStateful()) { mProgressDrawable.setState(state); } - + if (mIndeterminateDrawable != null && mIndeterminateDrawable.isStateful()) { mIndeterminateDrawable.setState(state); } @@ -1754,14 +1728,14 @@ public class ProgressBar extends View { static class SavedState extends BaseSavedState { int progress; int secondaryProgress; - + /** * Constructor called from {@link ProgressBar#onSaveInstanceState()} */ SavedState(Parcelable superState) { super(superState); } - + /** * Constructor called from {@link #CREATOR} */ @@ -1795,10 +1769,10 @@ public class ProgressBar extends View { // Force our ancestor class to save its state Parcelable superState = super.onSaveInstanceState(); SavedState ss = new SavedState(superState); - + ss.progress = mProgress; ss.secondaryProgress = mSecondaryProgress; - + return ss; } @@ -1806,7 +1780,7 @@ public class ProgressBar extends View { public void onRestoreInstanceState(Parcelable state) { SavedState ss = (SavedState) state; super.onRestoreInstanceState(ss.getSuperState()); - + setProgress(ss.progress); setSecondaryProgress(ss.secondaryProgress); } @@ -1822,7 +1796,7 @@ public class ProgressBar extends View { final int count = mRefreshData.size(); for (int i = 0; i < count; i++) { final RefreshData rd = mRefreshData.get(i); - doRefreshProgress(rd.id, rd.progress, rd.fromUser, rd.animate); + doRefreshProgress(rd.id, rd.progress, rd.fromUser, true); rd.recycle(); } mRefreshData.clear(); diff --git a/core/java/android/widget/RadialTimePickerView.java b/core/java/android/widget/RadialTimePickerView.java index 56f126cbe4477b7a4f914d1d76eaf66f5c3ae0a9..11fda2cec2c59096b03fc7cda8bfb3b9ff0ed2c5 100644 --- a/core/java/android/widget/RadialTimePickerView.java +++ b/core/java/android/widget/RadialTimePickerView.java @@ -22,21 +22,19 @@ import android.animation.Keyframe; import android.animation.ObjectAnimator; import android.animation.PropertyValuesHolder; import android.animation.ValueAnimator; -import android.annotation.SuppressLint; import android.content.Context; -import android.content.res.ColorStateList; import android.content.res.Resources; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; +import android.graphics.Rect; import android.graphics.Typeface; -import android.graphics.RectF; import android.os.Bundle; -import android.text.format.DateUtils; -import android.text.format.Time; import android.util.AttributeSet; +import android.util.IntArray; import android.util.Log; +import android.util.MathUtils; import android.util.TypedValue; import android.view.HapticFeedbackConstants; import android.view.MotionEvent; @@ -44,10 +42,11 @@ import android.view.View; import android.view.ViewGroup; import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityNodeInfo; +import android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction; import com.android.internal.R; +import com.android.internal.widget.ExploreByTouchHelper; -import java.text.DateFormatSymbols; import java.util.ArrayList; import java.util.Calendar; import java.util.Locale; @@ -69,7 +68,6 @@ public class RadialTimePickerView extends View implements View.OnTouchListener { private static final int HOURS = 0; private static final int MINUTES = 1; private static final int HOURS_INNER = 2; - private static final int AMPM = 3; private static final int SELECTOR_CIRCLE = 0; private static final int SELECTOR_DOT = 1; @@ -87,12 +85,6 @@ public class RadialTimePickerView extends View implements View.OnTouchListener { // Alpha level of color for selector. private static final int ALPHA_SELECTOR = 60; // was 51 - // Alpha level of color for selected circle. - private static final int ALPHA_AMPM_SELECTED = ALPHA_SELECTOR; - - // Alpha level of color for pressed circle. - private static final int ALPHA_AMPM_PRESSED = 255; // was 175 - private static final float COSINE_30_DEGREES = ((float) Math.sqrt(3)) * 0.5f; private static final float SINE_30_DEGREES = 0.5f; @@ -105,17 +97,16 @@ public class RadialTimePickerView extends View implements View.OnTouchListener { private static final int CENTER_RADIUS = 2; - private static final int[] STATE_SET_SELECTED = new int[] {R.attr.state_selected}; - private static int[] sSnapPrefer30sMap = new int[361]; + private final InvalidateUpdateListener mInvalidateUpdateListener = + new InvalidateUpdateListener(); + private final String[] mHours12Texts = new String[12]; private final String[] mOuterHours24Texts = new String[12]; private final String[] mInnerHours24Texts = new String[12]; private final String[] mMinutesTexts = new String[12]; - private final String[] mAmPmText = new String[2]; - private final Paint[] mPaint = new Paint[2]; private final int[] mColor = new int[2]; private final IntHolder[] mAlpha = new IntHolder[2]; @@ -126,14 +117,42 @@ public class RadialTimePickerView extends View implements View.OnTouchListener { private final int[][] mColorSelector = new int[2][3]; private final IntHolder[][] mAlphaSelector = new IntHolder[2][3]; - private final Paint mPaintAmPmText = new Paint(); - private final Paint[] mPaintAmPmCircle = new Paint[2]; - private final Paint mPaintBackground = new Paint(); - private final Paint mPaintDisabled = new Paint(); private final Paint mPaintDebug = new Paint(); - private Typeface mTypeface; + private final Typeface mTypeface; + + private final float[] mCircleRadius = new float[3]; + + private final float[] mTextSize = new float[2]; + + private final float[][] mTextGridHeights = new float[2][7]; + private final float[][] mTextGridWidths = new float[2][7]; + + private final float[] mInnerTextGridHeights = new float[7]; + private final float[] mInnerTextGridWidths = new float[7]; + + private final float[] mCircleRadiusMultiplier = new float[2]; + private final float[] mNumbersRadiusMultiplier = new float[3]; + + private final float[] mTextSizeMultiplier = new float[3]; + + private final float[] mAnimationRadiusMultiplier = new float[3]; + + private final float mTransitionMidRadiusMultiplier; + private final float mTransitionEndRadiusMultiplier; + + private final int[] mLineLength = new int[3]; + private final int[] mSelectionRadius = new int[3]; + private final float mSelectionRadiusMultiplier; + private final int[] mSelectionDegrees = new int[3]; + + private final ArrayList mHoursToMinutesAnims = new ArrayList(); + private final ArrayList mMinuteToHoursAnims = new ArrayList(); + + private final RadialPickerTouchHelper mTouchHelper; + + private float mInnerTextSize; private boolean mIs24HourMode; private boolean mShowHours; @@ -147,66 +166,21 @@ public class RadialTimePickerView extends View implements View.OnTouchListener { private int mXCenter; private int mYCenter; - private float[] mCircleRadius = new float[3]; - private int mMinHypotenuseForInnerNumber; private int mMaxHypotenuseForOuterNumber; private int mHalfwayHypotenusePoint; - private float[] mTextSize = new float[2]; - private float mInnerTextSize; - - private float[][] mTextGridHeights = new float[2][7]; - private float[][] mTextGridWidths = new float[2][7]; - - private float[] mInnerTextGridHeights = new float[7]; - private float[] mInnerTextGridWidths = new float[7]; - private String[] mOuterTextHours; private String[] mInnerTextHours; private String[] mOuterTextMinutes; - - private float[] mCircleRadiusMultiplier = new float[2]; - private float[] mNumbersRadiusMultiplier = new float[3]; - - private float[] mTextSizeMultiplier = new float[3]; - - private float[] mAnimationRadiusMultiplier = new float[3]; - - private float mTransitionMidRadiusMultiplier; - private float mTransitionEndRadiusMultiplier; - private AnimatorSet mTransition; - private InvalidateUpdateListener mInvalidateUpdateListener = new InvalidateUpdateListener(); - - private int[] mLineLength = new int[3]; - private int[] mSelectionRadius = new int[3]; - private float mSelectionRadiusMultiplier; - private int[] mSelectionDegrees = new int[3]; - - private int mAmPmCircleRadius; - private float mAmPmYCenter; - - private float mAmPmCircleRadiusMultiplier; - private int mAmPmTextColor; - - private float mLeftIndicatorXCenter; - private float mRightIndicatorXCenter; - - private int mAmPmUnselectedColor; - private int mAmPmSelectedColor; private int mAmOrPm; - private int mAmOrPmPressed; - private int mDisabledAlpha; - private RectF mRectF = new RectF(); - private boolean mInputEnabled = true; private OnValueSelectedListener mListener; - private final ArrayList mHoursToMinutesAnims = new ArrayList(); - private final ArrayList mMinuteToHoursAnims = new ArrayList(); + private boolean mInputEnabled = true; public interface OnValueSelectedListener { void onValueSelected(int pickerIndex, int newValue, boolean autoAdvance); @@ -314,11 +288,21 @@ public class RadialTimePickerView extends View implements View.OnTouchListener { return degrees; } + @SuppressWarnings("unused") + public RadialTimePickerView(Context context) { + this(context, null); + } + public RadialTimePickerView(Context context, AttributeSet attrs) { this(context, attrs, R.attr.timePickerStyle); } - public RadialTimePickerView(Context context, AttributeSet attrs, int defStyle) { + public RadialTimePickerView(Context context, AttributeSet attrs, int defStyleAttr) { + this(context, attrs, defStyleAttr, 0); + } + + public RadialTimePickerView( + Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs); // Pull disabled alpha from theme. @@ -329,28 +313,7 @@ public class RadialTimePickerView extends View implements View.OnTouchListener { // process style attributes final Resources res = getResources(); final TypedArray a = mContext.obtainStyledAttributes(attrs, R.styleable.TimePicker, - defStyle, 0); - - ColorStateList amPmBackgroundColor = a.getColorStateList( - R.styleable.TimePicker_amPmBackgroundColor); - if (amPmBackgroundColor == null) { - amPmBackgroundColor = res.getColorStateList( - R.color.timepicker_default_ampm_unselected_background_color_material); - } - - // Obtain the backup selected color. If the background color state - // list doesn't have a state for selected, we'll use this color. - final int amPmSelectedColor = a.getColor(R.styleable.TimePicker_amPmSelectedBackgroundColor, - res.getColor(R.color.timepicker_default_ampm_selected_background_color_material)); - amPmBackgroundColor = ColorStateList.addFirstIfMissing( - amPmBackgroundColor, R.attr.state_selected, amPmSelectedColor); - - mAmPmSelectedColor = amPmBackgroundColor.getColorForState( - STATE_SET_SELECTED, amPmSelectedColor); - mAmPmUnselectedColor = amPmBackgroundColor.getDefaultColor(); - - mAmPmTextColor = a.getColor(R.styleable.TimePicker_amPmTextColor, - res.getColor(R.color.timepicker_default_text_color_material)); + defStyleAttr, defStyleRes); mTypeface = Typeface.create("sans-serif", Typeface.NORMAL); @@ -419,16 +382,6 @@ public class RadialTimePickerView extends View implements View.OnTouchListener { R.styleable.TimePicker_numbersSelectorColor, R.color.timepicker_default_selector_color_material); - mPaintAmPmText.setColor(mAmPmTextColor); - mPaintAmPmText.setTypeface(mTypeface); - mPaintAmPmText.setAntiAlias(true); - mPaintAmPmText.setTextAlign(Paint.Align.CENTER); - - mPaintAmPmCircle[AM] = new Paint(); - mPaintAmPmCircle[AM].setAntiAlias(true); - mPaintAmPmCircle[PM] = new Paint(); - mPaintAmPmCircle[PM].setAntiAlias(true); - mPaintBackground.setColor(a.getColor(R.styleable.TimePicker_numbersBackgroundColor, res.getColor(R.color.timepicker_default_numbers_background_color_material))); mPaintBackground.setAntiAlias(true); @@ -444,7 +397,14 @@ public class RadialTimePickerView extends View implements View.OnTouchListener { mShowHours = true; mIs24HourMode = false; mAmOrPm = AM; - mAmOrPmPressed = -1; + + // Set up accessibility components. + mTouchHelper = new RadialPickerTouchHelper(); + setAccessibilityDelegate(mTouchHelper); + + if (getImportantForAccessibility() == IMPORTANT_FOR_ACCESSIBILITY_AUTO) { + setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_YES); + } initHoursAndMinutesText(); initData(); @@ -470,8 +430,8 @@ public class RadialTimePickerView extends View implements View.OnTouchListener { final int currentHour = calendar.get(Calendar.HOUR_OF_DAY); final int currentMinute = calendar.get(Calendar.MINUTE); - setCurrentHour(currentHour); - setCurrentMinute(currentMinute); + setCurrentHourInternal(currentHour, false, false); + setCurrentMinuteInternal(currentMinute, false); setHapticFeedbackEnabled(true); } @@ -492,9 +452,13 @@ public class RadialTimePickerView extends View implements View.OnTouchListener { } public void initialize(int hour, int minute, boolean is24HourMode) { - mIs24HourMode = is24HourMode; - setCurrentHour(hour); - setCurrentMinute(minute); + if (mIs24HourMode != is24HourMode) { + mIs24HourMode = is24HourMode; + initData(); + } + + setCurrentHourInternal(hour, false, false); + setCurrentMinuteInternal(minute, false); } public void setCurrentItemShowing(int item, boolean animate) { @@ -524,23 +488,39 @@ public class RadialTimePickerView extends View implements View.OnTouchListener { * @param hour the current hour between 0 and 23 (inclusive) */ public void setCurrentHour(int hour) { + setCurrentHourInternal(hour, true, false); + } + + /** + * Sets the current hour. + * + * @param hour The current hour + * @param callback Whether the value listener should be invoked + * @param autoAdvance Whether the listener should auto-advance to the next + * selection mode, e.g. hour to minutes + */ + private void setCurrentHourInternal(int hour, boolean callback, boolean autoAdvance) { final int degrees = (hour % 12) * DEGREES_FOR_ONE_HOUR; mSelectionDegrees[HOURS] = degrees; mSelectionDegrees[HOURS_INNER] = degrees; // 0 is 12 AM (midnight) and 12 is 12 PM (noon). - mAmOrPm = (hour == 0 || (hour % 24) < 12) ? AM : PM; - - if (mIs24HourMode) { - // Inner circle is 1 through 12. - mIsOnInnerCircle = hour >= 1 && hour <= 12; - } else { - mIsOnInnerCircle = false; + final int amOrPm = (hour == 0 || (hour % 24) < 12) ? AM : PM; + final boolean isOnInnerCircle = mIs24HourMode && hour >= 1 && hour <= 12; + if (mAmOrPm != amOrPm || mIsOnInnerCircle != isOnInnerCircle) { + mAmOrPm = amOrPm; + mIsOnInnerCircle = isOnInnerCircle; + + initData(); + updateLayoutData(); + mTouchHelper.invalidateRoot(); } - initData(); - updateLayoutData(); invalidate(); + + if (callback && mListener != null) { + mListener.onValueSelected(HOURS, hour, autoAdvance); + } } /** @@ -549,15 +529,19 @@ public class RadialTimePickerView extends View implements View.OnTouchListener { * @return the current hour between 0 and 23 (inclusive) */ public int getCurrentHour() { - int hour = (mSelectionDegrees[mIsOnInnerCircle ? - HOURS_INNER : HOURS] / DEGREES_FOR_ONE_HOUR) % 12; + return getHourForDegrees( + mSelectionDegrees[mIsOnInnerCircle ? HOURS_INNER : HOURS], mIsOnInnerCircle); + } + + private int getHourForDegrees(int degrees, boolean innerCircle) { + int hour = (degrees / DEGREES_FOR_ONE_HOUR) % 12; if (mIs24HourMode) { // Convert the 12-hour value into 24-hour time based on where the // selector is positioned. - if (mIsOnInnerCircle && hour == 0) { + if (innerCircle && hour == 0) { // Inner circle is 1 through 12. hour = 12; - } else if (!mIsOnInnerCircle && hour != 0) { + } else if (!innerCircle && hour != 0) { // Outer circle is 13 through 23 and 0. hour += 12; } @@ -567,30 +551,55 @@ public class RadialTimePickerView extends View implements View.OnTouchListener { return hour; } + private int getDegreesForHour(int hour) { + // Convert to be 0-11. + if (mIs24HourMode) { + if (hour >= 12) { + hour -= 12; + } + } else if (hour == 12) { + hour = 0; + } + return hour * DEGREES_FOR_ONE_HOUR; + } + public void setCurrentMinute(int minute) { + setCurrentMinuteInternal(minute, true); + } + + private void setCurrentMinuteInternal(int minute, boolean callback) { mSelectionDegrees[MINUTES] = (minute % 60) * DEGREES_FOR_ONE_MINUTE; + invalidate(); + + if (callback && mListener != null) { + mListener.onValueSelected(MINUTES, minute, false); + } } // Returns minutes in 0-59 range public int getCurrentMinute() { - return (mSelectionDegrees[MINUTES] / DEGREES_FOR_ONE_MINUTE); + return getMinuteForDegrees(mSelectionDegrees[MINUTES]); + } + + private int getMinuteForDegrees(int degrees) { + return degrees / DEGREES_FOR_ONE_MINUTE; + } + + private int getDegreesForMinute(int minute) { + return minute * DEGREES_FOR_ONE_MINUTE; } public void setAmOrPm(int val) { mAmOrPm = (val % 2); invalidate(); + mTouchHelper.invalidateRoot(); } public int getAmOrPm() { return mAmOrPm; } - public void swapAmPm() { - mAmOrPm = (mAmOrPm == AM) ? PM : AM; - invalidate(); - } - public void showHours(boolean animate) { if (mShowHours) return; mShowHours = true; @@ -621,10 +630,6 @@ public class RadialTimePickerView extends View implements View.OnTouchListener { mInnerHours24Texts[i] = String.format("%d", HOURS_NUMBERS[i]); mMinutesTexts[i] = String.format("%02d", MINUTES_NUMBERS[i]); } - - String[] amPmStrings = TimePickerClockDelegate.getAmPmStrings(mContext); - mAmPmText[AM] = amPmStrings[0]; - mAmPmText[PM] = amPmStrings[1]; } private void initData() { @@ -674,9 +679,6 @@ public class RadialTimePickerView extends View implements View.OnTouchListener { mAnimationRadiusMultiplier[HOURS_INNER] = 1; mAnimationRadiusMultiplier[MINUTES] = 1; - mAmPmCircleRadiusMultiplier = Float.parseFloat( - res.getString(R.string.timepicker_ampm_circle_radius_multiplier)); - mAlpha[HOURS].setValue(mShowHours ? ALPHA_OPAQUE : ALPHA_TRANSPARENT); mAlpha[MINUTES].setValue(mShowHours ? ALPHA_TRANSPARENT : ALPHA_OPAQUE); @@ -710,14 +712,6 @@ public class RadialTimePickerView extends View implements View.OnTouchListener { mCircleRadius[HOURS_INNER] = min * mCircleRadiusMultiplier[HOURS]; mCircleRadius[MINUTES] = min * mCircleRadiusMultiplier[MINUTES]; - if (!mIs24HourMode) { - // We'll need to draw the AM/PM circles, so the main circle will need to have - // a slightly higher center. To keep the entire view centered vertically, we'll - // have to push it up by half the radius of the AM/PM circles. - int amPmCircleRadius = (int) (mCircleRadius[HOURS] * mAmPmCircleRadiusMultiplier); - mYCenter -= amPmCircleRadius / 2; - } - mMinHypotenuseForInnerNumber = (int) (mCircleRadius[HOURS] * mNumbersRadiusMultiplier[HOURS_INNER]) - mSelectionRadius[HOURS]; mMaxHypotenuseForOuterNumber = (int) (mCircleRadius[HOURS] @@ -739,16 +733,7 @@ public class RadialTimePickerView extends View implements View.OnTouchListener { mSelectionRadius[HOURS_INNER] = mSelectionRadius[HOURS]; mSelectionRadius[MINUTES] = (int) (mCircleRadius[MINUTES] * mSelectionRadiusMultiplier); - mAmPmCircleRadius = (int) (mCircleRadius[HOURS] * mAmPmCircleRadiusMultiplier); - mPaintAmPmText.setTextSize(mAmPmCircleRadius * 3 / 4); - - // Line up the vertical center of the AM/PM circles with the bottom of the main circle. - mAmPmYCenter = mYCenter + mCircleRadius[HOURS]; - - // Line up the horizontal edges of the AM/PM circles with the horizontal edges - // of the main circle - mLeftIndicatorXCenter = mXCenter - mCircleRadius[HOURS] + mAmPmCircleRadius; - mRightIndicatorXCenter = mXCenter + mCircleRadius[HOURS] - mAmPmCircleRadius; + mTouchHelper.invalidateRoot(); } @Override @@ -780,9 +765,6 @@ public class RadialTimePickerView extends View implements View.OnTouchListener { mColor[MINUTES], mAlpha[MINUTES].getValue()); drawCenter(canvas); - if (!mIs24HourMode) { - drawAmPm(canvas); - } if (DEBUG) { drawDebug(canvas); @@ -804,50 +786,6 @@ public class RadialTimePickerView extends View implements View.OnTouchListener { drawSelector(canvas, MINUTES); } - private void drawAmPm(Canvas canvas) { - final boolean isLayoutRtl = isLayoutRtl(); - - int amColor = mAmPmUnselectedColor; - int amAlpha = ALPHA_OPAQUE; - int pmColor = mAmPmUnselectedColor; - int pmAlpha = ALPHA_OPAQUE; - if (mAmOrPm == AM) { - amColor = mAmPmSelectedColor; - amAlpha = ALPHA_AMPM_SELECTED; - } else if (mAmOrPm == PM) { - pmColor = mAmPmSelectedColor; - pmAlpha = ALPHA_AMPM_SELECTED; - } - if (mAmOrPmPressed == AM) { - amColor = mAmPmSelectedColor; - amAlpha = ALPHA_AMPM_PRESSED; - } else if (mAmOrPmPressed == PM) { - pmColor = mAmPmSelectedColor; - pmAlpha = ALPHA_AMPM_PRESSED; - } - - // Draw the two circles - mPaintAmPmCircle[AM].setColor(amColor); - mPaintAmPmCircle[AM].setAlpha(getMultipliedAlpha(amColor, amAlpha)); - canvas.drawCircle(isLayoutRtl ? mRightIndicatorXCenter : mLeftIndicatorXCenter, - mAmPmYCenter, mAmPmCircleRadius, mPaintAmPmCircle[AM]); - - mPaintAmPmCircle[PM].setColor(pmColor); - mPaintAmPmCircle[PM].setAlpha(getMultipliedAlpha(pmColor, pmAlpha)); - canvas.drawCircle(isLayoutRtl ? mLeftIndicatorXCenter : mRightIndicatorXCenter, - mAmPmYCenter, mAmPmCircleRadius, mPaintAmPmCircle[PM]); - - // Draw the AM/PM texts on top - mPaintAmPmText.setColor(mAmPmTextColor); - float textYCenter = mAmPmYCenter - - (int) (mPaintAmPmText.descent() + mPaintAmPmText.ascent()) / 2; - - canvas.drawText(isLayoutRtl ? mAmPmText[PM] : mAmPmText[AM], mLeftIndicatorXCenter, - textYCenter, mPaintAmPmText); - canvas.drawText(isLayoutRtl ? mAmPmText[AM] : mAmPmText[PM], mRightIndicatorXCenter, - textYCenter, mPaintAmPmText); - } - private int getMultipliedAlpha(int argb, int alpha) { return (int) (Color.alpha(argb) * (alpha / 255.0) + 0.5); } @@ -917,20 +855,17 @@ public class RadialTimePickerView extends View implements View.OnTouchListener { float top = mYCenter - outerRadius; float right = mXCenter + outerRadius; float bottom = mYCenter + outerRadius; - mRectF = new RectF(left, top, right, bottom); - canvas.drawRect(mRectF, mPaintDebug); + canvas.drawRect(left, top, right, bottom, mPaintDebug); // Draw outer rectangle for background left = mXCenter - mCircleRadius[HOURS]; top = mYCenter - mCircleRadius[HOURS]; right = mXCenter + mCircleRadius[HOURS]; bottom = mYCenter + mCircleRadius[HOURS]; - mRectF.set(left, top, right, bottom); - canvas.drawRect(mRectF, mPaintDebug); + canvas.drawRect(left, top, right, bottom, mPaintDebug); // Draw outer view rectangle - mRectF.set(0, 0, getWidth(), getHeight()); - canvas.drawRect(mRectF, mPaintDebug); + canvas.drawRect(0, 0, getWidth(), getHeight(), mPaintDebug); // Draw selected time final String selected = String.format("%02d:%02d", getCurrentHour(), getCurrentMinute()); @@ -950,7 +885,7 @@ public class RadialTimePickerView extends View implements View.OnTouchListener { float x = mXCenter - width / 2; float y = mYCenter + 1.5f * height; - canvas.drawText(selected.toString(), x, y, paint); + canvas.drawText(selected, x, y, paint); } private void calculateGridSizesHours() { @@ -1044,12 +979,14 @@ public class RadialTimePickerView extends View implements View.OnTouchListener { } // Used for animating the hours by changing their radius + @SuppressWarnings("unused") private void setAnimationRadiusMultiplierHours(float animationRadiusMultiplier) { mAnimationRadiusMultiplier[HOURS] = animationRadiusMultiplier; mAnimationRadiusMultiplier[HOURS_INNER] = animationRadiusMultiplier; } // Used for animating the minutes by changing their radius + @SuppressWarnings("unused") private void setAnimationRadiusMultiplierMinutes(float animationRadiusMultiplier) { mAnimationRadiusMultiplier[MINUTES] = animationRadiusMultiplier; } @@ -1242,234 +1179,428 @@ public class RadialTimePickerView extends View implements View.OnTouchListener { } final float opposite = Math.abs(y - mYCenter); - double degrees = Math.toDegrees(Math.asin(opposite / hypotenuse)); + int degrees = (int) (Math.toDegrees(Math.asin(opposite / hypotenuse)) + 0.5); // Now we have to translate to the correct quadrant. - boolean rightSide = (x > mXCenter); - boolean topSide = (y < mYCenter); - if (rightSide && topSide) { - degrees = 90 - degrees; - } else if (rightSide && !topSide) { - degrees = 90 + degrees; - } else if (!rightSide && !topSide) { - degrees = 270 - degrees; - } else if (!rightSide && topSide) { - degrees = 270 + degrees; + final boolean rightSide = (x > mXCenter); + final boolean topSide = (y < mYCenter); + if (rightSide) { + if (topSide) { + degrees = 90 - degrees; + } else { + degrees = 90 + degrees; + } + } else { + if (topSide) { + degrees = 270 + degrees; + } else { + degrees = 270 - degrees; + } } - return (int) degrees; + return degrees; } - private int getIsTouchingAmOrPm(float x, float y) { - final boolean isLayoutRtl = isLayoutRtl(); - int squaredYDistance = (int) ((y - mAmPmYCenter) * (y - mAmPmYCenter)); + boolean mChangedDuringTouch = false; - int distanceToAmCenter = (int) Math.sqrt( - (x - mLeftIndicatorXCenter) * (x - mLeftIndicatorXCenter) + squaredYDistance); - if (distanceToAmCenter <= mAmPmCircleRadius) { - return (isLayoutRtl ? PM : AM); + @Override + public boolean onTouch(View v, MotionEvent event) { + if (!mInputEnabled) { + return true; } - int distanceToPmCenter = (int) Math.sqrt( - (x - mRightIndicatorXCenter) * (x - mRightIndicatorXCenter) + squaredYDistance); - if (distanceToPmCenter <= mAmPmCircleRadius) { - return (isLayoutRtl ? AM : PM); + final int action = event.getActionMasked(); + if (action == MotionEvent.ACTION_MOVE + || action == MotionEvent.ACTION_UP + || action == MotionEvent.ACTION_DOWN) { + boolean forceSelection = false; + boolean autoAdvance = false; + + if (action == MotionEvent.ACTION_DOWN) { + // This is a new event stream, reset whether the value changed. + mChangedDuringTouch = false; + } else if (action == MotionEvent.ACTION_UP) { + autoAdvance = true; + + // If we saw a down/up pair without the value changing, assume + // this is a single-tap selection and force a change. + if (!mChangedDuringTouch) { + forceSelection = true; + } + } + + mChangedDuringTouch |= handleTouchInput( + event.getX(), event.getY(), forceSelection, autoAdvance); } - // Neither was close enough. - return -1; + return true; } - @Override - public boolean onTouch(View v, MotionEvent event) { - if(!mInputEnabled) { - return true; + private boolean handleTouchInput( + float x, float y, boolean forceSelection, boolean autoAdvance) { + // Calling getDegreesFromXY has side effects, so cache + // whether we used to be on the inner circle. + final boolean wasOnInnerCircle = mIsOnInnerCircle; + final int degrees = getDegreesFromXY(x, y); + if (degrees == -1) { + return false; } - final float eventX = event.getX(); - final float eventY = event.getY(); + final int[] selectionDegrees = mSelectionDegrees; + final int type; + final int newValue; + final boolean valueChanged; - int degrees; - int snapDegrees; - boolean result = false; + if (mShowHours) { + final int snapDegrees = snapOnly30s(degrees, 0) % 360; + valueChanged = selectionDegrees[HOURS] != snapDegrees + || selectionDegrees[HOURS_INNER] != snapDegrees + || wasOnInnerCircle != mIsOnInnerCircle; + + selectionDegrees[HOURS] = snapDegrees; + selectionDegrees[HOURS_INNER] = snapDegrees; + type = HOURS; + newValue = getCurrentHour(); + } else { + final int snapDegrees = snapPrefer30s(degrees) % 360; + valueChanged = selectionDegrees[MINUTES] != snapDegrees; - switch(event.getAction()) { - case MotionEvent.ACTION_DOWN: - case MotionEvent.ACTION_MOVE: - mAmOrPmPressed = getIsTouchingAmOrPm(eventX, eventY); - if (mAmOrPmPressed != -1) { - result = true; - } else { - degrees = getDegreesFromXY(eventX, eventY); - if (degrees != -1) { - snapDegrees = (mShowHours ? - snapOnly30s(degrees, 0) : snapPrefer30s(degrees)) % 360; - if (mShowHours) { - mSelectionDegrees[HOURS] = snapDegrees; - mSelectionDegrees[HOURS_INNER] = snapDegrees; - } else { - mSelectionDegrees[MINUTES] = snapDegrees; - } - performHapticFeedback(HapticFeedbackConstants.CLOCK_TICK); - if (mListener != null) { - if (mShowHours) { - mListener.onValueSelected(HOURS, getCurrentHour(), false); - } else { - mListener.onValueSelected(MINUTES, getCurrentMinute(), false); - } - } - result = true; - } - } - invalidate(); - return result; + selectionDegrees[MINUTES] = snapDegrees; + type = MINUTES; + newValue = getCurrentMinute(); + } - case MotionEvent.ACTION_UP: - mAmOrPmPressed = getIsTouchingAmOrPm(eventX, eventY); - if (mAmOrPmPressed != -1) { - if (mAmOrPm != mAmOrPmPressed) { - swapAmPm(); - } - mAmOrPmPressed = -1; - if (mListener != null) { - mListener.onValueSelected(AMPM, getCurrentHour(), true); - } - result = true; - } else { - degrees = getDegreesFromXY(eventX, eventY); - if (degrees != -1) { - snapDegrees = (mShowHours ? - snapOnly30s(degrees, 0) : snapPrefer30s(degrees)) % 360; - if (mShowHours) { - mSelectionDegrees[HOURS] = snapDegrees; - mSelectionDegrees[HOURS_INNER] = snapDegrees; - } else { - mSelectionDegrees[MINUTES] = snapDegrees; - } - if (mListener != null) { - if (mShowHours) { - mListener.onValueSelected(HOURS, getCurrentHour(), true); - } else { - mListener.onValueSelected(MINUTES, getCurrentMinute(), true); - } - } - result = true; - } - } - if (result) { - invalidate(); - } - return result; + if (valueChanged || forceSelection || autoAdvance) { + // Fire the listener even if we just need to auto-advance. + if (mListener != null) { + mListener.onValueSelected(type, newValue, autoAdvance); + } - default: - break; + // Only provide feedback if the value actually changed. + if (valueChanged || forceSelection) { + performHapticFeedback(HapticFeedbackConstants.CLOCK_TICK); + invalidate(); + } + return true; } - return false; - } - /** - * Necessary for accessibility, to ensure we support "scrolling" forward and backward - * in the circle. - */ - @Override - public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) { - super.onInitializeAccessibilityNodeInfo(info); - info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD); - info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD); + return false; } - /** - * Announce the currently-selected time when launched. - */ @Override - public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) { - if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) { - // Clear the event's current text so that only the current time will be spoken. - event.getText().clear(); - Time time = new Time(); - time.hour = getCurrentHour(); - time.minute = getCurrentMinute(); - long millis = time.normalize(true); - int flags = DateUtils.FORMAT_SHOW_TIME; - if (mIs24HourMode) { - flags |= DateUtils.FORMAT_24HOUR; - } - String timeString = DateUtils.formatDateTime(getContext(), millis, flags); - event.getText().add(timeString); + public boolean dispatchHoverEvent(MotionEvent event) { + // First right-of-refusal goes the touch exploration helper. + if (mTouchHelper.dispatchHoverEvent(event)) { return true; } - return super.dispatchPopulateAccessibilityEvent(event); + return super.dispatchHoverEvent(event); } - /** - * When scroll forward/backward events are received, jump the time to the higher/lower - * discrete, visible value on the circle. - */ - @SuppressLint("NewApi") - @Override - public boolean performAccessibilityAction(int action, Bundle arguments) { - if (super.performAccessibilityAction(action, arguments)) { - return true; + public void setInputEnabled(boolean inputEnabled) { + mInputEnabled = inputEnabled; + invalidate(); + } + + private class RadialPickerTouchHelper extends ExploreByTouchHelper { + private final Rect mTempRect = new Rect(); + + private final int TYPE_HOUR = 1; + private final int TYPE_MINUTE = 2; + + private final int SHIFT_TYPE = 0; + private final int MASK_TYPE = 0xF; + + private final int SHIFT_VALUE = 8; + private final int MASK_VALUE = 0xFF; + + /** Increment in which virtual views are exposed for minutes. */ + private final int MINUTE_INCREMENT = 5; + + public RadialPickerTouchHelper() { + super(RadialTimePickerView.this); } - int changeMultiplier = 0; - if (action == AccessibilityNodeInfo.ACTION_SCROLL_FORWARD) { - changeMultiplier = 1; - } else if (action == AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD) { - changeMultiplier = -1; + @Override + public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info) { + super.onInitializeAccessibilityNodeInfo(host, info); + + info.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_FORWARD); + info.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_BACKWARD); } - if (changeMultiplier != 0) { - int value = 0; - int stepSize = 0; - if (mShowHours) { - stepSize = DEGREES_FOR_ONE_HOUR; - value = getCurrentHour() % 12; - } else { - stepSize = DEGREES_FOR_ONE_MINUTE; - value = getCurrentMinute(); + + @Override + public boolean performAccessibilityAction(View host, int action, Bundle arguments) { + if (super.performAccessibilityAction(host, action, arguments)) { + return true; } - int degrees = value * stepSize; - degrees = snapOnly30s(degrees, changeMultiplier); - value = degrees / stepSize; - int maxValue = 0; - int minValue = 0; + switch (action) { + case AccessibilityNodeInfo.ACTION_SCROLL_FORWARD: + adjustPicker(1); + return true; + case AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD: + adjustPicker(-1); + return true; + } + + return false; + } + + private void adjustPicker(int step) { + final int stepSize; + final int initialValue; + final int maxValue; + final int minValue; if (mShowHours) { + stepSize = DEGREES_FOR_ONE_HOUR; + initialValue = getCurrentHour() % 12; + if (mIs24HourMode) { maxValue = 23; + minValue = 0; } else { maxValue = 12; minValue = 1; } } else { + stepSize = DEGREES_FOR_ONE_MINUTE; + initialValue = getCurrentMinute(); + maxValue = 55; + minValue = 0; + } + + final int steppedValue = snapOnly30s(initialValue * stepSize, step) / stepSize; + final int clampedValue = MathUtils.constrain(steppedValue, minValue, maxValue); + if (mShowHours) { + setCurrentHour(clampedValue); + } else { + setCurrentMinute(clampedValue); } - if (value > maxValue) { - // If we scrolled forward past the highest number, wrap around to the lowest. - value = minValue; - } else if (value < minValue) { - // If we scrolled backward past the lowest number, wrap around to the highest. - value = maxValue; + } + + @Override + protected int getVirtualViewAt(float x, float y) { + final int id; + + // Calling getDegreesXY() has side-effects, so we need to cache the + // current inner circle value and restore after the call. + final boolean wasOnInnerCircle = mIsOnInnerCircle; + final int degrees = getDegreesFromXY(x, y); + final boolean isOnInnerCircle = mIsOnInnerCircle; + mIsOnInnerCircle = wasOnInnerCircle; + + if (degrees != -1) { + final int snapDegrees = snapOnly30s(degrees, 0) % 360; + if (mShowHours) { + final int hour24 = getHourForDegrees(snapDegrees, isOnInnerCircle); + final int hour = mIs24HourMode ? hour24 : hour24To12(hour24); + id = makeId(TYPE_HOUR, hour); + } else { + final int current = getCurrentMinute(); + final int touched = getMinuteForDegrees(degrees); + final int snapped = getMinuteForDegrees(snapDegrees); + + // If the touched minute is closer to the current minute + // than it is to the snapped minute, return current. + final int minute; + if (Math.abs(current - touched) < Math.abs(snapped - touched)) { + minute = current; + } else { + minute = snapped; + } + id = makeId(TYPE_MINUTE, minute); + } + } else { + id = INVALID_ID; } + + return id; + } + + @Override + protected void getVisibleVirtualViews(IntArray virtualViewIds) { if (mShowHours) { - setCurrentHour(value); - if (mListener != null) { - mListener.onValueSelected(HOURS, value, false); + final int min = mIs24HourMode ? 0 : 1; + final int max = mIs24HourMode ? 23 : 12; + for (int i = min; i <= max ; i++) { + virtualViewIds.add(makeId(TYPE_HOUR, i)); } } else { - setCurrentMinute(value); - if (mListener != null) { - mListener.onValueSelected(MINUTES, value, false); + final int current = getCurrentMinute(); + for (int i = 0; i < 60; i += MINUTE_INCREMENT) { + virtualViewIds.add(makeId(TYPE_MINUTE, i)); + + // If the current minute falls between two increments, + // insert an extra node for it. + if (current > i && current < i + MINUTE_INCREMENT) { + virtualViewIds.add(makeId(TYPE_MINUTE, current)); + } } } - return true; } - return false; - } + @Override + protected void onPopulateEventForVirtualView(int virtualViewId, AccessibilityEvent event) { + event.setClassName(getClass().getName()); - public void setInputEnabled(boolean inputEnabled) { - mInputEnabled = inputEnabled; - invalidate(); + final int type = getTypeFromId(virtualViewId); + final int value = getValueFromId(virtualViewId); + final CharSequence description = getVirtualViewDescription(type, value); + event.setContentDescription(description); + } + + @Override + protected void onPopulateNodeForVirtualView(int virtualViewId, AccessibilityNodeInfo node) { + node.setClassName(getClass().getName()); + node.addAction(AccessibilityAction.ACTION_CLICK); + + final int type = getTypeFromId(virtualViewId); + final int value = getValueFromId(virtualViewId); + final CharSequence description = getVirtualViewDescription(type, value); + node.setContentDescription(description); + + getBoundsForVirtualView(virtualViewId, mTempRect); + node.setBoundsInParent(mTempRect); + + final boolean selected = isVirtualViewSelected(type, value); + node.setSelected(selected); + + final int nextId = getVirtualViewIdAfter(type, value); + if (nextId != INVALID_ID) { + node.setTraversalBefore(RadialTimePickerView.this, nextId); + } + } + + private int getVirtualViewIdAfter(int type, int value) { + if (type == TYPE_HOUR) { + final int nextValue = value + 1; + final int max = mIs24HourMode ? 23 : 12; + if (nextValue <= max) { + return makeId(type, nextValue); + } + } else if (type == TYPE_MINUTE) { + final int current = getCurrentMinute(); + final int snapValue = value - (value % MINUTE_INCREMENT); + final int nextValue = snapValue + MINUTE_INCREMENT; + if (value < current && nextValue > current) { + // The current value is between two snap values. + return makeId(type, current); + } else if (nextValue < 60) { + return makeId(type, nextValue); + } + } + return INVALID_ID; + } + + @Override + protected boolean onPerformActionForVirtualView(int virtualViewId, int action, + Bundle arguments) { + if (action == AccessibilityNodeInfo.ACTION_CLICK) { + final int type = getTypeFromId(virtualViewId); + final int value = getValueFromId(virtualViewId); + if (type == TYPE_HOUR) { + final int hour = mIs24HourMode ? value : hour12To24(value, mAmOrPm); + setCurrentHour(hour); + return true; + } else if (type == TYPE_MINUTE) { + setCurrentMinute(value); + return true; + } + } + return false; + } + + private int hour12To24(int hour12, int amOrPm) { + int hour24 = hour12; + if (hour12 == 12) { + if (amOrPm == AM) { + hour24 = 0; + } + } else if (amOrPm == PM) { + hour24 += 12; + } + return hour24; + } + + private int hour24To12(int hour24) { + if (hour24 == 0) { + return 12; + } else if (hour24 > 12) { + return hour24 - 12; + } else { + return hour24; + } + } + + private void getBoundsForVirtualView(int virtualViewId, Rect bounds) { + final float radius; + final int type = getTypeFromId(virtualViewId); + final int value = getValueFromId(virtualViewId); + final float centerRadius; + final float degrees; + if (type == TYPE_HOUR) { + final boolean innerCircle = mIs24HourMode && value > 0 && value <= 12; + if (innerCircle) { + centerRadius = mCircleRadius[HOURS_INNER] * mNumbersRadiusMultiplier[HOURS_INNER]; + radius = mSelectionRadius[HOURS_INNER]; + } else { + centerRadius = mCircleRadius[HOURS] * mNumbersRadiusMultiplier[HOURS]; + radius = mSelectionRadius[HOURS]; + } + + degrees = getDegreesForHour(value); + } else if (type == TYPE_MINUTE) { + centerRadius = mCircleRadius[MINUTES] * mNumbersRadiusMultiplier[MINUTES]; + degrees = getDegreesForMinute(value); + radius = mSelectionRadius[MINUTES]; + } else { + // This should never happen. + centerRadius = 0; + degrees = 0; + radius = 0; + } + + final double radians = Math.toRadians(degrees); + final float xCenter = mXCenter + centerRadius * (float) Math.sin(radians); + final float yCenter = mYCenter - centerRadius * (float) Math.cos(radians); + + bounds.set((int) (xCenter - radius), (int) (yCenter - radius), + (int) (xCenter + radius), (int) (yCenter + radius)); + } + + private CharSequence getVirtualViewDescription(int type, int value) { + final CharSequence description; + if (type == TYPE_HOUR || type == TYPE_MINUTE) { + description = Integer.toString(value); + } else { + description = null; + } + return description; + } + + private boolean isVirtualViewSelected(int type, int value) { + final boolean selected; + if (type == TYPE_HOUR) { + selected = getCurrentHour() == value; + } else if (type == TYPE_MINUTE) { + selected = getCurrentMinute() == value; + } else { + selected = false; + } + return selected; + } + + private int makeId(int type, int value) { + return type << SHIFT_TYPE | value << SHIFT_VALUE; + } + + private int getTypeFromId(int id) { + return id >>> SHIFT_TYPE & MASK_TYPE; + } + + private int getValueFromId(int id) { + return id >>> SHIFT_VALUE & MASK_VALUE; + } } private static class IntHolder { diff --git a/core/java/android/widget/RatingBar.java b/core/java/android/widget/RatingBar.java index c4a7c0aa4efd51c06dab386f181031625253be4c..82b490ea26c2b63b981836983e688c66a8218366 100644 --- a/core/java/android/widget/RatingBar.java +++ b/core/java/android/widget/RatingBar.java @@ -314,10 +314,6 @@ public class RatingBar extends AbsSeekBar { dispatchRatingChange(true); } - @Override - void animateSetProgress(int progress) { - } - void dispatchRatingChange(boolean fromUser) { if (mOnRatingBarChangeListener != null) { mOnRatingBarChangeListener.onRatingChanged(this, getRating(), diff --git a/core/java/android/widget/RemoteViews.java b/core/java/android/widget/RemoteViews.java index 7cb3c378ace0bd5032113ae9e2e27f897671176f..dd7fa18468c27cef1c770b220080e947ab5b88ea 100644 --- a/core/java/android/widget/RemoteViews.java +++ b/core/java/android/widget/RemoteViews.java @@ -27,6 +27,7 @@ import android.content.Intent; import android.content.IntentSender; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager.NameNotFoundException; +import android.content.res.ColorStateList; import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.Bitmap; @@ -1069,6 +1070,7 @@ public class RemoteViews implements Parcelable, Filter { static final int BITMAP = 12; static final int BUNDLE = 13; static final int INTENT = 14; + static final int COLOR_STATE_LIST = 15; String methodName; int type; @@ -1142,6 +1144,11 @@ public class RemoteViews implements Parcelable, Filter { this.value = Intent.CREATOR.createFromParcel(in); } break; + case COLOR_STATE_LIST: + if (in.readInt() != 0) { + this.value = ColorStateList.CREATOR.createFromParcel(in); + } + break; default: break; } @@ -1212,6 +1219,11 @@ public class RemoteViews implements Parcelable, Filter { ((Intent)this.value).writeToParcel(out, flags); } break; + case COLOR_STATE_LIST: + out.writeInt(this.value != null ? 1 : 0); + if (this.value != null) { + ((ColorStateList)this.value).writeToParcel(out, flags); + } default: break; } @@ -1247,6 +1259,8 @@ public class RemoteViews implements Parcelable, Filter { return Bundle.class; case INTENT: return Intent.class; + case COLOR_STATE_LIST: + return ColorStateList.class; default: return null; } @@ -2206,6 +2220,42 @@ public class RemoteViews implements Parcelable, Filter { colorFilter, mode, level)); } + /** + * @hide + * Equivalent to calling {@link android.widget.ProgressBar#setProgressTintList}. + * + * @param viewId The id of the view whose tint should change + * @param tint the tint to apply, may be {@code null} to clear tint + */ + public void setProgressTintList(int viewId, ColorStateList tint) { + addAction(new ReflectionAction(viewId, "setProgressTintList", + ReflectionAction.COLOR_STATE_LIST, tint)); + } + + /** + * @hide + * Equivalent to calling {@link android.widget.ProgressBar#setProgressBackgroundTintList}. + * + * @param viewId The id of the view whose tint should change + * @param tint the tint to apply, may be {@code null} to clear tint + */ + public void setProgressBackgroundTintList(int viewId, ColorStateList tint) { + addAction(new ReflectionAction(viewId, "setProgressBackgroundTintList", + ReflectionAction.COLOR_STATE_LIST, tint)); + } + + /** + * @hide + * Equivalent to calling {@link android.widget.ProgressBar#setIndeterminateTintList}. + * + * @param viewId The id of the view whose tint should change + * @param tint the tint to apply, may be {@code null} to clear tint + */ + public void setProgressIndeterminateTintList(int viewId, ColorStateList tint) { + addAction(new ReflectionAction(viewId, "setIndeterminateTintList", + ReflectionAction.COLOR_STATE_LIST, tint)); + } + /** * Equivalent to calling {@link android.widget.TextView#setTextColor(int)}. * @@ -2477,6 +2527,26 @@ public class RemoteViews implements Parcelable, Filter { setCharSequence(viewId, "setContentDescription", contentDescription); } + /** + * Equivalent to calling {@link android.view.View#setAccessibilityTraversalBefore(int)}. + * + * @param viewId The id of the view whose before view in accessibility traversal to set. + * @param nextId The id of the next in the accessibility traversal. + **/ + public void setAccessibilityTraversalBefore(int viewId, int nextId) { + setInt(viewId, "setAccessibilityTraversalBefore", nextId); + } + + /** + * Equivalent to calling {@link android.view.View#setAccessibilityTraversalAfter(int)}. + * + * @param viewId The id of the view whose after view in accessibility traversal to set. + * @param nextId The id of the next in the accessibility traversal. + **/ + public void setAccessibilityTraversalAfter(int viewId, int nextId) { + setInt(viewId, "setAccessibilityTraversalAfter", nextId); + } + /** * Equivalent to calling View.setLabelFor(int). * diff --git a/core/java/android/widget/ScrollBarDrawable.java b/core/java/android/widget/ScrollBarDrawable.java index 937457c43bc53c03287262b7803fd8b91355fd02..8eff1aa89da1304848e5a86a7dd0eefacb779ad6 100644 --- a/core/java/android/widget/ScrollBarDrawable.java +++ b/core/java/android/widget/ScrollBarDrawable.java @@ -29,6 +29,8 @@ import android.graphics.drawable.Drawable; * {@hide} */ public class ScrollBarDrawable extends Drawable { + private static final int[] STATE_ENABLED = new int[] { android.R.attr.state_enabled }; + private Drawable mVerticalTrack; private Drawable mHorizontalTrack; private Drawable mVerticalThumb; @@ -42,6 +44,7 @@ public class ScrollBarDrawable extends Drawable { private final Rect mTempBounds = new Rect(); private boolean mAlwaysDrawHorizontalTrack; private boolean mAlwaysDrawVerticalTrack; + private boolean mMutated; public ScrollBarDrawable() { } @@ -189,21 +192,41 @@ public class ScrollBarDrawable extends Drawable { public void setVerticalThumbDrawable(Drawable thumb) { if (thumb != null) { + if (mMutated) { + thumb.mutate(); + } + thumb.setState(STATE_ENABLED); mVerticalThumb = thumb; } } public void setVerticalTrackDrawable(Drawable track) { + if (track != null) { + if (mMutated) { + track.mutate(); + } + track.setState(STATE_ENABLED); + } mVerticalTrack = track; } public void setHorizontalThumbDrawable(Drawable thumb) { if (thumb != null) { + if (mMutated) { + thumb.mutate(); + } + thumb.setState(STATE_ENABLED); mHorizontalThumb = thumb; } } public void setHorizontalTrackDrawable(Drawable track) { + if (track != null) { + if (mMutated) { + track.mutate(); + } + track.setState(STATE_ENABLED); + } mHorizontalTrack = track; } @@ -217,6 +240,26 @@ public class ScrollBarDrawable extends Drawable { } } + @Override + public ScrollBarDrawable mutate() { + if (!mMutated && super.mutate() == this) { + if (mVerticalTrack != null) { + mVerticalTrack.mutate(); + } + if (mVerticalThumb != null) { + mVerticalThumb.mutate(); + } + if (mHorizontalTrack != null) { + mHorizontalTrack.mutate(); + } + if (mHorizontalThumb != null) { + mHorizontalThumb.mutate(); + } + mMutated = true; + } + return this; + } + @Override public void setAlpha(int alpha) { if (mVerticalTrack != null) { diff --git a/core/java/android/widget/SearchView.java b/core/java/android/widget/SearchView.java index dfdf606bf13c2b42959e143f8af11b5064f8c7fe..4ee6418caf5ee4e5e1bdc902d9fa95446fb028ff 100644 --- a/core/java/android/widget/SearchView.java +++ b/core/java/android/widget/SearchView.java @@ -45,7 +45,6 @@ import android.text.TextWatcher; import android.text.style.ImageSpan; import android.util.AttributeSet; import android.util.Log; -import android.util.TypedValue; import android.view.CollapsibleActionView; import android.view.KeyEvent; import android.view.LayoutInflater; @@ -99,17 +98,21 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { */ private static final String IME_OPTION_NO_MICROPHONE = "nm"; - private final SearchAutoComplete mQueryTextView; + private final SearchAutoComplete mSearchSrcTextView; private final View mSearchEditFrame; private final View mSearchPlate; private final View mSubmitArea; private final ImageView mSearchButton; - private final ImageView mSubmitButton; + private final ImageView mGoButton; private final ImageView mCloseButton; private final ImageView mVoiceButton; - private final ImageView mSearchHintIcon; private final View mDropDownAnchor; - private final int mSearchIconResId; + + /** Icon optionally displayed when the SearchView is collapsed. */ + private final ImageView mCollapsedIcon; + + /** Drawable used as an EditText hint. */ + private final Drawable mSearchHintIcon; // Resources used by SuggestionsAdapter to display suggestions. private final int mSuggestionRowLayout; @@ -262,30 +265,38 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { attrs, R.styleable.SearchView, defStyleAttr, defStyleRes); final LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE); - final int layoutResId = a.getResourceId(R.styleable.SearchView_layout, R.layout.search_view); + final int layoutResId = a.getResourceId( + R.styleable.SearchView_layout, R.layout.search_view); inflater.inflate(layoutResId, this, true); - mQueryTextView = (SearchAutoComplete) findViewById(R.id.search_src_text); - mQueryTextView.setSearchView(this); + mSearchSrcTextView = (SearchAutoComplete) findViewById(R.id.search_src_text); + mSearchSrcTextView.setSearchView(this); mSearchEditFrame = findViewById(R.id.search_edit_frame); mSearchPlate = findViewById(R.id.search_plate); mSubmitArea = findViewById(R.id.submit_area); mSearchButton = (ImageView) findViewById(R.id.search_button); - mSubmitButton = (ImageView) findViewById(R.id.search_go_btn); + mGoButton = (ImageView) findViewById(R.id.search_go_btn); mCloseButton = (ImageView) findViewById(R.id.search_close_btn); mVoiceButton = (ImageView) findViewById(R.id.search_voice_btn); - mSearchHintIcon = (ImageView) findViewById(R.id.search_mag_icon); + mCollapsedIcon = (ImageView) findViewById(R.id.search_mag_icon); // Set up icons and backgrounds. mSearchPlate.setBackground(a.getDrawable(R.styleable.SearchView_queryBackground)); mSubmitArea.setBackground(a.getDrawable(R.styleable.SearchView_submitBackground)); - mSearchIconResId = a.getResourceId(R.styleable.SearchView_searchIcon, 0); - mSearchButton.setImageResource(mSearchIconResId); - mSubmitButton.setImageDrawable(a.getDrawable(R.styleable.SearchView_goIcon)); + mSearchButton.setImageDrawable(a.getDrawable(R.styleable.SearchView_searchIcon)); + mGoButton.setImageDrawable(a.getDrawable(R.styleable.SearchView_goIcon)); mCloseButton.setImageDrawable(a.getDrawable(R.styleable.SearchView_closeIcon)); mVoiceButton.setImageDrawable(a.getDrawable(R.styleable.SearchView_voiceIcon)); - mSearchHintIcon.setImageDrawable(a.getDrawable(R.styleable.SearchView_searchIcon)); + mCollapsedIcon.setImageDrawable(a.getDrawable(R.styleable.SearchView_searchIcon)); + + // Prior to L MR1, the search hint icon defaulted to searchIcon. If the + // style does not have an explicit value set, fall back to that. + if (a.hasValueOrEmpty(R.styleable.SearchView_searchHintIcon)) { + mSearchHintIcon = a.getDrawable(R.styleable.SearchView_searchHintIcon); + } else { + mSearchHintIcon = a.getDrawable(R.styleable.SearchView_searchIcon); + } // Extract dropdown layout resource IDs for later use. mSuggestionRowLayout = a.getResourceId(R.styleable.SearchView_suggestionRowLayout, @@ -294,18 +305,18 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { mSearchButton.setOnClickListener(mOnClickListener); mCloseButton.setOnClickListener(mOnClickListener); - mSubmitButton.setOnClickListener(mOnClickListener); + mGoButton.setOnClickListener(mOnClickListener); mVoiceButton.setOnClickListener(mOnClickListener); - mQueryTextView.setOnClickListener(mOnClickListener); + mSearchSrcTextView.setOnClickListener(mOnClickListener); - mQueryTextView.addTextChangedListener(mTextWatcher); - mQueryTextView.setOnEditorActionListener(mOnEditorActionListener); - mQueryTextView.setOnItemClickListener(mOnItemClickListener); - mQueryTextView.setOnItemSelectedListener(mOnItemSelectedListener); - mQueryTextView.setOnKeyListener(mTextKeyListener); + mSearchSrcTextView.addTextChangedListener(mTextWatcher); + mSearchSrcTextView.setOnEditorActionListener(mOnEditorActionListener); + mSearchSrcTextView.setOnItemClickListener(mOnItemClickListener); + mSearchSrcTextView.setOnItemSelectedListener(mOnItemSelectedListener); + mSearchSrcTextView.setOnKeyListener(mTextKeyListener); // Inform any listener of focus changes - mQueryTextView.setOnFocusChangeListener(new OnFocusChangeListener() { + mSearchSrcTextView.setOnFocusChangeListener(new OnFocusChangeListener() { public void onFocusChange(View v, boolean hasFocus) { if (mOnQueryTextFocusChangeListener != null) { @@ -350,7 +361,7 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { mVoiceAppSearchIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); mVoiceAppSearchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - mDropDownAnchor = findViewById(mQueryTextView.getDropDownAnchor()); + mDropDownAnchor = findViewById(mSearchSrcTextView.getDropDownAnchor()); if (mDropDownAnchor != null) { mDropDownAnchor.addOnLayoutChangeListener(new OnLayoutChangeListener() { @Override @@ -393,7 +404,7 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { 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); + mSearchSrcTextView.setPrivateImeOptions(IME_OPTION_NO_MICROPHONE); } updateViewsVisibility(isIconified()); } @@ -416,7 +427,7 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { * @attr ref android.R.styleable#SearchView_imeOptions */ public void setImeOptions(int imeOptions) { - mQueryTextView.setImeOptions(imeOptions); + mSearchSrcTextView.setImeOptions(imeOptions); } /** @@ -427,7 +438,7 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { * @attr ref android.R.styleable#SearchView_imeOptions */ public int getImeOptions() { - return mQueryTextView.getImeOptions(); + return mSearchSrcTextView.getImeOptions(); } /** @@ -439,7 +450,7 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { * @attr ref android.R.styleable#SearchView_inputType */ public void setInputType(int inputType) { - mQueryTextView.setInputType(inputType); + mSearchSrcTextView.setInputType(inputType); } /** @@ -449,7 +460,7 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { * @attr ref android.R.styleable#SearchView_inputType */ public int getInputType() { - return mQueryTextView.getInputType(); + return mSearchSrcTextView.getInputType(); } /** @hide */ @@ -461,7 +472,7 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { if (!isFocusable()) return false; // If it is not iconified, then give the focus to the text field if (!isIconified()) { - boolean result = mQueryTextView.requestFocus(direction, previouslyFocusedRect); + boolean result = mSearchSrcTextView.requestFocus(direction, previouslyFocusedRect); if (result) { updateViewsVisibility(false); } @@ -477,7 +488,7 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { mClearingFocus = true; setImeVisibility(false); super.clearFocus(); - mQueryTextView.clearFocus(); + mSearchSrcTextView.clearFocus(); mClearingFocus = false; } @@ -536,7 +547,7 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { * @return the query string */ public CharSequence getQuery() { - return mQueryTextView.getText(); + return mSearchSrcTextView.getText(); } /** @@ -548,9 +559,9 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { * text field. */ public void setQuery(CharSequence query, boolean submit) { - mQueryTextView.setText(query); + mSearchSrcTextView.setText(query); if (query != null) { - mQueryTextView.setSelection(mQueryTextView.length()); + mSearchSrcTextView.setSelection(mSearchSrcTextView.length()); mUserQuery = query; } @@ -711,7 +722,7 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { public void setSuggestionsAdapter(CursorAdapter adapter) { mSuggestionsAdapter = adapter; - mQueryTextView.setAdapter(mSuggestionsAdapter); + mSearchSrcTextView.setAdapter(mSuggestionsAdapter); } /** @@ -789,12 +800,12 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { // Visibility of views that are visible when collapsed final int visCollapsed = collapsed ? VISIBLE : GONE; // Is there text in the query - final boolean hasText = !TextUtils.isEmpty(mQueryTextView.getText()); + final boolean hasText = !TextUtils.isEmpty(mSearchSrcTextView.getText()); mSearchButton.setVisibility(visCollapsed); updateSubmitButton(hasText); mSearchEditFrame.setVisibility(collapsed ? GONE : VISIBLE); - mSearchHintIcon.setVisibility(mIconifiedByDefault ? GONE : VISIBLE); + mCollapsedIcon.setVisibility(mIconifiedByDefault ? GONE : VISIBLE); updateCloseButton(); updateVoiceButton(!hasText); updateSubmitArea(); @@ -827,13 +838,13 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { && (hasText || !mVoiceButtonEnabled)) { visibility = VISIBLE; } - mSubmitButton.setVisibility(visibility); + mGoButton.setVisibility(visibility); } private void updateSubmitArea() { int visibility = GONE; if (isSubmitAreaEnabled() - && (mSubmitButton.getVisibility() == VISIBLE + && (mGoButton.getVisibility() == VISIBLE || mVoiceButton.getVisibility() == VISIBLE)) { visibility = VISIBLE; } @@ -841,12 +852,15 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { } private void updateCloseButton() { - final boolean hasText = !TextUtils.isEmpty(mQueryTextView.getText()); + final boolean hasText = !TextUtils.isEmpty(mSearchSrcTextView.getText()); // Should we show the close button? It is not shown if there's no focus, // field is not iconified by default and there is no text in it. final boolean showClose = hasText || (mIconifiedByDefault && !mExpandedInActionView); mCloseButton.setVisibility(showClose ? VISIBLE : GONE); - mCloseButton.getDrawable().setState(hasText ? ENABLED_STATE_SET : EMPTY_STATE_SET); + final Drawable closeButtonImg = mCloseButton.getDrawable(); + if (closeButtonImg != null){ + closeButtonImg.setState(hasText ? ENABLED_STATE_SET : EMPTY_STATE_SET); + } } private void postUpdateFocusedState() { @@ -854,9 +868,16 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { } private void updateFocusedState() { - boolean focused = mQueryTextView.hasFocus(); - mSearchPlate.getBackground().setState(focused ? FOCUSED_STATE_SET : EMPTY_STATE_SET); - mSubmitArea.getBackground().setState(focused ? FOCUSED_STATE_SET : EMPTY_STATE_SET); + final boolean focused = mSearchSrcTextView.hasFocus(); + final int[] stateSet = focused ? FOCUSED_STATE_SET : EMPTY_STATE_SET; + final Drawable searchPlateBg = mSearchPlate.getBackground(); + if (searchPlateBg != null) { + searchPlateBg.setState(stateSet); + } + final Drawable submitAreaBg = mSubmitArea.getBackground(); + if (submitAreaBg != null) { + submitAreaBg.setState(stateSet); + } invalidate(); } @@ -896,11 +917,11 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { onSearchClicked(); } else if (v == mCloseButton) { onCloseClicked(); - } else if (v == mSubmitButton) { + } else if (v == mGoButton) { onSubmitQuery(); } else if (v == mVoiceButton) { onVoiceClicked(); - } else if (v == mQueryTextView) { + } else if (v == mSearchSrcTextView) { forceSuggestionQuery(); } } @@ -925,7 +946,7 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { // entered query with the action key SearchableInfo.ActionKeyInfo actionKey = mSearchable.findActionKey(keyCode); if ((actionKey != null) && (actionKey.getQueryActionMsg() != null)) { - launchQuerySearch(keyCode, actionKey.getQueryActionMsg(), mQueryTextView.getText() + launchQuerySearch(keyCode, actionKey.getQueryActionMsg(), mSearchSrcTextView.getText() .toString()); return true; } @@ -947,25 +968,25 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { if (DBG) { Log.d(LOG_TAG, "mTextListener.onKey(" + keyCode + "," + event + "), selection: " - + mQueryTextView.getListSelection()); + + mSearchSrcTextView.getListSelection()); } // If a suggestion is selected, handle enter, search key, and action keys // as presses on the selected suggestion - if (mQueryTextView.isPopupShowing() - && mQueryTextView.getListSelection() != ListView.INVALID_POSITION) { + if (mSearchSrcTextView.isPopupShowing() + && mSearchSrcTextView.getListSelection() != ListView.INVALID_POSITION) { return onSuggestionsKey(v, keyCode, event); } // If there is text in the query box, handle enter, and action keys // The search key is handled by the dialog's onKeyDown(). - if (!mQueryTextView.isEmpty() && event.hasNoModifiers()) { + if (!mSearchSrcTextView.isEmpty() && event.hasNoModifiers()) { if (event.getAction() == KeyEvent.ACTION_UP) { if (keyCode == KeyEvent.KEYCODE_ENTER) { v.cancelLongPress(); // Launch as a regular search. - launchQuerySearch(KeyEvent.KEYCODE_UNKNOWN, null, mQueryTextView.getText() + launchQuerySearch(KeyEvent.KEYCODE_UNKNOWN, null, mSearchSrcTextView.getText() .toString()); return true; } @@ -973,7 +994,7 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { if (event.getAction() == KeyEvent.ACTION_DOWN) { SearchableInfo.ActionKeyInfo actionKey = mSearchable.findActionKey(keyCode); if ((actionKey != null) && (actionKey.getQueryActionMsg() != null)) { - launchQuerySearch(keyCode, actionKey.getQueryActionMsg(), mQueryTextView + launchQuerySearch(keyCode, actionKey.getQueryActionMsg(), mSearchSrcTextView .getText().toString()); return true; } @@ -1001,7 +1022,7 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { // "click") if (keyCode == KeyEvent.KEYCODE_ENTER || keyCode == KeyEvent.KEYCODE_SEARCH || keyCode == KeyEvent.KEYCODE_TAB) { - int position = mQueryTextView.getListSelection(); + int position = mSearchSrcTextView.getListSelection(); return onItemClicked(position, KeyEvent.KEYCODE_UNKNOWN, null); } @@ -1012,18 +1033,18 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { // left key, at end if right key // TODO: Reverse left/right for right-to-left languages, e.g. // Arabic - int selPoint = (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) ? 0 : mQueryTextView + int selPoint = (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) ? 0 : mSearchSrcTextView .length(); - mQueryTextView.setSelection(selPoint); - mQueryTextView.setListSelection(0); - mQueryTextView.clearListSelection(); - mQueryTextView.ensureImeVisible(true); + mSearchSrcTextView.setSelection(selPoint); + mSearchSrcTextView.setListSelection(0); + mSearchSrcTextView.clearListSelection(); + mSearchSrcTextView.ensureImeVisible(true); return true; } // Next, check for an "up and out" move - if (keyCode == KeyEvent.KEYCODE_DPAD_UP && 0 == mQueryTextView.getListSelection()) { + if (keyCode == KeyEvent.KEYCODE_DPAD_UP && 0 == mSearchSrcTextView.getListSelection()) { // TODO: restoreUserQuery(); // let ACTV complete the move return false; @@ -1035,7 +1056,7 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { && ((actionKey.getSuggestActionMsg() != null) || (actionKey .getSuggestActionMsgColumn() != null))) { // launch suggestion using action key column - int position = mQueryTextView.getListSelection(); + int position = mSearchSrcTextView.getListSelection(); if (position != ListView.INVALID_POSITION) { Cursor c = mSuggestionsAdapter.getCursor(); if (c.moveToPosition(position)) { @@ -1078,24 +1099,24 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { } private CharSequence getDecoratedHint(CharSequence hintText) { - // If the field is always expanded, then don't add the search icon to the hint - if (!mIconifiedByDefault) { + // If the field is always expanded or we don't have a search hint icon, + // then don't add the search icon to the hint. + if (!mIconifiedByDefault || mSearchHintIcon == null) { return hintText; } - final Drawable searchIcon = getContext().getDrawable(mSearchIconResId); - final int textSize = (int) (mQueryTextView.getTextSize() * 1.25); - searchIcon.setBounds(0, 0, textSize, textSize); + final int textSize = (int) (mSearchSrcTextView.getTextSize() * 1.25); + mSearchHintIcon.setBounds(0, 0, textSize, textSize); - final SpannableStringBuilder ssb = new SpannableStringBuilder(" "); // for the icon + final SpannableStringBuilder ssb = new SpannableStringBuilder(" "); + ssb.setSpan(new ImageSpan(mSearchHintIcon), 1, 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); ssb.append(hintText); - ssb.setSpan(new ImageSpan(searchIcon), 1, 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); return ssb; } private void updateQueryHint() { if (mQueryHint != null) { - mQueryTextView.setHint(getDecoratedHint(mQueryHint)); + mSearchSrcTextView.setHint(getDecoratedHint(mQueryHint)); } else if (mSearchable != null) { CharSequence hint = null; int hintId = mSearchable.getHintId(); @@ -1103,10 +1124,10 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { hint = getContext().getString(hintId); } if (hint != null) { - mQueryTextView.setHint(getDecoratedHint(hint)); + mSearchSrcTextView.setHint(getDecoratedHint(hint)); } } else { - mQueryTextView.setHint(getDecoratedHint("")); + mSearchSrcTextView.setHint(getDecoratedHint("")); } } @@ -1114,9 +1135,9 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { * Updates the auto-complete text view. */ private void updateSearchAutoComplete() { - mQueryTextView.setDropDownAnimationStyle(0); // no animation - mQueryTextView.setThreshold(mSearchable.getSuggestThreshold()); - mQueryTextView.setImeOptions(mSearchable.getImeOptions()); + mSearchSrcTextView.setDropDownAnimationStyle(0); // no animation + mSearchSrcTextView.setThreshold(mSearchable.getSuggestThreshold()); + mSearchSrcTextView.setImeOptions(mSearchable.getImeOptions()); int inputType = mSearchable.getInputType(); // We only touch this if the input type is set up for text (which it almost certainly // should be, in the case of search!) @@ -1135,7 +1156,7 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { inputType |= InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS; } } - mQueryTextView.setInputType(inputType); + mSearchSrcTextView.setInputType(inputType); if (mSuggestionsAdapter != null) { mSuggestionsAdapter.changeCursor(null); } @@ -1144,7 +1165,7 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { if (mSearchable.getSuggestAuthority() != null) { mSuggestionsAdapter = new SuggestionsAdapter(getContext(), this, mSearchable, mOutsideDrawablesCache); - mQueryTextView.setAdapter(mSuggestionsAdapter); + mSearchSrcTextView.setAdapter(mSuggestionsAdapter); ((SuggestionsAdapter) mSuggestionsAdapter).setQueryRefinement( mQueryRefinement ? SuggestionsAdapter.REFINE_ALL : SuggestionsAdapter.REFINE_BY_ENTRY); @@ -1161,7 +1182,7 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { int visibility = GONE; if (mVoiceButtonEnabled && !isIconified() && empty) { visibility = VISIBLE; - mSubmitButton.setVisibility(GONE); + mGoButton.setVisibility(GONE); } mVoiceButton.setVisibility(visibility); } @@ -1178,7 +1199,7 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { }; private void onTextChanged(CharSequence newText) { - CharSequence text = mQueryTextView.getText(); + CharSequence text = mSearchSrcTextView.getText(); mUserQuery = text; boolean hasText = !TextUtils.isEmpty(text); updateSubmitButton(hasText); @@ -1192,7 +1213,7 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { } private void onSubmitQuery() { - CharSequence query = mQueryTextView.getText(); + CharSequence query = mSearchSrcTextView.getText(); if (query != null && TextUtils.getTrimmedLength(query) > 0) { if (mOnQueryChangeListener == null || !mOnQueryChangeListener.onQueryTextSubmit(query.toString())) { @@ -1206,11 +1227,11 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { } private void dismissSuggestions() { - mQueryTextView.dismissDropDown(); + mSearchSrcTextView.dismissDropDown(); } private void onCloseClicked() { - CharSequence text = mQueryTextView.getText(); + CharSequence text = mSearchSrcTextView.getText(); if (TextUtils.isEmpty(text)) { if (mIconifiedByDefault) { // If the app doesn't override the close behavior @@ -1222,8 +1243,8 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { } } } else { - mQueryTextView.setText(""); - mQueryTextView.requestFocus(); + mSearchSrcTextView.setText(""); + mSearchSrcTextView.requestFocus(); setImeVisibility(true); } @@ -1231,7 +1252,7 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { private void onSearchClicked() { updateViewsVisibility(false); - mQueryTextView.requestFocus(); + mSearchSrcTextView.requestFocus(); setImeVisibility(true); if (mOnSearchClickListener != null) { mOnSearchClickListener.onClick(this); @@ -1266,7 +1287,7 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { // Delayed update to make sure that the focus has settled down and window focus changes // don't affect it. A synchronous update was not working. postUpdateFocusedState(); - if (mQueryTextView.hasFocus()) { + if (mSearchSrcTextView.hasFocus()) { forceSuggestionQuery(); } } @@ -1286,7 +1307,7 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { setQuery("", false); clearFocus(); updateViewsVisibility(true); - mQueryTextView.setImeOptions(mCollapsedImeOptions); + mSearchSrcTextView.setImeOptions(mCollapsedImeOptions); mExpandedInActionView = false; } @@ -1298,9 +1319,9 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { if (mExpandedInActionView) return; mExpandedInActionView = true; - mCollapsedImeOptions = mQueryTextView.getImeOptions(); - mQueryTextView.setImeOptions(mCollapsedImeOptions | EditorInfo.IME_FLAG_NO_FULLSCREEN); - mQueryTextView.setText(""); + mCollapsedImeOptions = mSearchSrcTextView.getImeOptions(); + mSearchSrcTextView.setImeOptions(mCollapsedImeOptions | EditorInfo.IME_FLAG_NO_FULLSCREEN); + mSearchSrcTextView.setText(""); setIconified(false); } @@ -1326,17 +1347,17 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { ? res.getDimensionPixelSize(R.dimen.dropdownitem_icon_width) + res.getDimensionPixelSize(R.dimen.dropdownitem_text_padding_left) : 0; - mQueryTextView.getDropDownBackground().getPadding(dropDownPadding); + mSearchSrcTextView.getDropDownBackground().getPadding(dropDownPadding); int offset; if (isLayoutRtl) { offset = - dropDownPadding.left; } else { offset = anchorPadding - (dropDownPadding.left + iconOffset); } - mQueryTextView.setDropDownHorizontalOffset(offset); + mSearchSrcTextView.setDropDownHorizontalOffset(offset); final int width = mDropDownAnchor.getWidth() + dropDownPadding.left + dropDownPadding.right + iconOffset - anchorPadding; - mQueryTextView.setDropDownWidth(width); + mSearchSrcTextView.setDropDownWidth(width); } } @@ -1394,7 +1415,7 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { * Query rewriting. */ private void rewriteQueryFromSuggestion(int position) { - CharSequence oldQuery = mQueryTextView.getText(); + CharSequence oldQuery = mSearchSrcTextView.getText(); Cursor c = mSuggestionsAdapter.getCursor(); if (c == null) { return; @@ -1460,9 +1481,9 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { * Sets the text in the query box, without updating the suggestions. */ private void setQuery(CharSequence query) { - mQueryTextView.setText(query, true); + mSearchSrcTextView.setText(query, true); // Move the cursor to the end - mQueryTextView.setSelection(TextUtils.isEmpty(query) ? 0 : query.length()); + mSearchSrcTextView.setSelection(TextUtils.isEmpty(query) ? 0 : query.length()); } private void launchQuerySearch(int actionKey, String actionMsg, String query) { @@ -1648,8 +1669,8 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { } private void forceSuggestionQuery() { - mQueryTextView.doBeforeTextChanged(); - mQueryTextView.doAfterTextChanged(); + mSearchSrcTextView.doBeforeTextChanged(); + mSearchSrcTextView.doAfterTextChanged(); } static boolean isLandscapeMode(Context context) { diff --git a/core/java/android/widget/SimpleMonthAdapter.java b/core/java/android/widget/SimpleMonthAdapter.java index 3bad235ebff5ef8f31c55c63b0b5653be0c8c813..24ebb2cd7e664b3a00bf68fc08625c29a6d32dae 100644 --- a/core/java/android/widget/SimpleMonthAdapter.java +++ b/core/java/android/widget/SimpleMonthAdapter.java @@ -16,31 +16,52 @@ package android.widget; +import com.android.internal.R; + import android.content.Context; import android.content.res.ColorStateList; +import android.content.res.TypedArray; +import android.graphics.Color; import android.view.View; import android.view.ViewGroup; +import android.widget.SimpleMonthView.OnDayClickListener; import java.util.Calendar; -import java.util.HashMap; /** * An adapter for a list of {@link android.widget.SimpleMonthView} items. */ -class SimpleMonthAdapter extends BaseAdapter implements SimpleMonthView.OnDayClickListener { - private static final String TAG = "SimpleMonthAdapter"; +class SimpleMonthAdapter extends BaseAdapter { + private final Calendar mMinDate = Calendar.getInstance(); + private final Calendar mMaxDate = Calendar.getInstance(); private final Context mContext; - private final DatePickerController mController; - private Calendar mSelectedDay; - private ColorStateList mCalendarTextColors; + private Calendar mSelectedDay = Calendar.getInstance(); + private ColorStateList mCalendarTextColors = ColorStateList.valueOf(Color.BLACK); + private OnDaySelectedListener mOnDaySelectedListener; + + private int mFirstDayOfWeek; - public SimpleMonthAdapter(Context context, DatePickerController controller) { + public SimpleMonthAdapter(Context context) { mContext = context; - mController = controller; - init(); - setSelectedDay(mController.getSelectedDay()); + } + + public void setRange(Calendar min, Calendar max) { + mMinDate.setTimeInMillis(min.getTimeInMillis()); + mMaxDate.setTimeInMillis(max.getTimeInMillis()); + + notifyDataSetInvalidated(); + } + + public void setFirstDayOfWeek(int firstDayOfWeek) { + mFirstDayOfWeek = firstDayOfWeek; + + notifyDataSetInvalidated(); + } + + public int getFirstDayOfWeek() { + return mFirstDayOfWeek; } /** @@ -49,10 +70,18 @@ class SimpleMonthAdapter extends BaseAdapter implements SimpleMonthView.OnDayCli * @param day The day to highlight */ public void setSelectedDay(Calendar day) { - if (mSelectedDay != day) { - mSelectedDay = day; - notifyDataSetChanged(); - } + mSelectedDay = day; + + notifyDataSetChanged(); + } + + /** + * Sets the listener to call when the user selects a day. + * + * @param listener The listener to call. + */ + public void setOnDaySelectedListener(OnDaySelectedListener listener) { + mOnDaySelectedListener = listener; } void setCalendarTextColor(ColorStateList colors) { @@ -60,18 +89,28 @@ class SimpleMonthAdapter extends BaseAdapter implements SimpleMonthView.OnDayCli } /** - * Set up the gesture detector and selected time + * Sets the text color, size, style, hint color, and highlight color from + * the specified TextAppearance resource. This is mostly copied from + * {@link TextView#setTextAppearance(Context, int)}. */ - protected void init() { - mSelectedDay = Calendar.getInstance(); + void setCalendarTextAppearance(int resId) { + final TypedArray a = mContext.obtainStyledAttributes(resId, R.styleable.TextAppearance); + + final ColorStateList textColor = a.getColorStateList(R.styleable.TextAppearance_textColor); + if (textColor != null) { + mCalendarTextColors = textColor; + } + + // TODO: Support font size, etc. + + a.recycle(); } @Override public int getCount() { - final int diffYear = mController.getMaxYear() - mController.getMinYear(); - final int diffMonth = 1 + mController.getMaxMonth() - mController.getMinMonth() - + 12 * diffYear; - return diffMonth; + final int diffYear = mMaxDate.get(Calendar.YEAR) - mMinDate.get(Calendar.YEAR); + final int diffMonth = mMaxDate.get(Calendar.MONTH) - mMinDate.get(Calendar.MONTH); + return diffMonth + 12 * diffYear + 1; } @Override @@ -92,36 +131,34 @@ class SimpleMonthAdapter extends BaseAdapter implements SimpleMonthView.OnDayCli @SuppressWarnings("unchecked") @Override public View getView(int position, View convertView, ViewGroup parent) { - SimpleMonthView v; - HashMap drawingParams = null; + final SimpleMonthView v; if (convertView != null) { v = (SimpleMonthView) convertView; - // We store the drawing parameters in the view so it can be recycled - drawingParams = (HashMap) v.getTag(); } else { v = new SimpleMonthView(mContext); + // Set up the new view - AbsListView.LayoutParams params = new AbsListView.LayoutParams( + final AbsListView.LayoutParams params = new AbsListView.LayoutParams( AbsListView.LayoutParams.MATCH_PARENT, AbsListView.LayoutParams.MATCH_PARENT); v.setLayoutParams(params); v.setClickable(true); - v.setOnDayClickListener(this); + v.setOnDayClickListener(mOnDayClickListener); + if (mCalendarTextColors != null) { v.setTextColor(mCalendarTextColors); } } - if (drawingParams == null) { - drawingParams = new HashMap(); - } else { - drawingParams.clear(); - } - final int currentMonth = position + mController.getMinMonth(); - final int month = currentMonth % 12; - final int year = currentMonth / 12 + mController.getMinYear(); - int selectedDay = -1; + final int minMonth = mMinDate.get(Calendar.MONTH); + final int minYear = mMinDate.get(Calendar.YEAR); + final int currentMonth = position + minMonth; + final int month = currentMonth % 12; + final int year = currentMonth / 12 + minYear; + final int selectedDay; if (isSelectedDayInMonth(year, month)) { selectedDay = mSelectedDay.get(Calendar.DAY_OF_MONTH); + } else { + selectedDay = -1; } // Invokes requestLayout() to ensure that the recycled view is set with the appropriate @@ -129,20 +166,20 @@ class SimpleMonthAdapter extends BaseAdapter implements SimpleMonthView.OnDayCli v.reuse(); final int enabledDayRangeStart; - if (mController.getMinMonth() == month && mController.getMinYear() == year) { - enabledDayRangeStart = mController.getMinDay(); + if (minMonth == month && minYear == year) { + enabledDayRangeStart = mMinDate.get(Calendar.DAY_OF_MONTH); } else { enabledDayRangeStart = 1; } final int enabledDayRangeEnd; - if (mController.getMaxMonth() == month && mController.getMaxYear() == year) { - enabledDayRangeEnd = mController.getMaxDay(); + if (mMaxDate.get(Calendar.MONTH) == month && mMaxDate.get(Calendar.YEAR) == year) { + enabledDayRangeEnd = mMaxDate.get(Calendar.DAY_OF_MONTH); } else { enabledDayRangeEnd = 31; } - v.setMonthParams(selectedDay, month, year, mController.getFirstDayOfWeek(), + v.setMonthParams(selectedDay, month, year, mFirstDayOfWeek, enabledDayRangeStart, enabledDayRangeEnd); v.invalidate(); @@ -153,22 +190,24 @@ class SimpleMonthAdapter extends BaseAdapter implements SimpleMonthView.OnDayCli return mSelectedDay.get(Calendar.YEAR) == year && mSelectedDay.get(Calendar.MONTH) == month; } - @Override - public void onDayClick(SimpleMonthView view, Calendar day) { - if (day != null) { - onDayTapped(day); - } + private boolean isCalendarInRange(Calendar value) { + return value.compareTo(mMinDate) >= 0 && value.compareTo(mMaxDate) <= 0; } - /** - * Maintains the same hour/min/sec but moves the day to the tapped day. - * - * @param day The day that was tapped - */ - protected void onDayTapped(Calendar day) { - mController.tryVibrate(); - mController.onDayOfMonthSelected(day.get(Calendar.YEAR), day.get(Calendar.MONTH), - day.get(Calendar.DAY_OF_MONTH)); - setSelectedDay(day); + private final OnDayClickListener mOnDayClickListener = new OnDayClickListener() { + @Override + public void onDayClick(SimpleMonthView view, Calendar day) { + if (day != null && isCalendarInRange(day)) { + setSelectedDay(day); + + if (mOnDaySelectedListener != null) { + mOnDaySelectedListener.onDaySelected(SimpleMonthAdapter.this, day); + } + } + } + }; + + public interface OnDaySelectedListener { + public void onDaySelected(SimpleMonthAdapter view, Calendar day); } } diff --git a/core/java/android/widget/SimpleMonthView.java b/core/java/android/widget/SimpleMonthView.java index a76241ed1a505b7491318b1dead1781ef5939eec..d2a37ac111efc0da611ce479ebcddeed35944a63 100644 --- a/core/java/android/widget/SimpleMonthView.java +++ b/core/java/android/widget/SimpleMonthView.java @@ -31,6 +31,7 @@ import android.text.format.DateFormat; import android.text.format.DateUtils; import android.text.format.Time; import android.util.AttributeSet; +import android.util.IntArray; import android.util.MathUtils; import android.view.MotionEvent; import android.view.View; @@ -51,8 +52,6 @@ import java.util.Locale; * within the specified month. */ class SimpleMonthView extends View { - private static final String TAG = "SimpleMonthView"; - private static final int DEFAULT_HEIGHT = 32; private static final int MIN_HEIGHT = 10; @@ -66,15 +65,15 @@ class SimpleMonthView extends View { private static final int DAY_SEPARATOR_WIDTH = 1; + private final Formatter mFormatter; + private final StringBuilder mStringBuilder; + private final int mMiniDayNumberTextSize; private final int mMonthLabelTextSize; private final int mMonthDayLabelTextSize; private final int mMonthHeaderSize; private final int mDaySelectedCircleSize; - // used for scaling to the device density - private static float mScale = 0; - /** Single-letter (when available) formatter for the day of week label. */ private SimpleDateFormat mDayFormatter = new SimpleDateFormat("EEEEE", Locale.getDefault()); @@ -91,9 +90,6 @@ class SimpleMonthView extends View { private Paint mMonthTitlePaint; private Paint mMonthDayLabelPaint; - private final Formatter mFormatter; - private final StringBuilder mStringBuilder; - private int mMonth; private int mYear; @@ -154,11 +150,14 @@ class SimpleMonthView extends View { this(context, attrs, R.attr.datePickerStyle); } - public SimpleMonthView(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs); + public SimpleMonthView(Context context, AttributeSet attrs, int defStyleAttr) { + this(context, attrs, defStyleAttr, 0); + } - final Resources res = context.getResources(); + public SimpleMonthView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + final Resources res = context.getResources(); mDayOfWeekTypeface = res.getString(R.string.day_of_week_label_typeface); mMonthTitleTypeface = res.getString(R.string.sans_serif); @@ -610,7 +609,7 @@ class SimpleMonthView extends View { } @Override - protected void getVisibleVirtualViews(List virtualViewIds) { + protected void getVisibleVirtualViews(IntArray virtualViewIds) { for (int day = 1; day <= mNumCells; day++) { virtualViewIds.add(day); } diff --git a/core/java/android/widget/Switch.java b/core/java/android/widget/Switch.java index a8980849af43baeec3469608047438f7a07f1a3b..7a2222424cdd0d3edd096de6cd8fb2a5b227af92 100644 --- a/core/java/android/widget/Switch.java +++ b/core/java/android/widget/Switch.java @@ -39,6 +39,7 @@ import android.util.FloatProperty; import android.util.MathUtils; import android.view.Gravity; import android.view.MotionEvent; +import android.view.SoundEffectConstants; import android.view.VelocityTracker; import android.view.ViewConfiguration; import android.view.accessibility.AccessibilityEvent; @@ -688,6 +689,10 @@ public class Switch extends CompoundButton { * @return true if (x, y) is within the target area of the switch thumb */ private boolean hitThumb(float x, float y) { + if (mThumbDrawable == null) { + return false; + } + // Relies on mTempRect, MUST be called first! final int thumbOffset = getThumbOffset(); @@ -797,6 +802,7 @@ public class Switch extends CompoundButton { // Commit the change if the event is up and not canceled and the switch // has not been disabled during the drag. final boolean commitChange = ev.getAction() == MotionEvent.ACTION_UP && isEnabled(); + final boolean oldState = isChecked(); final boolean newState; if (commitChange) { mVelocityTracker.computeCurrentVelocity(1000); @@ -807,10 +813,14 @@ public class Switch extends CompoundButton { newState = getTargetCheckedState(); } } else { - newState = isChecked(); + newState = oldState; + } + + if (newState != oldState) { + playSoundEffect(SoundEffectConstants.CLICK); + setChecked(newState); } - setChecked(newState); cancelSuperTouch(ev); } diff --git a/core/java/android/widget/TextClock.java b/core/java/android/widget/TextClock.java index 1a86809ab01398192bbc9619f3d4cada94fb2711..e2acaac3f06adff992a29bf0f564dfa8d6df3fb6 100644 --- a/core/java/android/widget/TextClock.java +++ b/core/java/android/widget/TextClock.java @@ -16,6 +16,7 @@ package android.widget; +import android.app.ActivityManager; import android.content.BroadcastReceiver; import android.content.ContentResolver; import android.content.Context; @@ -26,6 +27,7 @@ import android.database.ContentObserver; import android.net.Uri; import android.os.Handler; import android.os.SystemClock; +import android.os.UserHandle; import android.provider.Settings; import android.text.format.DateFormat; import android.util.AttributeSet; @@ -127,6 +129,8 @@ public class TextClock extends TextView { private Calendar mTime; private String mTimeZone; + private boolean mShowCurrentUserTime; + private final ContentObserver mFormatChangeObserver = new ContentObserver(new Handler()) { @Override public void onChange(boolean selfChange) { @@ -341,6 +345,22 @@ public class TextClock extends TextView { onTimeChanged(); } + /** + * Sets whether this clock should always track the current user and not the user of the + * current process. This is used for single instance processes like the systemUI who need + * to display time for different users. + * + * @hide + */ + public void setShowCurrentUserTime(boolean showCurrentUserTime) { + mShowCurrentUserTime = showCurrentUserTime; + + chooseFormat(); + onTimeChanged(); + unregisterObserver(); + registerObserver(); + } + /** * Indicates whether the system is currently using the 24-hour mode. * @@ -360,7 +380,11 @@ public class TextClock extends TextView { * @see #getFormat24Hour() */ public boolean is24HourModeEnabled() { - return DateFormat.is24HourFormat(getContext()); + if (mShowCurrentUserTime) { + return DateFormat.is24HourFormat(getContext(), ActivityManager.getCurrentUser()); + } else { + return DateFormat.is24HourFormat(getContext()); + } } /** @@ -500,7 +524,13 @@ public class TextClock extends TextView { private void registerObserver() { final ContentResolver resolver = getContext().getContentResolver(); - resolver.registerContentObserver(Settings.System.CONTENT_URI, true, mFormatChangeObserver); + if (mShowCurrentUserTime) { + resolver.registerContentObserver(Settings.System.CONTENT_URI, true, + mFormatChangeObserver, UserHandle.USER_ALL); + } else { + resolver.registerContentObserver(Settings.System.CONTENT_URI, true, + mFormatChangeObserver); + } } private void unregisterReceiver() { diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index dc4d2142cc340dfe3667e6785232901e3782d0a3..dd8280b1b82e5a1ad65164cfa6a324707ab46b46 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -42,6 +42,7 @@ import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; import android.os.SystemClock; +import android.os.UserHandle; import android.provider.Settings; import android.text.BoringLayout; import android.text.DynamicLayout; @@ -286,9 +287,11 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener private int mCurTextColor; private int mCurHintTextColor; private boolean mFreezesText; - private boolean mTemporaryDetach; private boolean mDispatchTemporaryDetach; + /** Whether this view is temporarily detached from the parent view. */ + boolean mTemporaryDetach; + private Editable.Factory mEditableFactory = Editable.Factory.getInstance(); private Spannable.Factory mSpannableFactory = Spannable.Factory.getInstance(); @@ -654,6 +657,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener ColorStateList textColorLink = null; int textSize = 15; String fontFamily = null; + boolean fontFamilyExplicit = false; int typefaceIndex = -1; int styleIndex = -1; boolean allCaps = false; @@ -1008,6 +1012,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener case com.android.internal.R.styleable.TextView_fontFamily: fontFamily = a.getString(attr); + fontFamilyExplicit = true; break; case com.android.internal.R.styleable.TextView_password: @@ -1296,6 +1301,9 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener typefaceIndex = MONOSPACE; } + if (typefaceIndex != -1 && !fontFamilyExplicit) { + fontFamily = null; + } setTypefaceFromAttrs(fontFamily, typefaceIndex, styleIndex); if (shadowcolor != 0) { @@ -3631,9 +3639,11 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } if (mHintTextColor != null) { color = mHintTextColor.getColorForState(getDrawableState(), 0); - if (color != mCurHintTextColor && mText.length() == 0) { + if (color != mCurHintTextColor) { mCurHintTextColor = color; - inval = true; + if (mText.length() == 0) { + inval = true; + } } } if (inval) { @@ -5013,9 +5023,15 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener return (int) Math.max(0, mShadowDy + mShadowRadius); } + private int getFudgedPaddingRight() { + // Add sufficient space for cursor and tone marks + int cursorWidth = 2 + (int)mTextPaint.density; // adequate for Material cursors + return Math.max(0, getCompoundPaddingRight() - (cursorWidth - 1)); + } + @Override protected int getRightPaddingOffset() { - return -(getCompoundPaddingRight() - mPaddingRight) + + return -(getFudgedPaddingRight() - mPaddingRight) + (int) Math.max(0, mShadowDx + mShadowRadius); } @@ -5371,7 +5387,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener float clipLeft = compoundPaddingLeft + scrollX; float clipTop = (scrollY == 0) ? 0 : extendedPaddingTop + scrollY; - float clipRight = right - left - compoundPaddingRight + scrollX; + float clipRight = right - left - getFudgedPaddingRight() + scrollX; float clipBottom = bottom - top + scrollY - ((scrollY == maxScrollY) ? 0 : extendedPaddingBottom); @@ -8383,8 +8399,9 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener * to speak passwords. */ private boolean shouldSpeakPasswordsForAccessibility() { - return (Settings.Secure.getInt(mContext.getContentResolver(), - Settings.Secure.ACCESSIBILITY_SPEAK_PASSWORD, 0) == 1); + return (Settings.Secure.getIntForUser(mContext.getContentResolver(), + Settings.Secure.ACCESSIBILITY_SPEAK_PASSWORD, 0, + UserHandle.USER_CURRENT_OR_SELF) == 1); } @Override @@ -8466,8 +8483,14 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } } + /** + * Performs an accessibility action after it has been offered to the + * delegate. + * + * @hide + */ @Override - public boolean performAccessibilityAction(int action, Bundle arguments) { + public boolean performAccessibilityActionInternal(int action, Bundle arguments) { switch (action) { case AccessibilityNodeInfo.ACTION_CLICK: { boolean handled = false; @@ -8519,6 +8542,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } return false; case AccessibilityNodeInfo.ACTION_SET_SELECTION: { if (isFocused() && canSelectText()) { + ensureIterableTextForAccessibilitySelectable(); CharSequence text = getIterableTextForAccessibility(); if (text == null) { return false; @@ -8544,8 +8568,13 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } } } return false; + case AccessibilityNodeInfo.ACTION_NEXT_AT_MOVEMENT_GRANULARITY: + case AccessibilityNodeInfo.ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY: { + ensureIterableTextForAccessibilitySelectable(); + return super.performAccessibilityActionInternal(action, arguments); + } default: { - return super.performAccessibilityAction(action, arguments); + return super.performAccessibilityActionInternal(action, arguments); } } } @@ -9033,10 +9062,13 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener */ @Override public CharSequence getIterableTextForAccessibility() { + return mText; + } + + private void ensureIterableTextForAccessibilitySelectable() { if (!(mText instanceof Spannable)) { setText(mText, BufferType.SPANNABLE); } - return mText; } /** diff --git a/core/java/android/widget/TimePicker.java b/core/java/android/widget/TimePicker.java index 85cf67b90e5e3fdfeb7c5e5c12d983da32943465..26e02f8a3a24a28db82d1f79f3b2b38d816726f7 100644 --- a/core/java/android/widget/TimePicker.java +++ b/core/java/android/widget/TimePicker.java @@ -86,12 +86,12 @@ public class TimePicker extends FrameLayout { switch (mode) { case MODE_CLOCK: - mDelegate = new TimePickerSpinnerDelegate( + mDelegate = new TimePickerClockDelegate( this, context, attrs, defStyleAttr, defStyleRes); break; case MODE_SPINNER: default: - mDelegate = new TimePickerClockDelegate( + mDelegate = new TimePickerSpinnerDelegate( this, context, attrs, defStyleAttr, defStyleRes); break; } diff --git a/core/java/android/widget/TimePickerClockDelegate.java b/core/java/android/widget/TimePickerClockDelegate.java index 8917f39e781731acb65246b8b78d56915e8f9ad4..15344290cba972c4df500b61c2fd1a50a6ac192e 100644 --- a/core/java/android/widget/TimePickerClockDelegate.java +++ b/core/java/android/widget/TimePickerClockDelegate.java @@ -17,365 +17,390 @@ package android.widget; import android.content.Context; +import android.content.res.ColorStateList; import android.content.res.Configuration; +import android.content.res.Resources; import android.content.res.TypedArray; import android.os.Parcel; import android.os.Parcelable; import android.text.format.DateFormat; import android.text.format.DateUtils; import android.util.AttributeSet; +import android.util.Log; +import android.util.TypedValue; +import android.view.HapticFeedbackConstants; +import android.view.KeyCharacterMap; +import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; +import android.view.View.AccessibilityDelegate; import android.view.ViewGroup; import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityNodeInfo; -import android.view.inputmethod.EditorInfo; -import android.view.inputmethod.InputMethodManager; +import android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction; + import com.android.internal.R; -import java.text.DateFormatSymbols; +import java.util.ArrayList; import java.util.Calendar; import java.util.Locale; -import libcore.icu.LocaleData; - -import static android.view.View.IMPORTANT_FOR_ACCESSIBILITY_AUTO; -import static android.view.View.IMPORTANT_FOR_ACCESSIBILITY_YES; - /** - * A delegate implementing the basic TimePicker + * A delegate implementing the radial clock-based TimePicker. */ -class TimePickerClockDelegate extends TimePicker.AbstractTimePickerDelegate { +class TimePickerClockDelegate extends TimePicker.AbstractTimePickerDelegate implements + RadialTimePickerView.OnValueSelectedListener { + + private static final String TAG = "TimePickerClockDelegate"; + + // Index used by RadialPickerLayout + private static final int HOUR_INDEX = 0; + private static final int MINUTE_INDEX = 1; + + // NOT a real index for the purpose of what's showing. + private static final int AMPM_INDEX = 2; + + // Also NOT a real index, just used for keyboard mode. + private static final int ENABLE_PICKER_INDEX = 3; + + // LayoutLib relies on these constants. Change TimePickerClockDelegate_Delegate if + // modifying these. + static final int AM = 0; + static final int PM = 1; + private static final boolean DEFAULT_ENABLED_STATE = true; + private boolean mIsEnabled = DEFAULT_ENABLED_STATE; + private static final int HOURS_IN_HALF_DAY = 12; - // state + private final View mHeaderView; + private final TextView mHourView; + private final TextView mMinuteView; + private final View mAmPmLayout; + private final CheckedTextView mAmLabel; + private final CheckedTextView mPmLabel; + private final RadialTimePickerView mRadialTimePickerView; + private final TextView mSeparatorView; + + private final String mAmText; + private final String mPmText; + + private final float mDisabledAlpha; + + private boolean mAllowAutoAdvance; + private int mInitialHourOfDay; + private int mInitialMinute; private boolean mIs24HourView; - private boolean mIsAm; - // ui components - private final NumberPicker mHourSpinner; - private final NumberPicker mMinuteSpinner; - private final NumberPicker mAmPmSpinner; - private final EditText mHourSpinnerInput; - private final EditText mMinuteSpinnerInput; - private final EditText mAmPmSpinnerInput; - private final TextView mDivider; + // For hardware IME input. + private char mPlaceholderText; + private String mDoublePlaceholderText; + private String mDeletedKeyFormat; + private boolean mInKbMode; + private ArrayList mTypedTimes = new ArrayList(); + private Node mLegalTimesTree; + private int mAmKeyCode; + private int mPmKeyCode; - // Note that the legacy implementation of the TimePicker is - // using a button for toggling between AM/PM while the new - // version uses a NumberPicker spinner. Therefore the code - // accommodates these two cases to be backwards compatible. - private final Button mAmPmButton; + // Accessibility strings. + private String mSelectHours; + private String mSelectMinutes; - private final String[] mAmPmStrings; + // Most recent time announcement values for accessibility. + private CharSequence mLastAnnouncedText; + private boolean mLastAnnouncedIsHour; - private boolean mIsEnabled = DEFAULT_ENABLED_STATE; private Calendar mTempCalendar; - private boolean mHourWithTwoDigit; - private char mHourFormat; public TimePickerClockDelegate(TimePicker delegator, Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(delegator, context); // process style attributes - final TypedArray a = mContext.obtainStyledAttributes( - attrs, R.styleable.TimePicker, defStyleAttr, defStyleRes); - final int layoutResourceId = a.getResourceId( - R.styleable.TimePicker_legacyLayout, R.layout.time_picker_legacy); - a.recycle(); + final TypedArray a = mContext.obtainStyledAttributes(attrs, + R.styleable.TimePicker, defStyleAttr, defStyleRes); + final LayoutInflater inflater = (LayoutInflater) mContext.getSystemService( + Context.LAYOUT_INFLATER_SERVICE); + final Resources res = mContext.getResources(); + + mSelectHours = res.getString(R.string.select_hours); + mSelectMinutes = res.getString(R.string.select_minutes); + + String[] amPmStrings = TimePickerSpinnerDelegate.getAmPmStrings(context); + mAmText = amPmStrings[0]; + mPmText = amPmStrings[1]; + + final int layoutResourceId = a.getResourceId(R.styleable.TimePicker_internalLayout, + R.layout.time_picker_holo); + final View mainView = inflater.inflate(layoutResourceId, delegator); + + mHeaderView = mainView.findViewById(R.id.time_header); + mHeaderView.setBackground(a.getDrawable(R.styleable.TimePicker_headerBackground)); + + // Set up hour/minute labels. + mHourView = (TextView) mHeaderView.findViewById(R.id.hours); + mHourView.setOnClickListener(mClickListener); + mHourView.setAccessibilityDelegate( + new ClickActionDelegate(context, R.string.select_hours)); + mSeparatorView = (TextView) mHeaderView.findViewById(R.id.separator); + mMinuteView = (TextView) mHeaderView.findViewById(R.id.minutes); + mMinuteView.setOnClickListener(mClickListener); + mMinuteView.setAccessibilityDelegate( + new ClickActionDelegate(context, R.string.select_minutes)); + + final int headerTimeTextAppearance = a.getResourceId( + R.styleable.TimePicker_headerTimeTextAppearance, 0); + if (headerTimeTextAppearance != 0) { + mHourView.setTextAppearance(context, headerTimeTextAppearance); + mSeparatorView.setTextAppearance(context, headerTimeTextAppearance); + mMinuteView.setTextAppearance(context, headerTimeTextAppearance); + } - final LayoutInflater inflater = LayoutInflater.from(mContext); - inflater.inflate(layoutResourceId, mDelegator, true); - - // hour - mHourSpinner = (NumberPicker) delegator.findViewById(R.id.hour); - mHourSpinner.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { - public void onValueChange(NumberPicker spinner, int oldVal, int newVal) { - updateInputState(); - if (!is24HourView()) { - if ((oldVal == HOURS_IN_HALF_DAY - 1 && newVal == HOURS_IN_HALF_DAY) || - (oldVal == HOURS_IN_HALF_DAY && newVal == HOURS_IN_HALF_DAY - 1)) { - mIsAm = !mIsAm; - updateAmPmControl(); - } - } - onTimeChanged(); - } - }); - mHourSpinnerInput = (EditText) mHourSpinner.findViewById(R.id.numberpicker_input); - mHourSpinnerInput.setImeOptions(EditorInfo.IME_ACTION_NEXT); - - // divider (only for the new widget style) - mDivider = (TextView) mDelegator.findViewById(R.id.divider); - if (mDivider != null) { - setDividerText(); - } - - // minute - mMinuteSpinner = (NumberPicker) mDelegator.findViewById(R.id.minute); - mMinuteSpinner.setMinValue(0); - mMinuteSpinner.setMaxValue(59); - mMinuteSpinner.setOnLongPressUpdateInterval(100); - mMinuteSpinner.setFormatter(NumberPicker.getTwoDigitFormatter()); - mMinuteSpinner.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { - public void onValueChange(NumberPicker spinner, int oldVal, int newVal) { - updateInputState(); - int minValue = mMinuteSpinner.getMinValue(); - int maxValue = mMinuteSpinner.getMaxValue(); - if (oldVal == maxValue && newVal == minValue) { - int newHour = mHourSpinner.getValue() + 1; - if (!is24HourView() && newHour == HOURS_IN_HALF_DAY) { - mIsAm = !mIsAm; - updateAmPmControl(); - } - mHourSpinner.setValue(newHour); - } else if (oldVal == minValue && newVal == maxValue) { - int newHour = mHourSpinner.getValue() - 1; - if (!is24HourView() && newHour == HOURS_IN_HALF_DAY - 1) { - mIsAm = !mIsAm; - updateAmPmControl(); - } - mHourSpinner.setValue(newHour); - } - onTimeChanged(); - } - }); - mMinuteSpinnerInput = (EditText) mMinuteSpinner.findViewById(R.id.numberpicker_input); - mMinuteSpinnerInput.setImeOptions(EditorInfo.IME_ACTION_NEXT); - - // Get the localized am/pm strings and use them in the spinner. - mAmPmStrings = getAmPmStrings(context); - - // am/pm - final View amPmView = mDelegator.findViewById(R.id.amPm); - if (amPmView instanceof Button) { - mAmPmSpinner = null; - mAmPmSpinnerInput = null; - mAmPmButton = (Button) amPmView; - mAmPmButton.setOnClickListener(new View.OnClickListener() { - public void onClick(View button) { - button.requestFocus(); - mIsAm = !mIsAm; - updateAmPmControl(); - onTimeChanged(); - } - }); - } else { - mAmPmButton = null; - mAmPmSpinner = (NumberPicker) amPmView; - mAmPmSpinner.setMinValue(0); - mAmPmSpinner.setMaxValue(1); - mAmPmSpinner.setDisplayedValues(mAmPmStrings); - mAmPmSpinner.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { - public void onValueChange(NumberPicker picker, int oldVal, int newVal) { - updateInputState(); - picker.requestFocus(); - mIsAm = !mIsAm; - updateAmPmControl(); - onTimeChanged(); - } - }); - mAmPmSpinnerInput = (EditText) mAmPmSpinner.findViewById(R.id.numberpicker_input); - mAmPmSpinnerInput.setImeOptions(EditorInfo.IME_ACTION_DONE); - } - - if (isAmPmAtStart()) { - // Move the am/pm view to the beginning - ViewGroup amPmParent = (ViewGroup) delegator.findViewById(R.id.timePickerLayout); - amPmParent.removeView(amPmView); - amPmParent.addView(amPmView, 0); - // Swap layout margins if needed. They may be not symmetrical (Old Standard Theme - // for example and not for Holo Theme) - ViewGroup.MarginLayoutParams lp = - (ViewGroup.MarginLayoutParams) amPmView.getLayoutParams(); - final int startMargin = lp.getMarginStart(); - final int endMargin = lp.getMarginEnd(); - if (startMargin != endMargin) { - lp.setMarginStart(endMargin); - lp.setMarginEnd(startMargin); - } + // Now that we have text appearances out of the way, make sure the hour + // and minute views are correctly sized. + mHourView.setMinWidth(computeStableWidth(mHourView, 24)); + mMinuteView.setMinWidth(computeStableWidth(mMinuteView, 60)); + + // TODO: This can be removed once we support themed color state lists. + final int headerSelectedTextColor = a.getColor( + R.styleable.TimePicker_headerSelectedTextColor, + res.getColor(R.color.timepicker_default_selector_color_material)); + mHourView.setTextColor(ColorStateList.addFirstIfMissing(mHourView.getTextColors(), + R.attr.state_selected, headerSelectedTextColor)); + mMinuteView.setTextColor(ColorStateList.addFirstIfMissing(mMinuteView.getTextColors(), + R.attr.state_selected, headerSelectedTextColor)); + + // Set up AM/PM labels. + mAmPmLayout = mHeaderView.findViewById(R.id.ampm_layout); + mAmLabel = (CheckedTextView) mAmPmLayout.findViewById(R.id.am_label); + mAmLabel.setText(amPmStrings[0]); + mAmLabel.setOnClickListener(mClickListener); + mPmLabel = (CheckedTextView) mAmPmLayout.findViewById(R.id.pm_label); + mPmLabel.setText(amPmStrings[1]); + mPmLabel.setOnClickListener(mClickListener); + + final int headerAmPmTextAppearance = a.getResourceId( + R.styleable.TimePicker_headerAmPmTextAppearance, 0); + if (headerAmPmTextAppearance != 0) { + mAmLabel.setTextAppearance(context, headerAmPmTextAppearance); + mPmLabel.setTextAppearance(context, headerAmPmTextAppearance); } - getHourFormatData(); + a.recycle(); + + // Pull disabled alpha from theme. + final TypedValue outValue = new TypedValue(); + context.getTheme().resolveAttribute(android.R.attr.disabledAlpha, outValue, true); + mDisabledAlpha = outValue.getFloat(); - // update controls to initial state - updateHourControl(); - updateMinuteControl(); - updateAmPmControl(); + mRadialTimePickerView = (RadialTimePickerView) mainView.findViewById( + R.id.radial_picker); - // set to current time - setCurrentHour(mTempCalendar.get(Calendar.HOUR_OF_DAY)); - setCurrentMinute(mTempCalendar.get(Calendar.MINUTE)); + setupListeners(); - if (!isEnabled()) { - setEnabled(false); + mAllowAutoAdvance = true; + + // Set up for keyboard mode. + mDoublePlaceholderText = res.getString(R.string.time_placeholder); + mDeletedKeyFormat = res.getString(R.string.deleted_key); + mPlaceholderText = mDoublePlaceholderText.charAt(0); + mAmKeyCode = mPmKeyCode = -1; + generateLegalTimesTree(); + + // Initialize with current time + final Calendar calendar = Calendar.getInstance(mCurrentLocale); + final int currentHour = calendar.get(Calendar.HOUR_OF_DAY); + final int currentMinute = calendar.get(Calendar.MINUTE); + initialize(currentHour, currentMinute, false /* 12h */, HOUR_INDEX); + } + + private static class ClickActionDelegate extends AccessibilityDelegate { + private final AccessibilityAction mClickAction; + + public ClickActionDelegate(Context context, int resId) { + mClickAction = new AccessibilityAction( + AccessibilityNodeInfo.ACTION_CLICK, context.getString(resId)); } - // set the content descriptions - setContentDescriptions(); + @Override + public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info) { + super.onInitializeAccessibilityNodeInfo(host, info); - // If not explicitly specified this view is important for accessibility. - if (mDelegator.getImportantForAccessibility() == IMPORTANT_FOR_ACCESSIBILITY_AUTO) { - mDelegator.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_YES); + info.addAction(mClickAction); } } - private void getHourFormatData() { - final String bestDateTimePattern = DateFormat.getBestDateTimePattern(mCurrentLocale, - (mIs24HourView) ? "Hm" : "hm"); - final int lengthPattern = bestDateTimePattern.length(); - mHourWithTwoDigit = false; - char hourFormat = '\0'; - // Check if the returned pattern is single or double 'H', 'h', 'K', 'k'. We also save - // the hour format that we found. - for (int i = 0; i < lengthPattern; i++) { - final char c = bestDateTimePattern.charAt(i); - if (c == 'H' || c == 'h' || c == 'K' || c == 'k') { - mHourFormat = c; - if (i + 1 < lengthPattern && c == bestDateTimePattern.charAt(i + 1)) { - mHourWithTwoDigit = true; - } - break; + private int computeStableWidth(TextView v, int maxNumber) { + int maxWidth = 0; + + for (int i = 0; i < maxNumber; i++) { + final String text = String.format("%02d", i); + v.setText(text); + v.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED); + + final int width = v.getMeasuredWidth(); + if (width > maxWidth) { + maxWidth = width; } } + + return maxWidth; } - private boolean isAmPmAtStart() { - final String bestDateTimePattern = DateFormat.getBestDateTimePattern(mCurrentLocale, - "hm" /* skeleton */); + private void initialize(int hourOfDay, int minute, boolean is24HourView, int index) { + mInitialHourOfDay = hourOfDay; + mInitialMinute = minute; + mIs24HourView = is24HourView; + mInKbMode = false; + updateUI(index); + } + + private void setupListeners() { + mHeaderView.setOnKeyListener(mKeyListener); + mHeaderView.setOnFocusChangeListener(mFocusListener); + mHeaderView.setFocusable(true); - return bestDateTimePattern.startsWith("a"); + mRadialTimePickerView.setOnValueSelectedListener(this); } - /** - * The time separator is defined in the Unicode CLDR and cannot be supposed to be ":". - * - * See http://unicode.org/cldr/trac/browser/trunk/common/main - * - * We pass the correct "skeleton" depending on 12 or 24 hours view and then extract the - * separator as the character which is just after the hour marker in the returned pattern. - */ - private void setDividerText() { - final String skeleton = (mIs24HourView) ? "Hm" : "hm"; - final String bestDateTimePattern = DateFormat.getBestDateTimePattern(mCurrentLocale, - skeleton); - final String separatorText; - int hourIndex = bestDateTimePattern.lastIndexOf('H'); - if (hourIndex == -1) { - hourIndex = bestDateTimePattern.lastIndexOf('h'); - } - if (hourIndex == -1) { - // Default case - separatorText = ":"; + private void updateUI(int index) { + // Update RadialPicker values + updateRadialPicker(index); + // Enable or disable the AM/PM view. + updateHeaderAmPm(); + // Update Hour and Minutes + updateHeaderHour(mInitialHourOfDay, false); + // Update time separator + updateHeaderSeparator(); + // Update Minutes + updateHeaderMinute(mInitialMinute, false); + // Invalidate everything + mDelegator.invalidate(); + } + + private void updateRadialPicker(int index) { + mRadialTimePickerView.initialize(mInitialHourOfDay, mInitialMinute, mIs24HourView); + setCurrentItemShowing(index, false, true); + } + + private void updateHeaderAmPm() { + if (mIs24HourView) { + mAmPmLayout.setVisibility(View.GONE); } else { - int minuteIndex = bestDateTimePattern.indexOf('m', hourIndex + 1); - if (minuteIndex == -1) { - separatorText = Character.toString(bestDateTimePattern.charAt(hourIndex + 1)); - } else { - separatorText = bestDateTimePattern.substring(hourIndex + 1, minuteIndex); + // Ensure that AM/PM layout is in the correct position. + final String dateTimePattern = DateFormat.getBestDateTimePattern(mCurrentLocale, "hm"); + final boolean amPmAtStart = dateTimePattern.startsWith("a"); + final ViewGroup parent = (ViewGroup) mAmPmLayout.getParent(); + final int targetIndex = amPmAtStart ? 0 : parent.getChildCount() - 1; + final int currentIndex = parent.indexOfChild(mAmPmLayout); + if (targetIndex != currentIndex) { + parent.removeView(mAmPmLayout); + parent.addView(mAmPmLayout, targetIndex); } + + updateAmPmLabelStates(mInitialHourOfDay < 12 ? AM : PM); } - mDivider.setText(separatorText); } + /** + * Set the current hour. + */ @Override public void setCurrentHour(Integer currentHour) { - setCurrentHour(currentHour, true); - } - - private void setCurrentHour(Integer currentHour, boolean notifyTimeChanged) { - // why was Integer used in the first place? - if (currentHour == null || currentHour == getCurrentHour()) { + if (mInitialHourOfDay == currentHour) { return; } - if (!is24HourView()) { - // convert [0,23] ordinal to wall clock display - if (currentHour >= HOURS_IN_HALF_DAY) { - mIsAm = false; - if (currentHour > HOURS_IN_HALF_DAY) { - currentHour = currentHour - HOURS_IN_HALF_DAY; - } - } else { - mIsAm = true; - if (currentHour == 0) { - currentHour = HOURS_IN_HALF_DAY; - } - } - updateAmPmControl(); - } - mHourSpinner.setValue(currentHour); - if (notifyTimeChanged) { - onTimeChanged(); - } + mInitialHourOfDay = currentHour; + updateHeaderHour(currentHour, true); + updateHeaderAmPm(); + mRadialTimePickerView.setCurrentHour(currentHour); + mRadialTimePickerView.setAmOrPm(mInitialHourOfDay < 12 ? AM : PM); + mDelegator.invalidate(); + onTimeChanged(); } + /** + * @return The current hour in the range (0-23). + */ @Override public Integer getCurrentHour() { - int currentHour = mHourSpinner.getValue(); - if (is24HourView()) { + int currentHour = mRadialTimePickerView.getCurrentHour(); + if (mIs24HourView) { return currentHour; - } else if (mIsAm) { - return currentHour % HOURS_IN_HALF_DAY; } else { - return (currentHour % HOURS_IN_HALF_DAY) + HOURS_IN_HALF_DAY; + switch(mRadialTimePickerView.getAmOrPm()) { + case PM: + return (currentHour % HOURS_IN_HALF_DAY) + HOURS_IN_HALF_DAY; + case AM: + default: + return currentHour % HOURS_IN_HALF_DAY; + } } } + /** + * Set the current minute (0-59). + */ @Override public void setCurrentMinute(Integer currentMinute) { - if (currentMinute == getCurrentMinute()) { + if (mInitialMinute == currentMinute) { return; } - mMinuteSpinner.setValue(currentMinute); + mInitialMinute = currentMinute; + updateHeaderMinute(currentMinute, true); + mRadialTimePickerView.setCurrentMinute(currentMinute); + mDelegator.invalidate(); onTimeChanged(); } + /** + * @return The current minute. + */ @Override public Integer getCurrentMinute() { - return mMinuteSpinner.getValue(); + return mRadialTimePickerView.getCurrentMinute(); } + /** + * Set whether in 24 hour or AM/PM mode. + * + * @param is24HourView True = 24 hour mode. False = AM/PM. + */ @Override public void setIs24HourView(Boolean is24HourView) { - if (mIs24HourView == is24HourView) { + if (is24HourView == mIs24HourView) { return; } - // cache the current hour since spinner range changes and BEFORE changing mIs24HourView!! - int currentHour = getCurrentHour(); - // Order is important here. mIs24HourView = is24HourView; - getHourFormatData(); - updateHourControl(); - // set value after spinner range is updated - setCurrentHour(currentHour, false); - updateMinuteControl(); - updateAmPmControl(); + generateLegalTimesTree(); + int hour = mRadialTimePickerView.getCurrentHour(); + mInitialHourOfDay = hour; + updateHeaderHour(hour, false); + updateHeaderAmPm(); + updateRadialPicker(mRadialTimePickerView.getCurrentItemShowing()); + mDelegator.invalidate(); } + /** + * @return true if this is in 24 hour view else false. + */ @Override public boolean is24HourView() { return mIs24HourView; } @Override - public void setOnTimeChangedListener(TimePicker.OnTimeChangedListener onTimeChangedListener) { - mOnTimeChangedListener = onTimeChangedListener; + public void setOnTimeChangedListener(TimePicker.OnTimeChangedListener callback) { + mOnTimeChangedListener = callback; } @Override public void setEnabled(boolean enabled) { - mMinuteSpinner.setEnabled(enabled); - if (mDivider != null) { - mDivider.setEnabled(enabled); - } - mHourSpinner.setEnabled(enabled); - if (mAmPmSpinner != null) { - mAmPmSpinner.setEnabled(enabled); - } else { - mAmPmButton.setEnabled(enabled); - } + mHourView.setEnabled(enabled); + mMinuteView.setEnabled(enabled); + mAmLabel.setEnabled(enabled); + mPmLabel.setEnabled(enabled); + mRadialTimePickerView.setEnabled(enabled); mIsEnabled = enabled; } @@ -386,24 +411,38 @@ class TimePickerClockDelegate extends TimePicker.AbstractTimePickerDelegate { @Override public int getBaseline() { - return mHourSpinner.getBaseline(); + // does not support baseline alignment + return -1; } @Override public void onConfigurationChanged(Configuration newConfig) { - setCurrentLocale(newConfig.locale); + updateUI(mRadialTimePickerView.getCurrentItemShowing()); } @Override public Parcelable onSaveInstanceState(Parcelable superState) { - return new SavedState(superState, getCurrentHour(), getCurrentMinute()); + return new SavedState(superState, getCurrentHour(), getCurrentMinute(), + is24HourView(), inKbMode(), getTypedTimes(), getCurrentItemShowing()); } @Override public void onRestoreInstanceState(Parcelable state) { SavedState ss = (SavedState) state; - setCurrentHour(ss.getHour()); - setCurrentMinute(ss.getMinute()); + setInKbMode(ss.inKbMode()); + setTypedTimes(ss.getTypesTimes()); + initialize(ss.getHour(), ss.getMinute(), ss.is24HourMode(), ss.getCurrentItemShowing()); + mRadialTimePickerView.invalidate(); + if (mInKbMode) { + tryStartingKbMode(-1); + mHourView.invalidate(); + } + } + + @Override + public void setCurrentLocale(Locale locale) { + super.setCurrentLocale(locale); + mTempCalendar = Calendar.getInstance(locale); } @Override @@ -422,9 +461,9 @@ class TimePickerClockDelegate extends TimePicker.AbstractTimePickerDelegate { } mTempCalendar.set(Calendar.HOUR_OF_DAY, getCurrentHour()); mTempCalendar.set(Calendar.MINUTE, getCurrentMinute()); - String selectedDateUtterance = DateUtils.formatDateTime(mContext, + String selectedDate = DateUtils.formatDateTime(mContext, mTempCalendar.getTimeInMillis(), flags); - event.getText().add(selectedDateUtterance); + event.getText().add(selectedDate); } @Override @@ -437,121 +476,48 @@ class TimePickerClockDelegate extends TimePicker.AbstractTimePickerDelegate { info.setClassName(TimePicker.class.getName()); } - private void updateInputState() { - // Make sure that if the user changes the value and the IME is active - // for one of the inputs if this widget, the IME is closed. If the user - // changed the value via the IME and there is a next input the IME will - // be shown, otherwise the user chose another means of changing the - // value and having the IME up makes no sense. - InputMethodManager inputMethodManager = InputMethodManager.peekInstance(); - if (inputMethodManager != null) { - if (inputMethodManager.isActive(mHourSpinnerInput)) { - mHourSpinnerInput.clearFocus(); - inputMethodManager.hideSoftInputFromWindow(mDelegator.getWindowToken(), 0); - } else if (inputMethodManager.isActive(mMinuteSpinnerInput)) { - mMinuteSpinnerInput.clearFocus(); - inputMethodManager.hideSoftInputFromWindow(mDelegator.getWindowToken(), 0); - } else if (inputMethodManager.isActive(mAmPmSpinnerInput)) { - mAmPmSpinnerInput.clearFocus(); - inputMethodManager.hideSoftInputFromWindow(mDelegator.getWindowToken(), 0); - } - } - } - - private void updateAmPmControl() { - if (is24HourView()) { - if (mAmPmSpinner != null) { - mAmPmSpinner.setVisibility(View.GONE); - } else { - mAmPmButton.setVisibility(View.GONE); - } - } else { - int index = mIsAm ? Calendar.AM : Calendar.PM; - if (mAmPmSpinner != null) { - mAmPmSpinner.setValue(index); - mAmPmSpinner.setVisibility(View.VISIBLE); - } else { - mAmPmButton.setText(mAmPmStrings[index]); - mAmPmButton.setVisibility(View.VISIBLE); - } - } - mDelegator.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED); - } - /** - * Sets the current locale. + * Set whether in keyboard mode or not. * - * @param locale The current locale. + * @param inKbMode True means in keyboard mode. */ - @Override - public void setCurrentLocale(Locale locale) { - super.setCurrentLocale(locale); - mTempCalendar = Calendar.getInstance(locale); + private void setInKbMode(boolean inKbMode) { + mInKbMode = inKbMode; } - private void onTimeChanged() { - mDelegator.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED); - if (mOnTimeChangedListener != null) { - mOnTimeChangedListener.onTimeChanged(mDelegator, getCurrentHour(), - getCurrentMinute()); - } + /** + * @return true if in keyboard mode + */ + private boolean inKbMode() { + return mInKbMode; } - private void updateHourControl() { - if (is24HourView()) { - // 'k' means 1-24 hour - if (mHourFormat == 'k') { - mHourSpinner.setMinValue(1); - mHourSpinner.setMaxValue(24); - } else { - mHourSpinner.setMinValue(0); - mHourSpinner.setMaxValue(23); - } - } else { - // 'K' means 0-11 hour - if (mHourFormat == 'K') { - mHourSpinner.setMinValue(0); - mHourSpinner.setMaxValue(11); - } else { - mHourSpinner.setMinValue(1); - mHourSpinner.setMaxValue(12); - } - } - mHourSpinner.setFormatter(mHourWithTwoDigit ? NumberPicker.getTwoDigitFormatter() : null); + private void setTypedTimes(ArrayList typeTimes) { + mTypedTimes = typeTimes; } - private void updateMinuteControl() { - if (is24HourView()) { - mMinuteSpinnerInput.setImeOptions(EditorInfo.IME_ACTION_DONE); - } else { - mMinuteSpinnerInput.setImeOptions(EditorInfo.IME_ACTION_NEXT); - } + /** + * @return an array of typed times + */ + private ArrayList getTypedTimes() { + return mTypedTimes; } - private void setContentDescriptions() { - // Minute - trySetContentDescription(mMinuteSpinner, R.id.increment, - R.string.time_picker_increment_minute_button); - trySetContentDescription(mMinuteSpinner, R.id.decrement, - R.string.time_picker_decrement_minute_button); - // Hour - trySetContentDescription(mHourSpinner, R.id.increment, - R.string.time_picker_increment_hour_button); - trySetContentDescription(mHourSpinner, R.id.decrement, - R.string.time_picker_decrement_hour_button); - // AM/PM - if (mAmPmSpinner != null) { - trySetContentDescription(mAmPmSpinner, R.id.increment, - R.string.time_picker_increment_set_pm_button); - trySetContentDescription(mAmPmSpinner, R.id.decrement, - R.string.time_picker_decrement_set_am_button); - } + /** + * @return the index of the current item showing + */ + private int getCurrentItemShowing() { + return mRadialTimePickerView.getCurrentItemShowing(); } - private void trySetContentDescription(View root, int viewId, int contDescResId) { - View target = root.findViewById(viewId); - if (target != null) { - target.setContentDescription(mContext.getString(contDescResId)); + /** + * Propagate the time change + */ + private void onTimeChanged() { + mDelegator.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED); + if (mOnTimeChangedListener != null) { + mOnTimeChangedListener.onTimeChanged(mDelegator, + getCurrentHour(), getCurrentMinute()); } } @@ -559,19 +525,34 @@ class TimePickerClockDelegate extends TimePicker.AbstractTimePickerDelegate { * Used to save / restore state of time picker */ private static class SavedState extends View.BaseSavedState { + private final int mHour; private final int mMinute; - - private SavedState(Parcelable superState, int hour, int minute) { + private final boolean mIs24HourMode; + private final boolean mInKbMode; + private final ArrayList mTypedTimes; + private final int mCurrentItemShowing; + + private SavedState(Parcelable superState, int hour, int minute, boolean is24HourMode, + boolean isKbMode, ArrayList typedTimes, + int currentItemShowing) { super(superState); mHour = hour; mMinute = minute; + mIs24HourMode = is24HourMode; + mInKbMode = isKbMode; + mTypedTimes = typedTimes; + mCurrentItemShowing = currentItemShowing; } private SavedState(Parcel in) { super(in); mHour = in.readInt(); mMinute = in.readInt(); + mIs24HourMode = (in.readInt() == 1); + mInKbMode = (in.readInt() == 1); + mTypedTimes = in.readArrayList(getClass().getClassLoader()); + mCurrentItemShowing = in.readInt(); } public int getHour() { @@ -582,11 +563,31 @@ class TimePickerClockDelegate extends TimePicker.AbstractTimePickerDelegate { return mMinute; } + public boolean is24HourMode() { + return mIs24HourMode; + } + + public boolean inKbMode() { + return mInKbMode; + } + + public ArrayList getTypesTimes() { + return mTypedTimes; + } + + public int getCurrentItemShowing() { + return mCurrentItemShowing; + } + @Override public void writeToParcel(Parcel dest, int flags) { super.writeToParcel(dest, flags); dest.writeInt(mHour); dest.writeInt(mMinute); + dest.writeInt(mIs24HourMode ? 1 : 0); + dest.writeInt(mInKbMode ? 1 : 0); + dest.writeList(mTypedTimes); + dest.writeInt(mCurrentItemShowing); } @SuppressWarnings({"unused", "hiding"}) @@ -601,11 +602,707 @@ class TimePickerClockDelegate extends TimePicker.AbstractTimePickerDelegate { }; } - public static String[] getAmPmStrings(Context context) { - String[] result = new String[2]; - LocaleData d = LocaleData.get(context.getResources().getConfiguration().locale); - result[0] = d.amPm[0].length() > 2 ? d.narrowAm : d.amPm[0]; - result[1] = d.amPm[1].length() > 2 ? d.narrowPm : d.amPm[1]; - return result; + private void tryVibrate() { + mDelegator.performHapticFeedback(HapticFeedbackConstants.CLOCK_TICK); + } + + private void updateAmPmLabelStates(int amOrPm) { + final boolean isAm = amOrPm == AM; + mAmLabel.setChecked(isAm); + mAmLabel.setAlpha(isAm ? 1 : mDisabledAlpha); + + final boolean isPm = amOrPm == PM; + mPmLabel.setChecked(isPm); + mPmLabel.setAlpha(isPm ? 1 : mDisabledAlpha); + } + + /** + * Called by the picker for updating the header display. + */ + @Override + public void onValueSelected(int pickerIndex, int newValue, boolean autoAdvance) { + switch (pickerIndex) { + case HOUR_INDEX: + if (mAllowAutoAdvance && autoAdvance) { + updateHeaderHour(newValue, false); + setCurrentItemShowing(MINUTE_INDEX, true, false); + mDelegator.announceForAccessibility(newValue + ". " + mSelectMinutes); + } else { + updateHeaderHour(newValue, true); + } + break; + case MINUTE_INDEX: + updateHeaderMinute(newValue, true); + break; + case AMPM_INDEX: + updateAmPmLabelStates(newValue); + break; + case ENABLE_PICKER_INDEX: + if (!isTypedTimeFullyLegal()) { + mTypedTimes.clear(); + } + finishKbMode(); + break; + } + + if (mOnTimeChangedListener != null) { + mOnTimeChangedListener.onTimeChanged(mDelegator, getCurrentHour(), getCurrentMinute()); + } + } + + private void updateHeaderHour(int value, boolean announce) { + final String bestDateTimePattern = DateFormat.getBestDateTimePattern(mCurrentLocale, + (mIs24HourView) ? "Hm" : "hm"); + final int lengthPattern = bestDateTimePattern.length(); + boolean hourWithTwoDigit = false; + char hourFormat = '\0'; + // Check if the returned pattern is single or double 'H', 'h', 'K', 'k'. We also save + // the hour format that we found. + for (int i = 0; i < lengthPattern; i++) { + final char c = bestDateTimePattern.charAt(i); + if (c == 'H' || c == 'h' || c == 'K' || c == 'k') { + hourFormat = c; + if (i + 1 < lengthPattern && c == bestDateTimePattern.charAt(i + 1)) { + hourWithTwoDigit = true; + } + break; + } + } + final String format; + if (hourWithTwoDigit) { + format = "%02d"; + } else { + format = "%d"; + } + if (mIs24HourView) { + // 'k' means 1-24 hour + if (hourFormat == 'k' && value == 0) { + value = 24; + } + } else { + // 'K' means 0-11 hour + value = modulo12(value, hourFormat == 'K'); + } + CharSequence text = String.format(format, value); + mHourView.setText(text); + if (announce) { + tryAnnounceForAccessibility(text, true); + } + } + + private void tryAnnounceForAccessibility(CharSequence text, boolean isHour) { + if (mLastAnnouncedIsHour != isHour || !text.equals(mLastAnnouncedText)) { + // TODO: Find a better solution, potentially live regions? + mDelegator.announceForAccessibility(text); + mLastAnnouncedText = text; + mLastAnnouncedIsHour = isHour; + } + } + + private static int modulo12(int n, boolean startWithZero) { + int value = n % 12; + if (value == 0 && !startWithZero) { + value = 12; + } + return value; + } + + /** + * The time separator is defined in the Unicode CLDR and cannot be supposed to be ":". + * + * See http://unicode.org/cldr/trac/browser/trunk/common/main + * + * We pass the correct "skeleton" depending on 12 or 24 hours view and then extract the + * separator as the character which is just after the hour marker in the returned pattern. + */ + private void updateHeaderSeparator() { + final String bestDateTimePattern = DateFormat.getBestDateTimePattern(mCurrentLocale, + (mIs24HourView) ? "Hm" : "hm"); + final String separatorText; + // See http://www.unicode.org/reports/tr35/tr35-dates.html for hour formats + final char[] hourFormats = {'H', 'h', 'K', 'k'}; + int hIndex = lastIndexOfAny(bestDateTimePattern, hourFormats); + if (hIndex == -1) { + // Default case + separatorText = ":"; + } else { + separatorText = Character.toString(bestDateTimePattern.charAt(hIndex + 1)); + } + mSeparatorView.setText(separatorText); + } + + static private int lastIndexOfAny(String str, char[] any) { + final int lengthAny = any.length; + if (lengthAny > 0) { + for (int i = str.length() - 1; i >= 0; i--) { + char c = str.charAt(i); + for (int j = 0; j < lengthAny; j++) { + if (c == any[j]) { + return i; + } + } + } + } + return -1; + } + + private void updateHeaderMinute(int value, boolean announceForAccessibility) { + if (value == 60) { + value = 0; + } + final CharSequence text = String.format(mCurrentLocale, "%02d", value); + mMinuteView.setText(text); + if (announceForAccessibility) { + tryAnnounceForAccessibility(text, false); + } } + + /** + * Show either Hours or Minutes. + */ + private void setCurrentItemShowing(int index, boolean animateCircle, boolean announce) { + mRadialTimePickerView.setCurrentItemShowing(index, animateCircle); + + if (index == HOUR_INDEX) { + if (announce) { + mDelegator.announceForAccessibility(mSelectHours); + } + } else { + if (announce) { + mDelegator.announceForAccessibility(mSelectMinutes); + } + } + + mHourView.setSelected(index == HOUR_INDEX); + mMinuteView.setSelected(index == MINUTE_INDEX); + } + + private void setAmOrPm(int amOrPm) { + updateAmPmLabelStates(amOrPm); + mRadialTimePickerView.setAmOrPm(amOrPm); + } + + /** + * For keyboard mode, processes key events. + * + * @param keyCode the pressed key. + * + * @return true if the key was successfully processed, false otherwise. + */ + private boolean processKeyUp(int keyCode) { + if (keyCode == KeyEvent.KEYCODE_DEL) { + if (mInKbMode) { + if (!mTypedTimes.isEmpty()) { + int deleted = deleteLastTypedKey(); + String deletedKeyStr; + if (deleted == getAmOrPmKeyCode(AM)) { + deletedKeyStr = mAmText; + } else if (deleted == getAmOrPmKeyCode(PM)) { + deletedKeyStr = mPmText; + } else { + deletedKeyStr = String.format("%d", getValFromKeyCode(deleted)); + } + mDelegator.announceForAccessibility( + String.format(mDeletedKeyFormat, deletedKeyStr)); + updateDisplay(true); + } + } + } else if (keyCode == KeyEvent.KEYCODE_0 || keyCode == KeyEvent.KEYCODE_1 + || keyCode == KeyEvent.KEYCODE_2 || keyCode == KeyEvent.KEYCODE_3 + || keyCode == KeyEvent.KEYCODE_4 || keyCode == KeyEvent.KEYCODE_5 + || keyCode == KeyEvent.KEYCODE_6 || keyCode == KeyEvent.KEYCODE_7 + || keyCode == KeyEvent.KEYCODE_8 || keyCode == KeyEvent.KEYCODE_9 + || (!mIs24HourView && + (keyCode == getAmOrPmKeyCode(AM) || keyCode == getAmOrPmKeyCode(PM)))) { + if (!mInKbMode) { + if (mRadialTimePickerView == null) { + // Something's wrong, because time picker should definitely not be null. + Log.e(TAG, "Unable to initiate keyboard mode, TimePicker was null."); + return true; + } + mTypedTimes.clear(); + tryStartingKbMode(keyCode); + return true; + } + // We're already in keyboard mode. + if (addKeyIfLegal(keyCode)) { + updateDisplay(false); + } + return true; + } + return false; + } + + /** + * Try to start keyboard mode with the specified key. + * + * @param keyCode The key to use as the first press. Keyboard mode will not be started if the + * key is not legal to start with. Or, pass in -1 to get into keyboard mode without a starting + * key. + */ + private void tryStartingKbMode(int keyCode) { + if (keyCode == -1 || addKeyIfLegal(keyCode)) { + mInKbMode = true; + onValidationChanged(false); + updateDisplay(false); + mRadialTimePickerView.setInputEnabled(false); + } + } + + private boolean addKeyIfLegal(int keyCode) { + // If we're in 24hour mode, we'll need to check if the input is full. If in AM/PM mode, + // we'll need to see if AM/PM have been typed. + if ((mIs24HourView && mTypedTimes.size() == 4) || + (!mIs24HourView && isTypedTimeFullyLegal())) { + return false; + } + + mTypedTimes.add(keyCode); + if (!isTypedTimeLegalSoFar()) { + deleteLastTypedKey(); + return false; + } + + int val = getValFromKeyCode(keyCode); + mDelegator.announceForAccessibility(String.format("%d", val)); + // Automatically fill in 0's if AM or PM was legally entered. + if (isTypedTimeFullyLegal()) { + if (!mIs24HourView && mTypedTimes.size() <= 3) { + mTypedTimes.add(mTypedTimes.size() - 1, KeyEvent.KEYCODE_0); + mTypedTimes.add(mTypedTimes.size() - 1, KeyEvent.KEYCODE_0); + } + onValidationChanged(true); + } + + return true; + } + + /** + * Traverse the tree to see if the keys that have been typed so far are legal as is, + * or may become legal as more keys are typed (excluding backspace). + */ + private boolean isTypedTimeLegalSoFar() { + Node node = mLegalTimesTree; + for (int keyCode : mTypedTimes) { + node = node.canReach(keyCode); + if (node == null) { + return false; + } + } + return true; + } + + /** + * Check if the time that has been typed so far is completely legal, as is. + */ + private boolean isTypedTimeFullyLegal() { + if (mIs24HourView) { + // For 24-hour mode, the time is legal if the hours and minutes are each legal. Note: + // getEnteredTime() will ONLY call isTypedTimeFullyLegal() when NOT in 24hour mode. + int[] values = getEnteredTime(null); + return (values[0] >= 0 && values[1] >= 0 && values[1] < 60); + } else { + // For AM/PM mode, the time is legal if it contains an AM or PM, as those can only be + // legally added at specific times based on the tree's algorithm. + return (mTypedTimes.contains(getAmOrPmKeyCode(AM)) || + mTypedTimes.contains(getAmOrPmKeyCode(PM))); + } + } + + private int deleteLastTypedKey() { + int deleted = mTypedTimes.remove(mTypedTimes.size() - 1); + if (!isTypedTimeFullyLegal()) { + onValidationChanged(false); + } + return deleted; + } + + /** + * Get out of keyboard mode. If there is nothing in typedTimes, revert to TimePicker's time. + */ + private void finishKbMode() { + mInKbMode = false; + if (!mTypedTimes.isEmpty()) { + int values[] = getEnteredTime(null); + mRadialTimePickerView.setCurrentHour(values[0]); + mRadialTimePickerView.setCurrentMinute(values[1]); + if (!mIs24HourView) { + mRadialTimePickerView.setAmOrPm(values[2]); + } + mTypedTimes.clear(); + } + updateDisplay(false); + mRadialTimePickerView.setInputEnabled(true); + } + + /** + * Update the hours, minutes, and AM/PM displays with the typed times. If the typedTimes is + * empty, either show an empty display (filled with the placeholder text), or update from the + * timepicker's values. + * + * @param allowEmptyDisplay if true, then if the typedTimes is empty, use the placeholder text. + * Otherwise, revert to the timepicker's values. + */ + private void updateDisplay(boolean allowEmptyDisplay) { + if (!allowEmptyDisplay && mTypedTimes.isEmpty()) { + int hour = mRadialTimePickerView.getCurrentHour(); + int minute = mRadialTimePickerView.getCurrentMinute(); + updateHeaderHour(hour, false); + updateHeaderMinute(minute, false); + if (!mIs24HourView) { + updateAmPmLabelStates(hour < 12 ? AM : PM); + } + setCurrentItemShowing(mRadialTimePickerView.getCurrentItemShowing(), true, true); + onValidationChanged(true); + } else { + boolean[] enteredZeros = {false, false}; + int[] values = getEnteredTime(enteredZeros); + String hourFormat = enteredZeros[0] ? "%02d" : "%2d"; + String minuteFormat = (enteredZeros[1]) ? "%02d" : "%2d"; + String hourStr = (values[0] == -1) ? mDoublePlaceholderText : + String.format(hourFormat, values[0]).replace(' ', mPlaceholderText); + String minuteStr = (values[1] == -1) ? mDoublePlaceholderText : + String.format(minuteFormat, values[1]).replace(' ', mPlaceholderText); + mHourView.setText(hourStr); + mHourView.setSelected(false); + mMinuteView.setText(minuteStr); + mMinuteView.setSelected(false); + if (!mIs24HourView) { + updateAmPmLabelStates(values[2]); + } + } + } + + private int getValFromKeyCode(int keyCode) { + switch (keyCode) { + case KeyEvent.KEYCODE_0: + return 0; + case KeyEvent.KEYCODE_1: + return 1; + case KeyEvent.KEYCODE_2: + return 2; + case KeyEvent.KEYCODE_3: + return 3; + case KeyEvent.KEYCODE_4: + return 4; + case KeyEvent.KEYCODE_5: + return 5; + case KeyEvent.KEYCODE_6: + return 6; + case KeyEvent.KEYCODE_7: + return 7; + case KeyEvent.KEYCODE_8: + return 8; + case KeyEvent.KEYCODE_9: + return 9; + default: + return -1; + } + } + + /** + * Get the currently-entered time, as integer values of the hours and minutes typed. + * + * @param enteredZeros A size-2 boolean array, which the caller should initialize, and which + * may then be used for the caller to know whether zeros had been explicitly entered as either + * hours of minutes. This is helpful for deciding whether to show the dashes, or actual 0's. + * + * @return A size-3 int array. The first value will be the hours, the second value will be the + * minutes, and the third will be either AM or PM. + */ + private int[] getEnteredTime(boolean[] enteredZeros) { + int amOrPm = -1; + int startIndex = 1; + if (!mIs24HourView && isTypedTimeFullyLegal()) { + int keyCode = mTypedTimes.get(mTypedTimes.size() - 1); + if (keyCode == getAmOrPmKeyCode(AM)) { + amOrPm = AM; + } else if (keyCode == getAmOrPmKeyCode(PM)){ + amOrPm = PM; + } + startIndex = 2; + } + int minute = -1; + int hour = -1; + for (int i = startIndex; i <= mTypedTimes.size(); i++) { + int val = getValFromKeyCode(mTypedTimes.get(mTypedTimes.size() - i)); + if (i == startIndex) { + minute = val; + } else if (i == startIndex+1) { + minute += 10 * val; + if (enteredZeros != null && val == 0) { + enteredZeros[1] = true; + } + } else if (i == startIndex+2) { + hour = val; + } else if (i == startIndex+3) { + hour += 10 * val; + if (enteredZeros != null && val == 0) { + enteredZeros[0] = true; + } + } + } + + return new int[] { hour, minute, amOrPm }; + } + + /** + * Get the keycode value for AM and PM in the current language. + */ + private int getAmOrPmKeyCode(int amOrPm) { + // Cache the codes. + if (mAmKeyCode == -1 || mPmKeyCode == -1) { + // Find the first character in the AM/PM text that is unique. + final KeyCharacterMap kcm = KeyCharacterMap.load(KeyCharacterMap.VIRTUAL_KEYBOARD); + final CharSequence amText = mAmText.toLowerCase(mCurrentLocale); + final CharSequence pmText = mPmText.toLowerCase(mCurrentLocale); + final int N = Math.min(amText.length(), pmText.length()); + for (int i = 0; i < N; i++) { + final char amChar = amText.charAt(i); + final char pmChar = pmText.charAt(i); + if (amChar != pmChar) { + // There should be 4 events: a down and up for both AM and PM. + final KeyEvent[] events = kcm.getEvents(new char[] { amChar, pmChar }); + if (events != null && events.length == 4) { + mAmKeyCode = events[0].getKeyCode(); + mPmKeyCode = events[2].getKeyCode(); + } else { + Log.e(TAG, "Unable to find keycodes for AM and PM."); + } + break; + } + } + } + + if (amOrPm == AM) { + return mAmKeyCode; + } else if (amOrPm == PM) { + return mPmKeyCode; + } + + return -1; + } + + /** + * Create a tree for deciding what keys can legally be typed. + */ + private void generateLegalTimesTree() { + // Create a quick cache of numbers to their keycodes. + final int k0 = KeyEvent.KEYCODE_0; + final int k1 = KeyEvent.KEYCODE_1; + final int k2 = KeyEvent.KEYCODE_2; + final int k3 = KeyEvent.KEYCODE_3; + final int k4 = KeyEvent.KEYCODE_4; + final int k5 = KeyEvent.KEYCODE_5; + final int k6 = KeyEvent.KEYCODE_6; + final int k7 = KeyEvent.KEYCODE_7; + final int k8 = KeyEvent.KEYCODE_8; + final int k9 = KeyEvent.KEYCODE_9; + + // The root of the tree doesn't contain any numbers. + mLegalTimesTree = new Node(); + if (mIs24HourView) { + // We'll be re-using these nodes, so we'll save them. + Node minuteFirstDigit = new Node(k0, k1, k2, k3, k4, k5); + Node minuteSecondDigit = new Node(k0, k1, k2, k3, k4, k5, k6, k7, k8, k9); + // The first digit must be followed by the second digit. + minuteFirstDigit.addChild(minuteSecondDigit); + + // The first digit may be 0-1. + Node firstDigit = new Node(k0, k1); + mLegalTimesTree.addChild(firstDigit); + + // When the first digit is 0-1, the second digit may be 0-5. + Node secondDigit = new Node(k0, k1, k2, k3, k4, k5); + firstDigit.addChild(secondDigit); + // We may now be followed by the first minute digit. E.g. 00:09, 15:58. + secondDigit.addChild(minuteFirstDigit); + + // When the first digit is 0-1, and the second digit is 0-5, the third digit may be 6-9. + Node thirdDigit = new Node(k6, k7, k8, k9); + // The time must now be finished. E.g. 0:55, 1:08. + secondDigit.addChild(thirdDigit); + + // When the first digit is 0-1, the second digit may be 6-9. + secondDigit = new Node(k6, k7, k8, k9); + firstDigit.addChild(secondDigit); + // We must now be followed by the first minute digit. E.g. 06:50, 18:20. + secondDigit.addChild(minuteFirstDigit); + + // The first digit may be 2. + firstDigit = new Node(k2); + mLegalTimesTree.addChild(firstDigit); + + // When the first digit is 2, the second digit may be 0-3. + secondDigit = new Node(k0, k1, k2, k3); + firstDigit.addChild(secondDigit); + // We must now be followed by the first minute digit. E.g. 20:50, 23:09. + secondDigit.addChild(minuteFirstDigit); + + // When the first digit is 2, the second digit may be 4-5. + secondDigit = new Node(k4, k5); + firstDigit.addChild(secondDigit); + // We must now be followd by the last minute digit. E.g. 2:40, 2:53. + secondDigit.addChild(minuteSecondDigit); + + // The first digit may be 3-9. + firstDigit = new Node(k3, k4, k5, k6, k7, k8, k9); + mLegalTimesTree.addChild(firstDigit); + // We must now be followed by the first minute digit. E.g. 3:57, 8:12. + firstDigit.addChild(minuteFirstDigit); + } else { + // We'll need to use the AM/PM node a lot. + // Set up AM and PM to respond to "a" and "p". + Node ampm = new Node(getAmOrPmKeyCode(AM), getAmOrPmKeyCode(PM)); + + // The first hour digit may be 1. + Node firstDigit = new Node(k1); + mLegalTimesTree.addChild(firstDigit); + // We'll allow quick input of on-the-hour times. E.g. 1pm. + firstDigit.addChild(ampm); + + // When the first digit is 1, the second digit may be 0-2. + Node secondDigit = new Node(k0, k1, k2); + firstDigit.addChild(secondDigit); + // Also for quick input of on-the-hour times. E.g. 10pm, 12am. + secondDigit.addChild(ampm); + + // When the first digit is 1, and the second digit is 0-2, the third digit may be 0-5. + Node thirdDigit = new Node(k0, k1, k2, k3, k4, k5); + secondDigit.addChild(thirdDigit); + // The time may be finished now. E.g. 1:02pm, 1:25am. + thirdDigit.addChild(ampm); + + // When the first digit is 1, the second digit is 0-2, and the third digit is 0-5, + // the fourth digit may be 0-9. + Node fourthDigit = new Node(k0, k1, k2, k3, k4, k5, k6, k7, k8, k9); + thirdDigit.addChild(fourthDigit); + // The time must be finished now. E.g. 10:49am, 12:40pm. + fourthDigit.addChild(ampm); + + // When the first digit is 1, and the second digit is 0-2, the third digit may be 6-9. + thirdDigit = new Node(k6, k7, k8, k9); + secondDigit.addChild(thirdDigit); + // The time must be finished now. E.g. 1:08am, 1:26pm. + thirdDigit.addChild(ampm); + + // When the first digit is 1, the second digit may be 3-5. + secondDigit = new Node(k3, k4, k5); + firstDigit.addChild(secondDigit); + + // When the first digit is 1, and the second digit is 3-5, the third digit may be 0-9. + thirdDigit = new Node(k0, k1, k2, k3, k4, k5, k6, k7, k8, k9); + secondDigit.addChild(thirdDigit); + // The time must be finished now. E.g. 1:39am, 1:50pm. + thirdDigit.addChild(ampm); + + // The hour digit may be 2-9. + firstDigit = new Node(k2, k3, k4, k5, k6, k7, k8, k9); + mLegalTimesTree.addChild(firstDigit); + // We'll allow quick input of on-the-hour-times. E.g. 2am, 5pm. + firstDigit.addChild(ampm); + + // When the first digit is 2-9, the second digit may be 0-5. + secondDigit = new Node(k0, k1, k2, k3, k4, k5); + firstDigit.addChild(secondDigit); + + // When the first digit is 2-9, and the second digit is 0-5, the third digit may be 0-9. + thirdDigit = new Node(k0, k1, k2, k3, k4, k5, k6, k7, k8, k9); + secondDigit.addChild(thirdDigit); + // The time must be finished now. E.g. 2:57am, 9:30pm. + thirdDigit.addChild(ampm); + } + } + + /** + * Simple node class to be used for traversal to check for legal times. + * mLegalKeys represents the keys that can be typed to get to the node. + * mChildren are the children that can be reached from this node. + */ + private class Node { + private int[] mLegalKeys; + private ArrayList mChildren; + + public Node(int... legalKeys) { + mLegalKeys = legalKeys; + mChildren = new ArrayList(); + } + + public void addChild(Node child) { + mChildren.add(child); + } + + public boolean containsKey(int key) { + for (int i = 0; i < mLegalKeys.length; i++) { + if (mLegalKeys[i] == key) { + return true; + } + } + return false; + } + + public Node canReach(int key) { + if (mChildren == null) { + return null; + } + for (Node child : mChildren) { + if (child.containsKey(key)) { + return child; + } + } + return null; + } + } + + private final View.OnClickListener mClickListener = new View.OnClickListener() { + @Override + public void onClick(View v) { + + final int amOrPm; + switch (v.getId()) { + case R.id.am_label: + setAmOrPm(AM); + break; + case R.id.pm_label: + setAmOrPm(PM); + break; + case R.id.hours: + setCurrentItemShowing(HOUR_INDEX, true, true); + break; + case R.id.minutes: + setCurrentItemShowing(MINUTE_INDEX, true, true); + break; + default: + // Failed to handle this click, don't vibrate. + return; + } + + tryVibrate(); + } + }; + + private final View.OnKeyListener mKeyListener = new View.OnKeyListener() { + @Override + public boolean onKey(View v, int keyCode, KeyEvent event) { + if (event.getAction() == KeyEvent.ACTION_UP) { + return processKeyUp(keyCode); + } + return false; + } + }; + + private final View.OnFocusChangeListener mFocusListener = new View.OnFocusChangeListener() { + @Override + public void onFocusChange(View v, boolean hasFocus) { + if (!hasFocus && mInKbMode && isTypedTimeFullyLegal()) { + finishKbMode(); + + if (mOnTimeChangedListener != null) { + mOnTimeChangedListener.onTimeChanged(mDelegator, + mRadialTimePickerView.getCurrentHour(), + mRadialTimePickerView.getCurrentMinute()); + } + } + } + }; } diff --git a/core/java/android/widget/TimePickerSpinnerDelegate.java b/core/java/android/widget/TimePickerSpinnerDelegate.java index 73e05e8d49329c072852ec1f15542461df0fc0c4..e162f4ab67e8504dc35675d27df8f629ebd40e46 100644 --- a/core/java/android/widget/TimePickerSpinnerDelegate.java +++ b/core/java/android/widget/TimePickerSpinnerDelegate.java @@ -17,380 +17,365 @@ package android.widget; import android.content.Context; -import android.content.res.ColorStateList; import android.content.res.Configuration; -import android.content.res.Resources; import android.content.res.TypedArray; import android.os.Parcel; import android.os.Parcelable; -import android.text.TextUtils; import android.text.format.DateFormat; import android.text.format.DateUtils; import android.util.AttributeSet; -import android.util.Log; -import android.view.HapticFeedbackConstants; -import android.view.KeyCharacterMap; -import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityNodeInfo; - +import android.view.inputmethod.EditorInfo; +import android.view.inputmethod.InputMethodManager; import com.android.internal.R; -import java.util.ArrayList; +import java.text.DateFormatSymbols; import java.util.Calendar; import java.util.Locale; -/** - * A view for selecting the time of day, in either 24 hour or AM/PM mode. - */ -class TimePickerSpinnerDelegate extends TimePicker.AbstractTimePickerDelegate implements - RadialTimePickerView.OnValueSelectedListener { - - private static final String TAG = "TimePickerDelegate"; - - // Index used by RadialPickerLayout - private static final int HOUR_INDEX = 0; - private static final int MINUTE_INDEX = 1; - - // NOT a real index for the purpose of what's showing. - private static final int AMPM_INDEX = 2; +import libcore.icu.LocaleData; - // Also NOT a real index, just used for keyboard mode. - private static final int ENABLE_PICKER_INDEX = 3; - - private static final int AM = 0; - private static final int PM = 1; +import static android.view.View.IMPORTANT_FOR_ACCESSIBILITY_AUTO; +import static android.view.View.IMPORTANT_FOR_ACCESSIBILITY_YES; +/** + * A delegate implementing the basic spinner-based TimePicker. + */ +class TimePickerSpinnerDelegate extends TimePicker.AbstractTimePickerDelegate { private static final boolean DEFAULT_ENABLED_STATE = true; - private boolean mIsEnabled = DEFAULT_ENABLED_STATE; - private static final int HOURS_IN_HALF_DAY = 12; - private View mHeaderView; - private TextView mHourView; - private TextView mMinuteView; - private TextView mAmPmTextView; - private RadialTimePickerView mRadialTimePickerView; - private TextView mSeparatorView; + // state + private boolean mIs24HourView; + private boolean mIsAm; - private String mAmText; - private String mPmText; + // ui components + private final NumberPicker mHourSpinner; + private final NumberPicker mMinuteSpinner; + private final NumberPicker mAmPmSpinner; + private final EditText mHourSpinnerInput; + private final EditText mMinuteSpinnerInput; + private final EditText mAmPmSpinnerInput; + private final TextView mDivider; - private boolean mAllowAutoAdvance; - private int mInitialHourOfDay; - private int mInitialMinute; - private boolean mIs24HourView; + // Note that the legacy implementation of the TimePicker is + // using a button for toggling between AM/PM while the new + // version uses a NumberPicker spinner. Therefore the code + // accommodates these two cases to be backwards compatible. + private final Button mAmPmButton; - // For hardware IME input. - private char mPlaceholderText; - private String mDoublePlaceholderText; - private String mDeletedKeyFormat; - private boolean mInKbMode; - private ArrayList mTypedTimes = new ArrayList(); - private Node mLegalTimesTree; - private int mAmKeyCode; - private int mPmKeyCode; - - // Accessibility strings. - private String mHourPickerDescription; - private String mSelectHours; - private String mMinutePickerDescription; - private String mSelectMinutes; + private final String[] mAmPmStrings; + private boolean mIsEnabled = DEFAULT_ENABLED_STATE; private Calendar mTempCalendar; + private boolean mHourWithTwoDigit; + private char mHourFormat; public TimePickerSpinnerDelegate(TimePicker delegator, Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(delegator, context); // process style attributes - final TypedArray a = mContext.obtainStyledAttributes(attrs, - R.styleable.TimePicker, defStyleAttr, defStyleRes); - final LayoutInflater inflater = (LayoutInflater) mContext.getSystemService( - Context.LAYOUT_INFLATER_SERVICE); - final Resources res = mContext.getResources(); - - mHourPickerDescription = res.getString(R.string.hour_picker_description); - mSelectHours = res.getString(R.string.select_hours); - mMinutePickerDescription = res.getString(R.string.minute_picker_description); - mSelectMinutes = res.getString(R.string.select_minutes); - - String[] amPmStrings = TimePickerClockDelegate.getAmPmStrings(context); - mAmText = amPmStrings[0]; - mPmText = amPmStrings[1]; - - final int layoutResourceId = a.getResourceId(R.styleable.TimePicker_internalLayout, - R.layout.time_picker_holo); - final View mainView = inflater.inflate(layoutResourceId, null); - mDelegator.addView(mainView); - - mHourView = (TextView) mainView.findViewById(R.id.hours); - mSeparatorView = (TextView) mainView.findViewById(R.id.separator); - mMinuteView = (TextView) mainView.findViewById(R.id.minutes); - mAmPmTextView = (TextView) mainView.findViewById(R.id.ampm_label); - - // Set up text appearances from style. - final int headerTimeTextAppearance = a.getResourceId( - R.styleable.TimePicker_headerTimeTextAppearance, 0); - if (headerTimeTextAppearance != 0) { - mHourView.setTextAppearance(context, headerTimeTextAppearance); - mSeparatorView.setTextAppearance(context, headerTimeTextAppearance); - mMinuteView.setTextAppearance(context, headerTimeTextAppearance); - } + final TypedArray a = mContext.obtainStyledAttributes( + attrs, R.styleable.TimePicker, defStyleAttr, defStyleRes); + final int layoutResourceId = a.getResourceId( + R.styleable.TimePicker_legacyLayout, R.layout.time_picker_legacy); + a.recycle(); - final int headerSelectedTextColor = a.getColor( - R.styleable.TimePicker_headerSelectedTextColor, - res.getColor(R.color.timepicker_default_selector_color_material)); - mHourView.setTextColor(ColorStateList.addFirstIfMissing(mHourView.getTextColors(), - R.attr.state_selected, headerSelectedTextColor)); - mMinuteView.setTextColor(ColorStateList.addFirstIfMissing(mMinuteView.getTextColors(), - R.attr.state_selected, headerSelectedTextColor)); - - final int headerAmPmTextAppearance = a.getResourceId( - R.styleable.TimePicker_headerAmPmTextAppearance, 0); - if (headerAmPmTextAppearance != 0) { - mAmPmTextView.setTextAppearance(context, headerAmPmTextAppearance); + final LayoutInflater inflater = LayoutInflater.from(mContext); + inflater.inflate(layoutResourceId, mDelegator, true); + + // hour + mHourSpinner = (NumberPicker) delegator.findViewById(R.id.hour); + mHourSpinner.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { + public void onValueChange(NumberPicker spinner, int oldVal, int newVal) { + updateInputState(); + if (!is24HourView()) { + if ((oldVal == HOURS_IN_HALF_DAY - 1 && newVal == HOURS_IN_HALF_DAY) || + (oldVal == HOURS_IN_HALF_DAY && newVal == HOURS_IN_HALF_DAY - 1)) { + mIsAm = !mIsAm; + updateAmPmControl(); + } + } + onTimeChanged(); + } + }); + mHourSpinnerInput = (EditText) mHourSpinner.findViewById(R.id.numberpicker_input); + mHourSpinnerInput.setImeOptions(EditorInfo.IME_ACTION_NEXT); + + // divider (only for the new widget style) + mDivider = (TextView) mDelegator.findViewById(R.id.divider); + if (mDivider != null) { + setDividerText(); + } + + // minute + mMinuteSpinner = (NumberPicker) mDelegator.findViewById(R.id.minute); + mMinuteSpinner.setMinValue(0); + mMinuteSpinner.setMaxValue(59); + mMinuteSpinner.setOnLongPressUpdateInterval(100); + mMinuteSpinner.setFormatter(NumberPicker.getTwoDigitFormatter()); + mMinuteSpinner.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { + public void onValueChange(NumberPicker spinner, int oldVal, int newVal) { + updateInputState(); + int minValue = mMinuteSpinner.getMinValue(); + int maxValue = mMinuteSpinner.getMaxValue(); + if (oldVal == maxValue && newVal == minValue) { + int newHour = mHourSpinner.getValue() + 1; + if (!is24HourView() && newHour == HOURS_IN_HALF_DAY) { + mIsAm = !mIsAm; + updateAmPmControl(); + } + mHourSpinner.setValue(newHour); + } else if (oldVal == minValue && newVal == maxValue) { + int newHour = mHourSpinner.getValue() - 1; + if (!is24HourView() && newHour == HOURS_IN_HALF_DAY - 1) { + mIsAm = !mIsAm; + updateAmPmControl(); + } + mHourSpinner.setValue(newHour); + } + onTimeChanged(); + } + }); + mMinuteSpinnerInput = (EditText) mMinuteSpinner.findViewById(R.id.numberpicker_input); + mMinuteSpinnerInput.setImeOptions(EditorInfo.IME_ACTION_NEXT); + + // Get the localized am/pm strings and use them in the spinner. + mAmPmStrings = getAmPmStrings(context); + + // am/pm + final View amPmView = mDelegator.findViewById(R.id.amPm); + if (amPmView instanceof Button) { + mAmPmSpinner = null; + mAmPmSpinnerInput = null; + mAmPmButton = (Button) amPmView; + mAmPmButton.setOnClickListener(new View.OnClickListener() { + public void onClick(View button) { + button.requestFocus(); + mIsAm = !mIsAm; + updateAmPmControl(); + onTimeChanged(); + } + }); + } else { + mAmPmButton = null; + mAmPmSpinner = (NumberPicker) amPmView; + mAmPmSpinner.setMinValue(0); + mAmPmSpinner.setMaxValue(1); + mAmPmSpinner.setDisplayedValues(mAmPmStrings); + mAmPmSpinner.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { + public void onValueChange(NumberPicker picker, int oldVal, int newVal) { + updateInputState(); + picker.requestFocus(); + mIsAm = !mIsAm; + updateAmPmControl(); + onTimeChanged(); + } + }); + mAmPmSpinnerInput = (EditText) mAmPmSpinner.findViewById(R.id.numberpicker_input); + mAmPmSpinnerInput.setImeOptions(EditorInfo.IME_ACTION_DONE); + } + + if (isAmPmAtStart()) { + // Move the am/pm view to the beginning + ViewGroup amPmParent = (ViewGroup) delegator.findViewById(R.id.timePickerLayout); + amPmParent.removeView(amPmView); + amPmParent.addView(amPmView, 0); + // Swap layout margins if needed. They may be not symmetrical (Old Standard Theme + // for example and not for Holo Theme) + ViewGroup.MarginLayoutParams lp = + (ViewGroup.MarginLayoutParams) amPmView.getLayoutParams(); + final int startMargin = lp.getMarginStart(); + final int endMargin = lp.getMarginEnd(); + if (startMargin != endMargin) { + lp.setMarginStart(endMargin); + lp.setMarginEnd(startMargin); + } } - mHeaderView = mainView.findViewById(R.id.time_header); - mHeaderView.setBackground(a.getDrawable(R.styleable.TimePicker_headerBackground)); - - a.recycle(); + getHourFormatData(); - mRadialTimePickerView = (RadialTimePickerView) mainView.findViewById( - R.id.radial_picker); + // update controls to initial state + updateHourControl(); + updateMinuteControl(); + updateAmPmControl(); - setupListeners(); + // set to current time + setCurrentHour(mTempCalendar.get(Calendar.HOUR_OF_DAY)); + setCurrentMinute(mTempCalendar.get(Calendar.MINUTE)); - mAllowAutoAdvance = true; + if (!isEnabled()) { + setEnabled(false); + } - // Set up for keyboard mode. - mDoublePlaceholderText = res.getString(R.string.time_placeholder); - mDeletedKeyFormat = res.getString(R.string.deleted_key); - mPlaceholderText = mDoublePlaceholderText.charAt(0); - mAmKeyCode = mPmKeyCode = -1; - generateLegalTimesTree(); + // set the content descriptions + setContentDescriptions(); - // Initialize with current time - final Calendar calendar = Calendar.getInstance(mCurrentLocale); - final int currentHour = calendar.get(Calendar.HOUR_OF_DAY); - final int currentMinute = calendar.get(Calendar.MINUTE); - initialize(currentHour, currentMinute, false /* 12h */, HOUR_INDEX); - } - - private void initialize(int hourOfDay, int minute, boolean is24HourView, int index) { - mInitialHourOfDay = hourOfDay; - mInitialMinute = minute; - mIs24HourView = is24HourView; - mInKbMode = false; - updateUI(index); + // If not explicitly specified this view is important for accessibility. + if (mDelegator.getImportantForAccessibility() == IMPORTANT_FOR_ACCESSIBILITY_AUTO) { + mDelegator.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_YES); + } } - private void setupListeners() { - mHeaderView.setOnKeyListener(mKeyListener); - mHeaderView.setOnFocusChangeListener(mFocusListener); - mHeaderView.setFocusable(true); - - mRadialTimePickerView.setOnValueSelectedListener(this); - - mHourView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - setCurrentItemShowing(HOUR_INDEX, true, true); - tryVibrate(); - } - }); - mMinuteView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - setCurrentItemShowing(MINUTE_INDEX, true, true); - tryVibrate(); + private void getHourFormatData() { + final String bestDateTimePattern = DateFormat.getBestDateTimePattern(mCurrentLocale, + (mIs24HourView) ? "Hm" : "hm"); + final int lengthPattern = bestDateTimePattern.length(); + mHourWithTwoDigit = false; + char hourFormat = '\0'; + // Check if the returned pattern is single or double 'H', 'h', 'K', 'k'. We also save + // the hour format that we found. + for (int i = 0; i < lengthPattern; i++) { + final char c = bestDateTimePattern.charAt(i); + if (c == 'H' || c == 'h' || c == 'K' || c == 'k') { + mHourFormat = c; + if (i + 1 < lengthPattern && c == bestDateTimePattern.charAt(i + 1)) { + mHourWithTwoDigit = true; + } + break; } - }); + } } - private void updateUI(int index) { - // Update RadialPicker values - updateRadialPicker(index); - // Enable or disable the AM/PM view. - updateHeaderAmPm(); - // Update Hour and Minutes - updateHeaderHour(mInitialHourOfDay, true); - // Update time separator - updateHeaderSeparator(); - // Update Minutes - updateHeaderMinute(mInitialMinute); - // Invalidate everything - mDelegator.invalidate(); - } + private boolean isAmPmAtStart() { + final String bestDateTimePattern = DateFormat.getBestDateTimePattern(mCurrentLocale, + "hm" /* skeleton */); - private void updateRadialPicker(int index) { - mRadialTimePickerView.initialize(mInitialHourOfDay, mInitialMinute, mIs24HourView); - setCurrentItemShowing(index, false, true); + return bestDateTimePattern.startsWith("a"); } - private int computeMaxWidthOfNumbers(int max) { - TextView tempView = new TextView(mContext); - tempView.setTextAppearance(mContext, R.style.TextAppearance_Material_TimePicker_TimeLabel); - ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, - ViewGroup.LayoutParams.WRAP_CONTENT); - tempView.setLayoutParams(lp); - int maxWidth = 0; - for (int minutes = 0; minutes < max; minutes++) { - final String text = String.format("%02d", minutes); - tempView.setText(text); - tempView.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED); - maxWidth = Math.max(maxWidth, tempView.getMeasuredWidth()); + /** + * The time separator is defined in the Unicode CLDR and cannot be supposed to be ":". + * + * See http://unicode.org/cldr/trac/browser/trunk/common/main + * + * We pass the correct "skeleton" depending on 12 or 24 hours view and then extract the + * separator as the character which is just after the hour marker in the returned pattern. + */ + private void setDividerText() { + final String skeleton = (mIs24HourView) ? "Hm" : "hm"; + final String bestDateTimePattern = DateFormat.getBestDateTimePattern(mCurrentLocale, + skeleton); + final String separatorText; + int hourIndex = bestDateTimePattern.lastIndexOf('H'); + if (hourIndex == -1) { + hourIndex = bestDateTimePattern.lastIndexOf('h'); } - return maxWidth; - } - - private void updateHeaderAmPm() { - if (mIs24HourView) { - mAmPmTextView.setVisibility(View.GONE); + if (hourIndex == -1) { + // Default case + separatorText = ":"; } else { - mAmPmTextView.setVisibility(View.VISIBLE); - final String bestDateTimePattern = DateFormat.getBestDateTimePattern(mCurrentLocale, - "hm"); - - boolean amPmOnLeft = bestDateTimePattern.startsWith("a"); - if (TextUtils.getLayoutDirectionFromLocale(mCurrentLocale) == - View.LAYOUT_DIRECTION_RTL) { - amPmOnLeft = !amPmOnLeft; - } - - RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) - mAmPmTextView.getLayoutParams(); - - if (amPmOnLeft) { - layoutParams.rightMargin = computeMaxWidthOfNumbers(12 /* for hours */); - layoutParams.removeRule(RelativeLayout.RIGHT_OF); - layoutParams.addRule(RelativeLayout.LEFT_OF, R.id.separator); + int minuteIndex = bestDateTimePattern.indexOf('m', hourIndex + 1); + if (minuteIndex == -1) { + separatorText = Character.toString(bestDateTimePattern.charAt(hourIndex + 1)); } else { - layoutParams.leftMargin = computeMaxWidthOfNumbers(60 /* for minutes */); - layoutParams.removeRule(RelativeLayout.LEFT_OF); - layoutParams.addRule(RelativeLayout.RIGHT_OF, R.id.separator); + separatorText = bestDateTimePattern.substring(hourIndex + 1, minuteIndex); } - - updateAmPmDisplay(mInitialHourOfDay < 12 ? AM : PM); - mAmPmTextView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - tryVibrate(); - int amOrPm = mRadialTimePickerView.getAmOrPm(); - if (amOrPm == AM) { - amOrPm = PM; - } else if (amOrPm == PM){ - amOrPm = AM; - } - updateAmPmDisplay(amOrPm); - mRadialTimePickerView.setAmOrPm(amOrPm); - } - }); } + mDivider.setText(separatorText); } - /** - * Set the current hour. - */ @Override public void setCurrentHour(Integer currentHour) { - if (mInitialHourOfDay == currentHour) { + setCurrentHour(currentHour, true); + } + + private void setCurrentHour(Integer currentHour, boolean notifyTimeChanged) { + // why was Integer used in the first place? + if (currentHour == null || currentHour == getCurrentHour()) { return; } - mInitialHourOfDay = currentHour; - updateHeaderHour(currentHour, true /* accessibility announce */); - updateHeaderAmPm(); - mRadialTimePickerView.setCurrentHour(currentHour); - mRadialTimePickerView.setAmOrPm(mInitialHourOfDay < 12 ? AM : PM); - mDelegator.invalidate(); - onTimeChanged(); + if (!is24HourView()) { + // convert [0,23] ordinal to wall clock display + if (currentHour >= HOURS_IN_HALF_DAY) { + mIsAm = false; + if (currentHour > HOURS_IN_HALF_DAY) { + currentHour = currentHour - HOURS_IN_HALF_DAY; + } + } else { + mIsAm = true; + if (currentHour == 0) { + currentHour = HOURS_IN_HALF_DAY; + } + } + updateAmPmControl(); + } + mHourSpinner.setValue(currentHour); + if (notifyTimeChanged) { + onTimeChanged(); + } } - /** - * @return The current hour in the range (0-23). - */ @Override public Integer getCurrentHour() { - int currentHour = mRadialTimePickerView.getCurrentHour(); - if (mIs24HourView) { + int currentHour = mHourSpinner.getValue(); + if (is24HourView()) { return currentHour; + } else if (mIsAm) { + return currentHour % HOURS_IN_HALF_DAY; } else { - switch(mRadialTimePickerView.getAmOrPm()) { - case PM: - return (currentHour % HOURS_IN_HALF_DAY) + HOURS_IN_HALF_DAY; - case AM: - default: - return currentHour % HOURS_IN_HALF_DAY; - } + return (currentHour % HOURS_IN_HALF_DAY) + HOURS_IN_HALF_DAY; } } - /** - * Set the current minute (0-59). - */ @Override public void setCurrentMinute(Integer currentMinute) { - if (mInitialMinute == currentMinute) { + if (currentMinute == getCurrentMinute()) { return; } - mInitialMinute = currentMinute; - updateHeaderMinute(currentMinute); - mRadialTimePickerView.setCurrentMinute(currentMinute); - mDelegator.invalidate(); + mMinuteSpinner.setValue(currentMinute); onTimeChanged(); } - /** - * @return The current minute. - */ @Override public Integer getCurrentMinute() { - return mRadialTimePickerView.getCurrentMinute(); + return mMinuteSpinner.getValue(); } - /** - * Set whether in 24 hour or AM/PM mode. - * - * @param is24HourView True = 24 hour mode. False = AM/PM. - */ @Override public void setIs24HourView(Boolean is24HourView) { - if (is24HourView == mIs24HourView) { + if (mIs24HourView == is24HourView) { return; } + // cache the current hour since spinner range changes and BEFORE changing mIs24HourView!! + int currentHour = getCurrentHour(); + // Order is important here. mIs24HourView = is24HourView; - generateLegalTimesTree(); - int hour = mRadialTimePickerView.getCurrentHour(); - mInitialHourOfDay = hour; - updateHeaderHour(hour, false /* no accessibility announce */); - updateHeaderAmPm(); - updateRadialPicker(mRadialTimePickerView.getCurrentItemShowing()); - mDelegator.invalidate(); + getHourFormatData(); + updateHourControl(); + // set value after spinner range is updated + setCurrentHour(currentHour, false); + updateMinuteControl(); + updateAmPmControl(); } - /** - * @return true if this is in 24 hour view else false. - */ @Override public boolean is24HourView() { return mIs24HourView; } @Override - public void setOnTimeChangedListener(TimePicker.OnTimeChangedListener callback) { - mOnTimeChangedListener = callback; + public void setOnTimeChangedListener(TimePicker.OnTimeChangedListener onTimeChangedListener) { + mOnTimeChangedListener = onTimeChangedListener; } @Override public void setEnabled(boolean enabled) { - mHourView.setEnabled(enabled); - mMinuteView.setEnabled(enabled); - mAmPmTextView.setEnabled(enabled); - mRadialTimePickerView.setEnabled(enabled); + mMinuteSpinner.setEnabled(enabled); + if (mDivider != null) { + mDivider.setEnabled(enabled); + } + mHourSpinner.setEnabled(enabled); + if (mAmPmSpinner != null) { + mAmPmSpinner.setEnabled(enabled); + } else { + mAmPmButton.setEnabled(enabled); + } mIsEnabled = enabled; } @@ -401,38 +386,24 @@ class TimePickerSpinnerDelegate extends TimePicker.AbstractTimePickerDelegate im @Override public int getBaseline() { - // does not support baseline alignment - return -1; + return mHourSpinner.getBaseline(); } @Override public void onConfigurationChanged(Configuration newConfig) { - updateUI(mRadialTimePickerView.getCurrentItemShowing()); + setCurrentLocale(newConfig.locale); } @Override public Parcelable onSaveInstanceState(Parcelable superState) { - return new SavedState(superState, getCurrentHour(), getCurrentMinute(), - is24HourView(), inKbMode(), getTypedTimes(), getCurrentItemShowing()); + return new SavedState(superState, getCurrentHour(), getCurrentMinute()); } @Override public void onRestoreInstanceState(Parcelable state) { SavedState ss = (SavedState) state; - setInKbMode(ss.inKbMode()); - setTypedTimes(ss.getTypesTimes()); - initialize(ss.getHour(), ss.getMinute(), ss.is24HourMode(), ss.getCurrentItemShowing()); - mRadialTimePickerView.invalidate(); - if (mInKbMode) { - tryStartingKbMode(-1); - mHourView.invalidate(); - } - } - - @Override - public void setCurrentLocale(Locale locale) { - super.setCurrentLocale(locale); - mTempCalendar = Calendar.getInstance(locale); + setCurrentHour(ss.getHour()); + setCurrentMinute(ss.getMinute()); } @Override @@ -451,9 +422,9 @@ class TimePickerSpinnerDelegate extends TimePicker.AbstractTimePickerDelegate im } mTempCalendar.set(Calendar.HOUR_OF_DAY, getCurrentHour()); mTempCalendar.set(Calendar.MINUTE, getCurrentMinute()); - String selectedDate = DateUtils.formatDateTime(mContext, + String selectedDateUtterance = DateUtils.formatDateTime(mContext, mTempCalendar.getTimeInMillis(), flags); - event.getText().add(selectedDate); + event.getText().add(selectedDateUtterance); } @Override @@ -466,48 +437,121 @@ class TimePickerSpinnerDelegate extends TimePicker.AbstractTimePickerDelegate im info.setClassName(TimePicker.class.getName()); } + private void updateInputState() { + // Make sure that if the user changes the value and the IME is active + // for one of the inputs if this widget, the IME is closed. If the user + // changed the value via the IME and there is a next input the IME will + // be shown, otherwise the user chose another means of changing the + // value and having the IME up makes no sense. + InputMethodManager inputMethodManager = InputMethodManager.peekInstance(); + if (inputMethodManager != null) { + if (inputMethodManager.isActive(mHourSpinnerInput)) { + mHourSpinnerInput.clearFocus(); + inputMethodManager.hideSoftInputFromWindow(mDelegator.getWindowToken(), 0); + } else if (inputMethodManager.isActive(mMinuteSpinnerInput)) { + mMinuteSpinnerInput.clearFocus(); + inputMethodManager.hideSoftInputFromWindow(mDelegator.getWindowToken(), 0); + } else if (inputMethodManager.isActive(mAmPmSpinnerInput)) { + mAmPmSpinnerInput.clearFocus(); + inputMethodManager.hideSoftInputFromWindow(mDelegator.getWindowToken(), 0); + } + } + } + + private void updateAmPmControl() { + if (is24HourView()) { + if (mAmPmSpinner != null) { + mAmPmSpinner.setVisibility(View.GONE); + } else { + mAmPmButton.setVisibility(View.GONE); + } + } else { + int index = mIsAm ? Calendar.AM : Calendar.PM; + if (mAmPmSpinner != null) { + mAmPmSpinner.setValue(index); + mAmPmSpinner.setVisibility(View.VISIBLE); + } else { + mAmPmButton.setText(mAmPmStrings[index]); + mAmPmButton.setVisibility(View.VISIBLE); + } + } + mDelegator.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED); + } + /** - * Set whether in keyboard mode or not. + * Sets the current locale. * - * @param inKbMode True means in keyboard mode. + * @param locale The current locale. */ - private void setInKbMode(boolean inKbMode) { - mInKbMode = inKbMode; + @Override + public void setCurrentLocale(Locale locale) { + super.setCurrentLocale(locale); + mTempCalendar = Calendar.getInstance(locale); } - /** - * @return true if in keyboard mode - */ - private boolean inKbMode() { - return mInKbMode; + private void onTimeChanged() { + mDelegator.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED); + if (mOnTimeChangedListener != null) { + mOnTimeChangedListener.onTimeChanged(mDelegator, getCurrentHour(), + getCurrentMinute()); + } } - private void setTypedTimes(ArrayList typeTimes) { - mTypedTimes = typeTimes; + private void updateHourControl() { + if (is24HourView()) { + // 'k' means 1-24 hour + if (mHourFormat == 'k') { + mHourSpinner.setMinValue(1); + mHourSpinner.setMaxValue(24); + } else { + mHourSpinner.setMinValue(0); + mHourSpinner.setMaxValue(23); + } + } else { + // 'K' means 0-11 hour + if (mHourFormat == 'K') { + mHourSpinner.setMinValue(0); + mHourSpinner.setMaxValue(11); + } else { + mHourSpinner.setMinValue(1); + mHourSpinner.setMaxValue(12); + } + } + mHourSpinner.setFormatter(mHourWithTwoDigit ? NumberPicker.getTwoDigitFormatter() : null); } - /** - * @return an array of typed times - */ - private ArrayList getTypedTimes() { - return mTypedTimes; + private void updateMinuteControl() { + if (is24HourView()) { + mMinuteSpinnerInput.setImeOptions(EditorInfo.IME_ACTION_DONE); + } else { + mMinuteSpinnerInput.setImeOptions(EditorInfo.IME_ACTION_NEXT); + } } - /** - * @return the index of the current item showing - */ - private int getCurrentItemShowing() { - return mRadialTimePickerView.getCurrentItemShowing(); + private void setContentDescriptions() { + // Minute + trySetContentDescription(mMinuteSpinner, R.id.increment, + R.string.time_picker_increment_minute_button); + trySetContentDescription(mMinuteSpinner, R.id.decrement, + R.string.time_picker_decrement_minute_button); + // Hour + trySetContentDescription(mHourSpinner, R.id.increment, + R.string.time_picker_increment_hour_button); + trySetContentDescription(mHourSpinner, R.id.decrement, + R.string.time_picker_decrement_hour_button); + // AM/PM + if (mAmPmSpinner != null) { + trySetContentDescription(mAmPmSpinner, R.id.increment, + R.string.time_picker_increment_set_pm_button); + trySetContentDescription(mAmPmSpinner, R.id.decrement, + R.string.time_picker_decrement_set_am_button); + } } - /** - * Propagate the time change - */ - private void onTimeChanged() { - mDelegator.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED); - if (mOnTimeChangedListener != null) { - mOnTimeChangedListener.onTimeChanged(mDelegator, - getCurrentHour(), getCurrentMinute()); + private void trySetContentDescription(View root, int viewId, int contDescResId) { + View target = root.findViewById(viewId); + if (target != null) { + target.setContentDescription(mContext.getString(contDescResId)); } } @@ -515,34 +559,19 @@ class TimePickerSpinnerDelegate extends TimePicker.AbstractTimePickerDelegate im * Used to save / restore state of time picker */ private static class SavedState extends View.BaseSavedState { - private final int mHour; private final int mMinute; - private final boolean mIs24HourMode; - private final boolean mInKbMode; - private final ArrayList mTypedTimes; - private final int mCurrentItemShowing; - - private SavedState(Parcelable superState, int hour, int minute, boolean is24HourMode, - boolean isKbMode, ArrayList typedTimes, - int currentItemShowing) { + + private SavedState(Parcelable superState, int hour, int minute) { super(superState); mHour = hour; mMinute = minute; - mIs24HourMode = is24HourMode; - mInKbMode = isKbMode; - mTypedTimes = typedTimes; - mCurrentItemShowing = currentItemShowing; } private SavedState(Parcel in) { super(in); mHour = in.readInt(); mMinute = in.readInt(); - mIs24HourMode = (in.readInt() == 1); - mInKbMode = (in.readInt() == 1); - mTypedTimes = in.readArrayList(getClass().getClassLoader()); - mCurrentItemShowing = in.readInt(); } public int getHour() { @@ -553,31 +582,11 @@ class TimePickerSpinnerDelegate extends TimePicker.AbstractTimePickerDelegate im return mMinute; } - public boolean is24HourMode() { - return mIs24HourMode; - } - - public boolean inKbMode() { - return mInKbMode; - } - - public ArrayList getTypesTimes() { - return mTypedTimes; - } - - public int getCurrentItemShowing() { - return mCurrentItemShowing; - } - @Override public void writeToParcel(Parcel dest, int flags) { super.writeToParcel(dest, flags); dest.writeInt(mHour); dest.writeInt(mMinute); - dest.writeInt(mIs24HourMode ? 1 : 0); - dest.writeInt(mInKbMode ? 1 : 0); - dest.writeList(mTypedTimes); - dest.writeInt(mCurrentItemShowing); } @SuppressWarnings({"unused", "hiding"}) @@ -592,667 +601,11 @@ class TimePickerSpinnerDelegate extends TimePicker.AbstractTimePickerDelegate im }; } - private void tryVibrate() { - mDelegator.performHapticFeedback(HapticFeedbackConstants.CLOCK_TICK); - } - - private void updateAmPmDisplay(int amOrPm) { - if (amOrPm == AM) { - mAmPmTextView.setText(mAmText); - mRadialTimePickerView.announceForAccessibility(mAmText); - } else if (amOrPm == PM){ - mAmPmTextView.setText(mPmText); - mRadialTimePickerView.announceForAccessibility(mPmText); - } else { - mAmPmTextView.setText(mDoublePlaceholderText); - } - } - - /** - * Called by the picker for updating the header display. - */ - @Override - public void onValueSelected(int pickerIndex, int newValue, boolean autoAdvance) { - if (pickerIndex == HOUR_INDEX) { - updateHeaderHour(newValue, false); - String announcement = String.format("%d", newValue); - if (mAllowAutoAdvance && autoAdvance) { - setCurrentItemShowing(MINUTE_INDEX, true, false); - announcement += ". " + mSelectMinutes; - } else { - mRadialTimePickerView.setContentDescription( - mHourPickerDescription + ": " + newValue); - } - - mRadialTimePickerView.announceForAccessibility(announcement); - } else if (pickerIndex == MINUTE_INDEX){ - updateHeaderMinute(newValue); - mRadialTimePickerView.setContentDescription(mMinutePickerDescription + ": " + newValue); - } else if (pickerIndex == AMPM_INDEX) { - updateAmPmDisplay(newValue); - } else if (pickerIndex == ENABLE_PICKER_INDEX) { - if (!isTypedTimeFullyLegal()) { - mTypedTimes.clear(); - } - finishKbMode(); - } - } - - private void updateHeaderHour(int value, boolean announce) { - final String bestDateTimePattern = DateFormat.getBestDateTimePattern(mCurrentLocale, - (mIs24HourView) ? "Hm" : "hm"); - final int lengthPattern = bestDateTimePattern.length(); - boolean hourWithTwoDigit = false; - char hourFormat = '\0'; - // Check if the returned pattern is single or double 'H', 'h', 'K', 'k'. We also save - // the hour format that we found. - for (int i = 0; i < lengthPattern; i++) { - final char c = bestDateTimePattern.charAt(i); - if (c == 'H' || c == 'h' || c == 'K' || c == 'k') { - hourFormat = c; - if (i + 1 < lengthPattern && c == bestDateTimePattern.charAt(i + 1)) { - hourWithTwoDigit = true; - } - break; - } - } - final String format; - if (hourWithTwoDigit) { - format = "%02d"; - } else { - format = "%d"; - } - if (mIs24HourView) { - // 'k' means 1-24 hour - if (hourFormat == 'k' && value == 0) { - value = 24; - } - } else { - // 'K' means 0-11 hour - value = modulo12(value, hourFormat == 'K'); - } - CharSequence text = String.format(format, value); - mHourView.setText(text); - if (announce) { - mRadialTimePickerView.announceForAccessibility(text); - } - } - - private static int modulo12(int n, boolean startWithZero) { - int value = n % 12; - if (value == 0 && !startWithZero) { - value = 12; - } - return value; - } - - /** - * The time separator is defined in the Unicode CLDR and cannot be supposed to be ":". - * - * See http://unicode.org/cldr/trac/browser/trunk/common/main - * - * We pass the correct "skeleton" depending on 12 or 24 hours view and then extract the - * separator as the character which is just after the hour marker in the returned pattern. - */ - private void updateHeaderSeparator() { - final String bestDateTimePattern = DateFormat.getBestDateTimePattern(mCurrentLocale, - (mIs24HourView) ? "Hm" : "hm"); - final String separatorText; - // See http://www.unicode.org/reports/tr35/tr35-dates.html for hour formats - final char[] hourFormats = {'H', 'h', 'K', 'k'}; - int hIndex = lastIndexOfAny(bestDateTimePattern, hourFormats); - if (hIndex == -1) { - // Default case - separatorText = ":"; - } else { - separatorText = Character.toString(bestDateTimePattern.charAt(hIndex + 1)); - } - mSeparatorView.setText(separatorText); - } - - static private int lastIndexOfAny(String str, char[] any) { - final int lengthAny = any.length; - if (lengthAny > 0) { - for (int i = str.length() - 1; i >= 0; i--) { - char c = str.charAt(i); - for (int j = 0; j < lengthAny; j++) { - if (c == any[j]) { - return i; - } - } - } - } - return -1; - } - - private void updateHeaderMinute(int value) { - if (value == 60) { - value = 0; - } - CharSequence text = String.format(mCurrentLocale, "%02d", value); - mRadialTimePickerView.announceForAccessibility(text); - mMinuteView.setText(text); - } - - /** - * Show either Hours or Minutes. - */ - private void setCurrentItemShowing(int index, boolean animateCircle, boolean announce) { - mRadialTimePickerView.setCurrentItemShowing(index, animateCircle); - - if (index == HOUR_INDEX) { - int hours = mRadialTimePickerView.getCurrentHour(); - if (!mIs24HourView) { - hours = hours % 12; - } - mRadialTimePickerView.setContentDescription(mHourPickerDescription + ": " + hours); - if (announce) { - mRadialTimePickerView.announceForAccessibility(mSelectHours); - } - } else { - int minutes = mRadialTimePickerView.getCurrentMinute(); - mRadialTimePickerView.setContentDescription(mMinutePickerDescription + ": " + minutes); - if (announce) { - mRadialTimePickerView.announceForAccessibility(mSelectMinutes); - } - } - - mHourView.setSelected(index == HOUR_INDEX); - mMinuteView.setSelected(index == MINUTE_INDEX); - } - - /** - * For keyboard mode, processes key events. - * - * @param keyCode the pressed key. - * - * @return true if the key was successfully processed, false otherwise. - */ - private boolean processKeyUp(int keyCode) { - if (keyCode == KeyEvent.KEYCODE_DEL) { - if (mInKbMode) { - if (!mTypedTimes.isEmpty()) { - int deleted = deleteLastTypedKey(); - String deletedKeyStr; - if (deleted == getAmOrPmKeyCode(AM)) { - deletedKeyStr = mAmText; - } else if (deleted == getAmOrPmKeyCode(PM)) { - deletedKeyStr = mPmText; - } else { - deletedKeyStr = String.format("%d", getValFromKeyCode(deleted)); - } - mRadialTimePickerView.announceForAccessibility( - String.format(mDeletedKeyFormat, deletedKeyStr)); - updateDisplay(true); - } - } - } else if (keyCode == KeyEvent.KEYCODE_0 || keyCode == KeyEvent.KEYCODE_1 - || keyCode == KeyEvent.KEYCODE_2 || keyCode == KeyEvent.KEYCODE_3 - || keyCode == KeyEvent.KEYCODE_4 || keyCode == KeyEvent.KEYCODE_5 - || keyCode == KeyEvent.KEYCODE_6 || keyCode == KeyEvent.KEYCODE_7 - || keyCode == KeyEvent.KEYCODE_8 || keyCode == KeyEvent.KEYCODE_9 - || (!mIs24HourView && - (keyCode == getAmOrPmKeyCode(AM) || keyCode == getAmOrPmKeyCode(PM)))) { - if (!mInKbMode) { - if (mRadialTimePickerView == null) { - // Something's wrong, because time picker should definitely not be null. - Log.e(TAG, "Unable to initiate keyboard mode, TimePicker was null."); - return true; - } - mTypedTimes.clear(); - tryStartingKbMode(keyCode); - return true; - } - // We're already in keyboard mode. - if (addKeyIfLegal(keyCode)) { - updateDisplay(false); - } - return true; - } - return false; - } - - /** - * Try to start keyboard mode with the specified key. - * - * @param keyCode The key to use as the first press. Keyboard mode will not be started if the - * key is not legal to start with. Or, pass in -1 to get into keyboard mode without a starting - * key. - */ - private void tryStartingKbMode(int keyCode) { - if (keyCode == -1 || addKeyIfLegal(keyCode)) { - mInKbMode = true; - onValidationChanged(false); - updateDisplay(false); - mRadialTimePickerView.setInputEnabled(false); - } - } - - private boolean addKeyIfLegal(int keyCode) { - // If we're in 24hour mode, we'll need to check if the input is full. If in AM/PM mode, - // we'll need to see if AM/PM have been typed. - if ((mIs24HourView && mTypedTimes.size() == 4) || - (!mIs24HourView && isTypedTimeFullyLegal())) { - return false; - } - - mTypedTimes.add(keyCode); - if (!isTypedTimeLegalSoFar()) { - deleteLastTypedKey(); - return false; - } - - int val = getValFromKeyCode(keyCode); - mRadialTimePickerView.announceForAccessibility(String.format("%d", val)); - // Automatically fill in 0's if AM or PM was legally entered. - if (isTypedTimeFullyLegal()) { - if (!mIs24HourView && mTypedTimes.size() <= 3) { - mTypedTimes.add(mTypedTimes.size() - 1, KeyEvent.KEYCODE_0); - mTypedTimes.add(mTypedTimes.size() - 1, KeyEvent.KEYCODE_0); - } - onValidationChanged(true); - } - - return true; + public static String[] getAmPmStrings(Context context) { + String[] result = new String[2]; + LocaleData d = LocaleData.get(context.getResources().getConfiguration().locale); + result[0] = d.amPm[0].length() > 2 ? d.narrowAm : d.amPm[0]; + result[1] = d.amPm[1].length() > 2 ? d.narrowPm : d.amPm[1]; + return result; } - - /** - * Traverse the tree to see if the keys that have been typed so far are legal as is, - * or may become legal as more keys are typed (excluding backspace). - */ - private boolean isTypedTimeLegalSoFar() { - Node node = mLegalTimesTree; - for (int keyCode : mTypedTimes) { - node = node.canReach(keyCode); - if (node == null) { - return false; - } - } - return true; - } - - /** - * Check if the time that has been typed so far is completely legal, as is. - */ - private boolean isTypedTimeFullyLegal() { - if (mIs24HourView) { - // For 24-hour mode, the time is legal if the hours and minutes are each legal. Note: - // getEnteredTime() will ONLY call isTypedTimeFullyLegal() when NOT in 24hour mode. - int[] values = getEnteredTime(null); - return (values[0] >= 0 && values[1] >= 0 && values[1] < 60); - } else { - // For AM/PM mode, the time is legal if it contains an AM or PM, as those can only be - // legally added at specific times based on the tree's algorithm. - return (mTypedTimes.contains(getAmOrPmKeyCode(AM)) || - mTypedTimes.contains(getAmOrPmKeyCode(PM))); - } - } - - private int deleteLastTypedKey() { - int deleted = mTypedTimes.remove(mTypedTimes.size() - 1); - if (!isTypedTimeFullyLegal()) { - onValidationChanged(false); - } - return deleted; - } - - /** - * Get out of keyboard mode. If there is nothing in typedTimes, revert to TimePicker's time. - */ - private void finishKbMode() { - mInKbMode = false; - if (!mTypedTimes.isEmpty()) { - int values[] = getEnteredTime(null); - mRadialTimePickerView.setCurrentHour(values[0]); - mRadialTimePickerView.setCurrentMinute(values[1]); - if (!mIs24HourView) { - mRadialTimePickerView.setAmOrPm(values[2]); - } - mTypedTimes.clear(); - } - updateDisplay(false); - mRadialTimePickerView.setInputEnabled(true); - } - - /** - * Update the hours, minutes, and AM/PM displays with the typed times. If the typedTimes is - * empty, either show an empty display (filled with the placeholder text), or update from the - * timepicker's values. - * - * @param allowEmptyDisplay if true, then if the typedTimes is empty, use the placeholder text. - * Otherwise, revert to the timepicker's values. - */ - private void updateDisplay(boolean allowEmptyDisplay) { - if (!allowEmptyDisplay && mTypedTimes.isEmpty()) { - int hour = mRadialTimePickerView.getCurrentHour(); - int minute = mRadialTimePickerView.getCurrentMinute(); - updateHeaderHour(hour, true); - updateHeaderMinute(minute); - if (!mIs24HourView) { - updateAmPmDisplay(hour < 12 ? AM : PM); - } - setCurrentItemShowing(mRadialTimePickerView.getCurrentItemShowing(), true, true); - onValidationChanged(true); - } else { - boolean[] enteredZeros = {false, false}; - int[] values = getEnteredTime(enteredZeros); - String hourFormat = enteredZeros[0] ? "%02d" : "%2d"; - String minuteFormat = (enteredZeros[1]) ? "%02d" : "%2d"; - String hourStr = (values[0] == -1) ? mDoublePlaceholderText : - String.format(hourFormat, values[0]).replace(' ', mPlaceholderText); - String minuteStr = (values[1] == -1) ? mDoublePlaceholderText : - String.format(minuteFormat, values[1]).replace(' ', mPlaceholderText); - mHourView.setText(hourStr); - mHourView.setSelected(false); - mMinuteView.setText(minuteStr); - mMinuteView.setSelected(false); - if (!mIs24HourView) { - updateAmPmDisplay(values[2]); - } - } - } - - private int getValFromKeyCode(int keyCode) { - switch (keyCode) { - case KeyEvent.KEYCODE_0: - return 0; - case KeyEvent.KEYCODE_1: - return 1; - case KeyEvent.KEYCODE_2: - return 2; - case KeyEvent.KEYCODE_3: - return 3; - case KeyEvent.KEYCODE_4: - return 4; - case KeyEvent.KEYCODE_5: - return 5; - case KeyEvent.KEYCODE_6: - return 6; - case KeyEvent.KEYCODE_7: - return 7; - case KeyEvent.KEYCODE_8: - return 8; - case KeyEvent.KEYCODE_9: - return 9; - default: - return -1; - } - } - - /** - * Get the currently-entered time, as integer values of the hours and minutes typed. - * - * @param enteredZeros A size-2 boolean array, which the caller should initialize, and which - * may then be used for the caller to know whether zeros had been explicitly entered as either - * hours of minutes. This is helpful for deciding whether to show the dashes, or actual 0's. - * - * @return A size-3 int array. The first value will be the hours, the second value will be the - * minutes, and the third will be either AM or PM. - */ - private int[] getEnteredTime(boolean[] enteredZeros) { - int amOrPm = -1; - int startIndex = 1; - if (!mIs24HourView && isTypedTimeFullyLegal()) { - int keyCode = mTypedTimes.get(mTypedTimes.size() - 1); - if (keyCode == getAmOrPmKeyCode(AM)) { - amOrPm = AM; - } else if (keyCode == getAmOrPmKeyCode(PM)){ - amOrPm = PM; - } - startIndex = 2; - } - int minute = -1; - int hour = -1; - for (int i = startIndex; i <= mTypedTimes.size(); i++) { - int val = getValFromKeyCode(mTypedTimes.get(mTypedTimes.size() - i)); - if (i == startIndex) { - minute = val; - } else if (i == startIndex+1) { - minute += 10 * val; - if (enteredZeros != null && val == 0) { - enteredZeros[1] = true; - } - } else if (i == startIndex+2) { - hour = val; - } else if (i == startIndex+3) { - hour += 10 * val; - if (enteredZeros != null && val == 0) { - enteredZeros[0] = true; - } - } - } - - return new int[] { hour, minute, amOrPm }; - } - - /** - * Get the keycode value for AM and PM in the current language. - */ - private int getAmOrPmKeyCode(int amOrPm) { - // Cache the codes. - if (mAmKeyCode == -1 || mPmKeyCode == -1) { - // Find the first character in the AM/PM text that is unique. - KeyCharacterMap kcm = KeyCharacterMap.load(KeyCharacterMap.VIRTUAL_KEYBOARD); - char amChar; - char pmChar; - for (int i = 0; i < Math.max(mAmText.length(), mPmText.length()); i++) { - amChar = mAmText.toLowerCase(mCurrentLocale).charAt(i); - pmChar = mPmText.toLowerCase(mCurrentLocale).charAt(i); - if (amChar != pmChar) { - KeyEvent[] events = kcm.getEvents(new char[]{amChar, pmChar}); - // There should be 4 events: a down and up for both AM and PM. - if (events != null && events.length == 4) { - mAmKeyCode = events[0].getKeyCode(); - mPmKeyCode = events[2].getKeyCode(); - } else { - Log.e(TAG, "Unable to find keycodes for AM and PM."); - } - break; - } - } - } - if (amOrPm == AM) { - return mAmKeyCode; - } else if (amOrPm == PM) { - return mPmKeyCode; - } - - return -1; - } - - /** - * Create a tree for deciding what keys can legally be typed. - */ - private void generateLegalTimesTree() { - // Create a quick cache of numbers to their keycodes. - final int k0 = KeyEvent.KEYCODE_0; - final int k1 = KeyEvent.KEYCODE_1; - final int k2 = KeyEvent.KEYCODE_2; - final int k3 = KeyEvent.KEYCODE_3; - final int k4 = KeyEvent.KEYCODE_4; - final int k5 = KeyEvent.KEYCODE_5; - final int k6 = KeyEvent.KEYCODE_6; - final int k7 = KeyEvent.KEYCODE_7; - final int k8 = KeyEvent.KEYCODE_8; - final int k9 = KeyEvent.KEYCODE_9; - - // The root of the tree doesn't contain any numbers. - mLegalTimesTree = new Node(); - if (mIs24HourView) { - // We'll be re-using these nodes, so we'll save them. - Node minuteFirstDigit = new Node(k0, k1, k2, k3, k4, k5); - Node minuteSecondDigit = new Node(k0, k1, k2, k3, k4, k5, k6, k7, k8, k9); - // The first digit must be followed by the second digit. - minuteFirstDigit.addChild(minuteSecondDigit); - - // The first digit may be 0-1. - Node firstDigit = new Node(k0, k1); - mLegalTimesTree.addChild(firstDigit); - - // When the first digit is 0-1, the second digit may be 0-5. - Node secondDigit = new Node(k0, k1, k2, k3, k4, k5); - firstDigit.addChild(secondDigit); - // We may now be followed by the first minute digit. E.g. 00:09, 15:58. - secondDigit.addChild(minuteFirstDigit); - - // When the first digit is 0-1, and the second digit is 0-5, the third digit may be 6-9. - Node thirdDigit = new Node(k6, k7, k8, k9); - // The time must now be finished. E.g. 0:55, 1:08. - secondDigit.addChild(thirdDigit); - - // When the first digit is 0-1, the second digit may be 6-9. - secondDigit = new Node(k6, k7, k8, k9); - firstDigit.addChild(secondDigit); - // We must now be followed by the first minute digit. E.g. 06:50, 18:20. - secondDigit.addChild(minuteFirstDigit); - - // The first digit may be 2. - firstDigit = new Node(k2); - mLegalTimesTree.addChild(firstDigit); - - // When the first digit is 2, the second digit may be 0-3. - secondDigit = new Node(k0, k1, k2, k3); - firstDigit.addChild(secondDigit); - // We must now be followed by the first minute digit. E.g. 20:50, 23:09. - secondDigit.addChild(minuteFirstDigit); - - // When the first digit is 2, the second digit may be 4-5. - secondDigit = new Node(k4, k5); - firstDigit.addChild(secondDigit); - // We must now be followd by the last minute digit. E.g. 2:40, 2:53. - secondDigit.addChild(minuteSecondDigit); - - // The first digit may be 3-9. - firstDigit = new Node(k3, k4, k5, k6, k7, k8, k9); - mLegalTimesTree.addChild(firstDigit); - // We must now be followed by the first minute digit. E.g. 3:57, 8:12. - firstDigit.addChild(minuteFirstDigit); - } else { - // We'll need to use the AM/PM node a lot. - // Set up AM and PM to respond to "a" and "p". - Node ampm = new Node(getAmOrPmKeyCode(AM), getAmOrPmKeyCode(PM)); - - // The first hour digit may be 1. - Node firstDigit = new Node(k1); - mLegalTimesTree.addChild(firstDigit); - // We'll allow quick input of on-the-hour times. E.g. 1pm. - firstDigit.addChild(ampm); - - // When the first digit is 1, the second digit may be 0-2. - Node secondDigit = new Node(k0, k1, k2); - firstDigit.addChild(secondDigit); - // Also for quick input of on-the-hour times. E.g. 10pm, 12am. - secondDigit.addChild(ampm); - - // When the first digit is 1, and the second digit is 0-2, the third digit may be 0-5. - Node thirdDigit = new Node(k0, k1, k2, k3, k4, k5); - secondDigit.addChild(thirdDigit); - // The time may be finished now. E.g. 1:02pm, 1:25am. - thirdDigit.addChild(ampm); - - // When the first digit is 1, the second digit is 0-2, and the third digit is 0-5, - // the fourth digit may be 0-9. - Node fourthDigit = new Node(k0, k1, k2, k3, k4, k5, k6, k7, k8, k9); - thirdDigit.addChild(fourthDigit); - // The time must be finished now. E.g. 10:49am, 12:40pm. - fourthDigit.addChild(ampm); - - // When the first digit is 1, and the second digit is 0-2, the third digit may be 6-9. - thirdDigit = new Node(k6, k7, k8, k9); - secondDigit.addChild(thirdDigit); - // The time must be finished now. E.g. 1:08am, 1:26pm. - thirdDigit.addChild(ampm); - - // When the first digit is 1, the second digit may be 3-5. - secondDigit = new Node(k3, k4, k5); - firstDigit.addChild(secondDigit); - - // When the first digit is 1, and the second digit is 3-5, the third digit may be 0-9. - thirdDigit = new Node(k0, k1, k2, k3, k4, k5, k6, k7, k8, k9); - secondDigit.addChild(thirdDigit); - // The time must be finished now. E.g. 1:39am, 1:50pm. - thirdDigit.addChild(ampm); - - // The hour digit may be 2-9. - firstDigit = new Node(k2, k3, k4, k5, k6, k7, k8, k9); - mLegalTimesTree.addChild(firstDigit); - // We'll allow quick input of on-the-hour-times. E.g. 2am, 5pm. - firstDigit.addChild(ampm); - - // When the first digit is 2-9, the second digit may be 0-5. - secondDigit = new Node(k0, k1, k2, k3, k4, k5); - firstDigit.addChild(secondDigit); - - // When the first digit is 2-9, and the second digit is 0-5, the third digit may be 0-9. - thirdDigit = new Node(k0, k1, k2, k3, k4, k5, k6, k7, k8, k9); - secondDigit.addChild(thirdDigit); - // The time must be finished now. E.g. 2:57am, 9:30pm. - thirdDigit.addChild(ampm); - } - } - - /** - * Simple node class to be used for traversal to check for legal times. - * mLegalKeys represents the keys that can be typed to get to the node. - * mChildren are the children that can be reached from this node. - */ - private class Node { - private int[] mLegalKeys; - private ArrayList mChildren; - - public Node(int... legalKeys) { - mLegalKeys = legalKeys; - mChildren = new ArrayList(); - } - - public void addChild(Node child) { - mChildren.add(child); - } - - public boolean containsKey(int key) { - for (int i = 0; i < mLegalKeys.length; i++) { - if (mLegalKeys[i] == key) { - return true; - } - } - return false; - } - - public Node canReach(int key) { - if (mChildren == null) { - return null; - } - for (Node child : mChildren) { - if (child.containsKey(key)) { - return child; - } - } - return null; - } - } - - private final View.OnKeyListener mKeyListener = new View.OnKeyListener() { - @Override - public boolean onKey(View v, int keyCode, KeyEvent event) { - if (event.getAction() == KeyEvent.ACTION_UP) { - return processKeyUp(keyCode); - } - return false; - } - }; - - private final View.OnFocusChangeListener mFocusListener = new View.OnFocusChangeListener() { - @Override - public void onFocusChange(View v, boolean hasFocus) { - if (!hasFocus && mInKbMode && isTypedTimeFullyLegal()) { - finishKbMode(); - - if (mOnTimeChangedListener != null) { - mOnTimeChangedListener.onTimeChanged(mDelegator, - mRadialTimePickerView.getCurrentHour(), - mRadialTimePickerView.getCurrentMinute()); - } - } - } - }; } diff --git a/core/java/android/widget/Toast.java b/core/java/android/widget/Toast.java index dd165ae94ecb41f206aa645b224841fa37ba48ba..be4cdc16e1d33242818b64112c8fb469aaead887 100644 --- a/core/java/android/widget/Toast.java +++ b/core/java/android/widget/Toast.java @@ -235,6 +235,14 @@ public class Toast { public int getYOffset() { return mTN.mY; } + + /** + * Gets the LayoutParams for the Toast window. + * @hide + */ + public WindowManager.LayoutParams getWindowParams() { + return mTN.mParams; + } /** * Make a standard toast that just contains a text view. diff --git a/core/java/android/widget/Toolbar.java b/core/java/android/widget/Toolbar.java index 1ce19ce050664e2c2f3a555372bd2c67874c8c5c..c5325c4d3b534ad18db20f1cf946f8ff93a2ac84 100644 --- a/core/java/android/widget/Toolbar.java +++ b/core/java/android/widget/Toolbar.java @@ -21,6 +21,7 @@ import android.annotation.Nullable; import android.app.ActionBar; import android.content.Context; import android.content.res.TypedArray; +import android.graphics.RectF; import android.graphics.drawable.Drawable; import android.os.Parcel; import android.os.Parcelable; @@ -66,7 +67,9 @@ import java.util.List; *
  • A navigation button. This may be an Up arrow, navigation menu toggle, close, * collapse, done or another glyph of the app's choosing. This button should always be used * to access other navigational destinations within the container of the Toolbar and - * its signified content or otherwise leave the current context signified by the Toolbar.
  • + * its signified content or otherwise leave the current context signified by the Toolbar. + * The navigation button is vertically aligned within the Toolbar's + * {@link android.R.styleable#View_minHeight minimum height}, if set. *
  • A branded logo image. This may extend to the height of the bar and can be * arbitrarily wide.
  • *
  • A title and subtitle. The title should be a signpost for the Toolbar's current @@ -82,8 +85,9 @@ import java.util.List; *
  • An {@link ActionMenuView action menu}. The menu of actions will pin to the * end of the Toolbar offering a few * - * frequent, important or typical actions along with an optional overflow menu for - * additional actions.
  • + * frequent, important or typical actions along with an optional overflow menu for + * additional actions. Action buttons are vertically aligned within the Toolbar's + * {@link android.R.styleable#View_minHeight minimum height}, if set. * *

    * @@ -101,6 +105,7 @@ public class Toolbar extends ViewGroup { private ImageView mLogoView; private Drawable mCollapseIcon; + private CharSequence mCollapseDescription; private ImageButton mCollapseButtonView; View mExpandedActionView; @@ -235,6 +240,7 @@ public class Toolbar extends ViewGroup { } mCollapseIcon = a.getDrawable(R.styleable.Toolbar_collapseIcon); + mCollapseDescription = a.getText(R.styleable.Toolbar_collapseContentDescription); final CharSequence title = a.getText(R.styleable.Toolbar_title); if (!TextUtils.isEmpty(title)) { @@ -995,6 +1001,7 @@ public class Toolbar extends ViewGroup { if (mCollapseButtonView == null) { mCollapseButtonView = new ImageButton(getContext(), null, 0, mNavButtonStyle); mCollapseButtonView.setImageDrawable(mCollapseIcon); + mCollapseButtonView.setContentDescription(mCollapseDescription); final LayoutParams lp = generateDefaultLayoutParams(); lp.gravity = Gravity.START | (mButtonGravity & Gravity.VERTICAL_GRAVITY_MASK); lp.mViewType = LayoutParams.EXPANDED; @@ -1745,6 +1752,17 @@ public class Toolbar extends ViewGroup { mMenuBuilderCallback = mcb; } + /** + * Accessor to enable LayoutLib to get ActionMenuPresenter directly. + */ + ActionMenuPresenter getOuterActionMenuPresenter() { + return mOuterActionMenuPresenter; + } + + Context getPopupContext() { + return mPopupContext; + } + /** * Interface responsible for receiving menu item click events if the items themselves * do not have individual item click listeners. diff --git a/core/java/android/widget/YearPickerView.java b/core/java/android/widget/YearPickerView.java index 2bf07f93de113e1755bb238137c75a571cedbb45..24ed7cec0dde9c0cd87c3d283e38fe9c9f1c0cfd 100644 --- a/core/java/android/widget/YearPickerView.java +++ b/core/java/android/widget/YearPickerView.java @@ -18,7 +18,6 @@ package android.widget; import android.content.Context; import android.content.res.Resources; -import android.content.res.TypedArray; import android.util.AttributeSet; import android.view.View; import android.view.ViewGroup; @@ -33,10 +32,15 @@ import com.android.internal.R; */ class YearPickerView extends ListView implements AdapterView.OnItemClickListener, OnDateChangedListener { + private final Calendar mMinDate = Calendar.getInstance(); + private final Calendar mMaxDate = Calendar.getInstance(); + + private final YearAdapter mAdapter; + private final int mViewSize; + private final int mChildSize; + private DatePickerController mController; - private YearAdapter mAdapter; - private int mViewSize; - private int mChildSize; + private int mSelectedPosition = -1; private int mYearSelectedCircleColor; @@ -72,15 +76,23 @@ class YearPickerView extends ListView implements AdapterView.OnItemClickListener setOnItemClickListener(this); setDividerHeight(0); + + mAdapter = new YearAdapter(getContext(), R.layout.year_label_text_view); + setAdapter(mAdapter); + } + + public void setRange(Calendar min, Calendar max) { + mMinDate.setTimeInMillis(min.getTimeInMillis()); + mMaxDate.setTimeInMillis(max.getTimeInMillis()); + + updateAdapterData(); } public void init(DatePickerController controller) { mController = controller; mController.registerOnDateChangedListener(this); - mAdapter = new YearAdapter(getContext(), R.layout.year_label_text_view); updateAdapterData(); - setAdapter(mAdapter); onDateChanged(); } @@ -98,8 +110,9 @@ class YearPickerView extends ListView implements AdapterView.OnItemClickListener private void updateAdapterData() { mAdapter.clear(); - final int maxYear = mController.getMaxYear(); - for (int year = mController.getMinYear(); year <= maxYear; year++) { + + final int maxYear = mMaxDate.get(Calendar.YEAR); + for (int year = mMinDate.get(Calendar.YEAR); year <= maxYear; year++) { mAdapter.add(year); } } @@ -173,12 +186,13 @@ class YearPickerView extends ListView implements AdapterView.OnItemClickListener updateAdapterData(); mAdapter.notifyDataSetChanged(); postSetSelectionCentered( - mController.getSelectedDay().get(Calendar.YEAR) - mController.getMinYear()); + mController.getSelectedDay().get(Calendar.YEAR) - mMinDate.get(Calendar.YEAR)); } @Override public void onInitializeAccessibilityEvent(AccessibilityEvent event) { super.onInitializeAccessibilityEvent(event); + if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_SCROLLED) { event.setFromIndex(0); event.setToIndex(0); diff --git a/core/java/com/android/internal/app/AlertActivity.java b/core/java/com/android/internal/app/AlertActivity.java index 7456def4c346ea61397e93673b123f263314c1ed..5566aa69b4ede3d790a1a8d1fc8b10813d967c42 100644 --- a/core/java/com/android/internal/app/AlertActivity.java +++ b/core/java/com/android/internal/app/AlertActivity.java @@ -17,9 +17,14 @@ package com.android.internal.app; import android.app.Activity; +import android.app.AlertDialog; +import android.app.Dialog; import android.content.DialogInterface; import android.os.Bundle; +import android.text.TextUtils; import android.view.KeyEvent; +import android.view.ViewGroup; +import android.view.accessibility.AccessibilityEvent; /** * An activity that follows the visual style of an AlertDialog. @@ -62,6 +67,19 @@ public abstract class AlertActivity extends Activity implements DialogInterface } } + @Override + public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) { + event.setClassName(Dialog.class.getName()); + event.setPackageName(getPackageName()); + + ViewGroup.LayoutParams params = getWindow().getAttributes(); + boolean isFullScreen = (params.width == ViewGroup.LayoutParams.MATCH_PARENT) && + (params.height == ViewGroup.LayoutParams.MATCH_PARENT); + event.setFullScreen(isFullScreen); + + return false; + } + /** * Sets up the alert, including applying the parameters to the alert model, * and installing the alert's content. diff --git a/core/java/com/android/internal/app/AlertController.java b/core/java/com/android/internal/app/AlertController.java index 0183e4511721a57823d0ad2d749d7a5d55ad2856..20d209f081dd51db9e6804259d7f27c5da00a6f1 100644 --- a/core/java/com/android/internal/app/AlertController.java +++ b/core/java/com/android/internal/app/AlertController.java @@ -26,7 +26,6 @@ import android.content.DialogInterface; import android.content.res.TypedArray; import android.database.Cursor; import android.graphics.drawable.Drawable; -import android.os.Build; import android.os.Handler; import android.os.Message; import android.text.TextUtils; @@ -38,9 +37,12 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; +import android.view.ViewParent; +import android.view.ViewTreeObserver; import android.view.Window; import android.view.WindowInsets; import android.view.WindowManager; +import android.widget.AbsListView; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; @@ -449,11 +451,11 @@ public class AlertController { } private void setupView() { - final LinearLayout contentPanel = (LinearLayout) mWindow.findViewById(R.id.contentPanel); + final ViewGroup contentPanel = (ViewGroup) mWindow.findViewById(R.id.contentPanel); setupContent(contentPanel); final boolean hasButtons = setupButtons(); - final LinearLayout topPanel = (LinearLayout) mWindow.findViewById(R.id.topPanel); + final ViewGroup topPanel = (ViewGroup) mWindow.findViewById(R.id.topPanel); final TypedArray a = mContext.obtainStyledAttributes( null, R.styleable.AlertDialog, R.attr.alertDialogStyle, 0); final boolean hasTitle = setupTitle(topPanel); @@ -521,13 +523,13 @@ public class AlertController { a.recycle(); } - private boolean setupTitle(LinearLayout topPanel) { + private boolean setupTitle(ViewGroup topPanel) { boolean hasTitle = true; if (mCustomTitleView != null) { // Add the custom title view directly to the topPanel layout - LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams( - LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); + LayoutParams lp = new LayoutParams( + LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); topPanel.addView(mCustomTitleView, 0, lp); @@ -571,7 +573,7 @@ public class AlertController { return hasTitle; } - private void setupContent(LinearLayout contentPanel) { + private void setupContent(ViewGroup contentPanel) { mScrollView = (ScrollView) mWindow.findViewById(R.id.scrollView); mScrollView.setFocusable(false); @@ -588,14 +590,77 @@ public class AlertController { mScrollView.removeView(mMessageView); if (mListView != null) { - contentPanel.removeView(mWindow.findViewById(R.id.scrollView)); - contentPanel.addView(mListView, - new LinearLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT)); - contentPanel.setLayoutParams(new LinearLayout.LayoutParams(MATCH_PARENT, 0, 1.0f)); + final ViewGroup scrollParent = (ViewGroup) mScrollView.getParent(); + final int childIndex = scrollParent.indexOfChild(mScrollView); + scrollParent.removeViewAt(childIndex); + scrollParent.addView(mListView, childIndex, + new LayoutParams(MATCH_PARENT, MATCH_PARENT)); } else { contentPanel.setVisibility(View.GONE); } } + + // Set up scroll indicators (if present). + final View indicatorUp = mWindow.findViewById(R.id.scrollIndicatorUp); + final View indicatorDown = mWindow.findViewById(R.id.scrollIndicatorDown); + if (indicatorUp != null || indicatorDown != null) { + if (mMessage != null) { + // We're just showing the ScrollView, set up listener. + mScrollView.setOnScrollChangeListener(new View.OnScrollChangeListener() { + @Override + public void onScrollChange(View v, int scrollX, int scrollY, + int oldScrollX, int oldScrollY) { + manageScrollIndicators(v, indicatorUp, indicatorDown); + } + }); + // Set up the indicators following layout. + mScrollView.post(new Runnable() { + @Override + public void run() { + manageScrollIndicators(mScrollView, indicatorUp, indicatorDown); + } + }); + + } else if (mListView != null) { + // We're just showing the AbsListView, set up listener. + mListView.setOnScrollListener(new AbsListView.OnScrollListener() { + @Override + public void onScrollStateChanged(AbsListView view, int scrollState) { + // That's cool, I guess? + } + + @Override + public void onScroll(AbsListView v, int firstVisibleItem, + int visibleItemCount, int totalItemCount) { + manageScrollIndicators(v, indicatorUp, indicatorDown); + } + }); + // Set up the indicators following layout. + mListView.post(new Runnable() { + @Override + public void run() { + manageScrollIndicators(mListView, indicatorUp, indicatorDown); + } + }); + } else { + // We don't have any content to scroll, remove the indicators. + if (indicatorUp != null) { + contentPanel.removeView(indicatorUp); + } + if (indicatorDown != null) { + contentPanel.removeView(indicatorDown); + } + } + } + } + + private static void manageScrollIndicators(View v, View upIndicator, View downIndicator) { + if (upIndicator != null) { + upIndicator.setVisibility(v.canScrollVertically(-1) ? View.VISIBLE : View.INVISIBLE); + } + if (downIndicator != null) { + downIndicator.setVisibility(v.canScrollVertically(1) ? View.VISIBLE : View.INVISIBLE); + } } private boolean setupButtons() { @@ -890,10 +955,10 @@ public class AlertController { if (mIcon != null) { dialog.setIcon(mIcon); } - if (mIconId >= 0) { + if (mIconId != 0) { dialog.setIcon(mIconId); } - if (mIconAttrId > 0) { + if (mIconAttrId != 0) { dialog.setIcon(dialog.getIconAttributeResId(mIconAttrId)); } } diff --git a/core/java/com/android/internal/app/ChooserActivity.java b/core/java/com/android/internal/app/ChooserActivity.java index 526781175b6ce2f554931897d7bc9842edcb110c..64bd6b66c7346200fd4a941271df1d8155605958 100644 --- a/core/java/com/android/internal/app/ChooserActivity.java +++ b/core/java/com/android/internal/app/ChooserActivity.java @@ -16,13 +16,21 @@ package com.android.internal.app; +import android.app.Activity; +import android.content.ComponentName; import android.content.Intent; +import android.content.IntentSender; +import android.content.pm.ActivityInfo; import android.os.Bundle; import android.os.Parcelable; import android.util.Log; +import android.util.Slog; public class ChooserActivity extends ResolverActivity { + private static final String TAG = "ChooserActivity"; + private Bundle mReplacementExtras; + private IntentSender mChosenComponentSender; @Override protected void onCreate(Bundle savedInstanceState) { @@ -60,21 +68,45 @@ public class ChooserActivity extends ResolverActivity { initialIntents[i] = in; } } + mChosenComponentSender = intent.getParcelableExtra( + Intent.EXTRA_CHOSEN_COMPONENT_INTENT_SENDER); setSafeForwardingMode(true); super.onCreate(savedInstanceState, target, title, defaultTitleRes, initialIntents, null, false); } - public Intent getReplacementIntent(String packageName, Intent defIntent) { + @Override + public Intent getReplacementIntent(ActivityInfo aInfo, Intent defIntent) { + Intent result = defIntent; if (mReplacementExtras != null) { - final Bundle replExtras = mReplacementExtras.getBundle(packageName); + final Bundle replExtras = mReplacementExtras.getBundle(aInfo.packageName); if (replExtras != null) { - final Intent result = new Intent(defIntent); + result = new Intent(defIntent); result.putExtras(replExtras); - return result; } } - return defIntent; + if (aInfo.name.equals(IntentForwarderActivity.FORWARD_INTENT_TO_USER_OWNER) + || aInfo.name.equals(IntentForwarderActivity.FORWARD_INTENT_TO_MANAGED_PROFILE)) { + result = Intent.createChooser(result, + getIntent().getCharSequenceExtra(Intent.EXTRA_TITLE)); + } + return result; + } + + @Override + public void onActivityStarted(Intent intent) { + if (mChosenComponentSender != null) { + final ComponentName target = intent.getComponent(); + if (target != null) { + final Intent fillIn = new Intent().putExtra(Intent.EXTRA_CHOSEN_COMPONENT, target); + try { + mChosenComponentSender.sendIntent(this, Activity.RESULT_OK, fillIn, null, null); + } catch (IntentSender.SendIntentException e) { + Slog.e(TAG, "Unable to launch supplied IntentSender to report " + + "the chosen component: " + e); + } + } + } } private void modifyTargetIntent(Intent in) { diff --git a/core/java/com/android/internal/app/IAppOpsService.aidl b/core/java/com/android/internal/app/IAppOpsService.aidl index a52dd484ae31ff565144e4f3d2540005cd600a11..99bf9f316162057f70f315739b1ac3023f6acc2f 100644 --- a/core/java/com/android/internal/app/IAppOpsService.aidl +++ b/core/java/com/android/internal/app/IAppOpsService.aidl @@ -36,7 +36,7 @@ interface IAppOpsService { List getPackagesForOps(in int[] ops); List getOpsForPackage(int uid, String packageName, in int[] ops); void setMode(int code, int uid, String packageName, int mode); - void resetAllModes(); + void resetAllModes(int reqUserId, String reqPackageName); int checkAudioOperation(int code, int usage, int uid, String packageName); void setAudioRestriction(int code, int usage, int uid, int mode, in String[] exceptionPackages); diff --git a/core/java/com/android/internal/app/IBatteryStats.aidl b/core/java/com/android/internal/app/IBatteryStats.aidl index 55b3eccf084698ca6992cfb022369d26ac8be8c6..87b6ed7326f22d5bd2f90e5b8e9953050faabf4d 100644 --- a/core/java/com/android/internal/app/IBatteryStats.aidl +++ b/core/java/com/android/internal/app/IBatteryStats.aidl @@ -77,6 +77,7 @@ interface IBatteryStats { void noteScreenBrightness(int brightness); void noteUserActivity(int uid, int event); void noteInteractive(boolean interactive); + void noteConnectivityChanged(int type, String extra); void noteMobileRadioPowerState(int powerState, long timestampNs); void notePhoneOn(); void notePhoneOff(); diff --git a/core/java/com/android/internal/app/IntentForwarderActivity.java b/core/java/com/android/internal/app/IntentForwarderActivity.java index 6e2f84a3e44e7fb15b294e2323bd65c3e25db7a2..7c1308fadbdda15b7f8a2a8bb02990e925560a3f 100644 --- a/core/java/com/android/internal/app/IntentForwarderActivity.java +++ b/core/java/com/android/internal/app/IntentForwarderActivity.java @@ -58,21 +58,22 @@ public class IntentForwarderActivity extends Activity { Intent intentReceived = getIntent(); String className = intentReceived.getComponent().getClassName(); - final UserHandle userDest; + final int targetUserId; final int userMessageId; if (className.equals(FORWARD_INTENT_TO_USER_OWNER)) { userMessageId = com.android.internal.R.string.forward_intent_to_owner; - userDest = UserHandle.OWNER; + targetUserId = UserHandle.USER_OWNER; } else if (className.equals(FORWARD_INTENT_TO_MANAGED_PROFILE)) { userMessageId = com.android.internal.R.string.forward_intent_to_work; - userDest = getManagedProfile(); + targetUserId = getManagedProfile(); } else { Slog.wtf(TAG, IntentForwarderActivity.class.getName() + " cannot be called directly"); userMessageId = -1; - userDest = null; + targetUserId = UserHandle.USER_NULL; } - if (userDest == null) { // This covers the case where there is no managed profile. + if (targetUserId == UserHandle.USER_NULL) { + // This covers the case where there is no managed profile. finish(); return; } @@ -83,31 +84,27 @@ public class IntentForwarderActivity extends Activity { newIntent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT |Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP); int callingUserId = getUserId(); - IPackageManager ipm = AppGlobals.getPackageManager(); - String resolvedType = newIntent.resolveTypeIfNeeded(getContentResolver()); - boolean canForward = false; - Intent selector = newIntent.getSelector(); - if (selector == null) { - selector = newIntent; - } - try { - canForward = ipm.canForwardTo(selector, resolvedType, callingUserId, - userDest.getIdentifier()); - } catch (RemoteException e) { - Slog.e(TAG, "PackageManagerService is dead?"); - } - if (canForward) { - newIntent.setContentUserHint(callingUserId); + + if (canForward(newIntent, targetUserId)) { + if (newIntent.getAction().equals(Intent.ACTION_CHOOSER)) { + Intent innerIntent = (Intent) newIntent.getParcelableExtra(Intent.EXTRA_INTENT); + innerIntent.setContentUserHint(callingUserId); + } else { + newIntent.setContentUserHint(callingUserId); + } final android.content.pm.ResolveInfo ri = getPackageManager().resolveActivityAsUser( - newIntent, MATCH_DEFAULT_ONLY, userDest.getIdentifier()); + newIntent, MATCH_DEFAULT_ONLY, targetUserId); - // Only show a disclosure if this is a normal (non-OS) app - final boolean shouldShowDisclosure = - !UserHandle.isSameApp(ri.activityInfo.applicationInfo.uid, Process.SYSTEM_UID); + // Don't show the disclosure if next activity is ResolverActivity or ChooserActivity + // as those will already have shown work / personal as neccesary etc. + final boolean shouldShowDisclosure = ri == null || ri.activityInfo == null || + !"android".equals(ri.activityInfo.packageName) || + !(ResolverActivity.class.getName().equals(ri.activityInfo.name) + || ChooserActivity.class.getName().equals(ri.activityInfo.name)); try { - startActivityAsCaller(newIntent, null, userDest.getIdentifier()); + startActivityAsCaller(newIntent, null, targetUserId); } catch (RuntimeException e) { int launchedFromUid = -1; String launchedFromPackage = "?"; @@ -129,26 +126,55 @@ public class IntentForwarderActivity extends Activity { } } else { Slog.wtf(TAG, "the intent: " + newIntent + "cannot be forwarded from user " - + callingUserId + " to user " + userDest.getIdentifier()); + + callingUserId + " to user " + targetUserId); } finish(); } + boolean canForward(Intent intent, int targetUserId) { + IPackageManager ipm = AppGlobals.getPackageManager(); + if (intent.getAction().equals(Intent.ACTION_CHOOSER)) { + // The EXTRA_INITIAL_INTENTS may not be allowed to be forwarded. + if (intent.hasExtra(Intent.EXTRA_INITIAL_INTENTS)) { + Slog.wtf(TAG, "An chooser intent with extra initial intents cannot be forwarded to" + + " a different user"); + return false; + } + if (intent.hasExtra(Intent.EXTRA_REPLACEMENT_EXTRAS)) { + Slog.wtf(TAG, "A chooser intent with replacement extras cannot be forwarded to a" + + " different user"); + return false; + } + intent = (Intent) intent.getParcelableExtra(Intent.EXTRA_INTENT); + } + String resolvedType = intent.resolveTypeIfNeeded(getContentResolver()); + if (intent.getSelector() != null) { + intent = intent.getSelector(); + } + try { + return ipm.canForwardTo(intent, resolvedType, getUserId(), + targetUserId); + } catch (RemoteException e) { + Slog.e(TAG, "PackageManagerService is dead?"); + return false; + } + } + /** - * Returns the managed profile for this device or null if there is no managed - * profile. + * Returns the userId of the managed profile for this device or UserHandle.USER_NULL if there is + * no managed profile. * * TODO: Remove the assumption that there is only one managed profile * on the device. */ - private UserHandle getManagedProfile() { + private int getManagedProfile() { UserManager userManager = (UserManager) getSystemService(Context.USER_SERVICE); List relatedUsers = userManager.getProfiles(UserHandle.USER_OWNER); for (UserInfo userInfo : relatedUsers) { - if (userInfo.isManagedProfile()) return new UserHandle(userInfo.id); + if (userInfo.isManagedProfile()) return userInfo.id; } Slog.wtf(TAG, FORWARD_INTENT_TO_MANAGED_PROFILE + " has been called, but there is no managed profile"); - return null; + return UserHandle.USER_NULL; } } diff --git a/core/java/com/android/internal/app/ProcessStats.java b/core/java/com/android/internal/app/ProcessStats.java index e3e5647f891b81b9a9c69296fe7ae2b9a13af05d..70fb51072acf5e41897dc98aba9750b46827323b 100644 --- a/core/java/com/android/internal/app/ProcessStats.java +++ b/core/java/com/android/internal/app/ProcessStats.java @@ -1079,7 +1079,9 @@ public final class ProcessStats implements Parcelable { ProcessDataCollection totals = new ProcessDataCollection(screenStates, memStates, procStates); computeProcessData(proc, totals, now); - if (totals.totalTime != 0 || totals.numPss != 0) { + double percentage = (double) totals.totalTime / (double) totalTime * 100; + // We don't print percentages < .01, so just drop those. + if (percentage >= 0.005 || totals.numPss != 0) { if (prefix != null) { pw.print(prefix); } @@ -2470,7 +2472,7 @@ public final class ProcessStats implements Parcelable { totalMem.totalTime, totalPss, totalMem.sysMemSamples); totalPss = printMemoryCategory(pw, " ", "Free ", totalMem.sysMemFreeWeight, totalMem.totalTime, totalPss, totalMem.sysMemSamples); - totalPss = printMemoryCategory(pw, " ", "Z-Ram ", totalMem.sysMemZRamWeight, + totalPss = printMemoryCategory(pw, " ", "Z-Ram ", totalMem.sysMemZRamWeight, totalMem.totalTime, totalPss, totalMem.sysMemSamples); pw.print(" TOTAL : "); printSizeValue(pw, totalPss); @@ -2746,6 +2748,7 @@ public final class ProcessStats implements Parcelable { pw.print("total"); dumpAdjTimesCheckin(pw, ",", mMemFactorDurations, mMemFactor, mStartTime, now); + pw.println(); if (mSysMemUsageTable != null) { pw.print("sysmemusage"); for (int i=0; i mStats; @@ -106,6 +112,9 @@ public class ResolverActivity extends Activity implements AdapterView.OnItemClic private final PackageMonitor mPackageMonitor = new PackageMonitor() { @Override public void onSomePackagesChanged() { mAdapter.handlePackagesChanged(); + if (mProfileView != null) { + bindProfileView(); + } } }; @@ -197,6 +206,11 @@ public class ResolverActivity extends Activity implements AdapterView.OnItemClic List rList, boolean alwaysUseOption) { setTheme(R.style.Theme_DeviceDefault_Resolver); super.onCreate(savedInstanceState); + + // Determine whether we should show that intent is forwarded + // from managed profile to owner or other way around. + setProfileSwitchMessageId(intent.getContentUserHint()); + try { mLaunchedFromUid = ActivityManagerNative.getDefault().getLaunchedFromUid( getActivityToken()); @@ -208,7 +222,6 @@ public class ResolverActivity extends Activity implements AdapterView.OnItemClic final long sinceTime = System.currentTimeMillis() - USAGE_STATS_PERIOD; mStats = mUsm.queryAndAggregateUsageStats(sinceTime, System.currentTimeMillis()); - Log.d(TAG, "sinceTime=" + sinceTime); mMaxColumns = getResources().getInteger(R.integer.config_maxResolverActivityColumns); @@ -219,7 +232,8 @@ public class ResolverActivity extends Activity implements AdapterView.OnItemClic mIconDpi = am.getLauncherLargeIconDensity(); mIconSize = am.getLauncherLargeIconSize(); - mAdapter = new ResolveListAdapter(this, intent, initialIntents, rList, + mIntent = new Intent(intent); + mAdapter = new ResolveListAdapter(this, initialIntents, rList, mLaunchedFromUid, alwaysUseOption); final int layoutId; @@ -234,12 +248,14 @@ public class ResolverActivity extends Activity implements AdapterView.OnItemClic } mAlwaysUseOption = alwaysUseOption; - int count = mAdapter.mList.size(); if (mLaunchedFromUid < 0 || UserHandle.isIsolated(mLaunchedFromUid)) { // Gulp! finish(); return; - } else if (count > 1) { + } + + int count = mAdapter.mList.size(); + if (count > 1 || (count == 1 && mAdapter.getOtherProfile() != null)) { setContentView(layoutId); mListView = (ListView) findViewById(R.id.resolver_list); mListView.setAdapter(mAdapter); @@ -269,12 +285,15 @@ public class ResolverActivity extends Activity implements AdapterView.OnItemClic mListView = (ListView) findViewById(R.id.resolver_list); mListView.setVisibility(View.GONE); } + // Prevent the Resolver window from becoming the top fullscreen window and thus from taking + // control of the system bars. + getWindow().clearFlags(FLAG_LAYOUT_IN_SCREEN|FLAG_LAYOUT_INSET_DECOR); final ResolverDrawerLayout rdl = (ResolverDrawerLayout) findViewById(R.id.contentPanel); if (rdl != null) { - rdl.setOnClickOutsideListener(new View.OnClickListener() { + rdl.setOnDismissedListener(new ResolverDrawerLayout.OnDismissedListener() { @Override - public void onClick(View v) { + public void onDismissed() { finish(); } }); @@ -312,6 +331,56 @@ public class ResolverActivity extends Activity implements AdapterView.OnItemClic setAlwaysButtonEnabled(true, mAdapter.getFilteredPosition(), false); mOnceButton.setEnabled(true); } + + mProfileView = findViewById(R.id.profile_button); + if (mProfileView != null) { + mProfileView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + final DisplayResolveInfo dri = mAdapter.getOtherProfile(); + if (dri == null) { + return; + } + + final Intent intent = intentForDisplayResolveInfo(dri); + onIntentSelected(dri.ri, intent, false); + finish(); + } + }); + bindProfileView(); + } + } + + void bindProfileView() { + final DisplayResolveInfo dri = mAdapter.getOtherProfile(); + if (dri != null) { + mProfileView.setVisibility(View.VISIBLE); + final ImageView icon = (ImageView) mProfileView.findViewById(R.id.icon); + final TextView text = (TextView) mProfileView.findViewById(R.id.text1); + if (dri.displayIcon == null) { + new LoadIconTask().execute(dri); + } + icon.setImageDrawable(dri.displayIcon); + text.setText(dri.displayLabel); + } else { + mProfileView.setVisibility(View.GONE); + } + } + + private void setProfileSwitchMessageId(int contentUserHint) { + if (contentUserHint != UserHandle.USER_CURRENT && + contentUserHint != UserHandle.myUserId()) { + UserManager userManager = (UserManager) getSystemService(Context.USER_SERVICE); + UserInfo originUserInfo = userManager.getUserInfo(contentUserHint); + boolean originIsManaged = originUserInfo != null ? originUserInfo.isManagedProfile() + : false; + boolean targetIsManaged = userManager.isManagedProfile(); + if (originIsManaged && !targetIsManaged) { + mProfileSwitchMessageId = com.android.internal.R.string.forward_intent_to_owner; + } else if (!originIsManaged && targetIsManaged) { + mProfileSwitchMessageId = com.android.internal.R.string.forward_intent_to_work; + } + } } /** @@ -388,6 +457,9 @@ public class ResolverActivity extends Activity implements AdapterView.OnItemClic mRegistered = true; } mAdapter.handlePackagesChanged(); + if (mProfileView != null) { + bindProfileView(); + } } @Override @@ -523,7 +595,7 @@ public class ResolverActivity extends Activity implements AdapterView.OnItemClic /** * Replace me in subclasses! */ - public Intent getReplacementIntent(String packageName, Intent defIntent) { + public Intent getReplacementIntent(ActivityInfo aInfo, Intent defIntent) { return defIntent; } @@ -636,12 +708,19 @@ public class ResolverActivity extends Activity implements AdapterView.OnItemClic } public void safelyStartActivity(Intent intent) { + // If needed, show that intent is forwarded + // from managed profile to owner or other way around. + if (mProfileSwitchMessageId != -1) { + Toast.makeText(this, getString(mProfileSwitchMessageId), Toast.LENGTH_LONG).show(); + } if (!mSafeForwardingMode) { startActivity(intent); + onActivityStarted(intent); return; } try { startActivityAsCaller(intent, null, UserHandle.USER_NULL); + onActivityStarted(intent); } catch (RuntimeException e) { String launchedFromPackage; try { @@ -656,6 +735,10 @@ public class ResolverActivity extends Activity implements AdapterView.OnItemClic } } + public void onActivityStarted(Intent intent) { + // Do nothing + } + void showAppDetails(ResolveInfo ri) { Intent in = new Intent().setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) .setData(Uri.fromParts("package", ri.activityInfo.packageName, null)) @@ -663,6 +746,17 @@ public class ResolverActivity extends Activity implements AdapterView.OnItemClic startActivity(in); } + Intent intentForDisplayResolveInfo(DisplayResolveInfo dri) { + Intent intent = new Intent(dri.origIntent != null ? dri.origIntent : + getReplacementIntent(dri.ri.activityInfo, mIntent)); + intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT + |Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP); + ActivityInfo ai = dri.ri.activityInfo; + intent.setComponent(new ComponentName( + ai.applicationInfo.packageName, ai.name)); + return intent; + } + private final class DisplayResolveInfo { ResolveInfo ri; CharSequence displayLabel; @@ -683,7 +777,7 @@ public class ResolverActivity extends Activity implements AdapterView.OnItemClic private final Intent[] mInitialIntents; private final List mBaseResolveList; private ResolveInfo mLastChosen; - private final Intent mIntent; + private DisplayResolveInfo mOtherProfile; private final int mLaunchedFromUid; private final LayoutInflater mInflater; @@ -693,10 +787,8 @@ public class ResolverActivity extends Activity implements AdapterView.OnItemClic private int mLastChosenPosition = -1; private boolean mFilterLastUsed; - public ResolveListAdapter(Context context, Intent intent, - Intent[] initialIntents, List rList, int launchedFromUid, - boolean filterLastUsed) { - mIntent = new Intent(intent); + public ResolveListAdapter(Context context, Intent[] initialIntents, + List rList, int launchedFromUid, boolean filterLastUsed) { mInitialIntents = initialIntents; mBaseResolveList = rList; mLaunchedFromUid = launchedFromUid; @@ -707,11 +799,9 @@ public class ResolverActivity extends Activity implements AdapterView.OnItemClic } public void handlePackagesChanged() { - final int oldItemCount = getCount(); rebuildList(); notifyDataSetChanged(); - final int newItemCount = getCount(); - if (newItemCount == 0) { + if (getCount() == 0) { // We no longer have any items... just finish the activity. finish(); } @@ -725,6 +815,10 @@ public class ResolverActivity extends Activity implements AdapterView.OnItemClic return null; } + public DisplayResolveInfo getOtherProfile() { + return mOtherProfile; + } + public int getFilteredPosition() { if (mFilterLastUsed && mLastChosenPosition >= 0) { return mLastChosenPosition; @@ -801,7 +895,7 @@ public class ResolverActivity extends Activity implements AdapterView.OnItemClic } if (N > 1) { Comparator rComparator = - new ResolverComparator(ResolverActivity.this); + new ResolverComparator(ResolverActivity.this, mIntent); Collections.sort(currentResolveList, rComparator); } // First put the initial items at the top. @@ -819,6 +913,11 @@ public class ResolverActivity extends Activity implements AdapterView.OnItemClic } ResolveInfo ri = new ResolveInfo(); ri.activityInfo = ai; + UserManager userManager = + (UserManager) getSystemService(Context.USER_SERVICE); + if (userManager.isManagedProfile()) { + ri.noResourceId = true; + } if (ii instanceof LabeledIntent) { LabeledIntent li = (LabeledIntent)ii; ri.resolvePackageName = li.getSourcePackage(); @@ -826,7 +925,7 @@ public class ResolverActivity extends Activity implements AdapterView.OnItemClic ri.nonLocalizedLabel = li.getNonLocalizedLabel(); ri.icon = li.getIconResource(); } - mList.add(new DisplayResolveInfo(ri, + addResolveInfo(new DisplayResolveInfo(ri, ri.loadLabel(getPackageManager()), null, ii)); } } @@ -857,6 +956,13 @@ public class ResolverActivity extends Activity implements AdapterView.OnItemClic // Process last group processGroup(currentResolveList, start, (N-1), r0, r0Label); } + + // Layout doesn't handle both profile button and last chosen + // so disable last chosen if profile button is present. + if (mOtherProfile != null && mLastChosenPosition >= 0) { + mLastChosenPosition = -1; + mFilterLastUsed = false; + } } private void processGroup(List rList, int start, int end, ResolveInfo ro, @@ -864,14 +970,9 @@ public class ResolverActivity extends Activity implements AdapterView.OnItemClic // Process labels from start to i int num = end - start+1; if (num == 1) { - if (mLastChosen != null - && mLastChosen.activityInfo.packageName.equals( - ro.activityInfo.packageName) - && mLastChosen.activityInfo.name.equals(ro.activityInfo.name)) { - mLastChosenPosition = mList.size(); - } // No duplicate labels. Use label for entry at start - mList.add(new DisplayResolveInfo(ro, roLabel, null, null)); + addResolveInfo(new DisplayResolveInfo(ro, roLabel, null, null)); + updateLastChosenPosition(ro); } else { mShowExtended = true; boolean usePkg = false; @@ -899,40 +1000,45 @@ public class ResolverActivity extends Activity implements AdapterView.OnItemClic } for (int k = start; k <= end; k++) { ResolveInfo add = rList.get(k); - if (mLastChosen != null - && mLastChosen.activityInfo.packageName.equals( - add.activityInfo.packageName) - && mLastChosen.activityInfo.name.equals(add.activityInfo.name)) { - mLastChosenPosition = mList.size(); - } if (usePkg) { // Use application name for all entries from start to end-1 - mList.add(new DisplayResolveInfo(add, roLabel, + addResolveInfo(new DisplayResolveInfo(add, roLabel, add.activityInfo.packageName, null)); } else { // Use package name for all entries from start to end-1 - mList.add(new DisplayResolveInfo(add, roLabel, + addResolveInfo(new DisplayResolveInfo(add, roLabel, add.activityInfo.applicationInfo.loadLabel(mPm), null)); } + updateLastChosenPosition(add); } } } + private void updateLastChosenPosition(ResolveInfo info) { + if (mLastChosen != null + && mLastChosen.activityInfo.packageName.equals(info.activityInfo.packageName) + && mLastChosen.activityInfo.name.equals(info.activityInfo.name)) { + mLastChosenPosition = mList.size() - 1; + } + } + + private void addResolveInfo(DisplayResolveInfo dri) { + if (dri.ri.targetUserId != UserHandle.USER_CURRENT && mOtherProfile == null) { + // So far we only support a single other profile at a time. + // The first one we see gets special treatment. + mOtherProfile = dri; + } else { + mList.add(dri); + } + } + public ResolveInfo resolveInfoForPosition(int position, boolean filtered) { return (filtered ? getItem(position) : mList.get(position)).ri; } public Intent intentForPosition(int position, boolean filtered) { DisplayResolveInfo dri = filtered ? getItem(position) : mList.get(position); - - Intent intent = new Intent(dri.origIntent != null ? dri.origIntent : - getReplacementIntent(dri.ri.activityInfo.packageName, mIntent)); - intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT - |Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP); - ActivityInfo ai = dri.ri.activityInfo; - intent.setComponent(new ComponentName( - ai.applicationInfo.packageName, ai.name)); - return intent; + return intentForDisplayResolveInfo(dri); } public int getCount() { @@ -1023,6 +1129,9 @@ public class ResolverActivity extends Activity implements AdapterView.OnItemClic @Override protected void onPostExecute(DisplayResolveInfo info) { + if (mProfileView != null && mAdapter.getOtherProfile() == info) { + bindProfileView(); + } mAdapter.notifyDataSetChanged(); } } @@ -1049,11 +1158,20 @@ public class ResolverActivity extends Activity implements AdapterView.OnItemClic } } + static final boolean isSpecificUriMatch(int match) { + match = match&IntentFilter.MATCH_CATEGORY_MASK; + return match >= IntentFilter.MATCH_CATEGORY_HOST + && match <= IntentFilter.MATCH_CATEGORY_PATH; + } + class ResolverComparator implements Comparator { private final Collator mCollator; + private final boolean mHttp; - public ResolverComparator(Context context) { + public ResolverComparator(Context context, Intent intent) { mCollator = Collator.getInstance(context.getResources().getConfiguration().locale); + String scheme = intent.getScheme(); + mHttp = "http".equals(scheme) || "https".equals(scheme); } @Override @@ -1063,6 +1181,17 @@ public class ResolverActivity extends Activity implements AdapterView.OnItemClic return 1; } + if (mHttp) { + // Special case: we want filters that match URI paths/schemes to be + // ordered before others. This is for the case when opening URIs, + // to make native apps go above browsers. + final boolean lhsSpecific = isSpecificUriMatch(lhs.match); + final boolean rhsSpecific = isSpecificUriMatch(rhs.match); + if (lhsSpecific != rhsSpecific) { + return lhsSpecific ? -1 : 1; + } + } + if (mStats != null) { final long timeDiff = getPackageTimeSpent(rhs.activityInfo.packageName) - @@ -1093,4 +1222,3 @@ public class ResolverActivity extends Activity implements AdapterView.OnItemClic } } } - diff --git a/services/core/java/com/android/server/ShutdownActivity.java b/core/java/com/android/internal/app/ShutdownActivity.java similarity index 98% rename from services/core/java/com/android/server/ShutdownActivity.java rename to core/java/com/android/internal/app/ShutdownActivity.java index 56172ed05f1d8a43d7cbf016a95c516771a0dce5..97521cf68dd4552be7307f0a974844149b153e13 100644 --- a/services/core/java/com/android/server/ShutdownActivity.java +++ b/core/java/com/android/internal/app/ShutdownActivity.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.server; +package com.android.internal.app; import android.app.Activity; import android.content.Context; diff --git a/core/java/com/android/internal/app/ToolbarActionBar.java b/core/java/com/android/internal/app/ToolbarActionBar.java index 4410f2544624bb06726a8dd97bf8a014c10a1b31..34b9dcb9366f75cc2d0237296ae87a11c0c29734 100644 --- a/core/java/com/android/internal/app/ToolbarActionBar.java +++ b/core/java/com/android/internal/app/ToolbarActionBar.java @@ -40,7 +40,6 @@ import com.android.internal.widget.ToolbarWidgetWrapper; import java.util.ArrayList; public class ToolbarActionBar extends ActionBar { - private Toolbar mToolbar; private DecorToolbar mDecorToolbar; private boolean mToolbarMenuPrepared; private Window.Callback mWindowCallback; @@ -66,7 +65,6 @@ public class ToolbarActionBar extends ActionBar { }; public ToolbarActionBar(Toolbar toolbar, CharSequence title, Window.Callback windowCallback) { - mToolbar = toolbar; mDecorToolbar = new ToolbarWidgetWrapper(toolbar, false); mWindowCallback = new ToolbarCallbackWrapper(windowCallback); mDecorToolbar.setWindowCallback(mWindowCallback); @@ -91,8 +89,8 @@ public class ToolbarActionBar extends ActionBar { @Override public void setCustomView(int resId) { - final LayoutInflater inflater = LayoutInflater.from(mToolbar.getContext()); - setCustomView(inflater.inflate(resId, mToolbar, false)); + final LayoutInflater inflater = LayoutInflater.from(mDecorToolbar.getContext()); + setCustomView(inflater.inflate(resId, mDecorToolbar.getViewGroup(), false)); } @Override @@ -132,17 +130,17 @@ public class ToolbarActionBar extends ActionBar { @Override public void setElevation(float elevation) { - mToolbar.setElevation(elevation); + mDecorToolbar.getViewGroup().setElevation(elevation); } @Override public float getElevation() { - return mToolbar.getElevation(); + return mDecorToolbar.getViewGroup().getElevation(); } @Override public Context getThemedContext() { - return mToolbar.getContext(); + return mDecorToolbar.getContext(); } @Override @@ -152,12 +150,12 @@ public class ToolbarActionBar extends ActionBar { @Override public void setHomeAsUpIndicator(Drawable indicator) { - mToolbar.setNavigationIcon(indicator); + mDecorToolbar.setNavigationIcon(indicator); } @Override public void setHomeAsUpIndicator(int resId) { - mToolbar.setNavigationIcon(resId); + mDecorToolbar.setNavigationIcon(resId); } @Override @@ -280,7 +278,7 @@ public class ToolbarActionBar extends ActionBar { @Override public void setBackgroundDrawable(@Nullable Drawable d) { - mToolbar.setBackground(d); + mDecorToolbar.setBackgroundDrawable(d); } @Override @@ -290,12 +288,12 @@ public class ToolbarActionBar extends ActionBar { @Override public CharSequence getTitle() { - return mToolbar.getTitle(); + return mDecorToolbar.getTitle(); } @Override public CharSequence getSubtitle() { - return mToolbar.getSubtitle(); + return mDecorToolbar.getSubtitle(); } @Override @@ -389,44 +387,44 @@ public class ToolbarActionBar extends ActionBar { @Override public int getHeight() { - return mToolbar.getHeight(); + return mDecorToolbar.getHeight(); } @Override public void show() { // TODO: Consider a better transition for this. // Right now use no automatic transition so that the app can supply one if desired. - mToolbar.setVisibility(View.VISIBLE); + mDecorToolbar.setVisibility(View.VISIBLE); } @Override public void hide() { // TODO: Consider a better transition for this. // Right now use no automatic transition so that the app can supply one if desired. - mToolbar.setVisibility(View.GONE); + mDecorToolbar.setVisibility(View.GONE); } @Override public boolean isShowing() { - return mToolbar.getVisibility() == View.VISIBLE; + return mDecorToolbar.getVisibility() == View.VISIBLE; } @Override public boolean openOptionsMenu() { - return mToolbar.showOverflowMenu(); + return mDecorToolbar.showOverflowMenu(); } @Override public boolean invalidateOptionsMenu() { - mToolbar.removeCallbacks(mMenuInvalidator); - mToolbar.postOnAnimation(mMenuInvalidator); + mDecorToolbar.getViewGroup().removeCallbacks(mMenuInvalidator); + mDecorToolbar.getViewGroup().postOnAnimation(mMenuInvalidator); return true; } @Override public boolean collapseActionView() { - if (mToolbar.hasExpandedActionView()) { - mToolbar.collapseActionView(); + if (mDecorToolbar.hasExpandedActionView()) { + mDecorToolbar.collapseActionView(); return true; } return false; @@ -434,10 +432,10 @@ public class ToolbarActionBar extends ActionBar { void populateOptionsMenu() { if (!mMenuCallbackSet) { - mToolbar.setMenuCallbacks(new ActionMenuPresenterCallback(), new MenuBuilderCallback()); + mDecorToolbar.setMenuCallbacks(new ActionMenuPresenterCallback(), new MenuBuilderCallback()); mMenuCallbackSet = true; } - final Menu menu = mToolbar.getMenu(); + final Menu menu = mDecorToolbar.getMenu(); final MenuBuilder mb = menu instanceof MenuBuilder ? (MenuBuilder) menu : null; if (mb != null) { mb.stopDispatchingItemsChanged(); @@ -518,7 +516,7 @@ public class ToolbarActionBar extends ActionBar { } mClosingActionMenu = true; - mToolbar.dismissPopupMenus(); + mDecorToolbar.dismissPopupMenus(); if (mWindowCallback != null) { mWindowCallback.onPanelClosed(Window.FEATURE_ACTION_BAR, menu); } @@ -536,7 +534,7 @@ public class ToolbarActionBar extends ActionBar { @Override public void onMenuModeChange(MenuBuilder menu) { if (mWindowCallback != null) { - if (mToolbar.isOverflowMenuShowing()) { + if (mDecorToolbar.isOverflowMenuShowing()) { mWindowCallback.onPanelClosed(Window.FEATURE_ACTION_BAR, menu); } else if (mWindowCallback.onPreparePanel(Window.FEATURE_OPTIONS_PANEL, null, menu)) { diff --git a/core/java/com/android/internal/app/WindowDecorActionBar.java b/core/java/com/android/internal/app/WindowDecorActionBar.java index 2377c22b488dc8adc690edf1c5ea88557b5e5be3..061b535e220dbf819d2908e71d2a64b22d401f6f 100644 --- a/core/java/com/android/internal/app/WindowDecorActionBar.java +++ b/core/java/com/android/internal/app/WindowDecorActionBar.java @@ -496,7 +496,7 @@ public class WindowDecorActionBar extends ActionBar implements mOverlayLayout.setHideOnContentScrollEnabled(false); mContextView.killMode(); - ActionModeImpl mode = new ActionModeImpl(callback); + ActionModeImpl mode = new ActionModeImpl(mContextView.getContext(), callback); if (mode.dispatchOnCreate()) { mode.invalidate(); mContextView.initForMode(mode); @@ -876,7 +876,7 @@ public class WindowDecorActionBar extends ActionBar implements currentTheme.resolveAttribute(com.android.internal.R.attr.actionBarWidgetTheme, outValue, true); final int targetThemeRes = outValue.resourceId; - + if (targetThemeRes != 0 && mContext.getThemeResId() != targetThemeRes) { mThemedContext = new ContextThemeWrapper(mContext, targetThemeRes); } else { @@ -885,7 +885,7 @@ public class WindowDecorActionBar extends ActionBar implements } return mThemedContext; } - + @Override public boolean isTitleTruncated() { return mDecorToolbar != null && mDecorToolbar.isTitleTruncated(); @@ -933,23 +933,26 @@ public class WindowDecorActionBar extends ActionBar implements } /** - * @hide + * @hide */ public class ActionModeImpl extends ActionMode implements MenuBuilder.Callback { + private final Context mActionModeContext; + private final MenuBuilder mMenu; + private ActionMode.Callback mCallback; - private MenuBuilder mMenu; private WeakReference mCustomView; - - public ActionModeImpl(ActionMode.Callback callback) { + + public ActionModeImpl(Context context, ActionMode.Callback callback) { + mActionModeContext = context; mCallback = callback; - mMenu = new MenuBuilder(getThemedContext()) + mMenu = new MenuBuilder(context) .setDefaultShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); mMenu.setCallback(this); } @Override public MenuInflater getMenuInflater() { - return new MenuInflater(getThemedContext()); + return new MenuInflater(mActionModeContext); } @Override @@ -990,6 +993,13 @@ public class WindowDecorActionBar extends ActionBar implements @Override public void invalidate() { + if (mActionMode != this) { + // Not the active action mode - no-op. It's possible we are + // currently deferring onDestroy, so the app doesn't yet know we + // are going away and is trying to use us. That's also a no-op. + return; + } + mMenu.stopDispatchingItemsChanged(); try { mCallback.onPrepareActionMode(this, mMenu); @@ -1042,7 +1052,7 @@ public class WindowDecorActionBar extends ActionBar implements public CharSequence getSubtitle() { return mContextView.getSubtitle(); } - + @Override public void setTitleOptionalHint(boolean titleOptional) { super.setTitleOptionalHint(titleOptional); diff --git a/core/java/com/android/internal/backup/LocalTransport.java b/core/java/com/android/internal/backup/LocalTransport.java index d8dffe099c9b4aa093abcb2899dfa7d75924bc86..044383e9f2b644a74bce175b2fd43fe691c692f4 100644 --- a/core/java/com/android/internal/backup/LocalTransport.java +++ b/core/java/com/android/internal/backup/LocalTransport.java @@ -35,6 +35,8 @@ import android.util.Log; import com.android.org.bouncycastle.util.encoders.Base64; +import libcore.io.IoUtils; + import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; @@ -559,11 +561,7 @@ public class LocalTransport extends BackupTransport { // Full restore handling private void resetFullRestoreState() { - try { - mCurFullRestoreStream.close(); - } catch (IOException e) { - Log.w(TAG, "Unable to close full restore input stream"); - } + IoUtils.closeQuietly(mCurFullRestoreStream); mCurFullRestoreStream = null; mFullRestoreSocketStream = null; mFullRestoreBuffer = null; diff --git a/core/java/com/android/internal/content/PackageMonitor.java b/core/java/com/android/internal/content/PackageMonitor.java index 9df8ad5e6821d05edb8dfa470b45ef343e4bd53a..eff44bd1c87fd8a6f0e8b19296ff2a44c35de106 100644 --- a/core/java/com/android/internal/content/PackageMonitor.java +++ b/core/java/com/android/internal/content/PackageMonitor.java @@ -24,6 +24,7 @@ import android.net.Uri; import android.os.Handler; import android.os.Looper; import android.os.UserHandle; +import android.util.Slog; import com.android.internal.os.BackgroundThread; import java.util.HashSet; @@ -279,8 +280,8 @@ public abstract class PackageMonitor extends android.content.BroadcastReceiver { mChangeUserId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, UserHandle.USER_NULL); if (mChangeUserId == UserHandle.USER_NULL) { - throw new IllegalArgumentException( - "Intent broadcast does not contain user handle: " + intent); + Slog.w("PackageMonitor", "Intent broadcast does not contain user handle: " + intent); + return; } onBeginPackageChanges(); diff --git a/core/java/com/android/internal/content/ReferrerIntent.aidl b/core/java/com/android/internal/content/ReferrerIntent.aidl new file mode 100644 index 0000000000000000000000000000000000000000..7cf6774b631d9eb32bc6a78a079123978604c25a --- /dev/null +++ b/core/java/com/android/internal/content/ReferrerIntent.aidl @@ -0,0 +1,19 @@ +/* + * Copyright 2014, 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.content; + +parcelable ReferrerIntent; diff --git a/core/java/com/android/internal/content/ReferrerIntent.java b/core/java/com/android/internal/content/ReferrerIntent.java new file mode 100644 index 0000000000000000000000000000000000000000..8d9a1cf9eee54775df8c7b1f72b2eb054b54d762 --- /dev/null +++ b/core/java/com/android/internal/content/ReferrerIntent.java @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2014 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.content; + +import android.content.Intent; +import android.os.Parcel; + +/** + * Subclass of Intent that also contains referrer (as a package name) information. + */ +public class ReferrerIntent extends Intent { + public final String mReferrer; + + public ReferrerIntent(Intent baseIntent, String referrer) { + super(baseIntent); + mReferrer = referrer; + } + + public void writeToParcel(Parcel dest, int parcelableFlags) { + super.writeToParcel(dest, parcelableFlags); + dest.writeString(mReferrer); + } + + ReferrerIntent(Parcel in) { + readFromParcel(in); + mReferrer = in.readString(); + } + + public static final Creator CREATOR = new Creator() { + public ReferrerIntent createFromParcel(Parcel source) { + return new ReferrerIntent(source); + } + public ReferrerIntent[] newArray(int size) { + return new ReferrerIntent[size]; + } + }; +} diff --git a/core/java/com/android/internal/http/multipart/FilePart.java b/core/java/com/android/internal/http/multipart/FilePart.java index bfcda0074f0f7b07d00c680f89b9775c487b9b42..45e4be68dd1639b6752b9f5aff314c9774dbbb00 100644 --- a/core/java/com/android/internal/http/multipart/FilePart.java +++ b/core/java/com/android/internal/http/multipart/FilePart.java @@ -51,9 +51,14 @@ import org.apache.commons.logging.LogFactory; * @author Mike Bowler * @author Oleg Kalnichevski * - * @since 2.0 + * @since 2.0 * + * @deprecated Please use {@link java.net.URLConnection} and friends instead. + * The Apache HTTP client is no longer maintained and may be removed in a future + * release. Please visit this webpage + * for further details. */ +@Deprecated public class FilePart extends PartBase { /** Default content encoding of file attachments. */ diff --git a/core/java/com/android/internal/http/multipart/MultipartEntity.java b/core/java/com/android/internal/http/multipart/MultipartEntity.java index 2c5e7f64e33e1e1fe4d3345705572644b21b0308..53192517445393674533dc50026ece84ccc5b59d 100644 --- a/core/java/com/android/internal/http/multipart/MultipartEntity.java +++ b/core/java/com/android/internal/http/multipart/MultipartEntity.java @@ -80,7 +80,13 @@ import org.apache.commons.logging.LogFactory; * * * @since 3.0 + * + * @deprecated Please use {@link java.net.URLConnection} and friends instead. + * The Apache HTTP client is no longer maintained and may be removed in a future + * release. Please visit this webpage + * for further details. */ +@Deprecated public class MultipartEntity extends AbstractHttpEntity { private static final Log log = LogFactory.getLog(MultipartEntity.class); diff --git a/core/java/com/android/internal/http/multipart/Part.java b/core/java/com/android/internal/http/multipart/Part.java index cb1b5465389f9f8ef0267ea5689db1573fcadb81..1d66dc674331ee89c2f84a93fe0be7c92b859edf 100644 --- a/core/java/com/android/internal/http/multipart/Part.java +++ b/core/java/com/android/internal/http/multipart/Part.java @@ -48,7 +48,13 @@ import org.apache.commons.logging.LogFactory; * @author Oleg Kalnichevski * * @since 2.0 + * + * @deprecated Please use {@link java.net.URLConnection} and friends instead. + * The Apache HTTP client is no longer maintained and may be removed in a future + * release. Please visit this webpage + * for further details. */ +@Deprecated public abstract class Part { /** Log object for this class. */ diff --git a/core/java/com/android/internal/http/multipart/StringPart.java b/core/java/com/android/internal/http/multipart/StringPart.java index c98257e27041b449adcb1116946cfd2be0b8330e..73d0f908ac2ab035c454ade9cfb335943ff43773 100644 --- a/core/java/com/android/internal/http/multipart/StringPart.java +++ b/core/java/com/android/internal/http/multipart/StringPart.java @@ -46,7 +46,13 @@ import org.apache.commons.logging.LogFactory; * @author Oleg Kalnichevski * * @since 2.0 + * + * @deprecated Please use {@link java.net.URLConnection} and friends instead. + * The Apache HTTP client is no longer maintained and may be removed in a future + * release. Please visit this webpage + * for further details. */ +@Deprecated public class StringPart extends PartBase { /** Log object for this class. */ diff --git a/core/java/com/android/internal/inputmethod/InputMethodUtils.java b/core/java/com/android/internal/inputmethod/InputMethodUtils.java index ac915d190d2477df3a760bb8c04f6d73e3b2ecb1..183527cbce92420586deada117b66756272c735a 100644 --- a/core/java/com/android/internal/inputmethod/InputMethodUtils.java +++ b/core/java/com/android/internal/inputmethod/InputMethodUtils.java @@ -16,6 +16,8 @@ package com.android.internal.inputmethod; +import android.annotation.NonNull; +import android.annotation.Nullable; import android.app.AppOpsManager; import android.content.ContentResolver; import android.content.Context; @@ -34,7 +36,9 @@ import android.view.textservice.SpellCheckerInfo; import android.view.textservice.TextServicesManager; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; +import java.util.LinkedHashSet; import java.util.List; import java.util.Locale; @@ -115,8 +119,8 @@ public class InputMethodUtils { } /** - * @deprecated Use {@link Locale} returned from - * {@link #getFallbackLocaleForDefaultIme(ArrayList)} instead. + * @deprecated Use {@link #isSystemImeThatHasSubtypeOf(InputMethodInfo, Context, boolean, + * Locale, boolean, String)} instead. */ @Deprecated public static boolean isSystemImeThatHasEnglishKeyboardSubtype(InputMethodInfo imi) { @@ -126,25 +130,60 @@ public class InputMethodUtils { return containsSubtypeOf(imi, ENGLISH_LOCALE.getLanguage(), SUBTYPE_MODE_KEYBOARD); } + private static boolean isSystemImeThatHasSubtypeOf(final InputMethodInfo imi, + final Context context, final boolean checkDefaultAttribute, + @Nullable final Locale requiredLocale, final boolean checkCountry, + final String requiredSubtypeMode) { + if (!isSystemIme(imi)) { + return false; + } + if (checkDefaultAttribute && !imi.isDefault(context)) { + return false; + } + if (!containsSubtypeOf(imi, requiredLocale, checkCountry, requiredSubtypeMode)) { + return false; + } + return true; + } + + @Nullable public static Locale getFallbackLocaleForDefaultIme(final ArrayList imis, final Context context) { + // At first, find the fallback locale from the IMEs that are declared as "default" in the + // current locale. Note that IME developers can declare an IME as "default" only for + // some particular locales but "not default" for other locales. for (final Locale fallbackLocale : SEARCH_ORDER_OF_FALLBACK_LOCALES) { for (int i = 0; i < imis.size(); ++i) { - final InputMethodInfo imi = imis.get(i); - if (isSystemIme(imi) && imi.isDefault(context) && - containsSubtypeOf(imi, fallbackLocale, false /* ignoreCountry */, - SUBTYPE_MODE_KEYBOARD)) { + if (isSystemImeThatHasSubtypeOf(imis.get(i), context, + true /* checkDefaultAttribute */, fallbackLocale, + true /* checkCountry */, SUBTYPE_MODE_KEYBOARD)) { + return fallbackLocale; + } + } + } + // If no fallback locale is found in the above condition, find fallback locales regardless + // of the "default" attribute as a last resort. + for (final Locale fallbackLocale : SEARCH_ORDER_OF_FALLBACK_LOCALES) { + for (int i = 0; i < imis.size(); ++i) { + if (isSystemImeThatHasSubtypeOf(imis.get(i), context, + false /* checkDefaultAttribute */, fallbackLocale, + true /* checkCountry */, SUBTYPE_MODE_KEYBOARD)) { return fallbackLocale; } } } + Slog.w(TAG, "Found no fallback locale. imis=" + Arrays.toString(imis.toArray())); return null; } - private static boolean isSystemAuxilialyImeThatHasAutomaticSubtype(InputMethodInfo imi) { + private static boolean isSystemAuxilialyImeThatHasAutomaticSubtype(final InputMethodInfo imi, + final Context context, final boolean checkDefaultAttribute) { if (!isSystemIme(imi)) { return false; } + if (checkDefaultAttribute && !imi.isDefault(context)) { + return false; + } if (!imi.isAuxiliaryIme()) { return false; } @@ -166,98 +205,184 @@ public class InputMethodUtils { } } - public static ArrayList getDefaultEnabledImes( - Context context, boolean isSystemReady, ArrayList imis) { - // OK to store null in fallbackLocale because isImeThatHasSubtypeOf() is null-tolerant. - final Locale fallbackLocale = getFallbackLocaleForDefaultIme(imis, context); + private static final class InputMethodListBuilder { + // Note: We use LinkedHashSet instead of android.util.ArraySet because the enumeration + // order can have non-trivial effect in the call sites. + @NonNull + private final LinkedHashSet mInputMethodSet = new LinkedHashSet<>(); - if (!isSystemReady) { - final ArrayList retval = new ArrayList<>(); + public InputMethodListBuilder fillImes(final ArrayList imis, + final Context context, final boolean checkDefaultAttribute, + @Nullable final Locale locale, final boolean checkCountry, + final String requiredSubtypeMode) { for (int i = 0; i < imis.size(); ++i) { final InputMethodInfo imi = imis.get(i); - // TODO: We should check isAsciiCapable instead of relying on fallbackLocale. - if (isSystemIme(imi) && imi.isDefault(context) && - isImeThatHasSubtypeOf(imi, fallbackLocale, false /* ignoreCountry */, - SUBTYPE_MODE_KEYBOARD)) { - retval.add(imi); + if (isSystemImeThatHasSubtypeOf(imi, context, checkDefaultAttribute, locale, + checkCountry, requiredSubtypeMode)) { + mInputMethodSet.add(imi); } } - return retval; + return this; } - // OK to store null in fallbackLocale because isImeThatHasSubtypeOf() is null-tolerant. - final Locale systemLocale = getSystemLocaleFromContext(context); - // TODO: Use LinkedHashSet to simplify the code. - final ArrayList retval = new ArrayList<>(); - boolean systemLocaleKeyboardImeFound = false; - - // First, try to find IMEs with taking the system locale country into consideration. - for (int i = 0; i < imis.size(); ++i) { - final InputMethodInfo imi = imis.get(i); - if (!isSystemIme(imi) || !imi.isDefault(context)) { - continue; - } - final boolean isSystemLocaleKeyboardIme = isImeThatHasSubtypeOf(imi, systemLocale, - false /* ignoreCountry */, SUBTYPE_MODE_KEYBOARD); - // TODO: We should check isAsciiCapable instead of relying on fallbackLocale. - // TODO: Use LinkedHashSet to simplify the code. - if (isSystemLocaleKeyboardIme || - isImeThatHasSubtypeOf(imi, fallbackLocale, false /* ignoreCountry */, - SUBTYPE_MODE_ANY)) { - retval.add(imi); + // TODO: The behavior of InputMethodSubtype#overridesImplicitlyEnabledSubtype() should be + // documented more clearly. + public InputMethodListBuilder fillAuxiliaryImes(final ArrayList imis, + final Context context) { + // If one or more auxiliary input methods are available, OK to stop populating the list. + for (final InputMethodInfo imi : mInputMethodSet) { + if (imi.isAuxiliaryIme()) { + return this; + } } - systemLocaleKeyboardImeFound |= isSystemLocaleKeyboardIme; - } - - // System locale country doesn't match any IMEs, try to find IMEs in a country-agnostic - // way. - if (!systemLocaleKeyboardImeFound) { + boolean added = false; for (int i = 0; i < imis.size(); ++i) { final InputMethodInfo imi = imis.get(i); - if (!isSystemIme(imi) || !imi.isDefault(context)) { - continue; - } - if (isImeThatHasSubtypeOf(imi, fallbackLocale, false /* ignoreCountry */, - SUBTYPE_MODE_KEYBOARD)) { - // IMEs that have fallback locale are already added in the previous loop. We - // don't need to add them again here. - // TODO: Use LinkedHashSet to simplify the code. - continue; + if (isSystemAuxilialyImeThatHasAutomaticSubtype(imi, context, + true /* checkDefaultAttribute */)) { + mInputMethodSet.add(imi); + added = true; } - if (isImeThatHasSubtypeOf(imi, systemLocale, true /* ignoreCountry */, - SUBTYPE_MODE_ANY)) { - retval.add(imi); + } + if (added) { + return this; + } + for (int i = 0; i < imis.size(); ++i) { + final InputMethodInfo imi = imis.get(i); + if (isSystemAuxilialyImeThatHasAutomaticSubtype(imi, context, + false /* checkDefaultAttribute */)) { + mInputMethodSet.add(imi); } } + return this; } - // If one or more auxiliary input methods are available, OK to stop populating the list. - for (int i = 0; i < retval.size(); ++i) { - if (retval.get(i).isAuxiliaryIme()) { - return retval; - } + public boolean isEmpty() { + return mInputMethodSet.isEmpty(); } - for (int i = 0; i < imis.size(); ++i) { - final InputMethodInfo imi = imis.get(i); - if (isSystemAuxilialyImeThatHasAutomaticSubtype(imi)) { - retval.add(imi); - } + + @NonNull + public ArrayList build() { + return new ArrayList<>(mInputMethodSet); } - return retval; } - public static boolean isImeThatHasSubtypeOf(final InputMethodInfo imi, - final Locale locale, final boolean ignoreCountry, final String mode) { - if (locale == null) { - return false; - } - return containsSubtypeOf(imi, locale, ignoreCountry, mode); + private static InputMethodListBuilder getMinimumKeyboardSetWithoutSystemLocale( + final ArrayList imis, final Context context, + @Nullable final Locale fallbackLocale) { + // Before the system becomes ready, we pick up at least one keyboard in the following order. + // The first user (device owner) falls into this category. + // 1. checkDefaultAttribute: true, locale: fallbackLocale, checkCountry: true + // 2. checkDefaultAttribute: false, locale: fallbackLocale, checkCountry: true + // 3. checkDefaultAttribute: true, locale: fallbackLocale, checkCountry: false + // 4. checkDefaultAttribute: false, locale: fallbackLocale, checkCountry: false + // TODO: We should check isAsciiCapable instead of relying on fallbackLocale. + + final InputMethodListBuilder builder = new InputMethodListBuilder(); + builder.fillImes(imis, context, true /* checkDefaultAttribute */, fallbackLocale, + true /* checkCountry */, SUBTYPE_MODE_KEYBOARD); + if (!builder.isEmpty()) { + return builder; + } + builder.fillImes(imis, context, false /* checkDefaultAttribute */, fallbackLocale, + true /* checkCountry */, SUBTYPE_MODE_KEYBOARD); + if (!builder.isEmpty()) { + return builder; + } + builder.fillImes(imis, context, true /* checkDefaultAttribute */, fallbackLocale, + false /* checkCountry */, SUBTYPE_MODE_KEYBOARD); + if (!builder.isEmpty()) { + return builder; + } + builder.fillImes(imis, context, false /* checkDefaultAttribute */, fallbackLocale, + false /* checkCountry */, SUBTYPE_MODE_KEYBOARD); + if (!builder.isEmpty()) { + return builder; + } + Slog.w(TAG, "No software keyboard is found. imis=" + Arrays.toString(imis.toArray()) + + " fallbackLocale=" + fallbackLocale); + return builder; + } + + private static InputMethodListBuilder getMinimumKeyboardSetWithSystemLocale( + final ArrayList imis, final Context context, + @Nullable final Locale systemLocale, @Nullable final Locale fallbackLocale) { + // Once the system becomes ready, we pick up at least one keyboard in the following order. + // Secondary users fall into this category in general. + // 1. checkDefaultAttribute: true, locale: systemLocale, checkCountry: true + // 2. checkDefaultAttribute: true, locale: systemLocale, checkCountry: false + // 3. checkDefaultAttribute: true, locale: fallbackLocale, checkCountry: true + // 4. checkDefaultAttribute: true, locale: fallbackLocale, checkCountry: false + // 5. checkDefaultAttribute: false, locale: fallbackLocale, checkCountry: true + // 6. checkDefaultAttribute: false, locale: fallbackLocale, checkCountry: false + // TODO: We should check isAsciiCapable instead of relying on fallbackLocale. + + final InputMethodListBuilder builder = new InputMethodListBuilder(); + builder.fillImes(imis, context, true /* checkDefaultAttribute */, systemLocale, + true /* checkCountry */, SUBTYPE_MODE_KEYBOARD); + if (!builder.isEmpty()) { + return builder; + } + builder.fillImes(imis, context, true /* checkDefaultAttribute */, systemLocale, + false /* checkCountry */, SUBTYPE_MODE_KEYBOARD); + if (!builder.isEmpty()) { + return builder; + } + builder.fillImes(imis, context, true /* checkDefaultAttribute */, fallbackLocale, + true /* checkCountry */, SUBTYPE_MODE_KEYBOARD); + if (!builder.isEmpty()) { + return builder; + } + builder.fillImes(imis, context, true /* checkDefaultAttribute */, fallbackLocale, + false /* checkCountry */, SUBTYPE_MODE_KEYBOARD); + if (!builder.isEmpty()) { + return builder; + } + builder.fillImes(imis, context, false /* checkDefaultAttribute */, fallbackLocale, + true /* checkCountry */, SUBTYPE_MODE_KEYBOARD); + if (!builder.isEmpty()) { + return builder; + } + builder.fillImes(imis, context, false /* checkDefaultAttribute */, fallbackLocale, + false /* checkCountry */, SUBTYPE_MODE_KEYBOARD); + if (!builder.isEmpty()) { + return builder; + } + Slog.w(TAG, "No software keyboard is found. imis=" + Arrays.toString(imis.toArray()) + + " systemLocale=" + systemLocale + " fallbackLocale=" + fallbackLocale); + return builder; + } + + public static ArrayList getDefaultEnabledImes(final Context context, + final boolean isSystemReady, final ArrayList imis) { + final Locale fallbackLocale = getFallbackLocaleForDefaultIme(imis, context); + if (!isSystemReady) { + // When the system is not ready, the system locale is not stable and reliable. Hence + // we will pick up IMEs that support software keyboard based on the fallback locale. + // Also pick up suitable IMEs regardless of the software keyboard support. + // (e.g. Voice IMEs) + return getMinimumKeyboardSetWithoutSystemLocale(imis, context, fallbackLocale) + .fillImes(imis, context, true /* checkDefaultAttribute */, fallbackLocale, + true /* checkCountry */, SUBTYPE_MODE_ANY) + .build(); + } + + // When the system is ready, we will primarily rely on the system locale, but also keep + // relying on the fallback locale as a last resort. + // Also pick up suitable IMEs regardless of the software keyboard support (e.g. Voice IMEs), + // then pick up suitable auxiliary IMEs when necessary (e.g. Voice IMEs with "automatic" + // subtype) + final Locale systemLocale = getSystemLocaleFromContext(context); + return getMinimumKeyboardSetWithSystemLocale(imis, context, systemLocale, fallbackLocale) + .fillImes(imis, context, true /* checkDefaultAttribute */, systemLocale, + true /* checkCountry */, SUBTYPE_MODE_ANY) + .fillAuxiliaryImes(imis, context) + .build(); } /** - * @deprecated Use {@link #isSystemIme(InputMethodInfo)} and - * {@link InputMethodInfo#isDefault(Context)} and - * {@link #isImeThatHasSubtypeOf(InputMethodInfo, Locale, boolean, String))} instead. + * @deprecated Use {@link #isSystemImeThatHasSubtypeOf(InputMethodInfo, Context, boolean, + * Locale, boolean, String)} instead. */ @Deprecated public static boolean isValidSystemDefaultIme( @@ -285,22 +410,25 @@ public class InputMethodUtils { } public static boolean containsSubtypeOf(final InputMethodInfo imi, - final Locale locale, final boolean ignoreCountry, final String mode) { + @Nullable final Locale locale, final boolean checkCountry, final String mode) { + if (locale == null) { + return false; + } final int N = imi.getSubtypeCount(); for (int i = 0; i < N; ++i) { final InputMethodSubtype subtype = imi.getSubtypeAt(i); - if (ignoreCountry) { - final Locale subtypeLocale = new Locale(getLanguageFromLocaleString( - subtype.getLocale())); - if (!subtypeLocale.getLanguage().equals(locale.getLanguage())) { - continue; - } - } else { + if (checkCountry) { // TODO: Use {@link Locale#toLanguageTag()} and // {@link Locale#forLanguageTag(languageTag)} instead. if (!TextUtils.equals(subtype.getLocale(), locale.toString())) { continue; } + } else { + final Locale subtypeLocale = new Locale(getLanguageFromLocaleString( + subtype.getLocale())); + if (!subtypeLocale.getLanguage().equals(locale.getLanguage())) { + continue; + } } if (mode == SUBTYPE_MODE_ANY || TextUtils.isEmpty(mode) || mode.equalsIgnoreCase(subtype.getMode())) { @@ -465,19 +593,9 @@ public class InputMethodUtils { return applicableSubtypes; } - private static List getEnabledInputMethodSubtypeList( - Context context, InputMethodInfo imi, List enabledSubtypes, - boolean allowsImplicitlySelectedSubtypes) { - if (allowsImplicitlySelectedSubtypes && enabledSubtypes.isEmpty()) { - enabledSubtypes = InputMethodUtils.getImplicitlyApplicableSubtypesLocked( - context.getResources(), imi); - } - return InputMethodSubtype.sort(context, 0, imi, enabledSubtypes); - } - /** * Returns the language component of a given locale string. - * TODO: Use {@link Locale#toLanguageTag()} and {@link Locale#forLanguageTag(languageTag)} + * TODO: Use {@link Locale#toLanguageTag()} and {@link Locale#forLanguageTag(String)} */ public static String getLanguageFromLocaleString(String locale) { final int idx = locale.indexOf('_'); diff --git a/core/java/com/android/internal/net/VpnConfig.java b/core/java/com/android/internal/net/VpnConfig.java index 3d016be9820938a8cf3e5a7dcd0450cae61cb132..921f1fed68493d75ba67178d62b8c1fa06397769 100644 --- a/core/java/com/android/internal/net/VpnConfig.java +++ b/core/java/com/android/internal/net/VpnConfig.java @@ -24,7 +24,9 @@ import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.ResolveInfo; import android.content.res.Resources; +import android.net.IpPrefix; import android.net.LinkAddress; +import android.net.Network; import android.net.RouteInfo; import android.os.Parcel; import android.os.Parcelable; @@ -99,6 +101,7 @@ public class VpnConfig implements Parcelable { public boolean allowBypass; public boolean allowIPv4; public boolean allowIPv6; + public Network[] underlyingNetworks; public void updateAllowedFamilies(InetAddress address) { if (address instanceof Inet4Address) { @@ -115,9 +118,7 @@ public class VpnConfig implements Parcelable { String[] routes = routesStr.trim().split(" "); for (String route : routes) { //each route is ip/prefix - String[] split = route.split("/"); - RouteInfo info = new RouteInfo(new LinkAddress - (InetAddress.parseNumericAddress(split[0]), Integer.parseInt(split[1])), null); + RouteInfo info = new RouteInfo(new IpPrefix(route), null); this.routes.add(info); updateAllowedFamilies(info.getDestination().getAddress()); } @@ -130,9 +131,7 @@ public class VpnConfig implements Parcelable { String[] addresses = addressesStr.trim().split(" "); for (String address : addresses) { //each address is ip/prefix - String[] split = address.split("/"); - LinkAddress addr = new LinkAddress(InetAddress.parseNumericAddress(split[0]), - Integer.parseInt(split[1])); + LinkAddress addr = new LinkAddress(address); this.addresses.add(addr); updateAllowedFamilies(addr.getAddress()); } @@ -162,6 +161,7 @@ public class VpnConfig implements Parcelable { out.writeInt(allowBypass ? 1 : 0); out.writeInt(allowIPv4 ? 1 : 0); out.writeInt(allowIPv6 ? 1 : 0); + out.writeTypedArray(underlyingNetworks, flags); } public static final Parcelable.Creator CREATOR = @@ -186,6 +186,7 @@ public class VpnConfig implements Parcelable { config.allowBypass = in.readInt() != 0; config.allowIPv4 = in.readInt() != 0; config.allowIPv6 = in.readInt() != 0; + config.underlyingNetworks = in.createTypedArray(Network.CREATOR); return config; } diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java index c00d2097f82620ac1aef5c143147b7b2c14de802..20bb95eeff4c63f66b48086b924adc8d8f302d1f 100644 --- a/core/java/com/android/internal/os/BatteryStatsImpl.java +++ b/core/java/com/android/internal/os/BatteryStatsImpl.java @@ -94,7 +94,7 @@ public final class BatteryStatsImpl extends BatteryStats { private static final int MAGIC = 0xBA757475; // 'BATSTATS' // Current on-disk Parcel version - private static final int VERSION = 114 + (USE_OLD_HISTORY ? 1000 : 0); + private static final int VERSION = 116 + (USE_OLD_HISTORY ? 1000 : 0); // Maximum number of items we will record in the history. private static final int MAX_HISTORY_ITEMS = 2000; @@ -374,6 +374,10 @@ public final class BatteryStatsImpl extends BatteryStats { private int mPhoneServiceStateRaw = -1; private int mPhoneSimStateRaw = -1; + private int mNumConnectivityChange; + private int mLoadedNumConnectivityChange; + private int mUnpluggedNumConnectivityChange; + /* * Holds a SamplingTimer associated with each kernel wakelock name being tracked. */ @@ -2540,6 +2544,22 @@ public final class BatteryStatsImpl extends BatteryStats { addHistoryEventLocked(elapsedRealtime, uptime, HistoryItem.EVENT_PROC_START, name, uid); } + public void noteProcessCrashLocked(String name, int uid) { + uid = mapUid(uid); + if (isOnBattery()) { + Uid u = getUidStatsLocked(uid); + u.getProcessStatsLocked(name).incNumCrashesLocked(); + } + } + + public void noteProcessAnrLocked(String name, int uid) { + uid = mapUid(uid); + if (isOnBattery()) { + Uid u = getUidStatsLocked(uid); + u.getProcessStatsLocked(name).incNumAnrsLocked(); + } + } + public void noteProcessStateLocked(String name, int uid, int state) { uid = mapUid(uid); final long elapsedRealtime = SystemClock.elapsedRealtime(); @@ -3109,6 +3129,14 @@ public final class BatteryStatsImpl extends BatteryStats { } } + public void noteConnectivityChangedLocked(int type, String extra) { + final long elapsedRealtime = SystemClock.elapsedRealtime(); + final long uptime = SystemClock.uptimeMillis(); + addHistoryEventLocked(elapsedRealtime, uptime, HistoryItem.EVENT_CONNECTIVITY_CHANGED, + extra, type); + mNumConnectivityChange++; + } + public void noteMobileRadioPowerState(int powerState, long timestampNs) { final long elapsedRealtime = SystemClock.elapsedRealtime(); final long uptime = SystemClock.uptimeMillis(); @@ -3965,6 +3993,16 @@ public final class BatteryStatsImpl extends BatteryStats { return mLowPowerModeEnabledTimer.getCountLocked(which); } + @Override public int getNumConnectivityChange(int which) { + int val = mNumConnectivityChange; + if (which == STATS_CURRENT) { + val -= mLoadedNumConnectivityChange; + } else if (which == STATS_SINCE_UNPLUGGED) { + val -= mUnpluggedNumConnectivityChange; + } + return val; + } + @Override public long getPhoneOnTime(long elapsedRealtimeUs, int which) { return mPhoneOnTimer.getTotalTimeLocked(elapsedRealtimeUs, which); } @@ -5373,6 +5411,16 @@ public final class BatteryStatsImpl extends BatteryStats { */ int mStarts; + /** + * Number of times the process has crashed. + */ + int mNumCrashes; + + /** + * Number of times the process has had an ANR. + */ + int mNumAnrs; + /** * The amount of user time loaded from a previous save. */ @@ -5394,24 +5442,14 @@ public final class BatteryStatsImpl extends BatteryStats { int mLoadedStarts; /** - * The amount of user time loaded from the previous run. - */ - long mLastUserTime; - - /** - * The amount of system time loaded from the previous run. - */ - long mLastSystemTime; - - /** - * The amount of foreground time loaded from the previous run + * Number of times the process has crashed from a previous save. */ - long mLastForegroundTime; + int mLoadedNumCrashes; /** - * The number of times the process has started from the previous run. + * Number of times the process has had an ANR from a previous save. */ - int mLastStarts; + int mLoadedNumAnrs; /** * The amount of user time when last unplugged. @@ -5433,6 +5471,16 @@ public final class BatteryStatsImpl extends BatteryStats { */ int mUnpluggedStarts; + /** + * Number of times the process has crashed before unplugged. + */ + int mUnpluggedNumCrashes; + + /** + * Number of times the process has had an ANR before unplugged. + */ + int mUnpluggedNumAnrs; + /** * Current process state. */ @@ -5453,6 +5501,8 @@ public final class BatteryStatsImpl extends BatteryStats { mUnpluggedSystemTime = mSystemTime; mUnpluggedForegroundTime = mForegroundTime; mUnpluggedStarts = mStarts; + mUnpluggedNumCrashes = mNumCrashes; + mUnpluggedNumAnrs = mNumAnrs; } public void onTimeStopped(long elapsedRealtime, long baseUptime, long baseRealtime) { @@ -5460,13 +5510,11 @@ public final class BatteryStatsImpl extends BatteryStats { void reset() { mUserTime = mSystemTime = mForegroundTime = 0; - mStarts = 0; + mStarts = mNumCrashes = mNumAnrs = 0; mLoadedUserTime = mLoadedSystemTime = mLoadedForegroundTime = 0; - mLoadedStarts = 0; - mLastUserTime = mLastSystemTime = mLastForegroundTime = 0; - mLastStarts = 0; + mLoadedStarts = mLoadedNumCrashes = mLoadedNumAnrs = 0; mUnpluggedUserTime = mUnpluggedSystemTime = mUnpluggedForegroundTime = 0; - mUnpluggedStarts = 0; + mUnpluggedStarts = mUnpluggedNumCrashes = mUnpluggedNumAnrs = 0; for (int i = 0; i < mSpeedBins.length; i++) { SamplingCounter c = mSpeedBins[i]; if (c != null) { @@ -5565,14 +5613,20 @@ public final class BatteryStatsImpl extends BatteryStats { out.writeLong(mSystemTime); out.writeLong(mForegroundTime); out.writeInt(mStarts); + out.writeInt(mNumCrashes); + out.writeInt(mNumAnrs); out.writeLong(mLoadedUserTime); out.writeLong(mLoadedSystemTime); out.writeLong(mLoadedForegroundTime); out.writeInt(mLoadedStarts); + out.writeInt(mLoadedNumCrashes); + out.writeInt(mLoadedNumAnrs); out.writeLong(mUnpluggedUserTime); out.writeLong(mUnpluggedSystemTime); out.writeLong(mUnpluggedForegroundTime); out.writeInt(mUnpluggedStarts); + out.writeInt(mUnpluggedNumCrashes); + out.writeInt(mUnpluggedNumAnrs); out.writeInt(mSpeedBins.length); for (int i = 0; i < mSpeedBins.length; i++) { @@ -5593,18 +5647,20 @@ public final class BatteryStatsImpl extends BatteryStats { mSystemTime = in.readLong(); mForegroundTime = in.readLong(); mStarts = in.readInt(); + mNumCrashes = in.readInt(); + mNumAnrs = in.readInt(); mLoadedUserTime = in.readLong(); mLoadedSystemTime = in.readLong(); mLoadedForegroundTime = in.readLong(); mLoadedStarts = in.readInt(); - mLastUserTime = 0; - mLastSystemTime = 0; - mLastForegroundTime = 0; - mLastStarts = 0; + mLoadedNumCrashes = in.readInt(); + mLoadedNumAnrs = in.readInt(); mUnpluggedUserTime = in.readLong(); mUnpluggedSystemTime = in.readLong(); mUnpluggedForegroundTime = in.readLong(); mUnpluggedStarts = in.readInt(); + mUnpluggedNumCrashes = in.readInt(); + mUnpluggedNumAnrs = in.readInt(); int bins = in.readInt(); int steps = getCpuSpeedSteps(); @@ -5635,6 +5691,14 @@ public final class BatteryStatsImpl extends BatteryStats { mStarts++; } + public void incNumCrashesLocked() { + mNumCrashes++; + } + + public void incNumAnrsLocked() { + mNumAnrs++; + } + @Override public boolean isActive() { return mActive; @@ -5684,6 +5748,28 @@ public final class BatteryStatsImpl extends BatteryStats { return val; } + @Override + public int getNumCrashes(int which) { + int val = mNumCrashes; + if (which == STATS_CURRENT) { + val -= mLoadedNumCrashes; + } else if (which == STATS_SINCE_UNPLUGGED) { + val -= mUnpluggedNumCrashes; + } + return val; + } + + @Override + public int getNumAnrs(int which) { + int val = mNumAnrs; + if (which == STATS_CURRENT) { + val -= mLoadedNumAnrs; + } else if (which == STATS_SINCE_UNPLUGGED) { + val -= mUnpluggedNumAnrs; + } + return val; + } + /* Called by ActivityManagerService when CPU times are updated. */ public void addSpeedStepTimes(long[] values) { for (int i = 0; i < mSpeedBins.length && i < values.length; i++) { @@ -6647,6 +6733,7 @@ public final class BatteryStatsImpl extends BatteryStats { for (int i=0; i< NUM_BLUETOOTH_STATES; i++) { mBluetoothStateTimer[i].reset(false); } + mNumConnectivityChange = mLoadedNumConnectivityChange = mUnpluggedNumConnectivityChange = 0; for (int i=0; i 100) { Slog.w(TAG, "File corrupt: too many speed bins " + NSB); @@ -8143,6 +8245,7 @@ public final class BatteryStatsImpl extends BatteryStats { for (int i=0; i< NUM_BLUETOOTH_STATES; i++) { mBluetoothStateTimer[i].writeSummaryFromParcelLocked(out, NOWREAL_SYS); } + out.writeInt(mNumConnectivityChange); mFlashlightOnTimer.writeSummaryFromParcelLocked(out, NOWREAL_SYS); out.writeInt(mKernelWakelockStats.size()); @@ -8326,6 +8429,8 @@ public final class BatteryStatsImpl extends BatteryStats { out.writeLong(ps.mSystemTime); out.writeLong(ps.mForegroundTime); out.writeInt(ps.mStarts); + out.writeInt(ps.mNumCrashes); + out.writeInt(ps.mNumAnrs); final int N = ps.mSpeedBins.length; out.writeInt(N); for (int i=0; i